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