diff --git a/src/generated/resources/assets/naturesaura/models/item/depth_pickaxe.json b/src/generated/resources/assets/naturesaura/models/item/depth_pickaxe.json deleted file mode 100644 index 1c654d97..00000000 --- a/src/generated/resources/assets/naturesaura/models/item/depth_pickaxe.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/handheld", - "textures": { - "layer0": "naturesaura:item/depth_pickaxe" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/naturesaura/models/item/sky_axe.json b/src/generated/resources/assets/naturesaura/models/item/sky_axe.json deleted file mode 100644 index 07dd2cb1..00000000 --- a/src/generated/resources/assets/naturesaura/models/item/sky_axe.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/handheld", - "textures": { - "layer0": "naturesaura:item/sky_axe" - } -} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/naturesaura/Helper.java b/src/main/java/de/ellpeck/naturesaura/Helper.java index 4e0471f8..0ea615a5 100644 --- a/src/main/java/de/ellpeck/naturesaura/Helper.java +++ b/src/main/java/de/ellpeck/naturesaura/Helper.java @@ -359,4 +359,17 @@ public final class Helper { } } } + + public static boolean isToolEnabled(ItemStack stack) { + return stack.hasTag() && !stack.getTag().getBoolean(NaturesAura.MOD_ID + ":disabled"); + } + + public static boolean toggleToolEnabled(Player player, ItemStack stack) { + if (!player.isShiftKeyDown()) + return false; + var disabled = !Helper.isToolEnabled(stack); + stack.getOrCreateTag().putBoolean(NaturesAura.MOD_ID + ":disabled", !disabled); + player.level.playSound(null, player.getX() + 0.5, player.getY() + 0.5, player.getZ() + 0.5, SoundEvents.ARROW_HIT_PLAYER, SoundSource.PLAYERS, 0.65F, 1F); + return true; + } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockFieldCreator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockFieldCreator.java index 3d3b695e..3b49a056 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockFieldCreator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockFieldCreator.java @@ -33,7 +33,7 @@ public class BlockFieldCreator extends BlockContainerImpl implements ICustomBloc if (!levelIn.isClientSide) { var key = NaturesAura.MOD_ID + ":field_creator_pos"; var compound = player.getPersistentData(); - if (!player.isCrouching() && compound.contains(key)) { + if (!player.isShiftKeyDown() && compound.contains(key)) { var stored = BlockPos.of(compound.getLong(key)); var creator = (BlockEntityFieldCreator) tile; if (!pos.equals(stored)) { diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockGratedChute.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockGratedChute.java index 50541a23..83009233 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockGratedChute.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockGratedChute.java @@ -88,7 +88,7 @@ public class BlockGratedChute extends BlockContainerImpl implements ICustomBlock @Override @SuppressWarnings("deprecation") public InteractionResult use(BlockState state, Level levelIn, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit) { - if (!player.isCrouching()) + if (!player.isShiftKeyDown()) return InteractionResult.FAIL; var tile = levelIn.getBlockEntity(pos); if (!(tile instanceof BlockEntityGratedChute chute)) diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockItemDistributor.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockItemDistributor.java index 46832f4b..ac431cff 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockItemDistributor.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockItemDistributor.java @@ -21,7 +21,7 @@ public class BlockItemDistributor extends BlockContainerImpl implements ICustomB @Override @SuppressWarnings("deprecation") public InteractionResult use(BlockState state, Level levelIn, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit) { - if (!player.isCrouching()) + if (!player.isShiftKeyDown()) return InteractionResult.FAIL; var tile = levelIn.getBlockEntity(pos); if (!(tile instanceof BlockEntityItemDistributor)) diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPickupStopper.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPickupStopper.java index cbf8dbcd..9f5cbc71 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPickupStopper.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPickupStopper.java @@ -29,7 +29,7 @@ public class BlockPickupStopper extends BlockContainerImpl implements IVisualiza @SubscribeEvent public void onPickup(EntityItemPickupEvent event) { var player = event.getEntity(); - if (player != null && !player.isCrouching()) { + if (player != null && !player.isShiftKeyDown()) { var item = event.getItem(); var pos = item.blockPosition(); Helper.getBlockEntitiesInArea(item.level, pos, 8, tile -> { diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemAuraCache.java b/src/main/java/de/ellpeck/naturesaura/items/ItemAuraCache.java index 8bdf01b5..13e68a6d 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemAuraCache.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemAuraCache.java @@ -41,7 +41,7 @@ public class ItemAuraCache extends ItemImpl implements ITrinketItem { @Override public void inventoryTick(ItemStack stackIn, Level levelIn, Entity entityIn, int itemSlot, boolean isSelected) { if (!levelIn.isClientSide && entityIn instanceof Player player) { - if (player.isCrouching() && stackIn.getCapability(NaturesAuraAPI.CAP_AURA_CONTAINER).isPresent()) { + if (player.isShiftKeyDown() && stackIn.getCapability(NaturesAuraAPI.CAP_AURA_CONTAINER).isPresent()) { var container = stackIn.getCapability(NaturesAuraAPI.CAP_AURA_CONTAINER).orElse(null); if (container.getStoredAura() <= 0) { return; diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemColorChanger.java b/src/main/java/de/ellpeck/naturesaura/items/ItemColorChanger.java index 5b968eed..e8f5c06d 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemColorChanger.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemColorChanger.java @@ -35,7 +35,7 @@ public class ItemColorChanger extends ItemImpl implements IColorProvidingItem, I var color = DyeColor.byId(blocks.indexOf(block)); if (firstColor == null || color == firstColor) { var stored = ItemColorChanger.getStoredColor(stack); - if (player.isCrouching()) { + if (player.isShiftKeyDown()) { if (stored != color) { level.playSound(player, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, SoundEvents.BUCKET_FILL, SoundSource.PLAYERS, 0.65F, 1F); @@ -105,7 +105,7 @@ public class ItemColorChanger extends ItemImpl implements IColorProvidingItem, I @Override public InteractionResultHolder use(Level levelIn, Player playerIn, InteractionHand handIn) { var stack = playerIn.getItemInHand(handIn); - if (playerIn.isCrouching() && ItemColorChanger.getStoredColor(stack) != null) { + if (playerIn.isShiftKeyDown() && ItemColorChanger.getStoredColor(stack) != null) { levelIn.playSound(playerIn, playerIn.getX(), playerIn.getY(), playerIn.getZ(), SoundEvents.BUCKET_FILL_LAVA, SoundSource.PLAYERS, 0.65F, 1F); if (!levelIn.isClientSide) { ItemColorChanger.setFillMode(stack, !ItemColorChanger.isFillMode(stack)); diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemRangeVisualizer.java b/src/main/java/de/ellpeck/naturesaura/items/ItemRangeVisualizer.java index 667af83c..9cfa8961 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemRangeVisualizer.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemRangeVisualizer.java @@ -52,7 +52,7 @@ public class ItemRangeVisualizer extends ItemImpl { @Override public InteractionResultHolder use(Level levelIn, Player playerIn, InteractionHand handIn) { var stack = playerIn.getItemInHand(handIn); - if (playerIn.isCrouching()) { + if (playerIn.isShiftKeyDown()) { ItemRangeVisualizer.clear(); playerIn.displayClientMessage(Component.translatable("info." + NaturesAura.MOD_ID + ".range_visualizer.end_all"), true); return new InteractionResultHolder<>(InteractionResult.SUCCESS, stack); diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemShockwaveCreator.java b/src/main/java/de/ellpeck/naturesaura/items/ItemShockwaveCreator.java index 39f25ad7..1fa3edf0 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemShockwaveCreator.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemShockwaveCreator.java @@ -55,7 +55,7 @@ public class ItemShockwaveCreator extends ItemImpl implements ITrinketItem { compound.putBoolean("air", false); - if (!living.isCrouching()) + if (!living.isShiftKeyDown()) return; if (living.distanceToSqr(compound.getDouble("x"), compound.getDouble("y"), compound.getDouble("z")) > 0.75F) return; diff --git a/src/main/java/de/ellpeck/naturesaura/items/tools/ItemAxe.java b/src/main/java/de/ellpeck/naturesaura/items/tools/ItemAxe.java index 9a962b51..838c5bf6 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/tools/ItemAxe.java +++ b/src/main/java/de/ellpeck/naturesaura/items/tools/ItemAxe.java @@ -11,10 +11,13 @@ import de.ellpeck.naturesaura.reg.ModRegistry; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.tags.BlockTags; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.AxeItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Tier; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; import net.minecraftforge.common.capabilities.ICapabilityProvider; @@ -46,14 +49,22 @@ public class ItemAxe extends AxeItem implements IModItem, ICustomItemModel { } @Override - public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, Player player) { - if (itemstack.getItem() == ModItems.SKY_AXE && !player.isShiftKeyDown() && player.level.getBlockState(pos).is(BlockTags.LOGS)) { + public boolean onBlockStartBreak(ItemStack stack, BlockPos pos, Player player) { + if (stack.getItem() == ModItems.SKY_AXE && Helper.isToolEnabled(stack) && player.level.getBlockState(pos).is(BlockTags.LOGS)) { BlockEntityWoodStand.recurseTreeDestruction(player.level, pos, pos, false, true); return true; } return false; } + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + var stack = player.getItemInHand(hand); + if (stack.getItem() == ModItems.SKY_AXE && Helper.toggleToolEnabled(player, stack)) + return InteractionResultHolder.success(stack); + return super.use(level, player, hand); + } + @Nullable @Override public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable CompoundTag nbt) { @@ -62,6 +73,8 @@ public class ItemAxe extends AxeItem implements IModItem, ICustomItemModel { @Override public void generateCustomItemModel(ItemModelGenerator generator) { + if (this == ModItems.SKY_AXE) + return; generator.withExistingParent(this.getBaseName(), "item/handheld").texture("layer0", "item/" + this.getBaseName()); } diff --git a/src/main/java/de/ellpeck/naturesaura/items/tools/ItemPickaxe.java b/src/main/java/de/ellpeck/naturesaura/items/tools/ItemPickaxe.java index e467eccc..0feb8662 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/tools/ItemPickaxe.java +++ b/src/main/java/de/ellpeck/naturesaura/items/tools/ItemPickaxe.java @@ -14,7 +14,9 @@ import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; @@ -26,7 +28,6 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; import net.minecraftforge.common.Tags; import net.minecraftforge.common.capabilities.ICapabilityProvider; -import net.minecraftforge.registries.ForgeRegistries; import javax.annotation.Nullable; @@ -89,13 +90,21 @@ public class ItemPickaxe extends PickaxeItem implements IModItem, ICustomItemMod @Override public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, Player player) { - if (itemstack.getItem() == ModItems.DEPTH_PICKAXE && !player.isShiftKeyDown() && player.level.getBlockState(pos).is(Tags.Blocks.ORES)) { + if (itemstack.getItem() == ModItems.DEPTH_PICKAXE && Helper.isToolEnabled(itemstack) && player.level.getBlockState(pos).is(Tags.Blocks.ORES)) { Helper.mineRecursively(player.level, pos, pos, true, 5, 5, s -> s.is(Tags.Blocks.ORES)); return true; } return false; } + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + var stack = player.getItemInHand(hand); + if (stack.getItem() == ModItems.DEPTH_PICKAXE && Helper.toggleToolEnabled(player, stack)) + return InteractionResultHolder.success(stack); + return super.use(level, player, hand); + } + @Nullable @Override public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable CompoundTag nbt) { @@ -104,6 +113,8 @@ public class ItemPickaxe extends PickaxeItem implements IModItem, ICustomItemMod @Override public void generateCustomItemModel(ItemModelGenerator generator) { + if (this == ModItems.DEPTH_PICKAXE) + return; generator.withExistingParent(this.getBaseName(), "item/handheld").texture("layer0", "item/" + this.getBaseName()); } diff --git a/src/main/java/de/ellpeck/naturesaura/items/tools/ItemShovel.java b/src/main/java/de/ellpeck/naturesaura/items/tools/ItemShovel.java index 8aafddd0..7e4756fe 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/tools/ItemShovel.java +++ b/src/main/java/de/ellpeck/naturesaura/items/tools/ItemShovel.java @@ -51,7 +51,7 @@ public class ItemShovel extends ShovelItem implements IModItem, ICustomItemModel damage = 5; } } else { - var range = player.isCrouching() ? 0 : 1; + var range = player.isShiftKeyDown() ? 0 : 1; for (var x = -range; x <= range; x++) { for (var y = -range; y <= range; y++) { var actualPos = pos.offset(x, 0, y); diff --git a/src/main/java/de/ellpeck/naturesaura/proxy/ClientProxy.java b/src/main/java/de/ellpeck/naturesaura/proxy/ClientProxy.java index 0c328146..05b412a1 100644 --- a/src/main/java/de/ellpeck/naturesaura/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/naturesaura/proxy/ClientProxy.java @@ -1,5 +1,6 @@ package de.ellpeck.naturesaura.proxy; +import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.blocks.ModBlocks; import de.ellpeck.naturesaura.compat.Compat; @@ -45,9 +46,13 @@ public class ClientProxy implements IProxy { MenuScreens.register(ModContainers.ENDER_ACCESS, GuiEnderCrate::new); ItemProperties.register(ModItems.COLOR_CHANGER, new ResourceLocation(NaturesAura.MOD_ID, "fill_mode"), - (stack, levelIn, entityIn, i) -> ItemColorChanger.isFillMode(stack) ? 1F : 0F); + (stack, level, entity, i) -> ItemColorChanger.isFillMode(stack) ? 1 : 0); ItemProperties.register(ModItems.COLOR_CHANGER, new ResourceLocation(NaturesAura.MOD_ID, "has_color"), - (stack, levelIn, entityIn, i) -> ItemColorChanger.getStoredColor(stack) != null ? 1F : 0F); + (stack, level, entity, i) -> ItemColorChanger.getStoredColor(stack) != null ? 1 : 0); + for (var item : new Item[]{ModItems.SKY_AXE, ModItems.DEPTH_PICKAXE}) { + ItemProperties.register(item, new ResourceLocation(NaturesAura.MOD_ID, "enabled"), + (stack, level, entity, i) -> Helper.isToolEnabled(stack) ? 1 : 0); + } } @Override diff --git a/src/main/resources/assets/naturesaura/models/item/depth_pickaxe.json b/src/main/resources/assets/naturesaura/models/item/depth_pickaxe.json new file mode 100644 index 00000000..4c6f1fb6 --- /dev/null +++ b/src/main/resources/assets/naturesaura/models/item/depth_pickaxe.json @@ -0,0 +1,14 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "naturesaura:item/depth_pickaxe" + }, + "overrides": [ + { + "predicate": { + "naturesaura:enabled": 1 + }, + "model": "naturesaura:item/depth_pickaxe_enabled" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/naturesaura/models/item/depth_pickaxe_enabled.json b/src/main/resources/assets/naturesaura/models/item/depth_pickaxe_enabled.json new file mode 100644 index 00000000..4c38926d --- /dev/null +++ b/src/main/resources/assets/naturesaura/models/item/depth_pickaxe_enabled.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "naturesaura:item/depth_pickaxe_enabled" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/naturesaura/models/item/sky_axe.json b/src/main/resources/assets/naturesaura/models/item/sky_axe.json new file mode 100644 index 00000000..91eb0556 --- /dev/null +++ b/src/main/resources/assets/naturesaura/models/item/sky_axe.json @@ -0,0 +1,14 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "naturesaura:item/sky_axe" + }, + "overrides": [ + { + "predicate": { + "naturesaura:enabled": 1 + }, + "model": "naturesaura:item/sky_axe_enabled" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/naturesaura/models/item/sky_axe_enabled.json b/src/main/resources/assets/naturesaura/models/item/sky_axe_enabled.json new file mode 100644 index 00000000..2d2f61ad --- /dev/null +++ b/src/main/resources/assets/naturesaura/models/item/sky_axe_enabled.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "naturesaura:item/sky_axe_enabled" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/naturesaura/textures/item/depth_pickaxe_enabled.png b/src/main/resources/assets/naturesaura/textures/item/depth_pickaxe_enabled.png new file mode 100644 index 00000000..c8b1e49c Binary files /dev/null and b/src/main/resources/assets/naturesaura/textures/item/depth_pickaxe_enabled.png differ diff --git a/src/main/resources/assets/naturesaura/textures/item/sky_axe_enabled.png b/src/main/resources/assets/naturesaura/textures/item/sky_axe_enabled.png new file mode 100644 index 00000000..c4cf48e7 Binary files /dev/null and b/src/main/resources/assets/naturesaura/textures/item/sky_axe_enabled.png differ