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 extends ModifyworldListener>[] 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 extends ModifyworldListener> 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