mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-22 21:26:46 +01:00
Fixed bug with Smelting not properly tracking furnaces. Fixes #806
This commit is contained in:
parent
e31b7d5c48
commit
d9bd0ace9a
@ -10,6 +10,7 @@ Key:
|
|||||||
Version 1.4.03-dev
|
Version 1.4.03-dev
|
||||||
+ Added option to advanced.yml to determine the # of enchant levels used when buffing Super Breaker & Giga Drill Breaker
|
+ Added option to advanced.yml to determine the # of enchant levels used when buffing Super Breaker & Giga Drill Breaker
|
||||||
+ Improved stats display for child skills
|
+ Improved stats display for child skills
|
||||||
|
= Fixed bug with Smelting not properly tracking furnaces
|
||||||
= Fixed bug with Blast Mining not dropping blocks correctly
|
= Fixed bug with Blast Mining not dropping blocks correctly
|
||||||
= Fixed bug with custom blocks not working
|
= Fixed bug with custom blocks not working
|
||||||
= Fixed bug where Blast Mining was awarding too much XP
|
= Fixed bug where Blast Mining was awarding too much XP
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.gmail.nossr50.listeners;
|
package com.gmail.nossr50.listeners;
|
||||||
|
|
||||||
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.block.Furnace;
|
import org.bukkit.block.Furnace;
|
||||||
import org.bukkit.entity.HumanEntity;
|
import org.bukkit.entity.HumanEntity;
|
||||||
@ -16,6 +17,7 @@ import org.bukkit.event.inventory.InventoryOpenEvent;
|
|||||||
import org.bukkit.inventory.FurnaceInventory;
|
import org.bukkit.inventory.FurnaceInventory;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
@ -49,11 +51,12 @@ public class InventoryListener implements Listener {
|
|||||||
if (furnace == null) {
|
if (furnace == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (furnace.getBurnTime() == 0) {
|
||||||
|
Block furnaceBlock = furnace.getBlock();
|
||||||
|
|
||||||
BlockState furnaceBlock = furnace.getBlock().getState();
|
if (!furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey)) {
|
||||||
|
furnaceBlock.setMetadata(mcMMO.furnaceMetadataKey, new FixedMetadataValue(plugin, player.getName()));
|
||||||
if (furnace.getBurnTime() == 0 && !plugin.furnaceIsTracked(furnaceBlock)) {
|
}
|
||||||
plugin.addToOpenFurnaceTracker(furnaceBlock, player.getName());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -75,23 +78,27 @@ public class InventoryListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockState furnaceBlock = furnace.getBlock().getState();
|
if (furnace.getBurnTime() == 0) {
|
||||||
|
Block furnaceBlock = furnace.getBlock();
|
||||||
|
|
||||||
if (furnace.getBurnTime() == 0 && plugin.furnaceIsTracked(furnaceBlock)) {
|
if (furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey)) {
|
||||||
plugin.removeFromFurnaceTracker(furnaceBlock);
|
furnaceBlock.removeMetadata(mcMMO.furnaceMetadataKey, plugin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onFurnaceBurnEvent(FurnaceBurnEvent event) {
|
public void onFurnaceBurnEvent(FurnaceBurnEvent event) {
|
||||||
BlockState furnaceBlock = event.getBlock().getState();
|
Block furnaceBlock = event.getBlock();
|
||||||
|
BlockState furnaceState = furnaceBlock.getState();
|
||||||
|
|
||||||
if (furnaceBlock instanceof Furnace) {
|
if (furnaceState instanceof Furnace) {
|
||||||
ItemStack smelting = ((Furnace) furnaceBlock).getInventory().getSmelting();
|
ItemStack smelting = ((Furnace) furnaceBlock).getInventory().getSmelting();
|
||||||
|
|
||||||
if (plugin.furnaceIsTracked(furnaceBlock) && smelting != null && ItemUtils.isSmeltable(smelting)) {
|
if (furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey) && smelting != null && ItemUtils.isSmeltable(smelting)) {
|
||||||
Player player = plugin.getFurnacePlayer(furnaceBlock);
|
// We can make this assumption because we (should) be the only ones using this exact metadata
|
||||||
|
Player player = plugin.getServer().getPlayer(furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey).get(0).asString());
|
||||||
|
|
||||||
if (Misc.isNPCEntity(player) || !Permissions.fuelEfficiency(player)) {
|
if (Misc.isNPCEntity(player) || !Permissions.fuelEfficiency(player)) {
|
||||||
return;
|
return;
|
||||||
@ -104,13 +111,15 @@ public class InventoryListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onFurnaceSmeltEvent(FurnaceSmeltEvent event) {
|
public void onFurnaceSmeltEvent(FurnaceSmeltEvent event) {
|
||||||
BlockState furnaceBlock = event.getBlock().getState();
|
Block furnaceBlock = event.getBlock();
|
||||||
|
BlockState furnaceState = furnaceBlock.getState();
|
||||||
|
|
||||||
if (furnaceBlock instanceof Furnace) {
|
if (furnaceState instanceof Furnace) {
|
||||||
ItemStack smelting = ((Furnace) furnaceBlock).getInventory().getSmelting();
|
ItemStack smelting = ((Furnace) furnaceBlock).getInventory().getSmelting();
|
||||||
|
|
||||||
if (plugin.furnaceIsTracked(furnaceBlock) && smelting != null && ItemUtils.isSmeltable(smelting)) {
|
if (furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey) && smelting != null && ItemUtils.isSmeltable(smelting)) {
|
||||||
Player player = plugin.getFurnacePlayer(furnaceBlock);
|
// We can make this assumption because we (should) be the only ones using this exact metadata
|
||||||
|
Player player = plugin.getServer().getPlayer(furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey).get(0).asString());
|
||||||
|
|
||||||
if (Misc.isNPCEntity(player) || !Permissions.skillEnabled(player, SkillType.SMELTING)) {
|
if (Misc.isNPCEntity(player) || !Permissions.skillEnabled(player, SkillType.SMELTING)) {
|
||||||
return;
|
return;
|
||||||
@ -128,8 +137,9 @@ public class InventoryListener implements Listener {
|
|||||||
if (furnaceBlock instanceof Furnace) {
|
if (furnaceBlock instanceof Furnace) {
|
||||||
ItemStack result = ((Furnace) furnaceBlock).getInventory().getResult();
|
ItemStack result = ((Furnace) furnaceBlock).getInventory().getResult();
|
||||||
|
|
||||||
if (plugin.furnaceIsTracked(furnaceBlock) && result != null && ItemUtils.isSmelted(result)) {
|
if (furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey) && result != null && ItemUtils.isSmelted(result)) {
|
||||||
Player player = event.getPlayer();
|
// We can make this assumption because we (should) be the only ones using this exact metadata
|
||||||
|
Player player = plugin.getServer().getPlayer(furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey).get(0).asString());
|
||||||
|
|
||||||
SmeltingManager smeltingManager = UserManager.getPlayer(player).getSmeltingManager();
|
SmeltingManager smeltingManager = UserManager.getPlayer(player).getSmeltingManager();
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@ import net.shatteredlands.shatt.backup.ZipLibrary;
|
|||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.block.BlockState;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import org.bukkit.metadata.FixedMetadataValue;
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
@ -66,7 +65,6 @@ public class mcMMO extends JavaPlugin {
|
|||||||
private final WorldListener worldListener = new WorldListener();
|
private final WorldListener worldListener = new WorldListener();
|
||||||
|
|
||||||
private HashMap<Integer, String> tntTracker = new HashMap<Integer, String>();
|
private HashMap<Integer, String> tntTracker = new HashMap<Integer, String>();
|
||||||
private HashMap<BlockState, String> furnaceTracker = new HashMap<BlockState, String>();
|
|
||||||
|
|
||||||
public static mcMMO p;
|
public static mcMMO p;
|
||||||
|
|
||||||
@ -95,6 +93,7 @@ public class mcMMO extends JavaPlugin {
|
|||||||
public static FixedMetadataValue metadataValue;
|
public static FixedMetadataValue metadataValue;
|
||||||
public final static String entityMetadataKey = "mcMMO: Spawned Entity";
|
public final static String entityMetadataKey = "mcMMO: Spawned Entity";
|
||||||
public final static String blockMetadataKey = "mcMMO: Piston Tracking";
|
public final static String blockMetadataKey = "mcMMO: Piston Tracking";
|
||||||
|
public final static String furnaceMetadataKey = "mcMMO: Tracked Furnace";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Things to be run when the plugin is enabled.
|
* Things to be run when the plugin is enabled.
|
||||||
@ -273,22 +272,6 @@ public class mcMMO extends JavaPlugin {
|
|||||||
tntTracker.remove(tntID);
|
tntTracker.remove(tntID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addToOpenFurnaceTracker(BlockState furnace, String playerName) {
|
|
||||||
furnaceTracker.put(furnace, playerName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean furnaceIsTracked(BlockState furnace) {
|
|
||||||
return furnaceTracker.containsKey(furnace);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeFromFurnaceTracker(BlockState furnace) {
|
|
||||||
furnaceTracker.remove(furnace);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Player getFurnacePlayer(BlockState furnace) {
|
|
||||||
return getServer().getPlayer(furnaceTracker.get(furnace));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getMainDirectory() {
|
public static String getMainDirectory() {
|
||||||
return mainDirectory;
|
return mainDirectory;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user