From 89fa26d0ebbf538bd64b30faa75c63130bc2ac29 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Sun, 17 Jul 2022 14:00:03 -0700 Subject: [PATCH] Potential fix for #3005 --- .../nossr50/listeners/InventoryListener.java | 34 ++++---- .../skills/smelting/SmeltingManager.java | 79 ++----------------- 2 files changed, 25 insertions(+), 88 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java b/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java index a47acbfbf..b9c93abbf 100644 --- a/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java @@ -66,30 +66,32 @@ public class InventoryListener implements Listener { return; } - //Profile doesn't exist - if(UserManager.getOfflinePlayer(offlinePlayer) == null) { - return; - } + McMMOPlayer mmoPlayer = UserManager.getPlayer(player); + if(mmoPlayer != null) { + boolean debugMode = player.isOnline() && mmoPlayer.isDebugMode(); - boolean debugMode = player.isOnline() && UserManager.getPlayer(player).isDebugMode(); + if(debugMode) { + player.sendMessage("FURNACE FUEL EFFICIENCY DEBUG REPORT"); + player.sendMessage("Furnace - "+furnace.hashCode()); + player.sendMessage("Furnace Type: "+furnaceBlock.getType().toString()); + player.sendMessage("Burn Length before Fuel Efficiency is applied - "+event.getBurnTime()); + } - if(debugMode) { - player.sendMessage("FURNACE FUEL EFFICIENCY DEBUG REPORT"); - player.sendMessage("Furnace - "+furnace.hashCode()); - player.sendMessage("Furnace Type: "+furnaceBlock.getType().toString()); - player.sendMessage("Burn Length before Fuel Efficiency is applied - "+event.getBurnTime()); - } + event.setBurnTime(mmoPlayer.getSmeltingManager().fuelEfficiency(event.getBurnTime())); - event.setBurnTime(UserManager.getPlayer(player).getSmeltingManager().fuelEfficiency(event.getBurnTime())); + if(debugMode) { + player.sendMessage("New Furnace Burn Length (after applying fuel efficiency) "+event.getBurnTime()); + player.sendMessage(""); + } - if(debugMode) { - player.sendMessage("New Furnace Burn Length (after applying fuel efficiency) "+event.getBurnTime()); - player.sendMessage(""); + // Potential fix for #3005 + if (event.getBurnTime() > 0 && !event.isBurning()) { + event.setBurning(true); + } } } } - } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) diff --git a/src/main/java/com/gmail/nossr50/skills/smelting/SmeltingManager.java b/src/main/java/com/gmail/nossr50/skills/smelting/SmeltingManager.java index 90ece98cf..83248c166 100644 --- a/src/main/java/com/gmail/nossr50/skills/smelting/SmeltingManager.java +++ b/src/main/java/com/gmail/nossr50/skills/smelting/SmeltingManager.java @@ -23,93 +23,28 @@ public class SmeltingManager extends SkillManager { super(mcMMOPlayer, PrimarySkillType.SMELTING); } - /*public boolean canUseFluxMining(BlockState blockState) { - return getSkillLevel() >= Smelting.fluxMiningUnlockLevel - && BlockUtils.affectedByFluxMining(blockState) - && Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.SMELTING_FLUX_MINING) - && !mcMMO.getPlaceStore().isTrue(blockState); - }*/ - public boolean isSecondSmeltSuccessful() { return Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.SMELTING_SECOND_SMELT) && RandomChanceUtil.isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.SMELTING_SECOND_SMELT, getPlayer()); } - /* - Process the Flux Mining ability. - - @param blockState The {@link BlockState} to check ability activation for - * @return true if the ability was successful, false otherwise - */ - /*public boolean processFluxMining(BlockState blockState) { - Player player = getPlayer(); - - if (RandomChanceUtil.checkRandomChanceExecutionSuccess(getPlayer(), SubSkillType.SMELTING_FLUX_MINING, true)) { - ItemStack item = null; - - switch (blockState.getType()) { - case IRON_ORE: - item = new ItemStack(Material.IRON_INGOT); - break; - - case GOLD_ORE: - item = new ItemStack(Material.GOLD_INGOT); - break; - - default: - break; - } - - if (item == null) { - return false; - } - - if (!EventUtils.simulateBlockBreak(blockState.getBlock(), player, true)) { - return false; - } - - // We need to distribute Mining XP here, because the block break event gets cancelled - applyXpGain(Mining.getBlockXp(blockState), XPGainReason.PVE, XPGainSource.PASSIVE); - - SkillUtils.handleDurabilityChange(getPlayer().getInventory().getItemInMainHand(), Config.getInstance().getAbilityToolDamage()); - - Misc.dropItems(Misc.getBlockCenter(blockState), item, isSecondSmeltSuccessful() ? 2 : 1); - - blockState.setType(Material.AIR); - - if (Config.getInstance().getFluxPickaxeSoundEnabled()) { - SoundManager.sendSound(player, blockState.getLocation(), SoundType.FIZZ); - } - - ParticleEffectUtils.playFluxEffect(blockState.getLocation()); - return true; - } - - return false; - }*/ - /** * Increases burn time for furnace fuel. * * @param burnTime The initial burn time from the {@link FurnaceBurnEvent} */ public int fuelEfficiency(int burnTime) { - return burnTime * getFuelEfficiencyMultiplier(); + return Math.max(1, burnTime * getFuelEfficiencyMultiplier()); } public int getFuelEfficiencyMultiplier() { - switch(RankUtils.getRank(getPlayer(), SubSkillType.SMELTING_FUEL_EFFICIENCY)) - { - case 1: - return 2; - case 2: - return 3; - case 3: - return 4; - default: - return 1; - } + return switch (RankUtils.getRank(getPlayer(), SubSkillType.SMELTING_FUEL_EFFICIENCY)) { + case 1 -> 2; + case 2 -> 3; + case 3 -> 4; + default -> 1; + }; } public void smeltProcessing(@NotNull FurnaceSmeltEvent furnaceSmeltEvent, @NotNull Furnace furnace) {