diff --git a/src/main/java/cc/carm/plugin/commanditem/item/ItemSettings.java b/src/main/java/cc/carm/plugin/commanditem/item/ItemSettings.java index 9972177..9580f73 100644 --- a/src/main/java/cc/carm/plugin/commanditem/item/ItemSettings.java +++ b/src/main/java/cc/carm/plugin/commanditem/item/ItemSettings.java @@ -1,6 +1,7 @@ package cc.carm.plugin.commanditem.item; import cc.carm.plugin.commanditem.CommandItemAPI; +import cc.carm.plugin.commanditem.Main; import cc.carm.plugin.commanditem.manager.ConfigManager; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSortedMap; @@ -70,6 +71,15 @@ public class ItemSettings { return ImmutableSortedMap.copyOf(permissions); } + + public @NotNull ItemRestrictions getRestrictions() { + return restrictions; + } + + public ItemRestrictions.CheckResult checkRestrictions() { + return getRestrictions().check(); + } + @Unmodifiable public @NotNull Map getActions() { return ImmutableMap.copyOf(actions); @@ -81,6 +91,7 @@ public class ItemSettings { public @Nullable ItemActionGroup getPlayerActions(@NotNull Player player) { String actionGroup = getPermissions().entrySet().stream() + .peek(entry -> Main.debugging("Checking permission: " + entry.getValue())) .filter(entry -> player.hasPermission(entry.getValue())) .map(Map.Entry::getKey).findFirst().orElse(null); return getActions().getOrDefault(actionGroup, getDefaultActions()); diff --git a/src/main/java/cc/carm/plugin/commanditem/listener/ItemListener.java b/src/main/java/cc/carm/plugin/commanditem/listener/ItemListener.java index 622cf27..068a5af 100644 --- a/src/main/java/cc/carm/plugin/commanditem/listener/ItemListener.java +++ b/src/main/java/cc/carm/plugin/commanditem/listener/ItemListener.java @@ -3,11 +3,14 @@ package cc.carm.plugin.commanditem.listener; import cc.carm.plugin.commanditem.CommandItemAPI; import cc.carm.plugin.commanditem.item.CommandItem; import cc.carm.plugin.commanditem.item.ItemActionGroup; +import cc.carm.plugin.commanditem.item.ItemRestrictions; import org.bukkit.entity.EntityType; +import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.player.PlayerInteractEvent; @@ -32,6 +35,12 @@ public class ItemListener implements Listener { if (commandItem == null) return; Player player = event.getPlayer(); + + if (commandItem.getConfiguration().checkRestrictions() != ItemRestrictions.CheckResult.AVAILABLE) { + // TODO 给玩家发消息告诉他还不能用 + return; + } + ItemActionGroup actions = commandItem.getConfiguration().getPlayerActions(player); if (actions == null) return; @@ -68,5 +77,20 @@ public class ItemListener implements Listener { } } + /** + * 阻止物品被烧掉 + * + * @param event 伤害事件 + */ + @EventHandler + public void onEntityDamage(EntityDamageEvent event) { + if (event.getEntity().getType() != EntityType.DROPPED_ITEM) return; + Item droppedItem = ((org.bukkit.entity.Item) event.getEntity()); + ItemStack item = droppedItem.getItemStack(); + if (CommandItemAPI.getItemsManager().isCommandItem(item)) { + event.setCancelled(true); + } + } + }