diff --git a/gradle.properties b/gradle.properties
index 76fc847..7faea92 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -4,7 +4,7 @@ mcVersion=1.21.8
release=2
# 0 for skip release, 1 for pre-release, 2 for release
-luminolRef=3abd05f4f668c87eddc44d719561c5ee6f88373e
+luminolRef=28b3474018b42c98e210aea107dc3b161079db65
org.gradle.configuration-cache=true
org.gradle.caching=true
diff --git a/lophine-server/minecraft-patches/features/0013-Leaves-Redstone-Shears-Wrench.patch b/lophine-server/minecraft-patches/features/0013-Leaves-Redstone-Shears-Wrench.patch
index 07091eb..8d830ec 100644
--- a/lophine-server/minecraft-patches/features/0013-Leaves-Redstone-Shears-Wrench.patch
+++ b/lophine-server/minecraft-patches/features/0013-Leaves-Redstone-Shears-Wrench.patch
@@ -7,25 +7,6 @@ Co-authored by: violetc <58360096+s-yh-china@users.noreply.github.com>
As a part of : Leaves (https://github.com/LeavesMC/Leaves/blob/79d9ef74c2684eb49060f07e1ab31c827326c9a5/leaves-server/minecraft-patches/features/0009-Redstone-Shears-Wrench.patch)
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
-diff --git a/net/minecraft/world/item/BlockItem.java b/net/minecraft/world/item/BlockItem.java
-index 6db566adf2d0df1d26221eda04aa01738df6d3d2..24ebfdf98e343a7892af621d032c35819156deec 100644
---- a/net/minecraft/world/item/BlockItem.java
-+++ b/net/minecraft/world/item/BlockItem.java
-@@ -56,6 +56,14 @@ public class BlockItem extends Item {
- if (blockPlaceContext == null) {
- return InteractionResult.FAIL;
- } else {
-+ // Leaves start - shears wrench
-+ if (org.leavesmc.leaves.util.ShearsWrenchUtil.shouldSkipPlace(context)) {
-+ if (context.getPlayer() != null) {
-+ context.getPlayer().containerMenu.forceHeldSlot(blockPlaceContext.getHand());
-+ }
-+ return InteractionResult.FAIL;
-+ }
-+ // Leaves end - shears wrench
- BlockState placementState = this.getPlacementState(blockPlaceContext);
- // CraftBukkit start - special case for handling block placement with water lilies and snow buckets
- org.bukkit.block.BlockState bukkitState = null;
diff --git a/net/minecraft/world/item/ShearsItem.java b/net/minecraft/world/item/ShearsItem.java
index 8cf3e51e12f9cf98836657e722edb23943f9e866..5fd5e9fd4e1a79dd1a9d62a5cf0c308805979420 100644
--- a/net/minecraft/world/item/ShearsItem.java
diff --git a/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/ContainerExpansionConfig.java b/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/ContainerExpansionConfig.java
index 3554c13..1dd9c69 100644
--- a/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/ContainerExpansionConfig.java
+++ b/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/ContainerExpansionConfig.java
@@ -1,6 +1,7 @@
package fun.bm.lophine.config.modules.function;
import me.earthme.luminol.config.IConfigModule;
+import me.earthme.luminol.config.flags.CommandSuggestions;
import me.earthme.luminol.config.flags.ConfigClassInfo;
import me.earthme.luminol.config.flags.ConfigInfo;
import me.earthme.luminol.config.flags.TransformedConfig;
@@ -9,18 +10,21 @@ import me.earthme.luminol.enums.EnumConfigCategory;
@ConfigClassInfo(configAttribution = EnumConfigCategory.FUNCTION, mainName = "container_expansion")
public class ContainerExpansionConfig implements IConfigModule {
@TransformedConfig(name = "barrel_rows", category = {"misc", "container_expansion"})
+ @CommandSuggestions(suggest = {"1", "2", "3", "4", "5", "6"})
@ConfigInfo(baseName = "barrel_rows", comments =
"""
range: 1~6""")
public static int barrelRows = 3;
@TransformedConfig(name = "enderchest_rows", category = {"misc", "container_expansion"})
+ @CommandSuggestions(suggest = {"1", "2", "3", "4", "5", "6"})
@ConfigInfo(baseName = "enderchest_rows", comments =
"""
range: 1~6""")
public static int enderchestRows = 3;
@TransformedConfig(name = "shulker_stackable_count", category = {"misc", "container_expansion"})
+ @CommandSuggestions(suggest = {"1", "2", "32", "64"})
@ConfigInfo(baseName = "shulker_stackable_count", comments =
"""
range: 1~64""")
diff --git a/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/SurvuxProtocolConfig.java b/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/SurvuxProtocolConfig.java
index fd478e0..18ae6d6 100644
--- a/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/SurvuxProtocolConfig.java
+++ b/lophine-server/src/main/java/fun/bm/lophine/config/modules/function/SurvuxProtocolConfig.java
@@ -1,6 +1,7 @@
package fun.bm.lophine.config.modules.function;
import me.earthme.luminol.config.IConfigModule;
+import me.earthme.luminol.config.flags.CommandSuggestions;
import me.earthme.luminol.config.flags.ConfigClassInfo;
import me.earthme.luminol.config.flags.ConfigInfo;
import me.earthme.luminol.config.flags.TransformedConfig;
@@ -43,6 +44,7 @@ public class SurvuxProtocolConfig implements IConfigModule {
public static boolean litematicsEnabled = false;
@TransformedConfig(name = "litematics-max-nbt-size", category = {"misc", "survux-protocol"})
+ @CommandSuggestions(suggest = {"-1", "2097152"})
@ConfigInfo(baseName = "litematics-max-nbt-size")
public static int litematicsMaxNbtSize = 2097152;
}
diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/util/ShearsWrenchUtil.java b/lophine-server/src/main/java/org/leavesmc/leaves/util/ShearsWrenchUtil.java
index 3b3a830..c2afc92 100644
--- a/lophine-server/src/main/java/org/leavesmc/leaves/util/ShearsWrenchUtil.java
+++ b/lophine-server/src/main/java/org/leavesmc/leaves/util/ShearsWrenchUtil.java
@@ -1,20 +1,3 @@
-/*
- * This file is part of Leaves (https://github.com/LeavesMC/Leaves)
- *
- * Leaves is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Leaves is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Leaves. If not, see .
- */
-
package org.leavesmc.leaves.util;
import fun.bm.lophine.config.modules.function.RedStoneConfig;
@@ -25,8 +8,6 @@ import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
-import net.minecraft.world.item.Items;
-import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.*;
@@ -47,6 +28,9 @@ public class ShearsWrenchUtil {
if (!RedStoneConfig.shears || !(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 || block instanceof TrapDoorBlock || block instanceof FenceGateBlock || block instanceof LightningRodBlock || block instanceof CalibratedSculkSensorBlock || block instanceof BaseRailBlock)) {
return null;
}
+ if (context.getPlayer() == null || !context.getPlayer().getItemInHand(invert(context.getHand())).isEmpty()) {
+ return null;
+ }
StateDefinition blockstatelist = block.getStateDefinition();
Property> iblockstate;
if (block instanceof CrafterBlock) {
@@ -106,10 +90,8 @@ public class ShearsWrenchUtil {
return InteractionResult.CONSUME;
}
- public static boolean shouldSkipPlace(BlockPlaceContext context) {
- return RedStoneConfig.shears &&
- context.getPlayer() != null &&
- context.getPlayer().getItemInHand(InteractionHand.MAIN_HAND).is(Items.SHEARS);
+ private static InteractionHand invert(InteractionHand original) {
+ return original == InteractionHand.MAIN_HAND ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND;
}
private static > BlockState cycleState(BlockState state, Property property, boolean inverse) {