From 3022a8b545e6291fe1d6c747bea0a3b401febc5a Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Thu, 21 Mar 2024 01:56:43 +0100 Subject: [PATCH] progress??? --- .../de/lunarakai/minecleaner/ArenaList.java | 2 +- .../minecleaner/MinecleanerArena.java | 15 +++-- .../minecleaner/MinecleanerListener.java | 65 +++++++++++++------ .../minecleaner/MinecleanerManager.java | 2 +- 4 files changed, 57 insertions(+), 27 deletions(-) diff --git a/src/main/java/de/lunarakai/minecleaner/ArenaList.java b/src/main/java/de/lunarakai/minecleaner/ArenaList.java index d669c4a..6f5fbaf 100644 --- a/src/main/java/de/lunarakai/minecleaner/ArenaList.java +++ b/src/main/java/de/lunarakai/minecleaner/ArenaList.java @@ -139,7 +139,7 @@ public class ArenaList { for(Location block : arena.getBlocks()) { // TODO arenaBlocks.remove(block); } - arena.removeBlockDisplays(); // TODO + arena.removeBlockDisplays(); arenas.remove(arena.getName()); save(); diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java index 338121c..f00eccc 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerArena.java @@ -59,7 +59,6 @@ public class MinecleanerArena { blockDisplays[i] = UUID.fromString(blockDisplay); } } - blockDisplays = new UUID[widthIndex * widthIndex]; } public MinecleanerArena(MinecleanerPlugin plugin, String name, Location location, int widthIndex, BlockFace orientation) { @@ -164,6 +163,11 @@ public class MinecleanerArena { arenaSection.set("location", this.location); arenaSection.set("fieldwidth", this.widthIndex); arenaSection.set("orientation", this.orientation.name()); + List blockDisplays = new ArrayList<>(); + for(UUID uuid : this.blockDisplays) { + blockDisplays.add(uuid == null ? null : uuid.toString()); + } + arenaSection.set("blockdisplays", blockDisplays); } public void startNewGame() { @@ -184,15 +188,16 @@ public class MinecleanerArena { this.currentPlayer = null; } + // block displays dont get removed public void removeBlockDisplays() { World world = location.getWorld(); for(int fx = 0; fx < 9; fx++) { for(int fy = 0; fy < 9; fy++) { UUID blockDisplayUuid = blockDisplays[fx + fy * 9]; Entity blockDisplayEntity = blockDisplayUuid != null ? world.getEntity(blockDisplayUuid) : null; - if(blockDisplayEntity instanceof Display blockdisplay) { - blockDisplayEntity.remove(); - } + //if(blockDisplayEntity instanceof BlockDisplay blockDisplay) { + blockDisplayEntity.remove(); // Null Pointer after restart + //} } } } @@ -239,7 +244,7 @@ public class MinecleanerArena { int d1z = d0x; Location loc = location.clone(); - for(int fx = -1; fx < 2; fx++) { + for(int fx = -2; fx < 1; fx++) { for(int fy = -1; fy < 2; fy++) { loc.set(location.getX() + d1x + fx, location.getY() + fy, location.getZ() + d1z * fx); blocks.add(loc.clone()); diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java index aa407ba..10bd2d7 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerListener.java @@ -18,6 +18,8 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.util.RayTraceResult; +import org.bukkit.util.Vector; import net.md_5.bungee.api.ChatColor; public class MinecleanerListener implements Listener { @@ -42,30 +44,53 @@ public class MinecleanerListener implements Listener { int d1z = d0x; if (e.getBlockFace() == arena.getOrientation()) { - Location loc = e.getInteractionPoint().clone().subtract(arena.getLocation()).subtract(0.5, 0.5, 0.5); // null on left-click - double lx = loc.getX(); - double ly = loc.getY(); - double lz = loc.getZ(); - double dy = ly + 1.5; - double dz = -d1x * lx - d1z * lz + 1.5; + // Raytrace + // kann null sein - double blockx = (dy / 3.0) * 9.0; - double blockz = (dz / 3.0) * 9.0; + Player player = e.getPlayer(); + RayTraceResult rayTraceResult = player.getWorld().rayTraceBlocks(player.getEyeLocation(), player.getEyeLocation().getDirection(), 64.0); - int blockxInt = (int) blockx; - int blockzInt = (int) blockz; - blockx -= blockxInt; - blockz -= blockzInt; - if (blockx >= 0.1 && blockx <= 0.9 && blockz >= 0.1 && blockz <= 0.9) { - boolean hasRightClicked = false; - if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { - hasRightClicked = true; + //Location loc = e.getInteractionPoint().clone().subtract(arena.getLocation()).subtract(0.5, 0.5, 0.5); // null on left-click + + + if(rayTraceResult != null) { + Vector hitPos = rayTraceResult.getHitPosition(); + Location loc = player.getLocation().add(hitPos).clone().subtract(arena.getLocation()).subtract(0.5, 0.5, 0.5); + double lx = loc.getX(); + double ly = loc.getY(); + double lz = loc.getZ(); + player.sendMessage(ChatColor.GRAY + "lx: " + lx + " ,ly: " + ly + " ,lz: " + lz); + double dy = ly + 1.5; + player.sendMessage(ChatColor.GRAY + "dy: " + dy); + double dz = -d1x * lx - d1z * lz + 1.5; + player.sendMessage(ChatColor.GRAY + "dz: " + dz); + + double blockx = (dy / 3.0) * 9.0; + double blockz = (dz / 3.0) * 9.0; + + + + int blockxInt = (int) blockx; + int blockzInt = (int) blockz; + blockx -= blockxInt; + blockz -= blockzInt; + + player.sendMessage(ChatColor.GRAY + "blockx: " + blockx + " ,blockz: " + blockz); + player.sendMessage(ChatColor.GRAY + "blockxInt: " + blockxInt + " ,blockzInt: " + blockzInt); + + if (blockx >= 0.1 && blockx <= 0.9 && blockz >= 0.1 && blockz <= 0.9) { + boolean hasRightClicked = false; + if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { + hasRightClicked = true; + } + // TODO Doesnt show messages for Cells: [ROW] [>5] (6, 7, 8 are missing) + + player.sendMessage("Arena click! " + blockxInt + " " + blockzInt + " Right Clicked: " + hasRightClicked); + //plugin.getManager().handleFieldClick(e.getPlayer(), blockxInt, blockzInt, hasRightClicked); } - // TODO Doesnt show messages for Cells: [ROW] [>5] (6, 7, 8 are missing) - - e.getPlayer().sendMessage("Arena click! " + blockxInt + " " + blockzInt + " Right Clicked: " + hasRightClicked); - //plugin.getManager().handleFieldClick(e.getPlayer(), blockxInt, blockzInt, hasRightClicked); } + + } } } else { diff --git a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java index 4c54ecd..4f8f5e4 100644 --- a/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java +++ b/src/main/java/de/lunarakai/minecleaner/MinecleanerManager.java @@ -32,7 +32,7 @@ public class MinecleanerManager { this.plugin = plugin; // Deprecated - this.confirmPlayingInventory = plugin.getServer().createInventory(null, InventoryType.HOPPER, "Möchtest du Minecleaner spielen?"); + this.confirmPlayingInventory = plugin.getServer().createInventory(null, InventoryType.HOPPER, "Minecleaner starten?"); this.confirmPlayingInventory.setItem(1, ItemStacks.lore(ItemStacks.rename(new ItemStack(Material.GREEN_CONCRETE), ChatColor.GREEN + "Bestätigen"))); this.confirmPlayingInventory.setItem(3,