Fix jumpy cursor

This commit is contained in:
D4rkr34lm
2025-05-07 19:49:14 +02:00
parent 7b25bd31fc
commit a071d8a1f2
@@ -7,8 +7,10 @@ import de.steamwar.entity.RFallingBlockEntity;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
@@ -17,7 +19,11 @@ import java.util.function.BiFunction;
@Getter @Getter
public class RCursor { public class RCursor {
private final World WORLD = Bukkit.getWorlds().get(0);
private final REntityServer targetServer; private final REntityServer targetServer;
private final REntityServer cursorServer;
private final Player owner; private final Player owner;
private final Material highlightMaterial; private final Material highlightMaterial;
@@ -36,6 +42,9 @@ public class RCursor {
this.cursorMaterial = cursorMaterial; this.cursorMaterial = cursorMaterial;
this.cursorMode = cursorMode; this.cursorMode = cursorMode;
cursorServer = new REntityServer();
cursorServer.addPlayer(owner);
RCursorManager.getInstance().registerCursor(this); RCursorManager.getInstance().registerCursor(this);
} }
@@ -53,17 +62,17 @@ public class RCursor {
Material activeCursorMaterial = hitEntity == null ? cursorMaterial : highlightMaterial; Material activeCursorMaterial = hitEntity == null ? cursorMaterial : highlightMaterial;
Location activeCursorLocation = hitEntity == null ? cursorMode.positionTransform.apply(owner, rayTraceResult).toLocation(owner.getWorld()) Location activeCursorLocation = hitEntity == null ? cursorMode.positionTransform.apply(owner, rayTraceResult).toLocation(WORLD)
: new Vector(hitEntity.getX(), hitEntity.getY(), hitEntity.getZ()).toLocation(owner.getWorld()); : new Vector(hitEntity.getX(), hitEntity.getY(), hitEntity.getZ()).toLocation(WORLD);
if (cursorEntity == null) { if (cursorEntity == null) {
cursorEntity = new RFallingBlockEntity(targetServer, activeCursorLocation, activeCursorMaterial); cursorEntity = new RFallingBlockEntity(cursorServer, activeCursorLocation, activeCursorMaterial);
cursorEntity.setNoGravity(true); cursorEntity.setNoGravity(true);
} if (cursorEntity.getMaterial() == activeCursorMaterial) { } if (cursorEntity.getMaterial() == activeCursorMaterial) {
cursorEntity.move(activeCursorLocation); cursorEntity.move(activeCursorLocation);
} else { } else {
cursorEntity.die(); cursorEntity.die();
cursorEntity = new RFallingBlockEntity(targetServer, activeCursorLocation, activeCursorMaterial); cursorEntity = new RFallingBlockEntity(cursorServer, activeCursorLocation, activeCursorMaterial);
cursorEntity.setNoGravity(true); cursorEntity.setNoGravity(true);
if(activeCursorMaterial == highlightMaterial) { if(activeCursorMaterial == highlightMaterial) {
cursorEntity.setGlowing(true); cursorEntity.setGlowing(true);