diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java b/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java index fb740540c79..765f3b555db 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java @@ -138,13 +138,11 @@ default Material getToolMaterial(ItemStack stack) { return GTMaterials.Iron; } - @Nullable - default ToolProperty getToolProperty() { + default @Nullable ToolProperty getToolProperty() { return getMaterial().getProperty(PropertyKey.TOOL); } - @Nullable - default DustProperty getDustProperty(ItemStack stack) { + default @Nullable DustProperty getDustProperty(ItemStack stack) { return getToolMaterial(stack).getProperty(PropertyKey.DUST); } @@ -257,15 +255,6 @@ default int getTotalHarvestLevel() { return getMaterialHarvestLevel() + getToolStats().getBaseQuality(); } - // Item.class methods - default float definition$getDestroySpeed(ItemStack stack, BlockState state) { - if (isToolEffective(stack, state, getToolClasses(stack), getTotalHarvestLevel())) { - return getTotalToolSpeed(); - } - - return getToolStats().isToolEffective(state) ? getToolStats().getTool().getMiningSpeed(state) : 1.0F; - } - default boolean definition$hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { getBehaviorsComponent(stack).behaviors() .forEach((key, behavior) -> behavior.hitEntity(stack, target, attacker)); @@ -273,60 +262,48 @@ default int getTotalHarvestLevel() { return true; } - default boolean definition$onBlockStartBreak(ItemStack stack, BlockPos pos, Player player) { - if (player.level().isClientSide) return false; + default void definition$onBlockStartBreak(ItemStack stack, BlockPos pos, Player player) { + if (!(player instanceof ServerPlayer serverPlayer)) return; + if (player.isShiftKeyDown()) return; + getBehaviorsComponent(stack).behaviors() .forEach((type, behavior) -> behavior.onBlockStartBreak(stack, pos, player)); - if (!player.isShiftKeyDown()) { - ServerPlayer serverPlayer = (ServerPlayer) player; - int result = -1; - if (isTool(stack, GTToolType.SHEARS)) { - result = shearBlockRoutine(serverPlayer, stack, pos); - } - if (result != 0) { - // prevent exploits with instantly breakable blocks - BlockState state = player.level().getBlockState(pos); - boolean effective = isToolEffective(stack, state, getToolClasses(stack), getTotalHarvestLevel()); - - if (effective) { - if (areaOfEffectBlockBreakRoutine(stack, serverPlayer, pos)) { - if (playSoundOnBlockDestroy()) playSound(player); - } else { - if (result == -1) { - var behavior = getBehaviorsComponent(stack).getBehavior(GTToolBehaviors.TREE_FELLING); - if (behavior != null && behavior.isEnabled() && state.is(BlockTags.LOGS)) { - TreeFellingHelper.fellTree(stack, player.level(), state, pos, player); - } - if (playSoundOnBlockDestroy()) playSound(player); - } else { - return true; - } - } - } + // prevent exploits with instantly breakable blocks + BlockState state = player.level().getBlockState(pos); + + if (!isToolEffective(stack, state)) { + return; + } + if (!areaOfEffectBlockBreakRoutine(stack, serverPlayer, pos)) { + var behavior = getBehaviorsComponent(stack).getBehavior(GTToolBehaviors.TREE_FELLING); + if (behavior != null && behavior.isEnabled() && state.is(BlockTags.LOGS)) { + TreeFellingHelper.fellTree(stack, player.level(), state, pos, player); } } - return false; + if (playSoundOnBlockDestroy()) { + playSound(player); + } } - default boolean definition$mineBlock(ItemStack stack, Level worldIn, BlockState state, BlockPos pos, - LivingEntity entityLiving) { - if (!worldIn.isClientSide) { - getToolStats().getBehaviors() - .forEach(behavior -> behavior.onBlockDestroyed(stack, worldIn, state, pos, entityLiving)); + default void definition$mineBlock(ItemStack stack, Level level, BlockState state, BlockPos pos, + LivingEntity entity) { + if (level.isClientSide) { + return; + } + getToolStats().getBehaviors() + .forEach(behavior -> behavior.onBlockDestroyed(stack, level, state, pos, entity)); - if ((double) state.getDestroySpeed(worldIn, pos) != 0.0D) { - damageItem(stack, entityLiving, getToolStats().getToolDamagePerBlockBreak(stack)); - } - if (entityLiving instanceof Player && playSoundOnBlockDestroy()) { - // sneaking disables AOE, which means it is okay to play the sound - // not checking this means the sound will play for every AOE broken block, which is very loud - if (entityLiving.isShiftKeyDown()) { - playSound((Player) entityLiving); - } + if (state.getDestroySpeed(level, pos) != 0.0) { + damageItem(stack, entity, getToolStats().getToolDamagePerBlockBreak(stack)); + } + if (entity instanceof Player player && playSoundOnBlockDestroy()) { + // sneaking disables AOE, which means it is okay to play the sound + // not checking this means the sound will play for every AOE broken block, which is very loud + if (entity.isShiftKeyDown()) { + playSound(player); } } - return true; } default boolean definition$isValidRepairItem(ItemStack toRepair, ItemStack repair) { @@ -414,8 +391,7 @@ private static ItemEnchantments joinEnchants(ItemStack stackWithEnchants, ItemEn .anyMatch(behavior -> behavior.canDisableShield(stack, shield, entity, attacker)); } - default boolean definition$doesSneakBypassUse(@NotNull ItemStack stack, @NotNull BlockGetter world, - @NotNull BlockPos pos, @NotNull Player player) { + default boolean definition$doesSneakBypassUse(ItemStack stack, BlockGetter world, BlockPos pos, Player player) { return getToolStats().doesSneakBypassUse(); } @@ -556,7 +532,7 @@ private static ItemEnchantments joinEnchants(ItemStack stackWithEnchants, ItemEn return true; } - default void definition$fillItemCategory(CreativeModeTab category, @NotNull NonNullList items) { + default void definition$fillItemCategory(CreativeModeTab category, NonNullList items) { if (isElectric()) { items.add(get(Integer.MAX_VALUE)); } else { @@ -564,8 +540,8 @@ private static ItemEnchantments joinEnchants(ItemStack stackWithEnchants, ItemEn } } - default void definition$appendHoverText(@NotNull ItemStack stack, @NotNull Item.TooltipContext context, - @NotNull List tooltip, TooltipFlag flag) { + default void definition$appendHoverText(ItemStack stack, Item.TooltipContext context, + List tooltip, TooltipFlag flag) { if (!(stack.getItem() instanceof IGTTool tool)) return; IGTToolDefinition toolStats = tool.getToolStats(); @@ -751,13 +727,6 @@ default void attachCapabilities(RegisterCapabilitiesEvent event) { } } - default boolean definition$isCorrectToolForDrops(ItemStack stack, BlockState state) { - if (stack.getItem() instanceof IGTTool gtTool) { - return isToolEffective(stack, state, gtTool.getToolClasses(stack), gtTool.getTotalHarvestLevel()); - } - return stack.isCorrectToolForDrops(state); - } - static int tintColor(ItemStack stack, int index) { if (stack.getItem() instanceof IGTTool item) { Material material = item.getMaterial(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/datacomponents/ToolBehaviors.java b/src/main/java/com/gregtechceu/gtceu/api/item/datacomponents/ToolBehaviors.java index 6db74617e84..7f04eac4091 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/datacomponents/ToolBehaviors.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/datacomponents/ToolBehaviors.java @@ -10,6 +10,7 @@ import net.minecraft.network.codec.StreamCodec; import com.mojang.serialization.Codec; +import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Unmodifiable; import java.util.Collections; @@ -44,7 +45,7 @@ public boolean hasBehavior(ToolBehaviorType type) { return behaviors.containsKey(type); } - public > T getBehavior(ToolBehaviorType type) { + public > @Nullable T getBehavior(ToolBehaviorType type) { return (T) this.behaviors.get(type); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolItem.java index 0baf2894c75..3c9c8d9f4d3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolItem.java @@ -54,11 +54,6 @@ public GTToolItem(GTToolType toolType, MaterialToolTier tier, Material material, definition$init(); } - public static GTToolItem create(GTToolType toolType, MaterialToolTier tier, Material material, - IGTToolDefinition definition, Properties properties) { - return new GTToolItem(toolType, tier, material, definition, properties); - } - @Override public ItemStack getDefaultInstance() { return get(); @@ -96,7 +91,8 @@ public Component getName(ItemStack stack) { @Override public boolean mineBlock(ItemStack stack, Level level, BlockState state, BlockPos pos, LivingEntity miningEntity) { - return definition$mineBlock(stack, level, state, pos, miningEntity); + definition$mineBlock(stack, level, state, pos, miningEntity); + return true; } @Override @@ -115,20 +111,11 @@ public boolean playSoundOnBlockDestroy() { return toolType.playSoundOnBlockDestroy; } - @Override - public float getDestroySpeed(ItemStack stack, BlockState state) { - return definition$getDestroySpeed(stack, state); - } - @Override public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { return definition$hurtEnemy(stack, target, attacker); } - public boolean onBlockStartBreak(ItemStack stack, BlockPos pos, Player player) { - return definition$onBlockStartBreak(stack, pos, player); - } - @Override public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag isAdvanced) { @@ -189,9 +176,4 @@ public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStac public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { return definition$use(level, player, usedHand); } - - @Override - public boolean isCorrectToolForDrops(ItemStack stack, BlockState state) { - return this.definition$isCorrectToolForDrops(stack, state); - } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java index 4bcfc5cfc9d..cbfafba6de3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java @@ -658,7 +658,7 @@ public static class Builder { @Setter private char symbol = ' '; @Setter - private ToolConstructor constructor = GTToolItem::create; + private ToolConstructor constructor = GTToolItem::new; @Setter private ResourceLocation modelLocation; private SoundEntry sound; diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/MaterialToolTier.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/MaterialToolTier.java index e65543d369e..a19f7400f0b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/MaterialToolTier.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/MaterialToolTier.java @@ -42,7 +42,7 @@ public float getAttackDamageBonus() { } @Override - public @NotNull TagKey getIncorrectBlocksForDrops() { + public TagKey getIncorrectBlocksForDrops() { return CustomTags.INCORRECT_TOOL_TIERS[property.getHarvestLevel()]; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java index 3a6465e13f8..782ce3ca286 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java @@ -48,7 +48,6 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.Item; @@ -66,7 +65,6 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.common.CommonHooks; -import net.neoforged.neoforge.common.IShearable; import net.neoforged.neoforge.event.EventHooks; import it.unimi.dsi.fastutil.chars.Char2ReferenceMap; @@ -74,7 +72,6 @@ import it.unimi.dsi.fastutil.chars.CharSet; import it.unimi.dsi.fastutil.chars.CharSets; import lombok.experimental.ExtensionMethod; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnmodifiableView; @@ -146,7 +143,7 @@ public static boolean canUse(ItemStack stack) { return stack.getDamageValue() <= stack.getMaxDamage(); } - public static void damageItem(@NotNull ItemStack stack, @Nullable LivingEntity user, int damage) { + public static void damageItem(ItemStack stack, @Nullable LivingEntity user, int damage) { if (!(stack.getItem() instanceof IGTTool tool)) { if (user != null) stack.hurtAndBreak(damage, user, EquipmentSlot.MAINHAND); } else { @@ -247,10 +244,10 @@ public static boolean areaOfEffectBlockBreakRoutine(ItemStack stack, ServerPlaye int currentDurability = stack.getDamageValue(); int maximumDurability = stack.getMaxDamage(); int remainingUses = maximumDurability - currentDurability; - var harvestableBlocks = getHarvestableBlocks(stack, player); + List harvestableBlocks = getHarvestableBlocks(stack, player); if (!harvestableBlocks.isEmpty()) { for (BlockPos pos : harvestableBlocks) { - if (!destroyBlock(player, stack, pos, pos == targeted)) { + if (!destroyBlock(player, stack, pos, pos.equals(targeted))) { return true; } @@ -300,7 +297,7 @@ public static List iterateAoE(AoESymmetrical aoeDefinition, Predicate< for (int depth = 0; depth <= aoeDefinition.layer(); depth++) { for (int top = aoeRowEnd; top >= aoeRowStart; top--) { for (int side = -aoeDefinition.column(); side <= aoeDefinition.column(); side++) { - var pos = context.getClickedPos() + BlockPos pos = context.getClickedPos() .relative(depthDirection, depth) .relative(topDirection, top) .relative(sideDirection, side); @@ -406,10 +403,6 @@ public static void applyHammerDropConversion(ServerLevel world, BlockPos pos, It public static boolean destroyBlock(ServerPlayer player, ItemStack tool, BlockPos pos, boolean playSound) { DO_BLOCK_BREAK_SOUND_PARTICLES.set(playSound); - // This is *not* a vanilla/forge convention, Forge never added "shears" to ItemShear's tool classes. - if (isTool(tool, GTToolType.SHEARS) && shearBlockRoutine(player, tool, pos) == 0) { - return false; - } Level level = player.level(); // we set this flag when firing the event so the event listener that starts this whole thing doesn't cascade @@ -473,7 +466,7 @@ public static boolean removeBlock(Level level, ServerPlayer player, BlockPos pos public static List getHarvestableBlocks(ItemStack stack, Player player) { if (!hasBehaviorsComponent(stack)) return Collections.emptyList(); - var aoeDefinition = getAoEDefinition(stack); + AoESymmetrical aoeDefinition = getAoEDefinition(stack); if (aoeDefinition.isZero()) { return Collections.emptyList(); } @@ -566,8 +559,7 @@ public static boolean isTool(ItemStack tool, GTToolType... toolClasses) { } // encompasses all vanilla special case tool checks for harvesting - public static boolean isToolEffective(ItemStack stack, BlockState state, Set toolClasses, - int harvestLevel) { + public static boolean isToolEffective(ItemStack stack, BlockState state) { Tool tool = stack.get(DataComponents.TOOL); return tool != null && tool.isCorrectForDrops(state); } @@ -579,7 +571,7 @@ public static boolean isToolEffective(ItemStack stack, BlockState state, Set toolClasse return -1; } - /** - * Shearing a Block. - * - * @return -1 if not shearable, otherwise return 0 or 1, 0 if tool is now broken. - */ - public static int shearBlockRoutine(ServerPlayer player, ItemStack tool, BlockPos pos) { - if (!player.isCreative()) { - Level world = player.serverLevel(); - BlockState state = world.getBlockState(pos); - if (state.getBlock() instanceof IShearable shearable) { - if (shearable.isShearable(player, tool, world, pos)) { - List shearedDrops = shearable.onSheared(player, tool, world, pos); - boolean relocateMinedBlocks = tool.has(GTDataComponents.RELOCATE_MINED_BLOCKS); - Iterator iter = shearedDrops.iterator(); - while (iter.hasNext()) { - ItemStack stack = iter.next(); - if (relocateMinedBlocks && player.addItem(stack)) { - iter.remove(); - } else { - float f = 0.7F; - double xo = world.random.nextFloat() * f + 0.15D; - double yo = world.random.nextFloat() * f + 0.15D; - double zo = world.random.nextFloat() * f + 0.15D; - ItemEntity entityItem = new ItemEntity(world, pos.getX() + xo, pos.getY() + yo, - pos.getZ() + zo, stack); - entityItem.setDefaultPickUpDelay(); - world.addFreshEntity(entityItem); - } - } - ToolHelper.damageItem(tool, player, 1); - player.awardStat(Stats.BLOCK_MINED.get((Block) shearable)); - world.setBlock(pos, Blocks.AIR.defaultBlockState(), 11); - return tool.isEmpty() ? 0 : 1; - } - } - } - return -1; - } - // Suppliers for broken tool stacks public static final Supplier SUPPLY_POWER_UNIT_LV = () -> GTItems.POWER_UNIT_LV.get() .getDefaultInstance(); @@ -675,8 +628,7 @@ public static int shearBlockRoutine(ServerPlayer player, ItemStack tool, BlockPo * @param state the BlockState of the block * @return the silk touch drop */ - @NotNull - public static List getSilkTouchDrop(ServerLevel level, BlockPos origin, @NotNull BlockState state) { + public static List getSilkTouchDrop(ServerLevel level, BlockPos origin, BlockState state) { ItemStack tool = GTMaterialItems.TOOL_ITEMS.get(GTMaterials.Neutronium, GTToolType.PICKAXE).get().get(); // oh wow, this exists now. cool! EnchantmentHelper.enchantItemFromProvider( diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java index 58d98e589d1..5f4f7c721b4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java @@ -179,17 +179,16 @@ public static void onBlockStartBreak(BlockEvent.BreakEvent event) { ItemStack toolStack = event.getPlayer().getItemInHand(event.getPlayer().getUsedItemHand()); if (toolStack.getItem() instanceof IGTTool tool) { - if (tool.definition$onBlockStartBreak(toolStack, event.getPos(), event.getPlayer())) { - event.setCanceled(true); - } + tool.definition$onBlockStartBreak(toolStack, event.getPos(), event.getPlayer()); } } @SubscribeEvent public static void onLeftClickBlock(PlayerInteractEvent.LeftClickBlock event) { var machine = MetaMachine.getMachine(event.getLevel(), event.getPos()); - if (machine != null) + if (machine != null) { event.setCanceled(machine.onLeftClick(event.getEntity(), event.getHand(), event.getFace())); + } } @SubscribeEvent diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/ToolEventHandlers.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/ToolEventHandlers.java index 202b611bbd2..ddc090b943a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/ToolEventHandlers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/ToolEventHandlers.java @@ -35,10 +35,7 @@ import net.neoforged.neoforge.event.entity.player.PlayerDestroyItemEvent; import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; -import java.util.Collection; import java.util.Iterator; import java.util.List; @@ -48,55 +45,60 @@ public class ToolEventHandlers { /** * Handles returning broken stacks for tools */ - public static void onPlayerDestroyItem(ItemStack original, InteractionHand hand, Player player) { - Item item = original.getItem(); - if (item instanceof IGTTool def) { - ItemStack brokenStack = def.getToolStats().getBrokenStack(); - // Transfer over remaining charge to power units - if (GTCapabilityHelper.getElectricItem(brokenStack) != null && def.isElectric()) { - long remainingCharge = def.getCharge(original); - IElectricItem electricStack = GTCapabilityHelper.getElectricItem(brokenStack); - if (electricStack != null) { - // update the max charge of the item, if possible - // applies to items like power units, which can have different max charges depending on their recipe - if (electricStack instanceof ElectricItem electricItem) { - electricItem.setMaxChargeOverride(def.getMaxCharge(original)); - } + @SubscribeEvent + public static void onPlayerDestroyItem(PlayerDestroyItemEvent event) { + ItemStack original = event.getOriginal(); + InteractionHand hand = event.getHand(); + Player player = event.getEntity(); - electricStack.charge(Math.min(remainingCharge, def.getMaxCharge(original)), def.getElectricTier(), - true, false); + if (!(original.getItem() instanceof IGTTool gtTool)) { + return; + } + ItemStack brokenStack = gtTool.getToolStats().getBrokenStack(); + // Transfer over remaining charge to power units + if (GTCapabilityHelper.getElectricItem(brokenStack) != null && gtTool.isElectric()) { + long remainingCharge = gtTool.getCharge(original); + IElectricItem electricStack = GTCapabilityHelper.getElectricItem(brokenStack); + if (electricStack != null) { + // update the max charge of the item, if possible + // applies to items like power units, which can have different max charges depending on their recipe + if (electricStack instanceof ElectricItem electricItem) { + electricItem.setMaxChargeOverride(gtTool.getMaxCharge(original)); } + + electricStack.charge(Math.min(remainingCharge, gtTool.getMaxCharge(original)), gtTool.getElectricTier(), + true, false); } - if (!brokenStack.isEmpty()) { - if (hand == null) { - if (!player.addItem(brokenStack)) { - player.drop(brokenStack, true); - } - } else { - player.setItemInHand(hand, brokenStack); - } + } + if (brokenStack.isEmpty()) { + return; + } + if (hand == null) { + if (!player.addItem(brokenStack)) { + player.drop(brokenStack, true); } + } else { + player.setItemInHand(hand, brokenStack); } } - public static InteractionResult onPlayerEntityInteract(Player player, InteractionHand hand, Entity target) { - ItemStack itemStack = player.getItemInHand(hand); - Item item = itemStack.getItem(); + /** + * Handle item frame power unit duping + */ + @SubscribeEvent + public static void onPlayerEntityInteract(PlayerInteractEvent.EntityInteract event) { + ItemStack itemStack = event.getItemStack(); - /* - * Handle item frame power unit duping - */ - if (item instanceof IGTTool def) { - if (target instanceof ItemFrame itemFrame) { - ItemStack brokenStack = def.getToolStats().getBrokenStack(); - if (!brokenStack.isEmpty()) { - itemFrame.interact(player, hand); + if (!(itemStack.getItem() instanceof IGTTool gtTool) || !(event.getTarget() instanceof ItemFrame itemFrame)) { + return; + } + ItemStack brokenStack = gtTool.getToolStats().getBrokenStack(); + if (!brokenStack.isEmpty()) { + itemFrame.interact(event.getEntity(), event.getHand()); - return InteractionResult.SUCCESS; - } - } + event.setCanceled(true); + event.setCancellationResult(InteractionResult.SUCCESS); } - return InteractionResult.PASS; } /** @@ -144,7 +146,7 @@ public static List onHarvestDrops(Player player, ItemStack tool, Serv // Place close to the player for sanity reasons (Instead of XYZ=0,0,0) ItemEntity drop = new ItemEntity(level, player.getX(), player.getY(), player.getZ(), dropStack); - if (fireItemPickupEvent(drop, player) && player.addItem(dropStack)) { + if (isPickupAllowedByEvent(drop, player) && player.addItem(dropStack)) { EventHooks.fireItemPickupPost(drop, player, dropStack.copy()); dropItr.remove(); } @@ -156,7 +158,7 @@ public static List onHarvestDrops(Player player, ItemStack tool, Serv return drops; } - public static boolean fireItemPickupEvent(ItemEntity drop, Player player) { + public static boolean isPickupAllowedByEvent(ItemEntity drop, Player player) { return !EventHooks.fireItemPickupPre(drop, player).canPickup().isFalse(); } @@ -165,63 +167,42 @@ public static boolean fireItemPickupEvent(ItemEntity drop, Player player) { * Electric tools can still be repaired with ingots in the anvil, but electric tools cannot * be combined with other GT tools, electric or otherwise. */ - public static boolean onAnvilUpdateEvent(ItemStack left, ItemStack right) { - if (left.getItem() instanceof IGTTool leftTool && right.getItem() instanceof IGTTool rightTool) { - if (leftTool.getToolMaterial(left) != rightTool.getToolMaterial(right)) { - return false; - } - if (leftTool.isElectric() || rightTool.isElectric()) { - return false; - } - } - return true; - } - @SubscribeEvent - public static void onPlayerDestroyItem(@NotNull PlayerDestroyItemEvent event) { - ToolEventHandlers.onPlayerDestroyItem(event.getOriginal(), event.getHand(), event.getEntity()); - } - - @SubscribeEvent - public static void onPlayerEntityInteract(@NotNull PlayerInteractEvent.EntityInteract event) { - InteractionResult result = ToolEventHandlers.onPlayerEntityInteract(event.getEntity(), event.getHand(), - event.getTarget()); - if (result != InteractionResult.PASS) { + public static void onAnvilUpdateEvent(AnvilUpdateEvent event) { + ItemStack left = event.getLeft(); + ItemStack right = event.getRight(); + if (!(left.getItem() instanceof IGTTool leftTool) || !(right.getItem() instanceof IGTTool rightTool)) { + return; + } + if (leftTool.isElectric() || rightTool.isElectric()) { + event.setCanceled(true); + } + if (leftTool.getToolMaterial(left) != rightTool.getToolMaterial(right)) { event.setCanceled(true); - event.setCancellationResult(result); } } @SubscribeEvent - public static void onAnvilUpdateEvent(AnvilUpdateEvent event) { - if (!ToolEventHandlers.onAnvilUpdateEvent(event.getLeft(), event.getRight())) { - event.setCanceled(true); + public static void onPlayerKilledEntity(LivingDropsEvent event) { + Entity entity = event.getSource().getEntity(); + if (!(entity instanceof Player player)) { + return; } - } + ItemStack tool = player.getMainHandItem(); - public static Collection onPlayerKilledEntity(ItemStack tool, Player player, - Collection drops) { - if (tool.has(GTDataComponents.RELOCATE_MOB_DROPS)) { - Iterator dropItr = drops.iterator(); + if (!tool.has(GTDataComponents.RELOCATE_MOB_DROPS)) { + return; + } + Iterator dropItr = event.getDrops().iterator(); - while (dropItr.hasNext()) { - ItemEntity drop = dropItr.next(); - ItemStack dropStack = drop.getItem(); + while (dropItr.hasNext()) { + ItemEntity drop = dropItr.next(); + ItemStack dropStack = drop.getItem(); - if (fireItemPickupEvent(drop, player) || player.addItem(dropStack)) { - EventHooks.fireItemPickupPost(drop, player, dropStack.copy()); - dropItr.remove(); - } + if (isPickupAllowedByEvent(drop, player) && player.addItem(dropStack)) { + EventHooks.fireItemPickupPost(drop, player, dropStack.copy()); + dropItr.remove(); } } - return drops; - } - - @SubscribeEvent - public static void onPlayerKilledEntity(LivingDropsEvent event) { - Entity entity = event.getSource().getEntity(); - if (entity instanceof Player player) { - ToolEventHandlers.onPlayerKilledEntity(player.getMainHandItem(), player, event.getDrops()); - } } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java index 2618203bbe3..ea72e43b094 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java @@ -585,7 +585,7 @@ private LinkedList getBlocksToMine() { * @param values to find the mean of * @return the mean value */ - private static long mean(@NotNull long[] values) { + private static long mean(long @NotNull [] values) { if (values.length == 0L) return 0L;