public class EnchantmentMiningHelmet extends CustomEnchantment implements Listener
{
static final String[] MINING_ITEMS = new String[] {"iron_helmet", "gold_helmet", "chain_helmet", "diamond_helmet", "book"};
public static HashMap<Player, Boolean> pluginEnabled = new HashMap<Player, Boolean>();
public static HashMap<Player, Location> previousLoc = new HashMap<Player, Location>();
public static HashMap<Player, Integer> previousBlock = new HashMap<Player, Integer>();
public static HashMap<Player, Byte> previousBlockData = new HashMap<Player, Byte>();
public static HashMap<Player, Sign> signData = new HashMap<Player, Sign>();
public EnchantmentMiningHelmet(JavaPlugin plugin)
{
super("Mining", MINING_ITEMS);
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent evt){
EnchantmentMiningHelmet.pluginEnabled.put(evt.getPlayer(), true);
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent evt){
Player p = evt.getPlayer();
Location l = p.getLocation();
l.setY(l.getY() - 1);
if(l.getWorld().getBlockAt(l).getType() == Material.GLOWSTONE){
if(EnchantmentMiningHelmet.pluginEnabled.get(p)){
l.getWorld().getBlockAt(l).setTypeId(previousBlock.get(p));
}
}
}
@Override
public void applyEquipEffect(Player player, int enchantLevel)
{
EnchantmentMiningHelmet.pluginEnabled.put(player, true);
}
@Override
public void applyUnequipEffect(Player player, int enchantLevel)
{
if(EnchantmentMiningHelmet.pluginEnabled.containsKey(player))
{
EnchantmentMiningHelmet.pluginEnabled.remove(player);
}
EnchantmentMiningHelmet.pluginEnabled.put(player, false);
}
// Calculates a level of enchantment based on the exp level used
// Return less than 1 for no enchantment
@Override
public int getEnchantmentLevel(int expLevel) {
if(expLevel >= 30)
return 1;
return 0;
}
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled=true)
public void onPlayerMove(PlayerMoveEvent evt) {
Location loc = evt.getPlayer().getLocation();
World w = loc.getWorld();
Player p = evt.getPlayer();
if (p.hasPermission("RWtl.allow"))
{
loc.setY(loc.getY() - 1);
Material _bTypes[] = {Material.AIR, Material.FENCE, Material.NETHER_FENCE, Material.BED, Material.LEVER,
Material.REDSTONE_WIRE, Material.TORCH, Material.REDSTONE_TORCH_ON, Material.REDSTONE_TORCH_OFF,
Material.LADDER, Material.VINE};
Integer _bTypeIDs[] = {37, 38, 39, 40, 32, 30, 31, 66, 27, 28, 107, 70, 72, 69, 96, 116, 117, 115};
HashSet<Material> blockTypes = new HashSet<Material>(Arrays.asList(_bTypes));
HashSet<Integer> blockTypeIDs = new HashSet<Integer>(Arrays.asList(_bTypeIDs));
//Added this bit in to make the lantern still work while jumping or falling.
while ((blockTypes.contains(w.getBlockAt(loc).getType())) || (blockTypeIDs.contains(w.getBlockAt(loc).getTypeId())))
{
loc.setY(loc.getY() - 1);
}
try
{
if(previousLoc.containsKey(p))
{
if(!signData.containsKey(p))
{
p.sendBlockChange(previousLoc.get(p), previousBlock.get(p), (byte)previousBlockData.get(p));
}
else
{
Sign oldSign = signData.get(p);
Sign newSign = (Sign) w.getBlockAt(previousLoc.get(p)).getState();
p.sendBlockChange(previousLoc.get(p), previousBlock.get(p), (byte)previousBlockData.get(p));
for(int i = 0; i <= 3; i++)
{
newSign.setLine(i, oldSign.getLine(i));newSign.update();
}
signData.remove(p);
}
}
}
catch (ClassCastException e)
{
}
if(w.getBlockAt(loc).getType() != Material.AIR && w.getBlockAt(loc).getType() != Material.WATER)
{
if(w.getBlockAt(loc).getTypeId() == 323 || w.getBlockAt(loc).getTypeId() == 68 || w.getBlockAt(loc).getType() == Material.SIGN || w.getBlockAt(loc).getType() == Material.SIGN_POST){
signData.put(p, (Sign)w.getBlockAt(loc).getState());
}
if(w.getBlockAt(loc).getTypeId() == 93 || w.getBlockAt(loc).getTypeId() == 94 || w.getBlockAt(loc).getTypeId() == 93 || w.getBlockAt(loc).getTypeId() == 94){
signData.put(p, (Sign)w.getBlockAt(loc).getState());
}
if(w.getBlockAt(loc).getTypeId() == 54 || w.getBlockAt(loc).getTypeId() == 78 || w.getBlockAt(loc).getTypeId() == 54 || w.getBlockAt(loc).getTypeId() == 78){
signData.put(p, (Sign)w.getBlockAt(loc).getState());
}
if(w.getBlockAt(loc).getTypeId() == 44 || w.getBlockAt(loc).getTypeId() == 111 || w.getBlockAt(loc).getTypeId() == 44 || w.getBlockAt(loc).getTypeId() == 111){
signData.put(p, (Sign)w.getBlockAt(loc).getState());
}
try
{
if (p.getInventory().getItemInHand().getTypeId() == Material.TORCH.getId())
{
previousBlock.put(p, w.getBlockAt(loc).getTypeId());
previousBlockData.put(p, w.getBlockAt(loc).getData());
previousLoc.put(p, loc);
p.sendBlockChange(loc, Material.GLOWSTONE, (byte)0);
}
}
catch (NullPointerException e)
{
}
}
}
}
}
Comments