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 88156fa7722baa2738b908bfcd648bca371c533f..8206f105f80355fcc9061886215103bb480ab4a1 100644 --- a/src/main/java/net/minecraft/world/item/ShearsItem.java +++ b/src/main/java/net/minecraft/world/item/ShearsItem.java @@ -1,7 +1,9 @@ package net.minecraft.world.item; +import net.minecraft.Util; import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; @@ -14,9 +16,19 @@ import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.ComparatorBlock; +import net.minecraft.world.level.block.DispenserBlock; import net.minecraft.world.level.block.GrowingPlantHeadBlock; +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.piston.PistonBaseBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.Property; + +import javax.annotation.Nullable; public class ShearsItem extends Item { public ShearsItem(Item.Properties settings) { @@ -80,6 +92,59 @@ public class ShearsItem extends Item { } } + // Leaves start - shears wrench + if (top.leavesmc.leaves.LeavesConfig.redstoneShearsWrench && block instanceof ObserverBlock || block instanceof DispenserBlock || + block instanceof PistonBaseBlock || block instanceof HopperBlock || block instanceof RepeaterBlock || block instanceof ComparatorBlock) { + StateDefinition blockstatelist = block.getStateDefinition(); + Property iblockstate = blockstatelist.getProperty("facing"); + Player player = context.getPlayer(); + + if (iblockstate == null || player == null) { + return InteractionResult.FAIL; + } + + if (block instanceof PistonBaseBlock) { + if (getNameHelper(blockState, blockstatelist.getProperty("extended")).equals("true")) { + return InteractionResult.FAIL; + } + } + + if (block instanceof RepeaterBlock || block instanceof ComparatorBlock) { + if (getNameHelper(blockState, blockstatelist.getProperty("powered")).equals("true")) { + return InteractionResult.FAIL; + } + if (block instanceof RepeaterBlock) { + if (getNameHelper(blockState, blockstatelist.getProperty("locked")).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_PARTIAL; + } + // Leaves end - shears wrench + return super.useOn(context); } + + // Leaves start - shears wrench + private static > BlockState cycleState(BlockState state, Property property, boolean inverse) { + return (BlockState) state.setValue(property, ShearsItem.getRelative(property.getPossibleValues(), state.getValue(property), inverse)); // CraftBukkit - decompile error + } + + private static T getRelative(Iterable elements, @Nullable 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 }