diff --git a/src/main/java/dev/siskel/poketDimensions/PoketDimensions.java b/src/main/java/dev/siskel/poketDimensions/PoketDimensions.java index a2c9395..f25fc94 100644 --- a/src/main/java/dev/siskel/poketDimensions/PoketDimensions.java +++ b/src/main/java/dev/siskel/poketDimensions/PoketDimensions.java @@ -1,10 +1,8 @@ package dev.siskel.poketDimensions; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.util.Objects; -import java.util.UUID; import java.util.logging.Logger; import dev.siskel.poketDimensions.commands.givepd; @@ -12,17 +10,13 @@ import dev.siskel.poketDimensions.commands.pdgamerule; import dev.siskel.poketDimensions.commands.pdtp; import dev.siskel.poketDimensions.commands.player.pd; import dev.siskel.poketDimensions.events.PlayerInteract; +import dev.siskel.poketDimensions.events.PlayerMove; import dev.siskel.poketDimensions.loader.PoketDimensionsWorldLoader; import dev.siskel.poketDimensions.managers.InviteManager; -import dev.siskel.poketDimensions.managers.PlayerLocationManager; import dev.siskel.poketDimensions.managers.PoketDimensionManager; import org.bukkit.*; import org.bukkit.command.PluginCommand; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerPreLoginEvent; -import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; public final class PoketDimensions extends JavaPlugin { @@ -33,12 +27,6 @@ public final class PoketDimensions extends JavaPlugin { @Override public void onEnable() { - /*PluginManager var10002 = Bukkit.getPluginManager(); - File f = new File(var10002.getPlugin("PocketDimensions").getDataFolder() + "/"); - if (!f.exists()) { - f.mkdir(); - }*/ - getDataFolder().mkdirs(); File lastLocsFile = new File(getDataFolder(), "lastlocs.json"); @@ -54,6 +42,7 @@ public final class PoketDimensions extends JavaPlugin { InviteManager inviteManager = new InviteManager(); PoketDimensionManager pocketDimensionManager = new PoketDimensionManager(); this.getServer().getPluginManager().registerEvents(new PlayerInteract(), this); + this.getServer().getPluginManager().registerEvents(new PlayerMove(), this); ((PluginCommand)Objects.requireNonNull(this.getCommand("givepd"))).setExecutor(new givepd()); ((PluginCommand)Objects.requireNonNull(this.getCommand("pdtp"))).setExecutor(new pdtp()); ((PluginCommand)Objects.requireNonNull(this.getCommand("pd"))).setExecutor(new pd(inviteManager, pocketDimensionManager)); @@ -65,8 +54,6 @@ public final class PoketDimensions extends JavaPlugin { pwl.loadAllWorldsInFolder("poketdimensions"); }); - - this.logger.info("Plugin Activated!"); } diff --git a/src/main/java/dev/siskel/poketDimensions/events/PlayerMove.java b/src/main/java/dev/siskel/poketDimensions/events/PlayerMove.java new file mode 100644 index 0000000..39ed99f --- /dev/null +++ b/src/main/java/dev/siskel/poketDimensions/events/PlayerMove.java @@ -0,0 +1,74 @@ +package dev.siskel.poketDimensions.events; + +import dev.siskel.poketDimensions.PoketDimensions; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.plugin.java.JavaPlugin; + +public class PlayerMove implements Listener { + + public PlayerMove() { + + } + + private static final int TARGET_Y = 200; // The Y coordinate to listen for + private static final int MIN_Y = -64; // Minimum world height to check from + private static final int MAX_Y_OFFSET = 384; // Max height offset to search upwards + + @EventHandler + public void onPlayerMove(PlayerMoveEvent event) { + Player player = event.getPlayer(); + Location loc = player.getLocation(); + World world = loc.getWorld(); + + if (world != null && world.getName().contains("poketdimension")) { + // Check if player reached the target Y coordinate (block level) + if (loc.getBlockY() == -80 || loc.getBlockY() < -80) { + int x = loc.getBlockX(); + int z = loc.getBlockZ(); + + int startY = Math.max(TARGET_Y, MIN_Y); + int maxY = Math.min(world.getMaxHeight() - 2, startY + MAX_Y_OFFSET); + + Location teleportLocation = null; + boolean foundSpot = false; + + // Search upwards from TARGET_Y for two consecutive air blocks with solid block underneath + for (int y = startY; y <= maxY; y++) { + Block below = world.getBlockAt(x, y - 1, z); + Block block1 = world.getBlockAt(x, y, z); + Block block2 = world.getBlockAt(x, y + 1, z); + + if (block1.getType() == Material.AIR && block2.getType() == Material.AIR && below.getType().isSolid()) { + teleportLocation = new Location(world, x + 0.5, y, z + 0.5, loc.getYaw(), loc.getPitch()); + foundSpot = true; + break; + } + } + + // If no spot found, create stone block at (0, -50, 0) and teleport player above it + if (!foundSpot) { + int safeX = 0; + int safeY = TARGET_Y; + int safeZ = 0; + + Block stoneBlock = world.getBlockAt(safeX, safeY, safeZ); + stoneBlock.setType(Material.STONE); + + teleportLocation = new Location(world, safeX + 0.5, safeY + 1, safeZ + 0.5, loc.getYaw(), loc.getPitch()); + player.sendMessage("No safe spot found at your location. Teleporting you to (0, 320, 0) on a stone block! You can Jump down without getting Damage."); + } else { + player.sendMessage("You fell out of your PoketDimension, teleporting you to a safe spot!"); + } + + player.teleport(teleportLocation); + } + } + } +} diff --git a/src/main/java/dev/siskel/poketDimensions/loader/PoketDimensionsWorldLoader.java b/src/main/java/dev/siskel/poketDimensions/loader/PoketDimensionsWorldLoader.java index 1295f7f..ef60e2d 100644 --- a/src/main/java/dev/siskel/poketDimensions/loader/PoketDimensionsWorldLoader.java +++ b/src/main/java/dev/siskel/poketDimensions/loader/PoketDimensionsWorldLoader.java @@ -20,13 +20,13 @@ public class PoketDimensionsWorldLoader { public void loadAllWorldsInFolder(String folderName) { File folder = new File(Bukkit.getServer().getWorldContainer(), folderName); if (!folder.exists() || !folder.isDirectory()) { - Bukkit.getLogger().warning("Folder '" + folderName + "' does not exist or is not a directory."); + Bukkit.getLogger().warning("[Poketdimension] Folder '" + folderName + "' does not exist or is not a directory."); return; } File[] files = folder.listFiles(File::isDirectory); if (files == null) { - Bukkit.getLogger().warning("Failed to list subdirectories in '" + folderName + "'."); + Bukkit.getLogger().warning("[Poketdimension] Failed to list subdirectories in '" + folderName + "'."); return; } @@ -39,12 +39,12 @@ public class PoketDimensionsWorldLoader { World world = Bukkit.createWorld(creator); if (world != null) { - Bukkit.getLogger().info("Loaded world: " + world.getName()); + Bukkit.getLogger().info("[Poketdimension] Loaded world: " + world.getName()); } else { - Bukkit.getLogger().warning("Failed to load world: " + worldDir.getName()); + Bukkit.getLogger().warning("[Poketdimension] Failed to load world: " + worldDir.getName()); } } else { - Bukkit.getLogger().info("World already loaded: " + worldDir.getName()); + Bukkit.getLogger().info("[Poketdimension] World already loaded: " + worldDir.getName()); } } }