Skip to content

Commit

Permalink
🐛 Fix destroy speed on tools not calculating additional bonuses
Browse files Browse the repository at this point in the history
  • Loading branch information
Autovw committed Dec 20, 2022
1 parent 905477c commit 7ca9b3f
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 37 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.autovw.advancednetherite.common;

import com.autovw.advancednetherite.config.Config;
import com.autovw.advancednetherite.core.util.ModToolTiers;
import net.minecraft.world.item.DiggerItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Tier;
import net.minecraft.world.level.block.state.BlockState;

/**
* @author Autovw
*/
public class AdvancedUtil {
/**
* Helper method for applying the appropriate block destroy speed to tools
* @param originalSpeed The original destroy speed
* @param stack Tool stack
* @param state State of block being broken
* @return New destroy speed
*/
public static float getDestroySpeed(float originalSpeed, ItemStack stack, BlockState state) {
float newSpeed = originalSpeed;

if (stack.getItem() instanceof DiggerItem diggerItem) {
Tier tier = diggerItem.getTier();

if (diggerItem.isCorrectToolForDrops(stack, state)) {
if (tier == ModToolTiers.NETHERITE_IRON)
newSpeed *= Config.ToolProperties.ironBreakingSpeedMultiplier.get();
if (tier == ModToolTiers.NETHERITE_GOLD)
newSpeed *= Config.ToolProperties.goldBreakingSpeedMultiplier.get();
if (tier == ModToolTiers.NETHERITE_EMERALD)
newSpeed *= Config.ToolProperties.emeraldBreakingSpeedMultiplier.get();
if (tier == ModToolTiers.NETHERITE_DIAMOND)
newSpeed *= Config.ToolProperties.diamondBreakingSpeedMultiplier.get();
}
}

return newSpeed;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,14 @@
import com.autovw.advancednetherite.api.annotation.Internal;
import com.autovw.advancednetherite.api.impl.IAdvancedHooks;
import com.autovw.advancednetherite.common.item.AdvancedArmorItem;
import com.autovw.advancednetherite.config.Config;
import com.autovw.advancednetherite.core.util.ModToolTiers;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.monster.EnderMan;
import net.minecraft.world.entity.monster.Phantom;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.DiggerItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Tier;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.event.entity.living.EnderManAngerEvent;
import net.minecraftforge.event.entity.living.LivingChangeTargetEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;

Expand Down Expand Up @@ -69,34 +62,4 @@ public static void onLivingChangeTargetEvent(final LivingChangeTargetEvent event
}
}
}

@SuppressWarnings("unused")
@SubscribeEvent
public static void onPlayerEventBreakSpeed(final PlayerEvent.BreakSpeed event) {
BlockState state = event.getState(); // Gets the block state affected
Player player = event.getEntity(); // Gets the player
ItemStack stack = player.getItemInHand(InteractionHand.MAIN_HAND); // The tool being used

if (!(stack.getItem() instanceof DiggerItem diggerItem))
return;

if (state == null)
return;

if (diggerItem.isCorrectToolForDrops(stack, state)) {
Tier tier = diggerItem.getTier();
float speed = event.getOriginalSpeed();

if (tier == ModToolTiers.NETHERITE_IRON)
speed *= Config.ToolProperties.ironBreakingSpeedMultiplier.get();
if (tier == ModToolTiers.NETHERITE_GOLD)
speed *= Config.ToolProperties.goldBreakingSpeedMultiplier.get();
if (tier == ModToolTiers.NETHERITE_EMERALD)
speed *= Config.ToolProperties.emeraldBreakingSpeedMultiplier.get();
if (tier == ModToolTiers.NETHERITE_DIAMOND)
speed *= Config.ToolProperties.diamondBreakingSpeedMultiplier.get();

event.setNewSpeed(speed); // set the new tool speed
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.autovw.advancednetherite.common.item;

import com.autovw.advancednetherite.api.annotation.Internal;
import com.autovw.advancednetherite.common.AdvancedUtil;
import com.autovw.advancednetherite.config.Config;
import com.autovw.advancednetherite.core.util.ModToolTiers;
import net.minecraft.ChatFormatting;
Expand Down Expand Up @@ -97,4 +98,10 @@ public int getBarColor(ItemStack stack) {

return customDurabilityBarColor(stack) != null && Config.Client.matchingDurabilityBars.get() ? Objects.requireNonNull(customDurabilityBarColor(stack).getColor()) : super.getBarColor(stack);
}

@Override
public float getDestroySpeed(ItemStack stack, BlockState state) {
float originalSpeed = super.getDestroySpeed(stack, state);
return AdvancedUtil.getDestroySpeed(originalSpeed, stack, state);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.autovw.advancednetherite.AdvancedNetherite;
import com.autovw.advancednetherite.api.annotation.Internal;
import com.autovw.advancednetherite.common.AdvancedUtil;
import com.autovw.advancednetherite.config.Config;
import com.autovw.advancednetherite.core.util.ModTooltips;
import com.autovw.advancednetherite.core.util.ModToolTiers;
Expand All @@ -13,6 +14,7 @@
import net.minecraft.world.item.Tier;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.registries.ForgeRegistries;

import javax.annotation.Nullable;
Expand Down Expand Up @@ -108,4 +110,10 @@ public int getBarColor(ItemStack stack) {

return customDurabilityBarColor(stack) != null && Config.Client.matchingDurabilityBars.get() ? Objects.requireNonNull(customDurabilityBarColor(stack).getColor()) : super.getBarColor(stack);
}

@Override
public float getDestroySpeed(ItemStack stack, BlockState state) {
float originalSpeed = super.getDestroySpeed(stack, state);
return AdvancedUtil.getDestroySpeed(originalSpeed, stack, state);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.autovw.advancednetherite.AdvancedNetherite;
import com.autovw.advancednetherite.api.annotation.Internal;
import com.autovw.advancednetherite.common.AdvancedUtil;
import com.autovw.advancednetherite.config.Config;
import com.autovw.advancednetherite.core.util.ModTooltips;
import com.autovw.advancednetherite.core.util.ModToolTiers;
Expand All @@ -13,6 +14,7 @@
import net.minecraft.world.item.Tier;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.registries.ForgeRegistries;

import javax.annotation.Nullable;
Expand Down Expand Up @@ -111,4 +113,10 @@ public int getBarColor(ItemStack stack) {

return customDurabilityBarColor(stack) != null && Config.Client.matchingDurabilityBars.get() ? Objects.requireNonNull(customDurabilityBarColor(stack).getColor()) : super.getBarColor(stack);
}

@Override
public float getDestroySpeed(ItemStack stack, BlockState state) {
float originalSpeed = super.getDestroySpeed(stack, state);
return AdvancedUtil.getDestroySpeed(originalSpeed, stack, state);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.autovw.advancednetherite.common.item;

import com.autovw.advancednetherite.api.annotation.Internal;
import com.autovw.advancednetherite.common.AdvancedUtil;
import com.autovw.advancednetherite.config.Config;
import com.autovw.advancednetherite.core.util.ModToolTiers;
import net.minecraft.ChatFormatting;
Expand Down Expand Up @@ -97,4 +98,10 @@ public int getBarColor(ItemStack stack) {

return customDurabilityBarColor(stack) != null && Config.Client.matchingDurabilityBars.get() ? Objects.requireNonNull(customDurabilityBarColor(stack).getColor()) : super.getBarColor(stack);
}

@Override
public float getDestroySpeed(ItemStack stack, BlockState state) {
float originalSpeed = super.getDestroySpeed(stack, state);
return AdvancedUtil.getDestroySpeed(originalSpeed, stack, state);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.autovw.advancednetherite.AdvancedNetherite;
import com.autovw.advancednetherite.api.annotation.Internal;
import com.autovw.advancednetherite.common.AdvancedUtil;
import com.autovw.advancednetherite.config.Config;
import com.autovw.advancednetherite.core.util.ModTooltips;
import com.autovw.advancednetherite.core.util.ModToolTiers;
Expand All @@ -13,6 +14,7 @@
import net.minecraft.world.item.Tier;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.registries.ForgeRegistries;

import javax.annotation.Nullable;
Expand Down Expand Up @@ -118,4 +120,10 @@ public int getBarColor(ItemStack stack) {

return customDurabilityBarColor(stack) != null && Config.Client.matchingDurabilityBars.get() ? Objects.requireNonNull(customDurabilityBarColor(stack).getColor()) : super.getBarColor(stack);
}

@Override
public float getDestroySpeed(ItemStack stack, BlockState state) {
float originalSpeed = super.getDestroySpeed(stack, state);
return AdvancedUtil.getDestroySpeed(originalSpeed, stack, state);
}
}

0 comments on commit 7ca9b3f

Please sign in to comment.