diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index 1d1422b9f..1ea4c9f25 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -162,6 +162,8 @@ public class Essentials extends JavaPlugin pm.registerEvent(Type.PLAYER_LOGIN, playerListener, Priority.High, this); pm.registerEvent(Type.PLAYER_TELEPORT, playerListener, Priority.High, this); pm.registerEvent(Type.PLAYER_INTERACT, playerListener, Priority.High, this); + pm.registerEvent(Type.PLAYER_EGG_THROW, playerListener, Priority.High, this); + pm.registerEvent(Type.PLAYER_BUCKET_EMPTY, playerListener, Priority.High, this); blockListener = new EssentialsBlockListener(this); pm.registerEvent(Type.SIGN_CHANGE, blockListener, Priority.Low, this); diff --git a/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java b/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java index 190f0864f..3223848c5 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsBlockListener.java @@ -1,10 +1,13 @@ package com.earth2me.essentials; import java.util.ArrayList; +import java.util.List; +import javax.media.jai.operator.MeanDescriptor; import org.bukkit.*; import org.bukkit.block.*; import org.bukkit.craftbukkit.block.CraftSign; import org.bukkit.event.block.*; +import org.bukkit.inventory.ItemStack; public class EssentialsBlockListener extends BlockListener @@ -163,6 +166,59 @@ public class EssentialsBlockListener extends BlockListener return; } } + if (Essentials.getSettings().isInfinitePlacingEnabled()) { + final User user = User.get(event.getPlayer()); + if (user.isAuthorized("essentials.infinite.placing")) { + final ItemStack is = event.getItemInHand(); + if (is.getType() == Material.AIR) { + is.setType(event.getBlockPlaced().getType()); + } + switch(is.getType()) { + case WOODEN_DOOR: + is.setType(Material.WOOD_DOOR); + break; + case IRON_DOOR_BLOCK: + is.setType(Material.IRON_DOOR); + break; + case SIGN_POST: + case WALL_SIGN: + is.setType(Material.SIGN); + break; + case CROPS: + is.setType(Material.SEEDS); + break; + case CAKE_BLOCK: + is.setType(Material.CAKE); + break; + case BED_BLOCK: + is.setType(Material.BED); + break; + case REDSTONE_WIRE: + is.setType(Material.REDSTONE); + break; + case REDSTONE_TORCH_OFF: + is.setType(Material.REDSTONE_TORCH_ON); + break; + case DIODE_BLOCK_OFF: + case DIODE_BLOCK_ON: + is.setType(Material.DIODE); + break; + } + List whitelist = Essentials.getSettings().getInfiniteWhitelist(); + if (whitelist.isEmpty() || whitelist.contains(is.getTypeId()) || + user.isAuthorized("essentials.infinite.whitelist.override")) { + is.setAmount(1); + Essentials.getStatic().getScheduler().scheduleSyncDelayedTask(Essentials.getStatic(), + new Runnable() { + + public void run() { + user.getInventory().addItem(is); + user.updateInventory(); + } + }); + } + } + } } public boolean hasAdjacentChest(Block block) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 7ae8e24f7..9e1be58c5 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -1,6 +1,7 @@ package com.earth2me.essentials; import java.util.List; +import java.util.logging.Level; import java.util.logging.Logger; import net.minecraft.server.InventoryPlayer; import org.bukkit.*; @@ -394,4 +395,36 @@ public class EssentialsPlayerListener extends PlayerListener user.sendMessage("§cError: " + ex.getMessage()); } } + + @Override + public void onPlayerEggThrow(PlayerEggThrowEvent event) { + if (Essentials.getSettings().isInfiniteEggThrowEnabled()) { + User user = User.get(event.getPlayer()); + if (user.isAuthorized("essentials.infinite.eggthrow")) { + user.getInventory().addItem(new ItemStack(Material.EGG, 1)); + user.updateInventory(); + } + } + } + + @Override + public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { + if (Essentials.getSettings().isInfiniteBucketsEnabled()) { + final User user = User.get(event.getPlayer()); + if (user.isAuthorized("essentials.infinite.buckets")) { + List whitelist = Essentials.getSettings().getInfiniteWhitelist(); + if (whitelist.isEmpty() || whitelist.contains(event.getBucket().getId()) || + user.isAuthorized("essentials.infinite.whitelist.override")) { + event.getItemStack().setType(event.getBucket()); + Essentials.getStatic().getScheduler().scheduleSyncDelayedTask(Essentials.getStatic(), + new Runnable() { + + public void run() { + user.updateInventory(); + } + }); + } + } + } + } } diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index d75530aae..a83116e52 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -433,4 +433,35 @@ public class Settings implements IConf } return epBreakList; } + + boolean isInfinitePlacingEnabled() { + return config.getBoolean("infinite.placing",false); + } + + boolean isInfiniteEggThrowEnabled() { + return config.getBoolean("infinite.eggthrow",false); + } + + boolean isInfiniteBucketsEnabled() { + return config.getBoolean("infinite.buckets",false); + } + + public ArrayList getInfiniteWhitelist() + { + ArrayList infiniteWhitelist = new ArrayList(); + for (String itemName : config.getString("infinite.whitelist", "").split(",")) { + itemName = itemName.trim(); + if (itemName.isEmpty()) { + continue; + } + ItemStack is; + try { + is = ItemDb.get(itemName); + infiniteWhitelist.add(is.getTypeId()); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Unknown item " + itemName + " in infinite whitelist."); + } + } + return infiniteWhitelist; + } } diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 3c57adc14..f27157c0f 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -155,6 +155,20 @@ per-warp-permission: false # Sort output of /list command by groups sort-list-by-groups: false +# Infinite placement of blocks, throwing of eggs, using of buckets +infinite: + # Players need also permission essentials.infinite.placing + placing: false + # permission essentials.infinite.eggthrow + eggthrow: false + # permission essentials.infinite.buckets + buckets: false + # Use this whitelist the restrict the use of infinite placing and buckets + # Permission essentials.infinite.whitelist.override let players ignore this list + whitelist: + # example: (You can use ids or names from items.csv) + # whitelist: cobblestone, dirt, waterbucket + ############################################################ # +------------------------------------------------------+ # # | EssentialsHome | #