diff --git a/build.gradle.kts b/build.gradle.kts index 7ad14c8..4a5d059 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -49,7 +49,7 @@ dependencies { implementation("io.papermc:paperlib:1.0.7") implementation("co.aikar:idb-core:1.0.0-SNAPSHOT") implementation("com.zaxxer:HikariCP:5.1.0") - implementation("com.github.retrooper.packetevents:spigot:2.2.0") + implementation("com.github.retrooper.packetevents:spigot:2.2.1") compileOnly("com.github.N0RSKA:DeluxeSellwandsAPI:32c") compileOnly("com.ghostchu:quickshop-api:5.2.0.8") compileOnly("com.google.guava:guava:33.0.0-jre") diff --git a/src/main/java/net/crashcraft/crashclaim/claimobjects/Claim.java b/src/main/java/net/crashcraft/crashclaim/claimobjects/Claim.java index 13db9bc..c27d84c 100644 --- a/src/main/java/net/crashcraft/crashclaim/claimobjects/Claim.java +++ b/src/main/java/net/crashcraft/crashclaim/claimobjects/Claim.java @@ -83,10 +83,11 @@ private int getActivePermission(Location location, Material material){ } private int getActivePermission(UUID uuid, Location location, PermissionRoute route){ //should only be executed with a location inside the claim - if (uuid.equals(owner)) + if (uuid.equals(owner)) { return PermState.ENABLED; + } - if (location != null && subClaims.size() > 0){ + if (location != null && !subClaims.isEmpty()){ SubClaim subClaim = getSubClaim(location.getBlockX(), location.getBlockZ()); if (subClaim != null){ return PermissionRouter.getLayeredPermission(this, subClaim, uuid, route); diff --git a/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/GlobalPermissionSet.java b/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/GlobalPermissionSet.java index 102e316..10f30e2 100644 --- a/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/GlobalPermissionSet.java +++ b/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/GlobalPermissionSet.java @@ -14,8 +14,8 @@ public GlobalPermissionSet() { } - public GlobalPermissionSet(int build, int interactions, int entities, int explosions, int entityGrief, int teleportation, int viewSubClaims, HashMap containers, int defaultContainerValue, int pistons, int fluids) { - super(build, interactions, entities, teleportation, viewSubClaims, containers, defaultContainerValue); + public GlobalPermissionSet(int build, int interactions, int entities, int explosions, int entityGrief, int teleportation, int viewSubClaims, HashMap containers, int defaultContainerValue, int pistons, int fluids, int dropPickupItems) { + super(build, interactions, entities, teleportation, viewSubClaims, containers, defaultContainerValue, dropPickupItems); this.entityGrief = entityGrief; this.pistons = pistons; this.explosions = explosions; diff --git a/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/PermissionSet.java b/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/PermissionSet.java index cbf70ee..f1c713f 100644 --- a/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/PermissionSet.java +++ b/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/PermissionSet.java @@ -10,15 +10,16 @@ public abstract class PermissionSet implements Cloneable{ private int entities; private int teleportation; private int viewSubClaims; + private int dropPickupItems; private HashMap containers; private int defaultContainerValue; - public PermissionSet(){ + public PermissionSet() { } - public PermissionSet(int build, int interactions, int entities, int teleportation, int viewSubClaims, HashMap containers, int defaultContainerValue) { + public PermissionSet(int build, int interactions, int entities, int teleportation, int viewSubClaims, HashMap containers, int defaultContainerValue, int dropPickupItems) { this.build = build; this.interactions = interactions; this.entities = entities; @@ -26,6 +27,7 @@ public PermissionSet(int build, int interactions, int entities, int teleportatio this.viewSubClaims = viewSubClaims; this.containers = containers; this.defaultContainerValue = defaultContainerValue; + this.dropPickupItems = dropPickupItems; } public int getBuild() { @@ -76,6 +78,14 @@ public HashMap getContainers() { return containers; } + public int getDropPickupItems() { + return dropPickupItems; + } + + public void setDropPickupItems(int dropPickupItems) { + this.dropPickupItems = dropPickupItems; + } + public PermissionSet clone() { try { return (PermissionSet) super.clone(); diff --git a/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/PlayerPermissionSet.java b/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/PlayerPermissionSet.java index 8ca2e92..ee04542 100644 --- a/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/PlayerPermissionSet.java +++ b/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/PlayerPermissionSet.java @@ -12,8 +12,8 @@ public PlayerPermissionSet() { } - public PlayerPermissionSet(int build, int interactions, int entities, int explosions, int teleportation, int viewSubClaims, HashMap containers, int defaultContainerValue, int modifyPermissions, int modifyClaim) { - super(build, interactions, entities, teleportation, viewSubClaims, containers, defaultContainerValue); + public PlayerPermissionSet(int build, int interactions, int entities, int explosions, int teleportation, int viewSubClaims, HashMap containers, int defaultContainerValue, int modifyPermissions, int modifyClaim, int dropPickupItems) { + super(build, interactions, entities, teleportation, viewSubClaims, containers, defaultContainerValue, dropPickupItems); this.modifyPermissions = modifyPermissions; this.modifyClaim = modifyClaim; } diff --git a/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/child/SubPermissionGroup.java b/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/child/SubPermissionGroup.java index 687e3b9..b4cb502 100644 --- a/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/child/SubPermissionGroup.java +++ b/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/child/SubPermissionGroup.java @@ -22,13 +22,13 @@ public SubPermissionGroup(BaseClaim owner, GlobalPermissionSet globalPermissionS @Override public PlayerPermissionSet createPlayerPermissionSet() { return new PlayerPermissionSet(PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL, - PermState.NEUTRAL, new HashMap<>(), PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL); + PermState.NEUTRAL, new HashMap<>(), PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL); } @Override public GlobalPermissionSet createGlobalPermissionSet() { return new GlobalPermissionSet(PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL, - PermState.NEUTRAL, new HashMap<>(), PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL); + PermState.NEUTRAL, new HashMap<>(), PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL); } @Override diff --git a/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/parent/ParentPermissionGroup.java b/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/parent/ParentPermissionGroup.java index 82b6bb3..f07e28c 100644 --- a/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/parent/ParentPermissionGroup.java +++ b/src/main/java/net/crashcraft/crashclaim/claimobjects/permission/parent/ParentPermissionGroup.java @@ -22,13 +22,13 @@ public ParentPermissionGroup(BaseClaim owner, GlobalPermissionSet globalPermissi @Override public PlayerPermissionSet createPlayerPermissionSet() { return new PlayerPermissionSet(PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL, PermState.NEUTRAL, - new HashMap<>(), PermState.NEUTRAL, PermState.DISABLE, PermState.DISABLE); + new HashMap<>(), PermState.NEUTRAL, PermState.DISABLE, PermState.DISABLE, PermState.NEUTRAL); } @Override public GlobalPermissionSet createGlobalPermissionSet() { return new GlobalPermissionSet(PermState.DISABLE, PermState.DISABLE, PermState.DISABLE, PermState.DISABLE, PermState.DISABLE, PermState.ENABLED, PermState.ENABLED, - new HashMap<>(), PermState.DISABLE, PermState.DISABLE, PermState.DISABLE); + new HashMap<>(), PermState.DISABLE, PermState.DISABLE, PermState.DISABLE, PermState.ENABLED); } @Override diff --git a/src/main/java/net/crashcraft/crashclaim/data/MaterialName.java b/src/main/java/net/crashcraft/crashclaim/data/MaterialName.java index fe1cdd3..5600b72 100644 --- a/src/main/java/net/crashcraft/crashclaim/data/MaterialName.java +++ b/src/main/java/net/crashcraft/crashclaim/data/MaterialName.java @@ -13,10 +13,19 @@ public MaterialName(){ names = new HashMap<>(); for (Material material : Material.values()){ - names.put(material, - StringUtils.capitalize(StringUtils.join(StringUtils.split( - CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, material.name()) - ), ' '))); + String[] split = material.toString().split("_"); + + StringBuilder builder = new StringBuilder(); + for (String s : split) { + builder.append(StringUtils.capitalize(s.toLowerCase())); + builder.append(" "); + } + + String capitalize = StringUtils.capitalize(StringUtils.join(StringUtils.split( + CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, builder.toString()) + ), ' ')); + + names.put(material, capitalize); } } diff --git a/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/DatabaseManager.java b/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/DatabaseManager.java index 7d365cb..c4970ba 100644 --- a/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/DatabaseManager.java +++ b/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/DatabaseManager.java @@ -45,7 +45,10 @@ private void setInitialParams(){ private void updateDatabase(){ int latestVersion = (dataVersions.get(dataVersions.size() - 1).getVersion()); - if (currentRevision == latestVersion){ + if (currentRevision >= latestVersion){ + if (currentRevision > latestVersion){ + logger.severe("Database is at a higher version than the plugin, tread with caution"); + } return; } @@ -77,6 +80,7 @@ private void setupDataVersions(){ registerDataVersion(new DataRev2()); registerDataVersion(new DataRev3()); registerDataVersion(new DataRev4()); + registerDataVersion(new DataRev5()); } private void validateDataVersions(){ diff --git a/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/SQLiteDataProvider.java b/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/SQLiteDataProvider.java index cbf4c5f..e08dfa0 100644 --- a/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/SQLiteDataProvider.java +++ b/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/SQLiteDataProvider.java @@ -301,7 +301,7 @@ private void savePermissions(int data_id, PermissionGroup group) throws SQLExcep DB.executeUpdate("INSERT INTO permission_set(data_id, players_id, build, interactions, entities, explosions, entityGrief, teleportation, defaultContainer, viewSubClaims, pistons, fluids) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (data_id, players_id) DO UPDATE SET " + - "build = ?, interactions = ?, entities = ?, explosions = ?, entityGrief = ?, teleportation = ?, defaultContainer = ?, viewSubClaims = ?, pistons = ?, fluids = ?", + "build = ?, interactions = ?, entities = ?, explosions = ?, entityGrief = ?, teleportation = ?, defaultContainer = ?, viewSubClaims = ?, pistons = ?, fluids = ?, dropPickupItems = ?", data_id, -1, global.getBuild(), @@ -324,7 +324,8 @@ private void savePermissions(int data_id, PermissionGroup group) throws SQLExcep global.getDefaultConatinerValue(), global.getViewSubClaims(), global.getPistons(), - global.getFluids() + global.getFluids(), + global.getDropPickupItems() ); addContainers(data_id, -1, global.getContainers()); @@ -339,7 +340,7 @@ private void savePermissions(int data_id, PermissionGroup group) throws SQLExcep DB.executeUpdate("INSERT INTO permission_set(data_id, players_id, build, interactions, entities, teleportation, defaultContainer, viewSubClaims, modifyPermissions, modifyClaim) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (data_id, players_id) DO UPDATE SET " + - "build = ?, interactions = ?, entities = ?, teleportation = ?, defaultContainer = ?, viewSubClaims = ?, modifyPermissions = ?, modifyClaim = ?", + "build = ?, interactions = ?, entities = ?, teleportation = ?, defaultContainer = ?, viewSubClaims = ?, modifyPermissions = ?, modifyClaim = ?, dropPickupItems = ?", data_id, player_id, perms.getBuild(), @@ -358,7 +359,8 @@ private void savePermissions(int data_id, PermissionGroup group) throws SQLExcep perms.getDefaultConatinerValue(), perms.getViewSubClaims(), perms.getModifyPermissions(), - perms.getModifyClaim() + perms.getModifyClaim(), + perms.getDropPickupItems() ); addContainers(data_id, player_id, perms.getContainers()); @@ -539,8 +541,8 @@ public Claim loadClaim(Integer id) { return null; } - private GlobalPermissionSet getGlobalPermissionSet(int data_id) throws SQLException{ - DbRow globalPermissionRow = DB.getFirstRow("SELECT build, interactions, entities, explosions, entityGrief, teleportation, viewSubClaims, pistons, fluids, defaultContainer FROM permission_set " + + private GlobalPermissionSet getGlobalPermissionSet(int data_id) throws SQLException { + DbRow globalPermissionRow = DB.getFirstRow("SELECT build, interactions, entities, explosions, entityGrief, teleportation, viewSubClaims, pistons, fluids, defaultContainer, dropPickupItems FROM permission_set " + "WHERE data_id = ? AND players_id = -1", data_id); HashMap globalContainers = new HashMap<>(); @@ -549,24 +551,25 @@ private GlobalPermissionSet getGlobalPermissionSet(int data_id) throws SQLExcept } return new GlobalPermissionSet( - globalPermissionRow.getInt("build"), - globalPermissionRow.getInt("interactions"), - globalPermissionRow.getInt("entities"), - globalPermissionRow.getInt("explosions"), - globalPermissionRow.getInt("entityGrief"), - globalPermissionRow.getInt("teleportation"), - globalPermissionRow.getInt("viewSubClaims"), + globalPermissionRow.getInt("build", PermState.ENABLED), + globalPermissionRow.getInt("interactions", PermState.ENABLED), + globalPermissionRow.getInt("entities", PermState.ENABLED), + globalPermissionRow.getInt("explosions", PermState.ENABLED), + globalPermissionRow.getInt("entityGrief", PermState.ENABLED), + globalPermissionRow.getInt("teleportation", PermState.ENABLED), + globalPermissionRow.getInt("viewSubClaims", PermState.ENABLED), globalContainers, - globalPermissionRow.getInt("defaultContainer"), - globalPermissionRow.getInt("pistons"), - globalPermissionRow.getInt("fluids") + globalPermissionRow.getInt("defaultContainer", PermState.ENABLED), + globalPermissionRow.getInt("pistons", PermState.ENABLED), + globalPermissionRow.getInt("fluids", PermState.ENABLED), + globalPermissionRow.getInt("dropPickupItems", PermState.ENABLED) ); } - private HashMap getPlayerPermissions(int data_id) throws SQLException{ + private HashMap getPlayerPermissions(int data_id) throws SQLException { HashMap perms = new HashMap<>(); - for (DbRow permissionRow : DB.getResults("SELECT players_id, (SELECT uuid FROM players WHERE players.id = permission_set.players_id) AS uuid, build, interactions, entities, teleportation, viewSubClaims, defaultContainer, modifyPermissions, modifyClaim FROM permission_set " + + for (DbRow permissionRow : DB.getResults("SELECT players_id, (SELECT uuid FROM players WHERE players.id = permission_set.players_id) AS uuid, build, interactions, entities, teleportation, viewSubClaims, defaultContainer, modifyPermissions, modifyClaim, dropPickupItems FROM permission_set " + "WHERE data_id = ? AND players_id IS NOT -1", data_id)){ HashMap containers = new HashMap<>(); @@ -576,16 +579,17 @@ private HashMap getPlayerPermissions(int data_id) thr } PlayerPermissionSet set = new PlayerPermissionSet( - permissionRow.getInt("build"), - permissionRow.getInt("interactions"), - permissionRow.getInt("entities"), + permissionRow.getInt("build", PermState.ENABLED), + permissionRow.getInt("interactions", PermState.ENABLED), + permissionRow.getInt("entities", PermState.ENABLED), PermState.ENABLED, // TODO not used - permissionRow.getInt("teleportation"), - permissionRow.getInt("viewSubClaims"), + permissionRow.getInt("teleportation", PermState.ENABLED), + permissionRow.getInt("viewSubClaims", PermState.ENABLED), containers, - permissionRow.getInt("defaultContainer"), - permissionRow.getInt("modifyPermissions"), - permissionRow.getInt("modifyClaim") + permissionRow.getInt("defaultContainer", PermState.ENABLED), + permissionRow.getInt("modifyPermissions", PermState.ENABLED), + permissionRow.getInt("modifyClaim", PermState.ENABLED), + permissionRow.getInt("dropPickupItems", PermState.ENABLED) ); perms.put(UUID.fromString(permissionRow.getString("uuid")), set); diff --git a/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/versions/DataRev5.java b/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/versions/DataRev5.java new file mode 100644 index 0000000..01e305c --- /dev/null +++ b/src/main/java/net/crashcraft/crashclaim/data/providers/sqlite/versions/DataRev5.java @@ -0,0 +1,19 @@ +package net.crashcraft.crashclaim.data.providers.sqlite.versions; + +import co.aikar.idb.DB; +import net.crashcraft.crashclaim.data.providers.sqlite.DataVersion; + +import java.sql.SQLException; + +public class DataRev5 implements DataVersion { + @Override + public int getVersion() { + return 5; + } + + // add dropPickupItems column to permission_set + @Override + public void executeUpgrade(int fromRevision) throws SQLException { + DB.executeUpdate("ALTER TABLE permission_set ADD COLUMN dropPickupItems INTEGER DEFAULT 2"); + } +} diff --git a/src/main/java/net/crashcraft/crashclaim/listeners/PlayerListener.java b/src/main/java/net/crashcraft/crashclaim/listeners/PlayerListener.java index 29904c9..3535ed7 100644 --- a/src/main/java/net/crashcraft/crashclaim/listeners/PlayerListener.java +++ b/src/main/java/net/crashcraft/crashclaim/listeners/PlayerListener.java @@ -12,12 +12,12 @@ import net.crashcraft.crashclaim.permissions.PermissionRoute; import net.crashcraft.crashclaim.permissions.PermissionSetup; import net.crashcraft.crashclaim.visualize.VisualizationManager; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.block.Container; import org.bukkit.block.data.Waterlogged; import org.bukkit.block.data.type.Dispenser; import org.bukkit.entity.*; @@ -38,15 +38,7 @@ import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingPlaceEvent; -import org.bukkit.event.player.PlayerArmorStandManipulateEvent; -import org.bukkit.event.player.PlayerBucketEmptyEvent; -import org.bukkit.event.player.PlayerBucketFillEvent; -import org.bukkit.event.player.PlayerInteractEntityEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerPickupArrowEvent; -import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.player.*; import org.bukkit.event.vehicle.VehicleDamageEvent; import org.bukkit.inventory.BlockInventoryHolder; @@ -197,6 +189,30 @@ private boolean isFullOfLiquid(Block block){ || (block.getBlockData() instanceof Waterlogged && ((Waterlogged) block.getBlockData()).isWaterlogged()); } + @EventHandler + public void onItemDrop(PlayerDropItemEvent event) { + if (GlobalConfig.disabled_worlds.contains(event.getPlayer().getWorld().getUID())){ + return; + } + + if (!helper.hasPermission(event.getPlayer().getUniqueId(), event.getPlayer().getLocation(), PermissionRoute.ITEM_DROP_PICKUP)){ + event.setCancelled(true); + visuals.sendAlert(event.getPlayer(), Localization.ALERT__NO_PERMISSIONS__DROP_PICKUP.getMessage(event.getPlayer())); + } + } + + @EventHandler + public void onItemPickup(PlayerAttemptPickupItemEvent event) { + if (GlobalConfig.disabled_worlds.contains(event.getPlayer().getWorld().getUID())){ + return; + } + + if (!helper.hasPermission(event.getPlayer().getUniqueId(), event.getItem().getLocation(), PermissionRoute.ITEM_DROP_PICKUP)){ + event.setCancelled(true); + visuals.sendAlert(event.getPlayer(), Localization.ALERT__NO_PERMISSIONS__DROP_PICKUP.getMessage(event.getPlayer())); + } + } + @EventHandler (priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPistonEvent(BlockPistonExtendEvent event){ if (GlobalConfig.disabled_worlds.contains(event.getBlock().getWorld().getUID())){ diff --git a/src/main/java/net/crashcraft/crashclaim/localization/Localization.java b/src/main/java/net/crashcraft/crashclaim/localization/Localization.java index 8efd985..dfcf0d0 100644 --- a/src/main/java/net/crashcraft/crashclaim/localization/Localization.java +++ b/src/main/java/net/crashcraft/crashclaim/localization/Localization.java @@ -225,6 +225,8 @@ public enum Localization { ALERT__NO_PERMISSIONS__BUILD("You do not have permission to build in this claim"), ALERT__NO_PERMISSIONS__INTERACTION("You do not have permission to interact in this claim."), + ALERT__NO_PERMISSIONS__DROP_PICKUP("You do not have permission to drop & pickup items in this claim."), + ALERT__NO_PERMISSIONS__CONTAINERS("You do not have permission to open containers in this claim."), ALERT__NO_PERMISSIONS__ENTITIES("You do not have permission to interact with entities in this claim"), ALERT__NO_PERMISSIONS__TELEPORT("You do not have permission to teleport to that claim."), @@ -372,6 +374,11 @@ public enum Localization { "Explosions", "Allow explosions from tnt, creepers,", "and more"), + MENU__PERMISSIONS__PICKUP_DROP_ITEMS(Material.SUGAR_CANE, 1, + "Item Drop & Pickup", + "Allow players to drop and pickup items", + "from the ground"), + MENU__PERMISSIONS__TELEPORTATION(Material.ENDER_PEARL, 1, "Teleportation", "Allow players to teleport inside", @@ -595,7 +602,7 @@ private static TagResolver generateTagResolver(String... replace){ return builder.build(); } - private enum localizationType { + private enum LocalizationType { MESSAGE, MESSAGE_LIST, ITEM, @@ -605,20 +612,20 @@ private enum localizationType { private String def; private String[] defList; - private final localizationType type; + private final LocalizationType type; private boolean hasPlaceholders = false; Localization(){ this.def = ""; this.defList = null; - this.type = localizationType.CODE_ONLY; + this.type = LocalizationType.CODE_ONLY; } Localization(String def){ this.def = def; this.defList = null; - this.type = localizationType.MESSAGE; + this.type = LocalizationType.MESSAGE; } private BaseComponent[] message; @@ -627,7 +634,7 @@ private enum localizationType { Localization(String... defList){ this.def = null; this.defList = defList; - this.type = localizationType.MESSAGE_LIST; + this.type = LocalizationType.MESSAGE_LIST; } private ItemStackTemplate item; @@ -635,7 +642,7 @@ private enum localizationType { Localization(Material material, Integer stackSize, String title, String... loreDef){ this.def = null; this.defList = null; - this.type = localizationType.ITEM; + this.type = LocalizationType.ITEM; this.item = new ItemStackTemplate(material, stackSize, title, Arrays.asList(loreDef), null, false); } @@ -820,7 +827,7 @@ public ItemStackTemplate getItemTemplate() { return item; } - private localizationType getType() { + private LocalizationType getType() { return type; } } diff --git a/src/main/java/net/crashcraft/crashclaim/menus/helpers/MenuListHelper.java b/src/main/java/net/crashcraft/crashclaim/menus/helpers/MenuListHelper.java index 4f15742..60cb2d9 100644 --- a/src/main/java/net/crashcraft/crashclaim/menus/helpers/MenuListHelper.java +++ b/src/main/java/net/crashcraft/crashclaim/menus/helpers/MenuListHelper.java @@ -66,6 +66,7 @@ public void setup(LinkedHashMap itemDisplay, in this.setter = setter; this.group = group; this.setting = setting; + this.controlOffset = 47; // 45 + 2. 45 because its last row, 2 because its the previous button & start of controls items = new ArrayList<>(itemDisplay.keySet()); @@ -75,7 +76,7 @@ public void setup(LinkedHashMap itemDisplay, in setupGUI(); } - public void setupContainerList(PermissionSet set, UUID setter, PermissionGroup group, int numPerPage, int controlOffset , UUID setting){ + public void setupContainerList(PermissionSet set, UUID setter, PermissionGroup group, int numPerPage , UUID setting){ isContainerList = true; inv.clear(); @@ -85,8 +86,7 @@ public void setupContainerList(PermissionSet set, UUID setter, PermissionGroup g this.group = group; this.numPerPage = numPerPage; this.containers = CrashClaim.getPlugin().getDataManager().getPermissionSetup().getTrackedContainers(); - int FIXED_CONTROL_OFFSET = 47; - this.controlOffset = FIXED_CONTROL_OFFSET + controlOffset; + this.controlOffset = 47; // 45 + 2. 45 because its last row, 2 because its the previous button & start of controls if (set instanceof PlayerPermissionSet || group.getOwner() instanceof SubClaim){ switchType = MenuSwitchType.TRIPLE; @@ -186,9 +186,7 @@ public void onClick(InventoryClickEvent event, String rawItemName) { } } - if (isContainerList){ - onInventoryPreClick(event); - } + onInventoryPreClick(event); if (event.getCurrentItem() == null){ return; @@ -295,8 +293,9 @@ private void setupContainerInventory(){ int offset = (numPerPage * page); for (int x = 0; x < numPerPage; x++){ - if (offset + x > containers.size() - 1) + if (offset + x > containers.size() - 1) { break; + } Material material = containers.get(x + offset); @@ -310,7 +309,7 @@ private void setupContainerInventory(){ drawSwitch(switchType, getUniversalContainerPerm(material), x, allow); } - if (containers.size() > numPerPage) { + if (containers.size() >= numPerPage) { if ((offset - numPerPage) >= 0){ inv.setItem(controlOffset, Localization.MENU__GENERAL__PREVIOUS_BUTTON.getItem(player)); } @@ -320,19 +319,23 @@ private void setupContainerInventory(){ "page_total", Integer.toString((int) (Math.floor((float) containers.size() / numPerPage) + 1)) )); - if ((offset + numPerPage) < containers.size() - 1){ + if ((offset + numPerPage) < containers.size()){ inv.setItem(controlOffset + 2, Localization.MENU__GENERAL__NEXT_BUTTON.getItem(player)); } } } private void setupInventory(){ + int offset = (numPerPage * page); int itemOffset = 0; - for (int x = page * numPerPage; x < (Math.min(page * numPerPage + numPerPage, items.size())); x++){ - PermissionRoute route = items.get(x); + for (int x = 0; x < numPerPage; x++){ + if (offset + x > items.size() - 1) { + break; + } - if (route == null){ + PermissionRoute route = items.get(x + offset); + if (route == null){ itemOffset++; continue; } @@ -342,9 +345,23 @@ private void setupInventory(){ Boolean allow = helper.hasPermission(group.getOwner(), setter, route); drawSwitch(itemDisplay.get(route), getUniversalPerm(route), itemOffset, allow); - itemOffset++; } + + if (items.size() > numPerPage) { + if ((offset - numPerPage) >= 0) { + inv.setItem(controlOffset, Localization.MENU__GENERAL__PREVIOUS_BUTTON.getItem(player)); + } + + inv.setItem(controlOffset + 1, Localization.MENU__GENERAL__PAGE_DISPLAY.getItem(player, + "page", Integer.toString(page + 1), + "page_total", Integer.toString((int) (Math.floor((float) items.size() / numPerPage) + 1)) + )); + + if ((offset + numPerPage) < items.size()) { + inv.setItem(controlOffset + 2, Localization.MENU__GENERAL__NEXT_BUTTON.getItem(player)); + } + } } private ItemStack getItemForPermission(PermissionRoute route){ @@ -358,6 +375,7 @@ private ItemStack getItemForPermission(PermissionRoute route){ case ENTITIES -> Localization.MENU__PERMISSIONS__ENTITIES.getItem(player); case CONTAINERS -> Localization.MENU__PERMISSIONS__CONTAINERS.getItem(player); case EXPLOSIONS -> Localization.MENU__PERMISSIONS__EXPLOSIONS.getItem(player); + case ITEM_DROP_PICKUP -> Localization.MENU__PERMISSIONS__PICKUP_DROP_ITEMS.getItem(player); case INTERACTIONS -> Localization.MENU__PERMISSIONS__INTERACTIONS.getItem(player); case MODIFY_CLAIM -> Localization.MENU__PERMISSIONS__MODIFY_CLAIM.getItem(player); case TELEPORTATION -> Localization.MENU__PERMISSIONS__TELEPORTATION.getItem(player); diff --git a/src/main/java/net/crashcraft/crashclaim/menus/permissions/AdvancedPermissionMenu.java b/src/main/java/net/crashcraft/crashclaim/menus/permissions/AdvancedPermissionMenu.java index 465197b..c3f7800 100644 --- a/src/main/java/net/crashcraft/crashclaim/menus/permissions/AdvancedPermissionMenu.java +++ b/src/main/java/net/crashcraft/crashclaim/menus/permissions/AdvancedPermissionMenu.java @@ -60,6 +60,7 @@ private void render(SUBMENU menu){ menuList.put(PermissionRoute.BUILD, type); menuList.put(PermissionRoute.INTERACTIONS, type); + menuList.put(PermissionRoute.ITEM_DROP_PICKUP, type); menuList.put(PermissionRoute.ENTITIES, type); if (!isPlayerPermission) { menuList.put(PermissionRoute.EXPLOSIONS, type); @@ -72,10 +73,11 @@ private void render(SUBMENU menu){ menuList.put(PermissionRoute.VIEW_SUB_CLAIMS, type); } + setup(menuList, 5, permissionSet, player.getUniqueId(), claim.getPerms(), uuid); return; case CONTAINERS: - setupContainerList(permissionSet, player.getUniqueId(), claim.getPerms(), 5, 0, uuid); + setupContainerList(permissionSet, player.getUniqueId(), claim.getPerms(), 5, uuid); return; case ADMIN: LinkedHashMap list = new LinkedHashMap<>(); @@ -116,7 +118,7 @@ private void render(SUBMENU menu){ menuItemlist.put(PermissionRoute.PISTONS, MenuSwitchType.DOUBLE); menuItemlist.put(PermissionRoute.FLUIDS, MenuSwitchType.DOUBLE); menuItemlist.put(PermissionRoute.ENTITY_GRIEF, MenuSwitchType.DOUBLE); - menuItemlist.put(null, null); + menuItemlist.put(PermissionRoute.ITEM_DROP_PICKUP, MenuSwitchType.DOUBLE); menuItemlist.put(PermissionRoute.VIEW_SUB_CLAIMS, MenuSwitchType.DOUBLE); } diff --git a/src/main/java/net/crashcraft/crashclaim/menus/permissions/SimplePermissionMenu.java b/src/main/java/net/crashcraft/crashclaim/menus/permissions/SimplePermissionMenu.java index 9d39c3c..7155936 100644 --- a/src/main/java/net/crashcraft/crashclaim/menus/permissions/SimplePermissionMenu.java +++ b/src/main/java/net/crashcraft/crashclaim/menus/permissions/SimplePermissionMenu.java @@ -47,6 +47,7 @@ public SimplePermissionMenu(Player player, BaseClaim claim, UUID uuid, GUI prevM menuList.put(PermissionRoute.BUILD, type); menuList.put(PermissionRoute.CONTAINERS, type); menuList.put(PermissionRoute.ENTITIES, type); + menuList.put(PermissionRoute.ITEM_DROP_PICKUP, type); menuList.put(PermissionRoute.INTERACTIONS, type); if (isPlayerPermission){ diff --git a/src/main/java/net/crashcraft/crashclaim/nms/NMSHandler.java b/src/main/java/net/crashcraft/crashclaim/nms/NMSHandler.java index f51d55c..b5fb49a 100644 --- a/src/main/java/net/crashcraft/crashclaim/nms/NMSHandler.java +++ b/src/main/java/net/crashcraft/crashclaim/nms/NMSHandler.java @@ -44,8 +44,6 @@ public void removeEntity(Player player, Set entity_ids){ WrapperPlayServerDestroyEntities packet = new WrapperPlayServerDestroyEntities(entity_ids.stream().mapToInt(Integer::intValue).toArray()); PacketEvents.getAPI().getPlayerManager().sendPacket(player, packet); - - } public void spawnGlowingInvisibleMagmaSlime(Player player, double x, double z, double y, int id, UUID uuid, @@ -68,12 +66,6 @@ public void spawnGlowingInvisibleMagmaSlime(Player player, double x, double z, d private AtomicInteger ENTITY_ID; - private String NMS; - - public Class getNMSClass(final String className) throws ClassNotFoundException { - return Class.forName(NMS + className); - } - public int getUniqueEntityID() { if (ENTITY_ID == null) { try { diff --git a/src/main/java/net/crashcraft/crashclaim/permissions/PermissionRoute.java b/src/main/java/net/crashcraft/crashclaim/permissions/PermissionRoute.java index 9c1a5e5..4bb3fd7 100644 --- a/src/main/java/net/crashcraft/crashclaim/permissions/PermissionRoute.java +++ b/src/main/java/net/crashcraft/crashclaim/permissions/PermissionRoute.java @@ -61,7 +61,32 @@ public void setPerm(GlobalPermissionSet set, int value) { set.setInteractions(value); } }, - ENTITIES{ + ITEM_DROP_PICKUP { + @Override + public int getPerm(PlayerPermissionSet set) { + if (set == null) + return -1; + return set.getDropPickupItems(); + } + + @Override + public void setPerm(PlayerPermissionSet set, int value) { + set.setDropPickupItems(value); + } + + @Override + public int getPerm(GlobalPermissionSet set) { + if (set == null) + return -1; + return set.getDropPickupItems(); + } + + @Override + public void setPerm(GlobalPermissionSet set, int value) { + set.setDropPickupItems(value); + } + }, + ENTITIES { @Override public int getPerm(PlayerPermissionSet set) { if (set == null) @@ -274,7 +299,7 @@ public void setPerm(GlobalPermissionSet set, int value) { set.setViewSubClaims(value); } }, - CONTAINERS{ + CONTAINERS { @Override public int getPerm(PlayerPermissionSet set) { int old = 4; diff --git a/src/main/java/net/crashcraft/crashclaim/permissions/PermissionRouter.java b/src/main/java/net/crashcraft/crashclaim/permissions/PermissionRouter.java index 25dab73..492f163 100644 --- a/src/main/java/net/crashcraft/crashclaim/permissions/PermissionRouter.java +++ b/src/main/java/net/crashcraft/crashclaim/permissions/PermissionRouter.java @@ -63,7 +63,9 @@ public static int getLayeredPermission(Claim parent, SubClaim subClaim, UUID uui PlayerPermissionSet main = parentPerms.getPlayerPermissionSet(uuid); if (main == null){ return route.getPerm(parentPerms.getGlobalPermissionSet()); - } else return getLayeredPermission(parentPerms.getGlobalPermissionSet(), main, route); + } else { + return getLayeredPermission(parentPerms.getGlobalPermissionSet(), main, route); + } } else { PermissionGroup subPerms = subClaim.getPerms(); diff --git a/src/main/java/net/crashcraft/crashclaim/permissions/PermissionSetup.java b/src/main/java/net/crashcraft/crashclaim/permissions/PermissionSetup.java index 4308882..2c63007 100644 --- a/src/main/java/net/crashcraft/crashclaim/permissions/PermissionSetup.java +++ b/src/main/java/net/crashcraft/crashclaim/permissions/PermissionSetup.java @@ -112,7 +112,9 @@ public PermissionSetup(CrashClaim claim){ temp, PermState.ENABLED, PermState.ENABLED, - PermState.ENABLED); + PermState.ENABLED, + PermState.ENABLED + ); } public ArrayList getTrackedContainers() { diff --git a/src/main/java/net/crashcraft/crashclaim/pluginsupport/PluginSupportManager.java b/src/main/java/net/crashcraft/crashclaim/pluginsupport/PluginSupportManager.java index e000e17..0414fd0 100644 --- a/src/main/java/net/crashcraft/crashclaim/pluginsupport/PluginSupportManager.java +++ b/src/main/java/net/crashcraft/crashclaim/pluginsupport/PluginSupportManager.java @@ -42,13 +42,13 @@ public void onLoad() { } } - public void onEnable(){ + public void onEnable() { for (PluginSupport pluginSupport : enabledSupport){ pluginSupport.enable(crashClaim); } } - public void onDisable(){ + public void onDisable() { for (PluginSupport pluginSupport : enabledSupport){ pluginSupport.disable(); } @@ -133,7 +133,7 @@ public void onPluginDisable(PluginDisableEvent event) { Plugin plugin = event.getPlugin(); String pluginName = plugin.getName(); - for (PluginSupport support : enabledSupport) { + for (PluginSupport support : new HashSet<>(enabledSupport)) { if (!support.getPluginName().equals(pluginName)) { continue; } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 07aec06..194fd85 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,6 +2,6 @@ name: CrashClaim version: ${version} description: A modern advanced user oriented claiming system author: Chasewhip -softdepend: [Vault, GriefPrevention, WorldGuard, PlaceholderAPI, Multiverse-Core, Hyperverse, LuckPerms, QuickShop-Hikari, DeluxeSellwands ] +softdepend: [Vault, GriefPrevention, WorldGuard, PlaceholderAPI, Multiverse-Core, Hyperverse, LuckPerms ] main: net.crashcraft.crashclaim.CrashClaim api-version: 1.16 \ No newline at end of file