From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: violetc <58360096+s-yh-china@users.noreply.github.com> Date: Sun, 27 Mar 2022 12:48:40 +0800 Subject: [PATCH] Redstone Shears Wrench diff --git a/src/main/java/net/minecraft/world/item/ShearsItem.java b/src/main/java/net/minecraft/world/item/ShearsItem.java index cb809796372a4658aa617404f9fddffff9b45cb7..6ec6f786fda5a6d3f28e4e3d29a9754edb0356d0 100644 --- a/src/main/java/net/minecraft/world/item/ShearsItem.java +++ b/src/main/java/net/minecraft/world/item/ShearsItem.java @@ -19,6 +19,23 @@ import net.minecraft.world.level.block.GrowingPlantHeadBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.gameevent.GameEvent; +// Leaves start - shears wrench +import net.minecraft.network.chat.Component; +import net.minecraft.world.level.block.Block; +import net.minecraft.Util; +import net.minecraft.world.level.block.ComparatorBlock; +import net.minecraft.world.level.block.DispenserBlock; +import net.minecraft.world.level.block.HopperBlock; +import net.minecraft.world.level.block.ObserverBlock; +import net.minecraft.world.level.block.RepeaterBlock; +import net.minecraft.world.level.block.CrafterBlock; +import net.minecraft.world.level.block.LeverBlock; +import net.minecraft.world.level.block.CocoaBlock; +import net.minecraft.world.level.block.piston.PistonBaseBlock; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.Property; +// Leaves end - shears wrench + public class ShearsItem extends Item { public ShearsItem(Item.Properties settings) { super(settings); @@ -77,6 +94,67 @@ public class ShearsItem extends Item { return InteractionResult.sidedSuccess(level.isClientSide); } + // Leaves start - shears wrench + Block block = blockState.getBlock(); + if (org.leavesmc.leaves.LeavesConfig.redstoneShearsWrench && block instanceof ObserverBlock || block instanceof DispenserBlock || + block instanceof PistonBaseBlock || block instanceof HopperBlock || block instanceof RepeaterBlock || block instanceof ComparatorBlock || + block instanceof CrafterBlock || block instanceof LeverBlock || block instanceof CocoaBlock) { + StateDefinition blockstatelist = block.getStateDefinition(); + Property iblockstate = block instanceof CrafterBlock ? blockstatelist.getProperty("orientation") : blockstatelist.getProperty("facing"); + Player player = context.getPlayer(); + + if (iblockstate == null || player == null) { + return InteractionResult.FAIL; + } + + if (block instanceof PistonBaseBlock) { + if (getNameHelper(blockState, PistonBaseBlock.EXTENDED).equals("true")) { + return InteractionResult.FAIL; + } + } + + if (block instanceof RepeaterBlock || block instanceof ComparatorBlock) { + if (getNameHelper(blockState, ComparatorBlock.POWERED).equals("true")) { + return InteractionResult.FAIL; + } + if (block instanceof RepeaterBlock) { + if (getNameHelper(blockState, RepeaterBlock.LOCKED).equals("true")) { + return InteractionResult.FAIL; + } + } + } + + if (block instanceof CrafterBlock) { + if (getNameHelper(blockState, CrafterBlock.CRAFTING).equals("true")) { + return InteractionResult.FAIL; + } + } + + BlockState iblockdata1 = ShearsItem.cycleState(blockState, iblockstate, player.isSecondaryUseActive()); + level.setBlock(blockPos, iblockdata1, 18); + ShearsItem.message(player, Component.translatable("item.minecraft.debug_stick.update", iblockstate.getName(), ShearsItem.getNameHelper(iblockdata1, iblockstate))); + return InteractionResult.CONSUME; + } + // Leaves end - shears wrench + return super.useOn(context); } + + // Leaves start - shears wrench + private static > BlockState cycleState(BlockState state, Property property, boolean inverse) { + return state.setValue(property, ShearsItem.getRelative(property.getPossibleValues(), state.getValue(property), inverse)); // CraftBukkit - decompile error + } + + private static T getRelative(Iterable elements, T current, boolean inverse) { + return inverse ? Util.findPreviousInIterable(elements, current) : Util.findNextInIterable(elements, current); + } + + private static void message(Player player, Component message) { + ((ServerPlayer) player).sendSystemMessage(message, true); + } + + private static > String getNameHelper(BlockState state, Property property) { + return property.getName(state.getValue(property)); + } + // Leaves end - shears wrench }