From 54adc120452d3738141a6f5325f8718a44488ff6 Mon Sep 17 00:00:00 2001 From: D4rkr34lm Date: Tue, 29 Apr 2025 23:25:22 +0200 Subject: [PATCH] Started refactoring simulator cursor for reuse --- .../de/steamwar/bausystem/utils/RCursor.java | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/RCursor.java diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/RCursor.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/RCursor.java new file mode 100644 index 00000000..e1d133b7 --- /dev/null +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/RCursor.java @@ -0,0 +1,51 @@ +package de.steamwar.bausystem.utils; + +import de.steamwar.entity.REntity; +import de.steamwar.entity.REntityServer; +import de.steamwar.entity.RFallingBlockEntity; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +public class RCursor { + + private Player owner; + private REntityServer targetServer; + + private RFallingBlockEntity cursorEntity; + + private Material highlightMaterial; + private Material cursorMaterial; + + public RCursor(REntityServer targetServer, Material highlightMaterial, Material cursorMaterial) { + this.targetServer = targetServer; + this.highlightMaterial = highlightMaterial; + this.cursorMaterial = cursorMaterial; + } + + public void render() { + RayTraceUtils.RRayTraceResult rayTraceResult = RayTraceUtils.traceREntity(owner, owner.getLocation(), targetServer.getEntities()); + if(rayTraceResult == null) { + cursorEntity.die(); + return; + } + + REntity hitEntity = rayTraceResult.getHitEntity(); + + Material activeCursorMaterial = hitEntity == null ? cursorMaterial : highlightMaterial; + Location activeCursorLocation = hitEntity == null ? rayTraceResult.getHitPosition().toLocation(owner.getWorld()) + : new Vector(hitEntity.getX(), hitEntity.getY(), hitEntity.getZ()).toLocation(owner.getWorld()); + + if(cursorEntity == null) { + cursorEntity = new RFallingBlockEntity(targetServer, activeCursorLocation, activeCursorMaterial); + } + else if(cursorEntity.getMaterial() == activeCursorMaterial) { + cursorEntity.move(activeCursorLocation); + } + else { + cursorEntity.die(); + cursorEntity = new RFallingBlockEntity(targetServer, activeCursorLocation, activeCursorMaterial); + } + } +}