diff --git a/Changelog.txt b/Changelog.txt index a639818e9..67be7a545 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -47,6 +47,7 @@ Version 2.1.0 ! (Skills) Sword's Rupture now has a max chance to proc of 33% instead of 70% ! (Skills) Sword's Rupture now deals 50% more damage at above Rank 3 and can last much longer! The base damage for Bleed has been increased as well (update your advanced.yml admins) ! (Skills) Sword's Rupture no longer triggers invincibility frames when damaging your opponent + = (Skills) Furnaces now give XP to the last person to modify their inventory instead of the first person to open them + (Skills) Ability Lengths now have a default skill cap at which they stop increasing in length, configurable in advanced.yml (endurance perks extend this limit) + (Skills) Added a new subskill to some skills 'Understanding The Art' this adds nothing new, but tracks benefits that increase together that seemed unrelated, which was previously a bit obfuscated. + (Skills) Tool alerts now are sent to the Action Bar diff --git a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java index 30ad45d88..3ea0fdf98 100644 --- a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java @@ -34,10 +34,7 @@ import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Tag; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.BlockState; -import org.bukkit.block.BrewingStand; +import org.bukkit.block.*; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -407,6 +404,22 @@ public class BlockListener implements Listener { player.sendMessage("[mcMMO DEBUG] This block is natural"); UserManager.getPlayer(player).getExcavationManager().printExcavationDebug(player, blockState); } + + if(blockState instanceof Furnace) + { + Furnace furnace = (Furnace) blockState; + if(furnace.hasMetadata(mcMMO.furnaceMetadataKey)) + { + player.sendMessage("[mcMMO DEBUG] This furnace has a registered owner"); + Player furnacePlayer = getPlayerFromFurnace(furnace.getBlock()); + if(furnacePlayer != null) + { + player.sendMessage("[mcMMO DEBUG] This furnace is owned by player "+furnacePlayer.getName()); + } + } + else + player.sendMessage("[mcMMO DEBUG] This furnace does not have a registered owner"); + } } /* WORLD BLACKLIST CHECK */ @@ -475,6 +488,16 @@ public class BlockListener implements Listener { } } + private Player getPlayerFromFurnace(Block furnaceBlock) { + List metadata = furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey); + + if (metadata.isEmpty()) { + return null; + } + + return plugin.getServer().getPlayerExact(metadata.get(0).asString()); + } + /** * Handle BlockDamage events where the event is modified. * diff --git a/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java b/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java index 6bf004a2d..df1d37f3a 100644 --- a/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java @@ -39,7 +39,7 @@ public class InventoryListener implements Listener { this.plugin = plugin; } - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onInventoryOpen(InventoryOpenEvent event) { /* WORLD BLACKLIST CHECK */ if(WorldBlacklist.isWorldBlacklisted(event.getPlayer().getWorld())) @@ -47,7 +47,7 @@ public class InventoryListener implements Listener { Block furnaceBlock = processInventoryOpenOrCloseEvent(event.getInventory()); - if (furnaceBlock == null || furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey)) { + if (furnaceBlock == null) { return; } @@ -57,7 +57,8 @@ public class InventoryListener implements Listener { return; } - furnaceBlock.setMetadata(mcMMO.furnaceMetadataKey, UserManager.getPlayer((Player) player).getPlayerMetadata()); + if(!furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey) && furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey).size() == 0) + furnaceBlock.setMetadata(mcMMO.furnaceMetadataKey, UserManager.getPlayer((Player) player).getPlayerMetadata()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @@ -177,6 +178,22 @@ public class InventoryListener implements Listener { Inventory inventory = event.getInventory(); + Block furnaceBlock = processInventoryOpenOrCloseEvent(event.getInventory()); + + if (furnaceBlock == null) { + return; + } + + if(event.getWhoClicked() instanceof Player) + { + Player player = ((Player) event.getWhoClicked()).getPlayer(); + + if(furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey).size() > 0) + furnaceBlock.removeMetadata(mcMMO.furnaceMetadataKey, mcMMO.p); + + furnaceBlock.setMetadata(mcMMO.furnaceMetadataKey, UserManager.getPlayer(player).getPlayerMetadata()); + } + if (!(inventory instanceof BrewerInventory)) { return; } @@ -434,7 +451,7 @@ public class InventoryListener implements Listener { Furnace furnace = (Furnace) inventory.getHolder(); - if (furnace == null || furnace.getBurnTime() != 0) { + if (furnace == null) { return null; }