diff --git a/gradle.properties b/gradle.properties index 0d30dbc..1c11d9b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G org.gradle.parallel=true # Fabric -loader_version=0.16.5 +loader_version=0.16.10 yarn_mappings=1.21+build.9 minecraft_version=1.21 fabric_version=0.102.0+1.21 diff --git a/src/main/java/online/connlost/allstackable/AllStackable.java b/src/main/java/online/connlost/allstackable/AllStackable.java index 71a453c..31841a6 100644 --- a/src/main/java/online/connlost/allstackable/AllStackable.java +++ b/src/main/java/online/connlost/allstackable/AllStackable.java @@ -1,23 +1,26 @@ package online.connlost.allstackable; +import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import online.connlost.allstackable.server.Server; import online.connlost.allstackable.server.command.StackSizeCommand; import online.connlost.allstackable.util.ByteArrayPayload; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import net.fabricmc.api.ModInitializer; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; -public class AllStackable implements ModInitializer { - public static final Logger LOGGER = LogManager.getLogger(); +import static online.connlost.allstackable.server.Server.config_manager; + +public class AllStackable implements ModInitializer{ + public static final Logger LOGGER = LogManager.getLogger(); - @Override - public void onInitialize() { - PayloadTypeRegistry.playS2C().register(ByteArrayPayload.ID, ByteArrayPayload.CODEC); - LOGGER.info("[All Stackable] Start loading!"); - StackSizeCommand.register(); - LOGGER.info("[All Stackable] Command registered."); - ServerLifecycleEvents.SERVER_STARTED.register(Server::onServerLoaded); - } + @Override + public void onInitialize() { + PayloadTypeRegistry.playS2C().register(ByteArrayPayload.ID, ByteArrayPayload.CODEC); + LOGGER.info("[All Stackable] Start loading!"); + StackSizeCommand.register(); + LOGGER.info("[All Stackable] Command registered."); + ServerLifecycleEvents.SERVER_STARTING.register(Server::onServerLoaded); + ServerLifecycleEvents.SERVER_STARTED.register((minecraftServer) -> config_manager.sandConfig2Player()); + } } diff --git a/src/main/java/online/connlost/allstackable/mixin/MixinBucketItem.java b/src/main/java/online/connlost/allstackable/mixin/MixinBucketItem.java index a675d69..db7745c 100644 --- a/src/main/java/online/connlost/allstackable/mixin/MixinBucketItem.java +++ b/src/main/java/online/connlost/allstackable/mixin/MixinBucketItem.java @@ -1,25 +1,27 @@ package online.connlost.allstackable.mixin; + +import net.minecraft.screen.slot.SlotActionType; import online.connlost.allstackable.util.ItemsHelper; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BucketItem; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(BucketItem.class) public class MixinBucketItem { - - @Inject(method = "getEmptiedStack", at = @At(value = "HEAD"), cancellable = true) - private static void stackableBucket(ItemStack stack, PlayerEntity player, CallbackInfoReturnable cir){ - if (ItemsHelper.isModified(stack) && stack.getCount() > 1 && !player.getAbilities().creativeMode){ - ItemsHelper.insertNewItem(player, new ItemStack(Items.BUCKET)); - stack.decrement(1); - cir.setReturnValue(stack); - } - } +// @Inject(method = "getEmptiedStack", at = @At(value = "HEAD"), cancellable = true) +// private static void stackableBucket(ItemStack stack, PlayerEntity player, CallbackInfoReturnable cir){ +// if (ItemsHelper.isModified(stack) && stack.getCount() > 1 && !player.getAbilities().creativeMode){ +// ItemsHelper.insertNewItem(player, new ItemStack(Items.BUCKET)); +// stack.decrement(1); +// cir.setReturnValue(stack); +// } +// } } diff --git a/src/main/java/online/connlost/allstackable/mixin/MixinLevelStorage.java b/src/main/java/online/connlost/allstackable/mixin/MixinLevelStorage.java new file mode 100644 index 0000000..69bc65e --- /dev/null +++ b/src/main/java/online/connlost/allstackable/mixin/MixinLevelStorage.java @@ -0,0 +1,22 @@ +package online.connlost.allstackable.mixin; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.world.level.storage.LevelStorage; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import java.nio.file.Path; +import static online.connlost.allstackable.server.Server.config_manager; + + +@Mixin(LevelStorage.class) +public class MixinLevelStorage { + @WrapOperation(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/storage/LevelStorage;resolve(Ljava/lang/String;)Ljava/nio/file/Path;"), method = "createSession") + private Path initConfig(LevelStorage instance, String name, Operation original){ + Path path = original.call(instance, name); + config_manager.passConfigFile(path.resolve("allstackable-config.json").toFile()); + config_manager.setupConfig(); + return path; + } +} diff --git a/src/main/java/online/connlost/allstackable/server/Server.java b/src/main/java/online/connlost/allstackable/server/Server.java index b1181eb..c6a05a2 100644 --- a/src/main/java/online/connlost/allstackable/server/Server.java +++ b/src/main/java/online/connlost/allstackable/server/Server.java @@ -4,23 +4,22 @@ import online.connlost.allstackable.util.NetworkHelper; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.WorldSavePath; import online.connlost.allstackable.AllStackable; + public class Server { public static MinecraftServer minecraft_server; public static ConfigManager config_manager = ConfigManager.getConfigManager(); - public static void onServerLoaded(MinecraftServer ms){ + public static void onServerLoaded(MinecraftServer ms) { minecraft_server = ms; - config_manager.passConfigFile(minecraft_server.getSavePath(WorldSavePath.ROOT).resolve("allstackable-config.json").toFile()); +// config_manager.passConfigFile(minecraft_server.getSavePath(WorldSavePath.ROOT).resolve("allstackable-config.json").toFile()); config_manager.setupConfig(); AllStackable.LOGGER.info("[All Stackable] Loaded!"); } - public static void onPlayerJoin(ServerPlayerEntity player){ + public static void onPlayerJoin(ServerPlayerEntity player) { NetworkHelper.sentConfigToPlayer(player, ConfigManager.getConfigManager().getSerializedConfig()); } - } diff --git a/src/main/java/online/connlost/allstackable/server/config/ConfigManager.java b/src/main/java/online/connlost/allstackable/server/config/ConfigManager.java index 58b51d6..0efb37f 100644 --- a/src/main/java/online/connlost/allstackable/server/config/ConfigManager.java +++ b/src/main/java/online/connlost/allstackable/server/config/ConfigManager.java @@ -16,7 +16,7 @@ final public class ConfigManager { private static ConfigManager cm; - private File configFile; + public File configFile; private File globalConfigFile; private Gson gson; private ItemsHelper itemsHelper; @@ -95,9 +95,11 @@ public void passConfigFile(File f) { public void setupConfig() { loadConfig(); itemsHelper.setCountByConfig(this.configList.get(0).entrySet(), true); - NetworkHelper.sentConfigToAll(); AllStackable.LOGGER.info("[All Stackable] Config Loaded"); } + public void sandConfig2Player(){ + NetworkHelper.sentConfigToAll(); + } public boolean restoreBackup() { File bk = configFile.getParentFile().toPath().resolve("allstackable-config.json.bk").toFile(); diff --git a/src/main/resources/allstackable.mixins.json b/src/main/resources/allstackable.mixins.json index 76b7911..306983d 100644 --- a/src/main/resources/allstackable.mixins.json +++ b/src/main/resources/allstackable.mixins.json @@ -1,28 +1,29 @@ { - "required": true, - "package": "online.connlost.allstackable.mixin", - "compatibilityLevel": "JAVA_21", - "mixins": [ - "MixinItem", - "MixinPlayerManager", - "MixinSuspiciousStewItem", - "MixinBucketItem", - "MixinItemStack", - "MixinPowderSnowBucketItem", - "MixinCauldronBlock", - "MixinAxolotlEntity", - "MixinAbstractFurnaceBlockEntity", - "MixinAnvilScreenHandler", - "MixinDispenserBehavior8", - "MixinDispenserBehavior9", - "MixinHorseScreenHandler", - "MixinServerPlayNetworkHandler", - "MixinJukeboxBlockEntity", - "AccessorFurnaceInventory", - "MixinPotionItem", - "MixinDispenserBlockEntity" - ], - "injectors": { - "defaultRequire": 1 + "required": true, + "package": "online.connlost.allstackable.mixin", + "compatibilityLevel": "JAVA_21", + "mixins": [ + "AccessorFurnaceInventory", + "MixinAbstractFurnaceBlockEntity", + "MixinAnvilScreenHandler", + "MixinAxolotlEntity", + "MixinBucketItem", + "MixinCauldronBlock", + "MixinDispenserBehavior8", + "MixinDispenserBehavior9", + "MixinDispenserBlockEntity", + "MixinHorseScreenHandler", + "MixinItem", + "MixinItemStack", + "MixinJukeboxBlockEntity", + "MixinPlayerManager", + "MixinPotionItem", + "MixinPowderSnowBucketItem", + "MixinServerPlayNetworkHandler", + "MixinSuspiciousStewItem", + "MixinLevelStorage" + ], + "injectors": { + "defaultRequire": 1 } } \ No newline at end of file