From a514a5410bb9e26168a94ad95e5b4950b02a2b5c Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 22 Jun 2019 14:50:55 -0300 Subject: [PATCH] qc --- .../carpet/mixins/DispenserBlock_qcMixin.java | 25 ++++++++++++++++ .../carpet/mixins/PistonBlock_qcMixin.java | 29 +++++++++++++++++++ .../java/carpet/settings/CarpetSettings.java | 10 ++++--- .../java/carpet/settings/SettingsManager.java | 5 +--- src/main/resources/carpet.mixins.json | 3 ++ 5 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 src/main/java/carpet/mixins/DispenserBlock_qcMixin.java create mode 100644 src/main/java/carpet/mixins/PistonBlock_qcMixin.java diff --git a/src/main/java/carpet/mixins/DispenserBlock_qcMixin.java b/src/main/java/carpet/mixins/DispenserBlock_qcMixin.java new file mode 100644 index 00000000..c419fcee --- /dev/null +++ b/src/main/java/carpet/mixins/DispenserBlock_qcMixin.java @@ -0,0 +1,25 @@ +package carpet.mixins; + +import carpet.settings.CarpetSettings; +import net.minecraft.block.DispenserBlock; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(DispenserBlock.class) +public class DispenserBlock_qcMixin +{ + @Redirect(method = "neighborUpdate", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/World;isReceivingRedstonePower(Lnet/minecraft/util/math/BlockPos;)Z", + ordinal = 1 + )) + private boolean checkUpPower(World world, BlockPos blockPos_1) + { + if (!CarpetSettings.quasiConnectivity) + return false; + return world.isReceivingRedstonePower(blockPos_1); + } +} diff --git a/src/main/java/carpet/mixins/PistonBlock_qcMixin.java b/src/main/java/carpet/mixins/PistonBlock_qcMixin.java new file mode 100644 index 00000000..71f09a15 --- /dev/null +++ b/src/main/java/carpet/mixins/PistonBlock_qcMixin.java @@ -0,0 +1,29 @@ +package carpet.mixins; + +import carpet.settings.CarpetSettings; +import net.minecraft.block.PistonBlock; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(PistonBlock.class) +public class PistonBlock_qcMixin +{ + @Inject(method = "shouldExtend", cancellable = true, at = @At( + value = "INVOKE", + target = "Lnet/minecraft/util/math/BlockPos;up()Lnet/minecraft/util/math/BlockPos;" + )) + private void cancelUpCheck(World world_1, BlockPos blockPos_1, Direction direction_1, CallbackInfoReturnable cir) + { + if (!CarpetSettings.quasiConnectivity) + { + cir.setReturnValue(false); + cir.cancel(); + } + } + +} diff --git a/src/main/java/carpet/settings/CarpetSettings.java b/src/main/java/carpet/settings/CarpetSettings.java index b0a6eaf6..26cc4fb6 100644 --- a/src/main/java/carpet/settings/CarpetSettings.java +++ b/src/main/java/carpet/settings/CarpetSettings.java @@ -121,7 +121,7 @@ public class CarpetSettings ) public static boolean antiCheatSpeed = false; - @Rule(desc = "Pistons, droppers and dispensers react if block above them is powered", category = CREATIVE, validate = Validator.WIP.class) + @Rule(desc = "Pistons, droppers and dispensers react if block above them is powered", category = CREATIVE) public static boolean quasiConnectivity = true; @Rule( @@ -315,6 +315,10 @@ public class CarpetSettings { @Override public Integer validate(ServerCommandSource source, ParsedRule currentRule, Integer newValue, String string) { + if (currentRule.get().equals(newValue)) + { + return newValue; + } if (newValue < 0 || newValue > 32) { Messenger.m(source, "r view distance has to be between 0 and 32"); @@ -349,13 +353,11 @@ public class CarpetSettings private static class DisableSpawnChunksValidator extends Validator { @Override public Boolean validate(ServerCommandSource source, ParsedRule currentRule, Boolean newValue, String string) { - if (currentRule.get() == newValue) + if (currentRule.get().booleanValue() == newValue.booleanValue()) { //must been some startup thing return newValue; } - if (!newValue) - Messenger.m(source, "w Spawn chunks re-enabled. Visit spawn to load them?"); ServerWorld overworld = CarpetServer.minecraft_server.getWorld(DimensionType.OVERWORLD); if (overworld != null) { ChunkPos centerChunk = new ChunkPos(overworld.getSpawnPos()); diff --git a/src/main/java/carpet/settings/SettingsManager.java b/src/main/java/carpet/settings/SettingsManager.java index 091ad7c1..601e74a2 100644 --- a/src/main/java/carpet/settings/SettingsManager.java +++ b/src/main/java/carpet/settings/SettingsManager.java @@ -78,10 +78,7 @@ public class SettingsManager public static Collection> getRules() { - CarpetSettings.LOG.error("grabbing rules"); - List> r = rules.values().stream().sorted().collect(Collectors.toList()); - CarpetSettings.LOG.error("Got: "+r.size()+" rules"); - return r; + return rules.values().stream().sorted().collect(Collectors.toList()); } public Collection> findStartupOverrides() diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 99dfa292..622fd716 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -88,6 +88,9 @@ "InfestedBlockMixin", "PlayerEntityMixin", + "PistonBlock_qcMixin", + "DispenserBlock_qcMixin", + "PistonBlock_movableTEMixin", "PistonBlockEntity_movableTEMixin", "World_movableTEMixin",