diff --git a/pom.xml b/pom.xml index fc333b9..61ea6c4 100644 --- a/pom.xml +++ b/pom.xml @@ -68,8 +68,8 @@ org.bukkit bukkit - 1.12-pre2-SNAPSHOT - jar + 1.13-R0.1-SNAPSHOT + provided ru.tehkode diff --git a/src/main/java/ru/tehkode/modifyworld/ModifyworldListener.java b/src/main/java/ru/tehkode/modifyworld/ModifyworldListener.java index af4578b..102c36a 100644 --- a/src/main/java/ru/tehkode/modifyworld/ModifyworldListener.java +++ b/src/main/java/ru/tehkode/modifyworld/ModifyworldListener.java @@ -37,8 +37,6 @@ public abstract class ModifyworldListener implements Listener { protected PlayerInformer informer; protected ConfigurationSection config; protected boolean informPlayers = false; - protected boolean useMaterialNames = true; - protected boolean checkMetadata = false; protected boolean checkItemUse = false; protected boolean enableWhitelist = false; @@ -49,8 +47,6 @@ public abstract class ModifyworldListener implements Listener { this.registerEvents(plugin); this.informPlayers = config.getBoolean("informPlayers", informPlayers); - this.useMaterialNames = config.getBoolean("use-material-names", useMaterialNames); - this.checkMetadata = config.getBoolean("check-metadata", checkMetadata); this.checkItemUse = config.getBoolean("item-use-check", checkItemUse); this.enableWhitelist = config.getBoolean("whitelist", enableWhitelist); } @@ -91,19 +87,15 @@ public abstract class ModifyworldListener implements Listener { // Functional programming fuck yeah private String getMaterialPermission(Material type) { - return this.useMaterialNames ? formatEnumString(type.name()) : Integer.toString(type.getId()); - } - - private String getMaterialPermission(Material type, byte metadata) { - return getMaterialPermission(type) + (checkMetadata && metadata > 0 ? ":" + metadata : ""); + return formatEnumString(type.name()); } private String getBlockPermission(Block block) { - return getMaterialPermission(block.getType(), block.getData()); + return getMaterialPermission(block.getType()); } public String getItemPermission(ItemStack item) { - return getMaterialPermission(item.getType(), item.getData().getData()); + return getMaterialPermission(item.getType()); } /* diff --git a/src/main/java/ru/tehkode/modifyworld/PlayerInformer.java b/src/main/java/ru/tehkode/modifyworld/PlayerInformer.java index 05f1e66..2d51569 100644 --- a/src/main/java/ru/tehkode/modifyworld/PlayerInformer.java +++ b/src/main/java/ru/tehkode/modifyworld/PlayerInformer.java @@ -187,7 +187,7 @@ public class PlayerInformer { private String describeMaterial(Material material) { // TODO: implement data id - if (material == Material.INK_SACK) { + if (material == Material.INK_SAC) { return "dye"; } diff --git a/src/main/java/ru/tehkode/modifyworld/bukkit/Modifyworld.java b/src/main/java/ru/tehkode/modifyworld/bukkit/Modifyworld.java index 6b7166f..4133a99 100644 --- a/src/main/java/ru/tehkode/modifyworld/bukkit/Modifyworld.java +++ b/src/main/java/ru/tehkode/modifyworld/bukkit/Modifyworld.java @@ -47,6 +47,7 @@ import java.util.Locale; */ public class Modifyworld extends JavaPlugin { + @SuppressWarnings("unchecked") protected final static Class[] LISTENERS = new Class[]{ PlayerListener.class, EntityListener.class, @@ -100,9 +101,9 @@ public class Modifyworld extends JavaPlugin { } protected void registerListeners() { - for (Class listenerClass : LISTENERS) { + for (Class listenerClass : LISTENERS) { try { - Constructor constructor = listenerClass.getConstructor(Plugin.class, ConfigurationSection.class, PlayerInformer.class); + Constructor constructor = listenerClass.getConstructor(Plugin.class, ConfigurationSection.class, PlayerInformer.class); ModifyworldListener listener = (ModifyworldListener) constructor.newInstance(this, this.getConfig(), this.informer); this.listeners.add(listener); } catch (Throwable e) { diff --git a/src/main/java/ru/tehkode/modifyworld/handlers/BlockListener.java b/src/main/java/ru/tehkode/modifyworld/handlers/BlockListener.java index ffcbe91..28a61a1 100644 --- a/src/main/java/ru/tehkode/modifyworld/handlers/BlockListener.java +++ b/src/main/java/ru/tehkode/modifyworld/handlers/BlockListener.java @@ -25,7 +25,6 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.hanging.HangingBreakByEntityEvent; -import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.plugin.Plugin; import ru.tehkode.modifyworld.ModifyworldListener; diff --git a/src/main/java/ru/tehkode/modifyworld/handlers/PlayerListener.java b/src/main/java/ru/tehkode/modifyworld/handlers/PlayerListener.java index c86845f..38dd8a2 100644 --- a/src/main/java/ru/tehkode/modifyworld/handlers/PlayerListener.java +++ b/src/main/java/ru/tehkode/modifyworld/handlers/PlayerListener.java @@ -22,12 +22,14 @@ import java.util.logging.Logger; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.Event.Result; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; import org.bukkit.event.enchantment.EnchantItemEvent; +import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.inventory.InventoryClickEvent; @@ -36,10 +38,8 @@ import org.bukkit.event.player.*; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.PlayerInventory; -import org.bukkit.material.SpawnEgg; +import org.bukkit.inventory.meta.SpawnEggMeta; import org.bukkit.plugin.Plugin; -import org.bukkit.util.Vector; import ru.tehkode.modifyworld.ModifyworldListener; import ru.tehkode.modifyworld.PlayerInformer; @@ -138,13 +138,16 @@ public class PlayerListener extends ModifyworldListener { } @EventHandler(priority = EventPriority.LOW) - public void onPlayerPickupItem(PlayerPickupItemEvent event) { - // No inform to avoid spam - if (_permissionDenied(event.getPlayer(), "modifyworld.items.pickup", event.getItem().getItemStack())) { - event.setCancelled(true); + public void onEntityPickupItem(EntityPickupItemEvent event) { + // Do not inform the player to avoid spam. + if (event.getEntity() instanceof Player) { + Player player = (Player) event.getEntity(); + if (_permissionDenied(player, "modifyworld.items.pickup", event.getItem().getItemStack())) { + event.setCancelled(true); + } + + this.checkPlayerInventory(player); } - - this.checkPlayerInventory(event.getPlayer()); } @EventHandler(priority = EventPriority.LOW) @@ -228,7 +231,8 @@ public class PlayerListener extends ModifyworldListener { @EventHandler(priority = EventPriority.LOW) public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { if (this.checkItemUse) { - if (permissionDenied(event.getPlayer(), "modifyworld.items.use", event.getPlayer().getItemInHand(), "on.entity", event.getRightClicked())) { + if (permissionDenied(event.getPlayer(), "modifyworld.items.use", + event.getPlayer().getInventory().getItemInMainHand(), "on.entity", event.getRightClicked())) { event.setCancelled(true); } @@ -251,28 +255,37 @@ public class PlayerListener extends ModifyworldListener { Player player = event.getPlayer(); if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK) { //RIGHT_CLICK_AIR is cancelled by default. - switch (player.getItemInHand().getType()) { + Material mat = player.getInventory().getItemInMainHand().getType(); + switch (mat) { case POTION: //Only check splash potions. - if ((player.getItemInHand().getDurability() & 0x4000) != 0x4000) { + if ((player.getInventory().getItemInMainHand().getDurability() & 0x4000) != 0x4000) { break; } case EGG: - case SNOW_BALL: - case EXP_BOTTLE: - if (permissionDenied(player, "modifyworld.items.throw", player.getItemInHand())) { + case SNOWBALL: + case EXPERIENCE_BOTTLE: + if (permissionDenied(player, "modifyworld.items.throw", player.getInventory().getItemInMainHand())) { event.setUseItemInHand(Result.DENY); //Denying a potion works fine, but the client needs to be updated because it already reduced the item. - if (player.getItemInHand().getType() == Material.POTION) { + if (player.getInventory().getItemInMainHand().getType() == Material.POTION) { event.getPlayer().updateInventory(); } } return; // no need to check further - case MONSTER_EGG: // don't add MONSTER_EGGS here - if (permissionDenied(player, "modifyworld.spawn", ((SpawnEgg)player.getItemInHand().getData()).getSpawnedType())) { - event.setUseItemInHand(Result.DENY); - } - return; // no need to check further } + + if (player.getInventory().getItemInMainHand().getItemMeta() instanceof SpawnEggMeta) { + String matStr = mat.toString(); + if(matStr.endsWith("_SPAWN_EGG")) { + matStr = matStr.substring(0, matStr.length() - "_SPAWN_EGG".length()); + } + EntityType entityType = EntityType.valueOf(matStr); + if (permissionDenied(player, "modifyworld.spawn", (entityType == null ? matStr : entityType))) { + event.setUseItemInHand(Result.DENY); + } + return; // no need to check further + } + } if (action != Action.LEFT_CLICK_BLOCK && action != Action.RIGHT_CLICK_BLOCK && action != Action.PHYSICAL) { @@ -280,7 +293,8 @@ public class PlayerListener extends ModifyworldListener { } if (this.checkItemUse && action != Action.PHYSICAL) { - if (permissionDenied(event.getPlayer(), "modifyworld.items.use", player.getItemInHand(), "on.block", event.getClickedBlock())) { + if (permissionDenied(event.getPlayer(), "modifyworld.items.use", + player.getInventory().getItemInMainHand(), "on.block", event.getClickedBlock())) { event.setCancelled(true); } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index b2163f5..14a8249 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -5,3 +5,4 @@ version: "${project.version}" author: t3hk0d3 website: www.bukkit.org description: World modification permission ruleset +api-version: 1.13