mirror of
https://github.com/LeavesMC/Leaves.git
synced 2025-12-23 17:09:26 +00:00
103 lines
5.0 KiB
Diff
103 lines
5.0 KiB
Diff
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<Block, BlockState> 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 <T extends Comparable<T>> BlockState cycleState(BlockState state, Property<T> property, boolean inverse) {
|
|
+ return state.setValue(property, ShearsItem.getRelative(property.getPossibleValues(), state.getValue(property), inverse)); // CraftBukkit - decompile error
|
|
+ }
|
|
+
|
|
+ private static <T> T getRelative(Iterable<T> 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 <T extends Comparable<T>> String getNameHelper(BlockState state, Property<T> property) {
|
|
+ return property.getName(state.getValue(property));
|
|
+ }
|
|
+ // Leaves end - shears wrench
|
|
}
|