diff --git a/gradle.properties b/gradle.properties index 4cefad5..b218ceb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,17 +3,19 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://modmuss50.me/fabric.html -minecraft_version=1.20.6 -yarn_mappings=1.20.6+build.3 +minecraft_version=1.21 +yarn_mappings=1.21+build.1 loader_version=0.15.11 +# Fabric API +fabric_version=0.100.1+1.21 + # Mod Properties -mod_version=2.4 +mod_version=2.5 maven_group=systems.brn archives_base_name=Server_storage # Dependencies -fabric_version=0.99.0+1.20.6 -polymer_version=0.8.0+1.20.6 -server_translations_api_version=2.3.0+1.20.5-rc2 -servergui_version=1.5.1+1.20.5 \ No newline at end of file +polymer_version=0.8.4+1.20.6 +server_translations_api_version=2.3.1+1.21-pre2 +servergui_version=1.6.0+1.21 \ No newline at end of file diff --git a/src/main/java/systems/brn/server_storage/ServerStorage.java b/src/main/java/systems/brn/server_storage/ServerStorage.java index 001a99c..bab914b 100644 --- a/src/main/java/systems/brn/server_storage/ServerStorage.java +++ b/src/main/java/systems/brn/server_storage/ServerStorage.java @@ -2,7 +2,10 @@ package systems.brn.server_storage; import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.gamerule.v1.GameRuleFactory; +import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.world.GameRules; import systems.brn.server_storage.blockentities.StorageBlockEntity; import systems.brn.server_storage.blocks.StorageBlock; import systems.brn.server_storage.items.StorageBlockItem; @@ -13,6 +16,9 @@ public class ServerStorage implements ModInitializer { public static StorageBlock STORAGE_BLOCK; public static BlockEntityType STORAGE_BLOCK_ENTITY; + public static final GameRules.Key ServerStorage_Crafting_Enable = + GameRuleRegistry.register("enableserverstoragecrafting", GameRules.Category.MISC, GameRuleFactory.createBooleanRule(false)); + @Override public void onInitialize() { diff --git a/src/main/java/systems/brn/server_storage/screens/CraftingScreen.java b/src/main/java/systems/brn/server_storage/screens/CraftingScreen.java index 7a27713..9f816a3 100644 --- a/src/main/java/systems/brn/server_storage/screens/CraftingScreen.java +++ b/src/main/java/systems/brn/server_storage/screens/CraftingScreen.java @@ -95,6 +95,8 @@ public class CraftingScreen extends PagedGui { return true; //stop } + ArrayList stacksToRemove = new ArrayList<>(); + // Check and remove ingredients for (Ingredient ingredient : recipeEntry.value().getIngredients()) { ItemStack stackToRemove = findMatchingStack(ingredient); @@ -106,10 +108,14 @@ public class CraftingScreen extends PagedGui { if (requiredCount > 0 && canRemoveCount(stackToRemove, this.storageScreen.getPlayer().getInventory()) < requiredCount) { return true; } else { - removeItems(stackToRemove, requiredCount); + stacksToRemove.add(stackToRemove); } } + for (ItemStack stack : stacksToRemove) { + removeItems(stack); + } + // Add the result to the appropriate inventory ItemStack outputStack = recipeEntry.value().getResult(storageScreen.getPlayer().getRegistryManager()); if (toPlayerInventory) { @@ -132,7 +138,7 @@ public class CraftingScreen extends PagedGui { if (stackToRemove == null){ return false; } - removeItems(stackToRemove, stackToRemove.getCount()); + removeItems(stackToRemove); } return false; } @@ -161,11 +167,9 @@ public class CraftingScreen extends PagedGui { return null; } - private void removeItems(ItemStack stack, int count) { + private void removeItems(ItemStack stack) { // Logic to remove items from the storage - ItemStack stackRemove = stack.copy(); - stackRemove.setCount(count); - ItemStack fromPlayer = this.storageScreen.blockEntity.chests.removeItemStack(stackRemove); + ItemStack fromPlayer = this.storageScreen.blockEntity.chests.removeItemStack(stack); if (fromPlayer != null && fromPlayer.getCount() > 0) { Inventory playerInventory = player.getInventory(); for (int i = 0; i < playerInventory.size(); i++) { diff --git a/src/main/java/systems/brn/server_storage/screens/StorageScreen.java b/src/main/java/systems/brn/server_storage/screens/StorageScreen.java index 875e01c..0bb8f26 100644 --- a/src/main/java/systems/brn/server_storage/screens/StorageScreen.java +++ b/src/main/java/systems/brn/server_storage/screens/StorageScreen.java @@ -14,6 +14,7 @@ import org.jetbrains.annotations.Nullable; import systems.brn.server_storage.blockentities.StorageBlockEntity; import systems.brn.server_storage.lib.PagedGui; +import static systems.brn.server_storage.ServerStorage.ServerStorage_Crafting_Enable; import static systems.brn.server_storage.lib.StorageOperations.*; import static systems.brn.server_storage.lib.Util.addCountToLore; import static systems.brn.server_storage.lib.Util.removeCountFromLore; @@ -183,6 +184,9 @@ public class StorageScreen extends PagedGui { @Override protected DisplayElement crafting() { + if (!this.getPlayer().getWorld().getGameRules().getBoolean(ServerStorage_Crafting_Enable)){ + return DisplayElement.filler(); + } return DisplayElement.of( new GuiElementBuilder(Items.PLAYER_HEAD) .setName(Text.translatable("container.crafting").formatted(Formatting.WHITE))