diff --git a/src/main/java/com/cjburkey/claimchunk/ClaimChunkConfig.java b/src/main/java/com/cjburkey/claimchunk/ClaimChunkConfig.java index 48031802..c001d4d9 100644 --- a/src/main/java/com/cjburkey/claimchunk/ClaimChunkConfig.java +++ b/src/main/java/com/cjburkey/claimchunk/ClaimChunkConfig.java @@ -40,6 +40,7 @@ public class ClaimChunkConfig { @Getter private int chunkOutlineSpawnPerSec; @Getter private int chunkOutlineParticlesPerSpawn; @Getter private int chunkOutlineHeightRadius; + @Getter private boolean chunkOutlineNewEffect; /* Data */ @@ -74,6 +75,10 @@ public class ClaimChunkConfig { @Getter private boolean anonymousMetrics; @Getter private boolean debugSpam; + /* GUI */ + @Getter private String guiCurrentChunkItem; + @Getter private String guiChunkMapItem; + /* Titles */ @Getter private boolean useTitlesInsteadOfChat; @@ -134,6 +139,7 @@ public void reload() { chunkOutlineSpawnPerSec = getInt("chunkOutline", "spawnsPerSecond"); chunkOutlineParticlesPerSpawn = getInt("chunkOutline", "particlesPerSpawn"); chunkOutlineHeightRadius = getInt("chunkOutline", "heightRadius"); + chunkOutlineNewEffect = getBool("chunkOutline", "useNewEffect"); keepJsonBackups = getBool("data", "keepJsonBackups"); saveDataIntervalInMinutes = getInt("data", "saveDataIntervalInMinutes"); @@ -160,6 +166,9 @@ public void reload() { anonymousMetrics = getBool("log", "anonymousMetrics"); debugSpam = getBool("log", "debugSpam"); + guiCurrentChunkItem = getString("gui", "currentChunkItem"); + guiChunkMapItem = getString("gui", "chunkMapItem"); + useTitlesInsteadOfChat = getBool("titles", "useTitlesInsteadOfChat"); useActionBar = getBool("titles", "useActionBar"); titleFadeInTime = getInt("titles", "titleFadeInTime"); diff --git a/src/main/java/com/cjburkey/claimchunk/chunk/ChunkHandler.java b/src/main/java/com/cjburkey/claimchunk/chunk/ChunkHandler.java index 0ef83699..f9f233f2 100644 --- a/src/main/java/com/cjburkey/claimchunk/chunk/ChunkHandler.java +++ b/src/main/java/com/cjburkey/claimchunk/chunk/ChunkHandler.java @@ -373,6 +373,16 @@ public boolean isClaimed(String world, int x, int z) { return dataHandler.isChunkClaimed(new ChunkPos(world, x, z)); } + /** + * Check if the provided chunk is claimed. + * + * @param chunkPos The position of the chunk. + * @return Whether this chunk is currently claimed. + */ + public boolean isClaimed(ChunkPos chunkPos) { + return dataHandler.isChunkClaimed(chunkPos); + } + /** * Check if the provided chunk is claimed. * @@ -393,9 +403,7 @@ public boolean isClaimed(Chunk chunk) { * @return Whether this player owns this chunk. */ public boolean isOwner(World world, int x, int z, UUID ply) { - ChunkPos pos = new ChunkPos(world.getName(), x, z); - UUID owner = dataHandler.getChunkOwner(pos); - return owner != null && owner.equals(ply); + return isOwner(new ChunkPos(world.getName(), x, z), ply); } /** @@ -434,6 +442,19 @@ public boolean isOwner(Chunk chunk, Player ply) { return isOwner(chunk.getWorld(), chunk.getX(), chunk.getZ(), ply); } + /** + * Check if the provided player is the owner of the provided chunk + * + * @param chunk The chunk position. + * @param ply The player. + * @return Whether this player owns this chunk. + * @since 0.0.26 + */ + public boolean isOwner(ChunkPos chunk, UUID ply) { + UUID owner = dataHandler.getChunkOwner(chunk); + return owner != null && owner.equals(ply); + } + /** * Get the UUID of the owner of the provided chunk. * diff --git a/src/main/java/com/cjburkey/claimchunk/cmd/MainHandler.java b/src/main/java/com/cjburkey/claimchunk/cmd/MainHandler.java index b7d2ddb1..e362953e 100644 --- a/src/main/java/com/cjburkey/claimchunk/cmd/MainHandler.java +++ b/src/main/java/com/cjburkey/claimchunk/cmd/MainHandler.java @@ -118,7 +118,7 @@ public void outlineChunk(ChunkPos chunk, Player showTo, int timeToShow) { } } - public void claimChunk(Player p, Chunk loc) { + public void claimChunk(Player p, ChunkPos loc) { final ChunkHandler chunkHandler = claimChunk.getChunkHandler(); claimChunk @@ -133,22 +133,16 @@ public void claimChunk(Player p, Chunk loc) { errorMsg -> errorMsg.ifPresent(msg -> Utils.toPlayer(p, msg)), successMsg -> { // Claim the chunk if nothing is wrong - ChunkPos pos = + ChunkPos out = chunkHandler.claimChunk( - loc.getWorld(), - loc.getX(), - loc.getZ(), - p.getUniqueId()); + loc.world(), loc.x(), loc.z(), p.getUniqueId()); // Error check, though it *shouldn't* occur - if (pos == null) { + if (out == null) { Utils.err( "Failed to claim chunk (%s, %s) in world %s for player %s." + " The data handler returned a null position?", - loc.getX(), - loc.getZ(), - loc.getWorld().getName(), - p.getName()); + loc.x(), loc.x(), loc.z(), loc.world(), p.getName()); return; } @@ -160,7 +154,7 @@ public void claimChunk(Player p, Chunk loc) { claimChunk .getChunkOutlineHandler() .showChunkFor( - pos, + loc, p, claimChunk .getConfigHandler() @@ -260,9 +254,10 @@ public boolean unclaimChunk( return false; } - public void unclaimChunk(boolean adminOverride, boolean raw, Player p) { + public void unclaimChunk(boolean adminOverride, boolean hideTitle, Player p) { Chunk chunk = p.getLocation().getChunk(); - unclaimChunk(adminOverride, raw, p, p.getWorld().getName(), chunk.getX(), chunk.getZ()); + unclaimChunk( + adminOverride, hideTitle, p, p.getWorld().getName(), chunk.getX(), chunk.getZ()); } private void accessChunk( diff --git a/src/main/java/com/cjburkey/claimchunk/event/PlayerMovementHandler.java b/src/main/java/com/cjburkey/claimchunk/event/PlayerMovementHandler.java index 72e3e55f..29d9e6cb 100644 --- a/src/main/java/com/cjburkey/claimchunk/event/PlayerMovementHandler.java +++ b/src/main/java/com/cjburkey/claimchunk/event/PlayerMovementHandler.java @@ -4,6 +4,7 @@ import com.cjburkey.claimchunk.Utils; import com.cjburkey.claimchunk.chunk.AutoClaimHandler; import com.cjburkey.claimchunk.chunk.ChunkHandler; +import com.cjburkey.claimchunk.chunk.ChunkPos; import com.cjburkey.claimchunk.player.PlayerHandler; import org.bukkit.Bukkit; @@ -39,7 +40,7 @@ public void onPlayerMove(PlayerMoveEvent e) { if (prev.getX() != to.getX() || prev.getZ() != to.getZ()) { // If the claim is currently auto-claiming, try to claim this chunk if (AutoClaimHandler.inList(e.getPlayer())) { - claimChunk.getMainHandler().claimChunk(e.getPlayer(), to); + claimChunk.getMainHandler().claimChunk(e.getPlayer(), new ChunkPos(to)); return; } diff --git a/src/main/java/com/cjburkey/claimchunk/gui/CCGuiHandler.java b/src/main/java/com/cjburkey/claimchunk/gui/CCGuiHandler.java index ea635a99..c7b813a3 100644 --- a/src/main/java/com/cjburkey/claimchunk/gui/CCGuiHandler.java +++ b/src/main/java/com/cjburkey/claimchunk/gui/CCGuiHandler.java @@ -9,6 +9,7 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.inventory.Inventory; +import org.jetbrains.annotations.NotNull; import java.util.HashMap; import java.util.UUID; @@ -48,8 +49,7 @@ public void onGuiClose(InventoryCloseEvent e) { } } - @SuppressWarnings("unused") - public void openGui(Player player, ICCGui gui) { + public void openGui(@NotNull Player player, @NotNull ICCGui gui) { if (openGuis.containsKey(player.getUniqueId())) { closeGui(player); } @@ -57,7 +57,7 @@ public void openGui(Player player, ICCGui gui) { gui.onOpen(openGuis.get(player.getUniqueId()).inventory(), player); } - public void closeGui(Player player) { + public void closeGui(@NotNull Player player) { if (openGuis.containsKey(player.getUniqueId())) { openGuis.get(player.getUniqueId()) .gui() @@ -66,7 +66,12 @@ public void closeGui(Player player) { } } - private static Inventory createAndShowGui(Player player, ICCGui gui) { + public void refreshGui(@NotNull Player player, @NotNull ICCGui gui) { + closeGui(player); + openGui(player, gui); + } + + private static Inventory createAndShowGui(@NotNull Player player, @NotNull ICCGui gui) { int rowCount = Math.min(Math.max(gui.getRows(), 1), 6); Inventory inventory = Bukkit.createInventory(player, rowCount * 9, Utils.color(gui.getName())); diff --git a/src/main/java/com/cjburkey/claimchunk/gui/GuiMenuScreen.java b/src/main/java/com/cjburkey/claimchunk/gui/GuiMenuScreen.java index e8802324..ad155ea2 100644 --- a/src/main/java/com/cjburkey/claimchunk/gui/GuiMenuScreen.java +++ b/src/main/java/com/cjburkey/claimchunk/gui/GuiMenuScreen.java @@ -1,12 +1,19 @@ package com.cjburkey.claimchunk.gui; +import com.cjburkey.claimchunk.ClaimChunk; +import com.cjburkey.claimchunk.Utils; + +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + /** * An abstract wrapper for {@link ICCGui} to make creating inventory menus easier. * @@ -19,22 +26,22 @@ public abstract class GuiMenuScreen implements ICCGui { public interface GuiItemAction { /** Called when the item is clicked. */ - void onClick( - @NotNull Inventory inventory, - @NotNull Player player, - int slot, - @NotNull ClickType clickType, - @NotNull ItemStack stack); + void onClick(@NotNull ClickType clickType, @NotNull ItemStack stack); } /** Wrapper around an interactive item in the GUI menu. */ record GuiItemWrapper(@NotNull ItemStack stack, @NotNull GuiItemAction action) {} + protected final ClaimChunk claimChunk; private final int rowCount; private final GuiItemWrapper[] actions; private final String name; - protected GuiMenuScreen(int rowCount, @NotNull String name) { + protected @Nullable Inventory inventory; + protected @Nullable Player player; + + protected GuiMenuScreen(ClaimChunk claimChunk, int rowCount, @NotNull String name) { + this.claimChunk = claimChunk; this.rowCount = Math.min(Math.max(rowCount, 1), 6); this.actions = new GuiItemWrapper[this.rowCount * 9]; this.name = name; @@ -43,25 +50,61 @@ protected GuiMenuScreen(int rowCount, @NotNull String name) { /** * Add an interactive button item to this inventory GUI. * + *

Must be called in {@link this#onBuildGui()}, + * * @param slot The slot of the inventory in which to put the item. - * @param stack The stack that represents this action. + * @param itemType The material of the item. + * @param itemName The display name of the item stack. + * @param itemLore The lore attached to the item. * @param action The on-click callback */ protected void addInteractiveButton( - int slot, @NotNull ItemStack stack, @NotNull GuiItemAction action) { - if (slot >= 0 && slot < this.actions.length) { - this.actions[slot] = new GuiItemWrapper(stack, action); + int slot, + @NotNull Material itemType, + @NotNull String itemName, + @NotNull List itemLore, + @NotNull GuiItemAction action) { + if (inventory == null) return; + + Utils.debug("Made GUI stack in slot: " + slot); + Utils.debug("Max: " + this.actions.length); + if (slot >= 0 && slot < this.actions.length && itemType != Material.AIR) { + ItemStack stack = makeStack(itemType, itemName, itemLore); + if (stack != null) { + inventory.setItem(slot, stack); + this.actions[slot] = new GuiItemWrapper(stack, action); + } } } + private @Nullable ItemStack makeStack( + @NotNull Material itemType, @NotNull String itemName, @NotNull List itemLore) { + ItemStack stack = new ItemStack(itemType); + ItemMeta meta = stack.getItemMeta(); + if (meta == null) return null; + meta.setDisplayName(Utils.color(itemName)); + meta.setLore(itemLore.stream().map(Utils::color).toList()); + stack.setItemMeta(meta); + return stack; + } + @Override public void onOpen(@NotNull Inventory inventory, @NotNull Player player) { - for (int slot = 0; slot < actions.length; slot++) { - GuiItemWrapper action = actions[slot]; - if (action != null) { - inventory.setItem(slot, action.stack()); - } - } + this.inventory = inventory; + this.player = player; + + onBuildGui(); + } + + /** + * Called when the GUI is opened so you don't have to override {@link this#onOpen(Inventory, + * Player)} + */ + protected abstract void onBuildGui(); + + /** Method to reopen this gui (to update item names, etc.) */ + protected void refresh() { + claimChunk.getGuiHandler().refreshGui(player, this); } @Override @@ -75,7 +118,7 @@ public void onClick( GuiItemWrapper action = actions[slot]; if (action != null && stack != null) { - action.action().onClick(inventory, player, slot, clickType, stack); + action.action().onClick(clickType, stack); } } diff --git a/src/main/java/com/cjburkey/claimchunk/gui/screens/MainMenu.java b/src/main/java/com/cjburkey/claimchunk/gui/screens/MainMenu.java index dfbfaa59..8038371f 100644 --- a/src/main/java/com/cjburkey/claimchunk/gui/screens/MainMenu.java +++ b/src/main/java/com/cjburkey/claimchunk/gui/screens/MainMenu.java @@ -1,28 +1,117 @@ package com.cjburkey.claimchunk.gui.screens; +import com.cjburkey.claimchunk.ClaimChunk; +import com.cjburkey.claimchunk.chunk.ChunkHandler; +import com.cjburkey.claimchunk.chunk.ChunkPos; import com.cjburkey.claimchunk.gui.GuiMenuScreen; +import com.cjburkey.claimchunk.player.PlayerHandler; import org.bukkit.Material; import org.bukkit.entity.Player; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.UUID; +import java.util.regex.Pattern; public class MainMenu extends GuiMenuScreen { - public MainMenu() { - super(1, "ClaimChunk Menu"); - addButtons(); + // +---------+ + // |XX2X4X6XX| + // +---------+ + // 2: Current chunk info + // 4: Chunk map + // 6: Chunk permissions + + public MainMenu(ClaimChunk claimChunk) { + super(claimChunk, 1, "ClaimChunk Menu"); + } + + @Override + protected void onBuildGui() { + if (player == null) return; + + addCurrentChunkItem(player); + addMapItem(); + addPermsItem(); } - private void addButtons() { + private void addCurrentChunkItem(@NotNull Player player) { + ChunkHandler chunkHandler = claimChunk.getChunkHandler(); + PlayerHandler playerHandler = claimChunk.getPlayerHandler(); + + ChunkPos chunkPos = new ChunkPos(player.getLocation().getChunk()); + UUID chunkOwner = chunkHandler.getOwner(chunkPos); + String chunkName = chunkOwner == null ? null : playerHandler.getChunkName(chunkOwner); + if (chunkName == null && chunkOwner != null) + chunkName = playerHandler.getUsername(chunkOwner); + + ArrayList lore = new ArrayList<>(); + + lore.add( + claimChunk + .getMessages() + .guiChunkPos + .replaceAll(Pattern.quote("%%WORLD%%"), chunkPos.world()) + .replaceAll(Pattern.quote("%%X%%"), chunkPos.x() + "") + .replaceAll(Pattern.quote("%%Z%%"), chunkPos.z() + "")); + if (chunkOwner != null) { + lore.add( + claimChunk + .getMessages() + .guiChunkOwner + .replaceAll(Pattern.quote("%%NAME%%"), chunkName)); + if (chunkOwner.equals(player.getUniqueId())) { + lore.add(""); + lore.add(claimChunk.getMessages().guiUnclaim); + } + } else { + lore.add(claimChunk.getMessages().guiNotClaimed); + lore.add(""); + lore.add(claimChunk.getMessages().guiClaim); + } + + addInteractiveButton( + 2, + material(claimChunk.getConfigHandler().getGuiCurrentChunkItem()), + claimChunk.getMessages().guiMainMenuCurrentChunkItemName, + lore, + (clickType, stack) -> { + if (clickType.isLeftClick()) { + claimChunk.getMainHandler().claimChunk(player, chunkPos); + refresh(); + } else if (clickType.isRightClick()) { + claimChunk + .getMainHandler() + .unclaimChunk( + false, + false, + player, + chunkPos.world(), + chunkPos.x(), + chunkPos.z()); + refresh(); + } + }); + } + + private void addMapItem() { addInteractiveButton( - 0, - new ItemStack(Material.PAPER), - (Inventory inventory, - Player player, - int slot, - ClickType clickType, - ItemStack stack) -> {}); + 4, + material(claimChunk.getConfigHandler().getGuiChunkMapItem()), + claimChunk.getMessages().guiMapItemName, + Collections.singletonList(claimChunk.getMessages().guiMapDescription), + (clickType, stack) -> {}); + } + + private void addPermsItem() {} + + private @NotNull Material material(String val) { + Material item = Material.matchMaterial(val); + if (item == null) { + item = Material.BARRIER; + } + return item; } } diff --git a/src/main/java/com/cjburkey/claimchunk/i18n/V2JsonMessages.java b/src/main/java/com/cjburkey/claimchunk/i18n/V2JsonMessages.java index 9eb69020..f2d143c5 100644 --- a/src/main/java/com/cjburkey/claimchunk/i18n/V2JsonMessages.java +++ b/src/main/java/com/cjburkey/claimchunk/i18n/V2JsonMessages.java @@ -180,6 +180,16 @@ public final class V2JsonMessages { "&cYou can't place &e%%BLOCK%%&c in unclaimed chunks"; public String chunkCancelPearlLaunch = "&cYou can't use ender pearls in &e%%OWNER%%&c's chunk"; + // GUI localization + public String guiMainMenuCurrentChunkItemName = "&r&3&lCurrent Chunk"; + public String guiChunkPos = "&fIn &e%%WORLD%%&f at (&e%%X%%&f, &e%%Z%%&f)"; + public String guiChunkOwner = "&fOwner: %%NAME%%"; + public String guiNotClaimed = "&fNot claimed"; + public String guiClaim = "&2Click to claim!"; + public String guiUnclaim = "&4Right click to unclaim"; + public String guiMapItemName = "&r&3Chunk Map"; + public String guiMapDescription = "&fClick to view chunk map"; + // AdminOverride localization public String adminOverrideEnable = "&eYou now have protection bypass"; public String adminOverrideDisable = "&eYou no longer have protection bypass"; diff --git a/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/EconPrereq.java b/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/EconPrereq.java index 1ad40499..e542793f 100644 --- a/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/EconPrereq.java +++ b/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/EconPrereq.java @@ -96,9 +96,9 @@ public void onSuccess(@NotNull PrereqClaimData data) { // Error check Utils.err( "Failed to buy chunk (%s, %s) in world %s for player %s", - data.chunk.getX(), - data.chunk.getZ(), - data.chunk.getWorld().getName(), + data.chunk.x(), + data.chunk.z(), + data.chunk.world(), data.player != null ? data.player.getName() : data.playerId); } } diff --git a/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/NearChunkPrereq.java b/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/NearChunkPrereq.java index d784f1b6..587ce650 100644 --- a/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/NearChunkPrereq.java +++ b/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/NearChunkPrereq.java @@ -1,6 +1,8 @@ package com.cjburkey.claimchunk.service.prereq.claim; -import org.bukkit.Chunk; +import com.cjburkey.claimchunk.Utils; +import com.cjburkey.claimchunk.chunk.ChunkPos; + import org.jetbrains.annotations.NotNull; import java.util.Optional; @@ -14,6 +16,11 @@ public int getWeight() { @Override public boolean getPassed(@NotNull PrereqClaimData data) { + if (data.player == null) { + Utils.err("No player in prereq data??"); + return false; + } + boolean nearClaimed = false; // Get the diameter around the player to check @@ -29,13 +36,12 @@ public boolean getPassed(@NotNull PrereqClaimData data) { for (int z1 = -min; z1 < max; z1++) { if (nearClaimed || data.player.hasPermission("claimchunk.bypassnearbychunk")) break; - Chunk chunk = - data.chunk - .getWorld() - .getChunkAt(x1 + data.chunk.getX(), z1 + data.chunk.getZ()); + ChunkPos chunkAt = + new ChunkPos(data.chunk.world(), x1 + data.chunk.x(), z1 + data.chunk.z()); - if (data.claimChunk.getChunkHandler().isOwner(chunk, data.player)) continue; - nearClaimed = data.claimChunk.getChunkHandler().isClaimed(chunk); + if (data.claimChunk.getChunkHandler().isOwner(chunkAt, data.player.getUniqueId())) + continue; + nearClaimed = data.claimChunk.getChunkHandler().isClaimed(chunkAt); UUID owner = data.claimChunk.getChunkHandler().getOwner(data.chunk); // If the given chunk is owned but not by this player, fail this prereq if (owner != null && owner.equals(data.playerId)) return false; diff --git a/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/PrereqClaimData.java b/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/PrereqClaimData.java index 4abffbcf..f57f2473 100644 --- a/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/PrereqClaimData.java +++ b/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/PrereqClaimData.java @@ -1,8 +1,8 @@ package com.cjburkey.claimchunk.service.prereq.claim; import com.cjburkey.claimchunk.ClaimChunk; +import com.cjburkey.claimchunk.chunk.ChunkPos; -import org.bukkit.Chunk; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -12,7 +12,7 @@ public final class PrereqClaimData { public final ClaimChunk claimChunk; - public final Chunk chunk; + public final ChunkPos chunk; public final UUID playerId; public final Player player; // Automatically loaded @@ -22,7 +22,7 @@ public final class PrereqClaimData { public PrereqClaimData( @NotNull ClaimChunk claimChunk, - @NotNull Chunk chunk, + @NotNull ChunkPos chunk, @NotNull UUID playerId, @Nullable Player player) { this.claimChunk = claimChunk; diff --git a/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/WorldPrereq.java b/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/WorldPrereq.java index a0a50fef..04144117 100644 --- a/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/WorldPrereq.java +++ b/src/main/java/com/cjburkey/claimchunk/service/prereq/claim/WorldPrereq.java @@ -13,10 +13,7 @@ public int getWeight() { @Override public boolean getPassed(@NotNull PrereqClaimData data) { - return data.claimChunk - .getProfileHandler() - .getProfile(data.chunk.getWorld().getName()) - .enabled; + return data.claimChunk.getProfileHandler().getProfile(data.chunk.world()).enabled; } @Override diff --git a/src/main/java/com/cjburkey/claimchunk/smartcommand/sub/ply/ClaimCmd.java b/src/main/java/com/cjburkey/claimchunk/smartcommand/sub/ply/ClaimCmd.java index 6d1fcb31..8d310fc0 100644 --- a/src/main/java/com/cjburkey/claimchunk/smartcommand/sub/ply/ClaimCmd.java +++ b/src/main/java/com/cjburkey/claimchunk/smartcommand/sub/ply/ClaimCmd.java @@ -1,6 +1,7 @@ package com.cjburkey.claimchunk.smartcommand.sub.ply; import com.cjburkey.claimchunk.ClaimChunk; +import com.cjburkey.claimchunk.chunk.ChunkPos; import com.cjburkey.claimchunk.smartcommand.CCSubCommand; import de.goldmensch.commanddispatcher.Executor; @@ -42,7 +43,9 @@ public int getRequiredArguments() { @Override public boolean onCall(@NotNull String cmdUsed, @NotNull CommandSender executor, String[] args) { var player = (Player) executor; - claimChunk.getMainHandler().claimChunk(player, player.getLocation().getChunk()); + claimChunk + .getMainHandler() + .claimChunk(player, new ChunkPos(player.getLocation().getChunk())); return true; } } diff --git a/src/main/java/com/cjburkey/claimchunk/smartcommand/sub/ply/GuiCmd.java b/src/main/java/com/cjburkey/claimchunk/smartcommand/sub/ply/GuiCmd.java index f61030a2..05aebad8 100644 --- a/src/main/java/com/cjburkey/claimchunk/smartcommand/sub/ply/GuiCmd.java +++ b/src/main/java/com/cjburkey/claimchunk/smartcommand/sub/ply/GuiCmd.java @@ -37,7 +37,7 @@ public int getRequiredArguments() { @Override public boolean onCall(@NotNull String cmdUsed, @NotNull CommandSender executor, String[] args) { - claimChunk.getGuiHandler().openGui((Player) executor, new MainMenu()); + claimChunk.getGuiHandler().openGui((Player) executor, new MainMenu(claimChunk)); return true; } } diff --git a/src/main/java/com/cjburkey/claimchunk/worldguard/WorldGuardApi.java b/src/main/java/com/cjburkey/claimchunk/worldguard/WorldGuardApi.java index 79884381..cb135a22 100644 --- a/src/main/java/com/cjburkey/claimchunk/worldguard/WorldGuardApi.java +++ b/src/main/java/com/cjburkey/claimchunk/worldguard/WorldGuardApi.java @@ -2,6 +2,7 @@ import com.cjburkey.claimchunk.ClaimChunk; import com.cjburkey.claimchunk.Utils; +import com.cjburkey.claimchunk.chunk.ChunkPos; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldguard.WorldGuard; @@ -12,7 +13,8 @@ import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion; -import org.bukkit.Chunk; +import org.bukkit.Bukkit; +import org.bukkit.World; /** * THIS CLASS IS A RAW IMPLEMENTATION IT WILL CRASH IF WORLD GUARD IS NOT PRESENT USE {@link @@ -47,17 +49,24 @@ static boolean _init(ClaimChunk claimChunk) { + " registry"); return false; } catch (Exception e) { - Utils.err("Failed to initialize WorldGuard support"); + Utils.err("Failed to initialize WorldGuard support!"); + //noinspection CallToPrintStackTrace e.printStackTrace(); } return false; } - static boolean _isAllowedClaim(ClaimChunk claimChunk, Chunk chunk) { + static boolean _isAllowedClaim(ClaimChunk claimChunk, ChunkPos chunk) { try { + World world = Bukkit.getWorld(chunk.world()); + if (world == null) { + Utils.err("World was null in WorldGuardApi??"); + return false; + } + // Generate a region in the given chunk to get all intersecting regions - int bx = chunk.getX() << 4; - int bz = chunk.getZ() << 4; + int bx = chunk.x() << 4; + int bz = chunk.z() << 4; BlockVector3 pt1 = BlockVector3.at(bx, 0, bz); BlockVector3 pt2 = BlockVector3.at(bx + 15, 256, bz + 15); ProtectedCuboidRegion region = new ProtectedCuboidRegion("_", pt1, pt2); @@ -65,7 +74,7 @@ static boolean _isAllowedClaim(ClaimChunk claimChunk, Chunk chunk) { WorldGuard.getInstance() .getPlatform() .getRegionContainer() - .get(BukkitAdapter.adapt(chunk.getWorld())); + .get(BukkitAdapter.adapt(world)); // No regions in this world, claiming should be determined by the config if (regionManager == null) { @@ -81,7 +90,7 @@ static boolean _isAllowedClaim(ClaimChunk claimChunk, Chunk chunk) { // No objections return true; } catch (Exception e) { - e.printStackTrace(); + Utils.err("Failed to check if player is allowed to claim based on WorldGuard region!"); } // An error occurred, better to be on the safe side so false is returned diff --git a/src/main/java/com/cjburkey/claimchunk/worldguard/WorldGuardHandler.java b/src/main/java/com/cjburkey/claimchunk/worldguard/WorldGuardHandler.java index 2cb9e46a..d89026c9 100644 --- a/src/main/java/com/cjburkey/claimchunk/worldguard/WorldGuardHandler.java +++ b/src/main/java/com/cjburkey/claimchunk/worldguard/WorldGuardHandler.java @@ -3,8 +3,7 @@ import static com.cjburkey.claimchunk.worldguard.WorldGuardApi.*; import com.cjburkey.claimchunk.ClaimChunk; - -import org.bukkit.Chunk; +import com.cjburkey.claimchunk.chunk.ChunkPos; /** Safe wrapper for {@link com.cjburkey.claimchunk.worldguard.WorldGuardApi} */ public class WorldGuardHandler { @@ -19,7 +18,7 @@ public static boolean init(ClaimChunk claimChunk) { return false; } - public static boolean isAllowedClaim(ClaimChunk claimChunk, Chunk chunk) { + public static boolean isAllowedClaim(ClaimChunk claimChunk, ChunkPos chunk) { try { // If the WorldGuard api never loaded, just allow the claim return (!loaded || _isAllowedClaim(claimChunk, chunk)); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 610488fa..ed264471 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -10,6 +10,10 @@ log: debugSpam: false anonymousMetrics: true +gui: + currentChunkItem: 'minecraft:grass_block' + chunkMapItem: 'minecraft:map' + titles: useTitlesInsteadOfChat: true useActionBar: true @@ -44,6 +48,7 @@ chunkOutline: spawnsPerSecond: 2 particlesPerSpawn: 2 heightRadius: 3 + useNewEffect: true worldguard: allowClaimsInRegionsByDefault: true