diff --git a/src/main/java/carpet/CarpetServer.java b/src/main/java/carpet/CarpetServer.java index fb0afbdc..88fb81de 100644 --- a/src/main/java/carpet/CarpetServer.java +++ b/src/main/java/carpet/CarpetServer.java @@ -1,6 +1,5 @@ package carpet; - import java.util.ArrayList; import java.util.List; import java.util.Random; @@ -39,8 +38,11 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.dedicated.command.PerfCommand; import net.minecraft.server.network.ServerPlayerEntity; -public class CarpetServer implements ClientModInitializer,DedicatedServerModInitializer // static for now - easier to handle all around the code, its one anyways +public class CarpetServer // static for now - easier to handle all around the code, its one anyways { + public static final ClientModInitializer CLIENT_INITIALIZER = CarpetServer::onGameStarted; + public static final DedicatedServerModInitializer SERVER_INITIALIZER = CarpetServer::onGameStarted; + public static final Random rand = new Random(); public static MinecraftServer minecraft_server; private static CommandDispatcher currentCommandDispatcher; @@ -48,17 +50,6 @@ public class CarpetServer implements ClientModInitializer,DedicatedServerModInit public static SettingsManager settingsManager; public static final List extensions = new ArrayList<>(); - @Override - public void onInitializeClient() - { - CarpetServer.onGameStarted(); - } - @Override - public void onInitializeServer() - { - CarpetServer.onGameStarted(); - } - // Separate from onServerLoaded, because a server can be loaded multiple times in singleplayer /** * Registers a {@link CarpetExtension} to be managed by Carpet.
diff --git a/src/main/java/carpet/mixins/ShulkerBoxBlockEntity_creativeNoClipMixin.java b/src/main/java/carpet/mixins/ShulkerBoxBlockEntity_creativeNoClipMixin.java new file mode 100644 index 00000000..d3deec9c --- /dev/null +++ b/src/main/java/carpet/mixins/ShulkerBoxBlockEntity_creativeNoClipMixin.java @@ -0,0 +1,25 @@ +package carpet.mixins; + +import carpet.CarpetSettings; +import net.minecraft.block.entity.ShulkerBoxBlockEntity; +import net.minecraft.block.piston.PistonBehavior; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(ShulkerBoxBlockEntity.class) +public class ShulkerBoxBlockEntity_creativeNoClipMixin +{ + @Redirect(method = "pushEntities", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/entity/Entity;getPistonBehavior()Lnet/minecraft/block/piston/PistonBehavior;" + )) + private PistonBehavior getPistonBehaviourOfNoClipPlayers(Entity entity) + { + if (CarpetSettings.creativeNoClip && entity instanceof PlayerEntity && (((PlayerEntity) entity).isCreative()) && ((PlayerEntity) entity).abilities.flying) + return PistonBehavior.IGNORE; + return entity.getPistonBehavior(); + } +} diff --git a/src/main/java/carpet/script/CarpetScriptHost.java b/src/main/java/carpet/script/CarpetScriptHost.java index 02269744..02673b6d 100644 --- a/src/main/java/carpet/script/CarpetScriptHost.java +++ b/src/main/java/carpet/script/CarpetScriptHost.java @@ -378,7 +378,7 @@ public class CarpetScriptHost extends ScriptHost } catch (CommandSyntaxException e) { - notifier.accept(Messenger.c("Error when handling of setting up custom argument types: "+e.getMessage())); + notifier.accept(Messenger.c("r Error when handling of setting up custom argument types: "+e.getMessage())); return false; } if (appConfig.get(StringValue.of("commands")) != null) @@ -743,11 +743,8 @@ public class CarpetScriptHost extends ScriptHost { case VARIABLE: LazyValue var = getGlobalVariable(tok.surface); - if (var != null) - { - argv.add(var); - break; - } + if (var != null) argv.add(var); + break; case STRINGPARAM: argv.add((c, t) -> new StringValue(tok.surface)); sign = ""; diff --git a/src/main/java/carpet/script/Expression.java b/src/main/java/carpet/script/Expression.java index b1a62fcc..285c2135 100644 --- a/src/main/java/carpet/script/Expression.java +++ b/src/main/java/carpet/script/Expression.java @@ -852,6 +852,7 @@ public class Expression { outputQueue.add(stack.pop()); } + break; case MARKER: if ("$".equals(token.surface)) { diff --git a/src/main/java/carpet/script/value/ListValue.java b/src/main/java/carpet/script/value/ListValue.java index 8f81486f..7420e4ac 100644 --- a/src/main/java/carpet/script/value/ListValue.java +++ b/src/main/java/carpet/script/value/ListValue.java @@ -436,8 +436,9 @@ public class ListValue extends AbstractListValue implements ContainerValueInterf @Override public Value get(Value value) { - long index = NumericValue.asNumber(value, "'address' to a list index").getLong(); - return items.get(normalizeIndex(index, items.size())); + int size = items.size(); + if (size == 0) return Value.NULL; + return items.get(normalizeIndex(NumericValue.asNumber(value, "'address' to a list index").getLong(), size)); } @Override diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 3a9766ca..69503545 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -209,7 +209,8 @@ "PistonBlockEntity_playerHandlingMixin", "BlockItem_creativeNoClipMixin", "WallStandingBlockItem_creativeNoClipMixin", - "LivingEntity_creativeFlyMixin", + "ShulkerBoxBlockEntity_creativeNoClipMixin", + "LivingEntity_creativeFlyMixin" "VeryBiasedToBottomHeightProvider_cleanLogsMixin", "TrapezoidHeightProvider_cleanLogsMixin" diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 76f27d3e..e5329f06 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -20,10 +20,10 @@ "environment": "*", "entrypoints": { "client": [ - "carpet.CarpetServer" + "carpet.CarpetServer::CLIENT_INITIALIZER" ], "server": [ - "carpet.CarpetServer" + "carpet.CarpetServer::SERVER_INITIALIZER" ] }, "mixins": [