Fix some stuff, crafting is broken
This commit is contained in:
		| @@ -1,5 +1,5 @@ | |||||||
| plugins { | plugins { | ||||||
|     id 'fabric-loom' version '1.6-SNAPSHOT' |     id 'fabric-loom' version '1.8-SNAPSHOT' | ||||||
|     id 'maven-publish' |     id 'maven-publish' | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3,19 +3,19 @@ org.gradle.jvmargs=-Xmx1G | |||||||
| # Fabric Properties | # Fabric Properties | ||||||
| # check these on https://modmuss50.me/fabric.html | # check these on https://modmuss50.me/fabric.html | ||||||
|  |  | ||||||
| minecraft_version=1.21.1 | minecraft_version=1.21.3 | ||||||
| yarn_mappings=1.21.1+build.3 | yarn_mappings=1.21.3+build.2 | ||||||
| loader_version=0.16.0 | loader_version=0.16.8 | ||||||
|  |  | ||||||
| # Fabric API | # Fabric API | ||||||
| fabric_version=0.102.1+1.21.1 | fabric_version=0.107.0+1.21.3 | ||||||
|  |  | ||||||
| # Mod Properties | # Mod Properties | ||||||
| mod_version=3.2.9 | mod_version=3.3.0 | ||||||
| maven_group=systems.brn | maven_group=systems.brn | ||||||
| archives_base_name=Serverstorage | archives_base_name=Serverstorage | ||||||
|  |  | ||||||
| # Dependencies | # Dependencies | ||||||
| polymer_version=0.9.9+1.21 | polymer_version=0.10.1+1.21.3 | ||||||
| server_translations_api_version=2.3.1+1.21-pre2 | server_translations_api_version=2.4.0+1.21.2-rc1 | ||||||
| servergui_version=1.6.0+1.21 | servergui_version=1.7.2+1.21.2 | ||||||
							
								
								
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| distributionBase=GRADLE_USER_HOME | distributionBase=GRADLE_USER_HOME | ||||||
| distributionPath=wrapper/dists | distributionPath=wrapper/dists | ||||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip | ||||||
| networkTimeout=10000 | networkTimeout=10000 | ||||||
| validateDistributionUrl=true | validateDistributionUrl=true | ||||||
| zipStoreBase=GRADLE_USER_HOME | zipStoreBase=GRADLE_USER_HOME | ||||||
|   | |||||||
| @@ -56,7 +56,7 @@ public class ServerStorage implements ModInitializer { | |||||||
|     public static BlockEntityType<InventoryInterfaceBlockEntity> INVENTORY_INTERFACE_BLOCK_ENTITY; |     public static BlockEntityType<InventoryInterfaceBlockEntity> INVENTORY_INTERFACE_BLOCK_ENTITY; | ||||||
|  |  | ||||||
|     public static final GameRules.Key<GameRules.BooleanRule> ServerStorage_Crafting_Enable = |     public static final GameRules.Key<GameRules.BooleanRule> ServerStorage_Crafting_Enable = | ||||||
|             GameRuleRegistry.register("serverstorage_crafting_module", GameRules.Category.MISC, GameRuleFactory.createBooleanRule(true)); |             GameRuleRegistry.register("serverstorage_crafting_module", GameRules.Category.MISC, GameRuleFactory.createBooleanRule(false)); | ||||||
|  |  | ||||||
|     public static final GameRules.Key<GameRules.BooleanRule> ServerStorage_Terminal_Enable = |     public static final GameRules.Key<GameRules.BooleanRule> ServerStorage_Terminal_Enable = | ||||||
|             GameRuleRegistry.register("serverstorage_terminal_module", GameRules.Category.MISC, GameRuleFactory.createBooleanRule(true)); |             GameRuleRegistry.register("serverstorage_terminal_module", GameRules.Category.MISC, GameRuleFactory.createBooleanRule(true)); | ||||||
|   | |||||||
| @@ -6,6 +6,7 @@ import net.minecraft.inventory.Inventory; | |||||||
| import net.minecraft.item.ItemStack; | import net.minecraft.item.ItemStack; | ||||||
| import net.minecraft.nbt.NbtCompound; | import net.minecraft.nbt.NbtCompound; | ||||||
| import net.minecraft.registry.RegistryWrapper; | import net.minecraft.registry.RegistryWrapper; | ||||||
|  | import net.minecraft.server.world.ServerWorld; | ||||||
| import net.minecraft.state.property.EnumProperty; | import net.minecraft.state.property.EnumProperty; | ||||||
| import net.minecraft.util.math.BlockPos; | import net.minecraft.util.math.BlockPos; | ||||||
| import net.minecraft.util.math.Direction; | import net.minecraft.util.math.Direction; | ||||||
| @@ -107,7 +108,7 @@ public class InventoryInterfaceBlockEntity extends BlockEntity { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public int processIncoming(ItemStack stack, int count) { |     public int processIncoming(ItemStack stack, int count) { | ||||||
|         if (world != null && world.getGameRules().getBoolean(ServerStorage_Interface_Enable) && isOutput && filterItem(stack.getItem(), query)) { |         if (world != null && ((ServerWorld) world).getGameRules().getBoolean(ServerStorage_Interface_Enable) && isOutput && filterItem(stack.getItem(), query)) { | ||||||
|             BlockPos targetedPos = pos.offset(direction); |             BlockPos targetedPos = pos.offset(direction); | ||||||
|             BlockEntity targetedBlockEntity = world.getBlockEntity(targetedPos); |             BlockEntity targetedBlockEntity = world.getBlockEntity(targetedPos); | ||||||
|             EnumProperty<ConnectionType> connectionType = getPropertyForDirection(direction); |             EnumProperty<ConnectionType> connectionType = getPropertyForDirection(direction); | ||||||
| @@ -124,7 +125,7 @@ public class InventoryInterfaceBlockEntity extends BlockEntity { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static <T extends BlockEntity> void tick(World world, BlockPos blockPos, BlockState ignoredState, T ignoredt) { |     public static <T extends BlockEntity> void tick(World world, BlockPos blockPos, BlockState ignoredState, T ignoredt) { | ||||||
|         if (!world.getGameRules().getBoolean(ServerStorage_Interface_Enable)) { |         if (!((ServerWorld) world).getGameRules().getBoolean(ServerStorage_Interface_Enable)) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         InventoryInterfaceBlockEntity blockEntity = (InventoryInterfaceBlockEntity) world.getBlockEntity(blockPos); |         InventoryInterfaceBlockEntity blockEntity = (InventoryInterfaceBlockEntity) world.getBlockEntity(blockPos); | ||||||
|   | |||||||
| @@ -7,7 +7,10 @@ import eu.pb4.polymer.blocks.api.PolymerTexturedBlock; | |||||||
| import net.minecraft.block.*; | import net.minecraft.block.*; | ||||||
| import net.minecraft.registry.Registries; | import net.minecraft.registry.Registries; | ||||||
| import net.minecraft.registry.Registry; | import net.minecraft.registry.Registry; | ||||||
|  | import net.minecraft.registry.RegistryKey; | ||||||
|  | import net.minecraft.registry.RegistryKeys; | ||||||
| import net.minecraft.util.Identifier; | import net.minecraft.util.Identifier; | ||||||
|  | import xyz.nucleoid.packettweaker.PacketContext; | ||||||
|  |  | ||||||
| import static systems.brn.serverstorage.ServerStorage.*; | import static systems.brn.serverstorage.ServerStorage.*; | ||||||
|  |  | ||||||
| @@ -27,14 +30,14 @@ public class BusConnectorBlock extends ConnectedBlock implements PolymerTextured | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public BlockState getPolymerBlockState(BlockState state) { |     public BlockState getPolymerBlockState(BlockState state, PacketContext packetContext) { | ||||||
|         return this.polymerBlockState; |         return this.polymerBlockState; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static void register() { |     public static void register() { | ||||||
|         var modId = id(BUS_CONNECTOR_MODEL_ID); |         var modId = id(BUS_CONNECTOR_MODEL_ID); | ||||||
|         BUS_CONNECTOR_BLOCK = Registry.register(Registries.BLOCK, modId, |         BUS_CONNECTOR_BLOCK = Registry.register(Registries.BLOCK, modId, | ||||||
|                 new BusConnectorBlock(AbstractBlock.Settings.copy(Blocks.WHITE_WOOL), modId)); |                 new BusConnectorBlock(AbstractBlock.Settings.copy(Blocks.WHITE_WOOL).registryKey(RegistryKey.of(RegistryKeys.BLOCK, modId)), modId)); | ||||||
|         BUS_CONNECTOR_BLOCK.setDefaultState(); |         BUS_CONNECTOR_BLOCK.setDefaultState(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -16,6 +16,7 @@ import net.minecraft.util.Identifier; | |||||||
| import net.minecraft.util.math.BlockPos; | import net.minecraft.util.math.BlockPos; | ||||||
| import net.minecraft.util.math.Direction; | import net.minecraft.util.math.Direction; | ||||||
| import net.minecraft.world.World; | import net.minecraft.world.World; | ||||||
|  | import net.minecraft.world.block.WireOrientation; | ||||||
| import systems.brn.serverstorage.lib.ConnectionType; | import systems.brn.serverstorage.lib.ConnectionType; | ||||||
|  |  | ||||||
| import java.util.HashMap; | import java.util.HashMap; | ||||||
| @@ -92,9 +93,9 @@ public class ConnectedBlock extends SimplePolymerBlock { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void neighborUpdate(BlockState state, World world, BlockPos pos, Block block, BlockPos fromPos, boolean notify) { |     public void neighborUpdate(BlockState state, World world, BlockPos pos, Block block, WireOrientation wireOrientation, boolean notify) { | ||||||
|         updateBlockState(world, pos, state); |         updateBlockState(world, pos, state); | ||||||
|         super.neighborUpdate(state, world, pos, block, fromPos, notify); |         super.neighborUpdate(state, world, pos, block, wireOrientation, notify); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private BlockState updateState(BlockState state, World world, BlockPos pos) { |     private BlockState updateState(BlockState state, World world, BlockPos pos) { | ||||||
|   | |||||||
| @@ -3,15 +3,17 @@ package systems.brn.serverstorage.blocks; | |||||||
| import eu.pb4.polymer.blocks.api.PolymerTexturedBlock; | import eu.pb4.polymer.blocks.api.PolymerTexturedBlock; | ||||||
| import eu.pb4.polymer.core.api.block.PolymerBlockUtils; | import eu.pb4.polymer.core.api.block.PolymerBlockUtils; | ||||||
| import net.fabricmc.fabric.api.event.player.UseBlockCallback; | import net.fabricmc.fabric.api.event.player.UseBlockCallback; | ||||||
|  | import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; | ||||||
| import net.minecraft.block.*; | import net.minecraft.block.*; | ||||||
| import net.minecraft.block.entity.BlockEntity; | import net.minecraft.block.entity.BlockEntity; | ||||||
| import net.minecraft.block.entity.BlockEntityType; |  | ||||||
| import net.minecraft.entity.player.PlayerEntity; | import net.minecraft.entity.player.PlayerEntity; | ||||||
| import net.minecraft.item.ItemPlacementContext; | import net.minecraft.item.ItemPlacementContext; | ||||||
| import net.minecraft.registry.Registries; | import net.minecraft.registry.Registries; | ||||||
| import net.minecraft.registry.Registry; | import net.minecraft.registry.Registry; | ||||||
|  | import net.minecraft.registry.RegistryKey; | ||||||
|  | import net.minecraft.registry.RegistryKeys; | ||||||
| import net.minecraft.state.StateManager; | import net.minecraft.state.StateManager; | ||||||
| import net.minecraft.state.property.DirectionProperty; | import net.minecraft.state.property.EnumProperty; | ||||||
| import net.minecraft.util.ActionResult; | import net.minecraft.util.ActionResult; | ||||||
| import net.minecraft.util.Hand; | import net.minecraft.util.Hand; | ||||||
| import net.minecraft.util.Identifier; | import net.minecraft.util.Identifier; | ||||||
| @@ -23,6 +25,7 @@ import net.minecraft.world.World; | |||||||
| import org.jetbrains.annotations.Nullable; | import org.jetbrains.annotations.Nullable; | ||||||
| import systems.brn.serverstorage.blockentities.HardDriveContainerBlockEntity; | import systems.brn.serverstorage.blockentities.HardDriveContainerBlockEntity; | ||||||
| import systems.brn.serverstorage.lib.StorageNetwork; | import systems.brn.serverstorage.lib.StorageNetwork; | ||||||
|  | import xyz.nucleoid.packettweaker.PacketContext; | ||||||
|  |  | ||||||
| import java.util.HashMap; | import java.util.HashMap; | ||||||
|  |  | ||||||
| @@ -31,7 +34,7 @@ import static systems.brn.serverstorage.ServerStorage.*; | |||||||
| public class HardDriveContainerBlock extends ConnectedBlock implements PolymerTexturedBlock, BlockEntityProvider { | public class HardDriveContainerBlock extends ConnectedBlock implements PolymerTexturedBlock, BlockEntityProvider { | ||||||
|  |  | ||||||
|     final Identifier identifier; |     final Identifier identifier; | ||||||
|     public static final DirectionProperty FACING = FacingBlock.FACING; |     public static final EnumProperty<Direction> FACING = FacingBlock.FACING; | ||||||
|     private final HashMap<Direction, BlockState> rotations; |     private final HashMap<Direction, BlockState> rotations; | ||||||
|  |  | ||||||
|     public HardDriveContainerBlock(AbstractBlock.Settings settings, Identifier identifier) { |     public HardDriveContainerBlock(AbstractBlock.Settings settings, Identifier identifier) { | ||||||
| @@ -53,7 +56,7 @@ public class HardDriveContainerBlock extends ConnectedBlock implements PolymerTe | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public BlockState getPolymerBlockState(BlockState state) { |     public BlockState getPolymerBlockState(BlockState state, PacketContext context) { | ||||||
|         Direction direction = state.get(FACING); |         Direction direction = state.get(FACING); | ||||||
|         return rotations.get(direction); |         return rotations.get(direction); | ||||||
|     } |     } | ||||||
| @@ -61,7 +64,7 @@ public class HardDriveContainerBlock extends ConnectedBlock implements PolymerTe | |||||||
|     public static void register() { |     public static void register() { | ||||||
|         var modId = id(HARD_DRIVE_CONTAINER_BLOCK_MODEL_ID); |         var modId = id(HARD_DRIVE_CONTAINER_BLOCK_MODEL_ID); | ||||||
|         HARD_DRIVE_CONTAINER_BLOCK = Registry.register(Registries.BLOCK, modId, |         HARD_DRIVE_CONTAINER_BLOCK = Registry.register(Registries.BLOCK, modId, | ||||||
|                 new HardDriveContainerBlock(Settings.copy(Blocks.WHITE_WOOL), modId)); |                 new HardDriveContainerBlock(Settings.copy(Blocks.WHITE_WOOL).registryKey(RegistryKey.of(RegistryKeys.BLOCK, modId)), modId)); | ||||||
|         UseBlockCallback.EVENT.register(HardDriveContainerBlock::onUse); |         UseBlockCallback.EVENT.register(HardDriveContainerBlock::onUse); | ||||||
|  |  | ||||||
|         HARD_DRIVE_CONTAINER_BLOCK.setDefaultState(); |         HARD_DRIVE_CONTAINER_BLOCK.setDefaultState(); | ||||||
| @@ -69,7 +72,7 @@ public class HardDriveContainerBlock extends ConnectedBlock implements PolymerTe | |||||||
|         HARD_DRIVE_CONTAINER_BLOCK_ENTITY = Registry.register( |         HARD_DRIVE_CONTAINER_BLOCK_ENTITY = Registry.register( | ||||||
|                 Registries.BLOCK_ENTITY_TYPE, |                 Registries.BLOCK_ENTITY_TYPE, | ||||||
|                 modId, |                 modId, | ||||||
|                 BlockEntityType.Builder.create(HardDriveContainerBlockEntity::new, HARD_DRIVE_CONTAINER_BLOCK).build(null) |                 FabricBlockEntityTypeBuilder.create(HardDriveContainerBlockEntity::new, HARD_DRIVE_CONTAINER_BLOCK).build(null) | ||||||
|         ); |         ); | ||||||
|         PolymerBlockUtils.registerBlockEntity(HARD_DRIVE_CONTAINER_BLOCK_ENTITY); |         PolymerBlockUtils.registerBlockEntity(HARD_DRIVE_CONTAINER_BLOCK_ENTITY); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ import eu.pb4.polymer.blocks.api.PolymerTexturedBlock; | |||||||
| import eu.pb4.polymer.core.api.block.PolymerBlockUtils; | import eu.pb4.polymer.core.api.block.PolymerBlockUtils; | ||||||
| import eu.pb4.sgui.api.elements.GuiElementBuilder; | import eu.pb4.sgui.api.elements.GuiElementBuilder; | ||||||
| import net.fabricmc.fabric.api.event.player.UseBlockCallback; | import net.fabricmc.fabric.api.event.player.UseBlockCallback; | ||||||
|  | import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; | ||||||
| import net.minecraft.block.*; | import net.minecraft.block.*; | ||||||
| import net.minecraft.block.entity.BlockEntity; | import net.minecraft.block.entity.BlockEntity; | ||||||
| import net.minecraft.block.entity.BlockEntityTicker; | import net.minecraft.block.entity.BlockEntityTicker; | ||||||
| @@ -13,10 +14,12 @@ import net.minecraft.item.ItemPlacementContext; | |||||||
| import net.minecraft.item.Items; | import net.minecraft.item.Items; | ||||||
| import net.minecraft.registry.Registries; | import net.minecraft.registry.Registries; | ||||||
| import net.minecraft.registry.Registry; | import net.minecraft.registry.Registry; | ||||||
|  | import net.minecraft.registry.RegistryKey; | ||||||
|  | import net.minecraft.registry.RegistryKeys; | ||||||
| import net.minecraft.server.network.ServerPlayerEntity; | import net.minecraft.server.network.ServerPlayerEntity; | ||||||
| import net.minecraft.server.world.ServerWorld; | import net.minecraft.server.world.ServerWorld; | ||||||
| import net.minecraft.state.StateManager; | import net.minecraft.state.StateManager; | ||||||
| import net.minecraft.state.property.DirectionProperty; | import net.minecraft.state.property.EnumProperty; | ||||||
| import net.minecraft.text.Text; | import net.minecraft.text.Text; | ||||||
| import net.minecraft.util.ActionResult; | import net.minecraft.util.ActionResult; | ||||||
| import net.minecraft.util.Formatting; | import net.minecraft.util.Formatting; | ||||||
| @@ -31,6 +34,7 @@ import systems.brn.serverstorage.blockentities.InventoryInterfaceBlockEntity; | |||||||
| import systems.brn.serverstorage.lib.PagedGui; | import systems.brn.serverstorage.lib.PagedGui; | ||||||
| import systems.brn.serverstorage.screens.SearchScreen; | import systems.brn.serverstorage.screens.SearchScreen; | ||||||
| import systems.brn.serverstorage.screens.SettingsScreen; | import systems.brn.serverstorage.screens.SettingsScreen; | ||||||
|  | import xyz.nucleoid.packettweaker.PacketContext; | ||||||
|  |  | ||||||
| import java.util.HashMap; | import java.util.HashMap; | ||||||
|  |  | ||||||
| @@ -39,7 +43,7 @@ import static systems.brn.serverstorage.lib.PagedGui.*; | |||||||
|  |  | ||||||
| public class InventoryInterfaceBlock extends ConnectedBlock implements PolymerTexturedBlock, BlockEntityProvider { | public class InventoryInterfaceBlock extends ConnectedBlock implements PolymerTexturedBlock, BlockEntityProvider { | ||||||
|     final Identifier identifier; |     final Identifier identifier; | ||||||
|     public static final DirectionProperty FACING = FacingBlock.FACING; |     public static final EnumProperty<Direction> FACING = FacingBlock.FACING; | ||||||
|     private final HashMap<Direction, BlockState> rotations; |     private final HashMap<Direction, BlockState> rotations; | ||||||
|  |  | ||||||
|     public InventoryInterfaceBlock(Settings settings, Identifier identifier) { |     public InventoryInterfaceBlock(Settings settings, Identifier identifier) { | ||||||
| @@ -61,7 +65,7 @@ public class InventoryInterfaceBlock extends ConnectedBlock implements PolymerTe | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public BlockState getPolymerBlockState(BlockState state) { |     public BlockState getPolymerBlockState(BlockState state, PacketContext packetContext) { | ||||||
|         Direction direction = state.get(FACING); |         Direction direction = state.get(FACING); | ||||||
|         return rotations.get(direction); |         return rotations.get(direction); | ||||||
|     } |     } | ||||||
| @@ -69,14 +73,15 @@ public class InventoryInterfaceBlock extends ConnectedBlock implements PolymerTe | |||||||
|     public static void register() { |     public static void register() { | ||||||
|         var modId = id(INVENTORY_INTERFACE_BLOCK_MODEL_ID); |         var modId = id(INVENTORY_INTERFACE_BLOCK_MODEL_ID); | ||||||
|         INVENTORY_INTERFACE_BLOCK = Registry.register(Registries.BLOCK, modId, |         INVENTORY_INTERFACE_BLOCK = Registry.register(Registries.BLOCK, modId, | ||||||
|                 new InventoryInterfaceBlock(Settings.copy(Blocks.WHITE_WOOL), modId)); |                 new InventoryInterfaceBlock(Settings.copy(Blocks.WHITE_WOOL).registryKey(RegistryKey.of(RegistryKeys.BLOCK, modId)), modId)); | ||||||
|         UseBlockCallback.EVENT.register(InventoryInterfaceBlock::onUse); |         UseBlockCallback.EVENT.register(InventoryInterfaceBlock::onUse); | ||||||
|         INVENTORY_INTERFACE_BLOCK.setDefaultState(); |         INVENTORY_INTERFACE_BLOCK.setDefaultState(); | ||||||
|         INVENTORY_INTERFACE_BLOCK_ENTITY = Registry.register( |         INVENTORY_INTERFACE_BLOCK_ENTITY = Registry.register( | ||||||
|                 Registries.BLOCK_ENTITY_TYPE, |                 Registries.BLOCK_ENTITY_TYPE, | ||||||
|                 modId, |                 modId, | ||||||
|                 BlockEntityType.Builder.create(InventoryInterfaceBlockEntity::new, INVENTORY_INTERFACE_BLOCK).build(null) |                 FabricBlockEntityTypeBuilder.create(InventoryInterfaceBlockEntity::new, INVENTORY_INTERFACE_BLOCK).build(null) | ||||||
|         ); |         ); | ||||||
|  |         INVENTORY_INTERFACE_BLOCK_ENTITY.addSupportedBlock(INVENTORY_INTERFACE_BLOCK); | ||||||
|         PolymerBlockUtils.registerBlockEntity(INVENTORY_INTERFACE_BLOCK_ENTITY); |         PolymerBlockUtils.registerBlockEntity(INVENTORY_INTERFACE_BLOCK_ENTITY); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -150,7 +155,7 @@ public class InventoryInterfaceBlock extends ConnectedBlock implements PolymerTe | |||||||
|         Block block = state.getBlock(); |         Block block = state.getBlock(); | ||||||
|  |  | ||||||
|         if (block instanceof InventoryInterfaceBlock) { |         if (block instanceof InventoryInterfaceBlock) { | ||||||
|             if (!world.getGameRules().getBoolean(ServerStorage_Interface_Enable)) { |             if (!((ServerWorld) world).getGameRules().getBoolean(ServerStorage_Interface_Enable)) { | ||||||
|                 playerEntity.sendMessage(Text.translatable("message.serverstorage.block_disabled"), true); |                 playerEntity.sendMessage(Text.translatable("message.serverstorage.block_disabled"), true); | ||||||
|                 return ActionResult.PASS; |                 return ActionResult.PASS; | ||||||
|             } |             } | ||||||
|   | |||||||
| @@ -3,18 +3,20 @@ package systems.brn.serverstorage.blocks; | |||||||
| import eu.pb4.polymer.blocks.api.PolymerTexturedBlock; | import eu.pb4.polymer.blocks.api.PolymerTexturedBlock; | ||||||
| import eu.pb4.polymer.core.api.block.PolymerBlockUtils; | import eu.pb4.polymer.core.api.block.PolymerBlockUtils; | ||||||
| import net.fabricmc.fabric.api.event.player.UseBlockCallback; | import net.fabricmc.fabric.api.event.player.UseBlockCallback; | ||||||
|  | import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; | ||||||
| import net.minecraft.block.*; | import net.minecraft.block.*; | ||||||
| import net.minecraft.block.entity.BlockEntity; | import net.minecraft.block.entity.BlockEntity; | ||||||
| import net.minecraft.block.entity.BlockEntityType; |  | ||||||
| import net.minecraft.entity.player.PlayerEntity; | import net.minecraft.entity.player.PlayerEntity; | ||||||
| import net.minecraft.item.Item; | import net.minecraft.item.Item; | ||||||
| import net.minecraft.item.ItemPlacementContext; | import net.minecraft.item.ItemPlacementContext; | ||||||
| import net.minecraft.item.ItemStack; | import net.minecraft.item.ItemStack; | ||||||
| import net.minecraft.registry.Registries; | import net.minecraft.registry.Registries; | ||||||
| import net.minecraft.registry.Registry; | import net.minecraft.registry.Registry; | ||||||
|  | import net.minecraft.registry.RegistryKey; | ||||||
|  | import net.minecraft.registry.RegistryKeys; | ||||||
| import net.minecraft.server.network.ServerPlayerEntity; | import net.minecraft.server.network.ServerPlayerEntity; | ||||||
| import net.minecraft.state.StateManager; | import net.minecraft.state.StateManager; | ||||||
| import net.minecraft.state.property.DirectionProperty; | import net.minecraft.state.property.EnumProperty; | ||||||
| import net.minecraft.util.ActionResult; | import net.minecraft.util.ActionResult; | ||||||
| import net.minecraft.util.Hand; | import net.minecraft.util.Hand; | ||||||
| import net.minecraft.util.Identifier; | import net.minecraft.util.Identifier; | ||||||
| @@ -29,6 +31,7 @@ import systems.brn.serverstorage.items.WirelessTerminalItem; | |||||||
| import systems.brn.serverstorage.lib.SessionStorageClass; | import systems.brn.serverstorage.lib.SessionStorageClass; | ||||||
| import systems.brn.serverstorage.lib.WirelessTerminalComponents; | import systems.brn.serverstorage.lib.WirelessTerminalComponents; | ||||||
| import systems.brn.serverstorage.screens.RadioBlockPlayerMangementScreen; | import systems.brn.serverstorage.screens.RadioBlockPlayerMangementScreen; | ||||||
|  | import xyz.nucleoid.packettweaker.PacketContext; | ||||||
|  |  | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| import java.util.HashMap; | import java.util.HashMap; | ||||||
| @@ -40,7 +43,7 @@ import static systems.brn.serverstorage.lib.Util.removePosition; | |||||||
|  |  | ||||||
| public class RadioInterfaceBlock extends ConnectedBlock implements PolymerTexturedBlock, BlockEntityProvider { | public class RadioInterfaceBlock extends ConnectedBlock implements PolymerTexturedBlock, BlockEntityProvider { | ||||||
|     final Identifier identifier; |     final Identifier identifier; | ||||||
|     public static final DirectionProperty FACING = FacingBlock.FACING; |     public static final EnumProperty<Direction> FACING = FacingBlock.FACING; | ||||||
|     private final HashMap<Direction, BlockState> rotations; |     private final HashMap<Direction, BlockState> rotations; | ||||||
|  |  | ||||||
|     public RadioInterfaceBlock(Settings settings, Identifier identifier) { |     public RadioInterfaceBlock(Settings settings, Identifier identifier) { | ||||||
| @@ -63,7 +66,7 @@ public class RadioInterfaceBlock extends ConnectedBlock implements PolymerTextur | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public BlockState getPolymerBlockState(BlockState state) { |     public BlockState getPolymerBlockState(BlockState state, PacketContext packetContext) { | ||||||
|         Direction direction = state.get(FACING); |         Direction direction = state.get(FACING); | ||||||
|         return rotations.get(direction); |         return rotations.get(direction); | ||||||
|     } |     } | ||||||
| @@ -71,7 +74,7 @@ public class RadioInterfaceBlock extends ConnectedBlock implements PolymerTextur | |||||||
|     public static void register() { |     public static void register() { | ||||||
|         var modId = id(RADIO_INTERFACE_BLOCK_MODEL_ID); |         var modId = id(RADIO_INTERFACE_BLOCK_MODEL_ID); | ||||||
|         RADIO_INTERFACE_BLOCK = Registry.register(Registries.BLOCK, modId, |         RADIO_INTERFACE_BLOCK = Registry.register(Registries.BLOCK, modId, | ||||||
|                 new RadioInterfaceBlock(Settings.copy(Blocks.WHITE_WOOL), modId)); |                 new RadioInterfaceBlock(Settings.copy(Blocks.WHITE_WOOL).registryKey(RegistryKey.of(RegistryKeys.BLOCK, modId)), modId)); | ||||||
|         UseBlockCallback.EVENT.register(RadioInterfaceBlock::onUse); |         UseBlockCallback.EVENT.register(RadioInterfaceBlock::onUse); | ||||||
|  |  | ||||||
|         RADIO_INTERFACE_BLOCK.setDefaultState(); |         RADIO_INTERFACE_BLOCK.setDefaultState(); | ||||||
| @@ -79,8 +82,9 @@ public class RadioInterfaceBlock extends ConnectedBlock implements PolymerTextur | |||||||
|         RADIO_INTERFACE_BLOCK_ENTITY = Registry.register( |         RADIO_INTERFACE_BLOCK_ENTITY = Registry.register( | ||||||
|                 Registries.BLOCK_ENTITY_TYPE, |                 Registries.BLOCK_ENTITY_TYPE, | ||||||
|                 modId, |                 modId, | ||||||
|                 BlockEntityType.Builder.create(RadioInterfaceBlockEntity::new, RADIO_INTERFACE_BLOCK).build(null) |                 FabricBlockEntityTypeBuilder.create(RadioInterfaceBlockEntity::new, RADIO_INTERFACE_BLOCK).build(null) | ||||||
|         ); |         ); | ||||||
|  |         RADIO_INTERFACE_BLOCK_ENTITY.addSupportedBlock(RADIO_INTERFACE_BLOCK); | ||||||
|         PolymerBlockUtils.registerBlockEntity(RADIO_INTERFACE_BLOCK_ENTITY); |         PolymerBlockUtils.registerBlockEntity(RADIO_INTERFACE_BLOCK_ENTITY); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3,9 +3,9 @@ package systems.brn.serverstorage.blocks; | |||||||
| import eu.pb4.polymer.blocks.api.PolymerTexturedBlock; | import eu.pb4.polymer.blocks.api.PolymerTexturedBlock; | ||||||
| import eu.pb4.polymer.core.api.block.PolymerBlockUtils; | import eu.pb4.polymer.core.api.block.PolymerBlockUtils; | ||||||
| import net.fabricmc.fabric.api.event.player.UseBlockCallback; | import net.fabricmc.fabric.api.event.player.UseBlockCallback; | ||||||
|  | import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; | ||||||
| import net.minecraft.block.*; | import net.minecraft.block.*; | ||||||
| import net.minecraft.block.entity.BlockEntity; | import net.minecraft.block.entity.BlockEntity; | ||||||
| import net.minecraft.block.entity.BlockEntityType; |  | ||||||
| import net.minecraft.component.DataComponentTypes; | import net.minecraft.component.DataComponentTypes; | ||||||
| import net.minecraft.component.type.WrittenBookContentComponent; | import net.minecraft.component.type.WrittenBookContentComponent; | ||||||
| import net.minecraft.entity.player.PlayerEntity; | import net.minecraft.entity.player.PlayerEntity; | ||||||
| @@ -14,9 +14,12 @@ import net.minecraft.item.ItemStack; | |||||||
| import net.minecraft.item.Items; | import net.minecraft.item.Items; | ||||||
| import net.minecraft.registry.Registries; | import net.minecraft.registry.Registries; | ||||||
| import net.minecraft.registry.Registry; | import net.minecraft.registry.Registry; | ||||||
|  | import net.minecraft.registry.RegistryKey; | ||||||
|  | import net.minecraft.registry.RegistryKeys; | ||||||
| import net.minecraft.server.network.ServerPlayerEntity; | import net.minecraft.server.network.ServerPlayerEntity; | ||||||
|  | import net.minecraft.server.world.ServerWorld; | ||||||
| import net.minecraft.state.StateManager; | import net.minecraft.state.StateManager; | ||||||
| import net.minecraft.state.property.DirectionProperty; | import net.minecraft.state.property.EnumProperty; | ||||||
| import net.minecraft.text.RawFilteredPair; | import net.minecraft.text.RawFilteredPair; | ||||||
| import net.minecraft.text.Text; | import net.minecraft.text.Text; | ||||||
| import net.minecraft.util.ActionResult; | import net.minecraft.util.ActionResult; | ||||||
| @@ -29,6 +32,7 @@ import net.minecraft.world.World; | |||||||
| import org.jetbrains.annotations.Nullable; | import org.jetbrains.annotations.Nullable; | ||||||
| import systems.brn.serverstorage.blockentities.StorageInterfaceBlockEntity; | import systems.brn.serverstorage.blockentities.StorageInterfaceBlockEntity; | ||||||
| import systems.brn.serverstorage.screens.StorageScreen; | import systems.brn.serverstorage.screens.StorageScreen; | ||||||
|  | import xyz.nucleoid.packettweaker.PacketContext; | ||||||
|  |  | ||||||
| import java.util.HashMap; | import java.util.HashMap; | ||||||
| import java.util.List; | import java.util.List; | ||||||
| @@ -38,7 +42,7 @@ import static systems.brn.serverstorage.lib.Util.generateBookContent; | |||||||
|  |  | ||||||
| public class StorageInterfaceBlock extends ConnectedBlock implements PolymerTexturedBlock, BlockEntityProvider { | public class StorageInterfaceBlock extends ConnectedBlock implements PolymerTexturedBlock, BlockEntityProvider { | ||||||
|     final Identifier identifier; |     final Identifier identifier; | ||||||
|     public static final DirectionProperty FACING = FacingBlock.FACING; |     public static final EnumProperty<Direction> FACING = FacingBlock.FACING; | ||||||
|     private final HashMap<Direction, BlockState> rotations; |     private final HashMap<Direction, BlockState> rotations; | ||||||
|  |  | ||||||
|     public StorageInterfaceBlock(Settings settings, Identifier identifier) { |     public StorageInterfaceBlock(Settings settings, Identifier identifier) { | ||||||
| @@ -60,7 +64,7 @@ public class StorageInterfaceBlock extends ConnectedBlock implements PolymerText | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public BlockState getPolymerBlockState(BlockState state) { |     public BlockState getPolymerBlockState(BlockState state, PacketContext packetContext) { | ||||||
|         Direction direction = state.get(FACING); |         Direction direction = state.get(FACING); | ||||||
|         return rotations.get(direction); |         return rotations.get(direction); | ||||||
|     } |     } | ||||||
| @@ -68,14 +72,15 @@ public class StorageInterfaceBlock extends ConnectedBlock implements PolymerText | |||||||
|     public static void register() { |     public static void register() { | ||||||
|         var modId = id(STORAGE_MODEL_ID); |         var modId = id(STORAGE_MODEL_ID); | ||||||
|         STORAGE_INTERFACE_BLOCK = Registry.register(Registries.BLOCK, modId, |         STORAGE_INTERFACE_BLOCK = Registry.register(Registries.BLOCK, modId, | ||||||
|                 new StorageInterfaceBlock(AbstractBlock.Settings.copy(Blocks.WHITE_WOOL), modId)); |                 new StorageInterfaceBlock(AbstractBlock.Settings.copy(Blocks.WHITE_WOOL).registryKey(RegistryKey.of(RegistryKeys.BLOCK, modId)), modId)); | ||||||
|         UseBlockCallback.EVENT.register(StorageInterfaceBlock::onUse); |         UseBlockCallback.EVENT.register(StorageInterfaceBlock::onUse); | ||||||
|         STORAGE_INTERFACE_BLOCK.setDefaultState(); |         STORAGE_INTERFACE_BLOCK.setDefaultState(); | ||||||
|         STORAGE_INTERFACE_BLOCK_ENTITY = Registry.register( |         STORAGE_INTERFACE_BLOCK_ENTITY = Registry.register( | ||||||
|                 Registries.BLOCK_ENTITY_TYPE, |                 Registries.BLOCK_ENTITY_TYPE, | ||||||
|                 modId, |                 modId, | ||||||
|                 BlockEntityType.Builder.create(StorageInterfaceBlockEntity::new, STORAGE_INTERFACE_BLOCK).build(null) |                 FabricBlockEntityTypeBuilder.create(StorageInterfaceBlockEntity::new, STORAGE_INTERFACE_BLOCK).build(null) | ||||||
|         ); |         ); | ||||||
|  |         STORAGE_INTERFACE_BLOCK_ENTITY.addSupportedBlock(STORAGE_INTERFACE_BLOCK); | ||||||
|         PolymerBlockUtils.registerBlockEntity(STORAGE_INTERFACE_BLOCK_ENTITY); |         PolymerBlockUtils.registerBlockEntity(STORAGE_INTERFACE_BLOCK_ENTITY); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -85,7 +90,7 @@ public class StorageInterfaceBlock extends ConnectedBlock implements PolymerText | |||||||
|         Block block = state.getBlock(); |         Block block = state.getBlock(); | ||||||
|  |  | ||||||
|         if (block instanceof StorageInterfaceBlock) { |         if (block instanceof StorageInterfaceBlock) { | ||||||
|             if (!world.getGameRules().getBoolean(ServerStorage_Terminal_Enable)){ |             if (!((ServerWorld) world).getGameRules().getBoolean(ServerStorage_Terminal_Enable)){ | ||||||
|                 player.sendMessage(Text.translatable("message.serverstorage.block_disabled"), true); |                 player.sendMessage(Text.translatable("message.serverstorage.block_disabled"), true); | ||||||
|                 return ActionResult.PASS; |                 return ActionResult.PASS; | ||||||
|             } |             } | ||||||
|   | |||||||
| @@ -5,6 +5,8 @@ import net.minecraft.item.Item; | |||||||
| import net.minecraft.item.ItemGroups; | import net.minecraft.item.ItemGroups; | ||||||
| import net.minecraft.registry.Registries; | import net.minecraft.registry.Registries; | ||||||
| import net.minecraft.registry.Registry; | import net.minecraft.registry.Registry; | ||||||
|  | import net.minecraft.registry.RegistryKey; | ||||||
|  | import net.minecraft.registry.RegistryKeys; | ||||||
| import net.minecraft.util.Identifier; | import net.minecraft.util.Identifier; | ||||||
| import systems.brn.serverstorage.lib.DriveComponents; | import systems.brn.serverstorage.lib.DriveComponents; | ||||||
|  |  | ||||||
| @@ -25,7 +27,7 @@ public class HardDriveItem extends SimpleItem { | |||||||
|             Identifier identifier = id(tier + "_drive"); |             Identifier identifier = id(tier + "_drive"); | ||||||
|             Item item = Registry.register(Registries.ITEM, identifier, new SimpleItem(new Settings() |             Item item = Registry.register(Registries.ITEM, identifier, new SimpleItem(new Settings() | ||||||
|                     .maxCount(1) |                     .maxCount(1) | ||||||
|                     .component(DriveComponents.ITEMSTACK_MAP, new HashMap<>()) |                     .component(DriveComponents.ITEMSTACK_MAP, new HashMap<>()).registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)) | ||||||
|                     , identifier)); |                     , identifier)); | ||||||
|             ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item)); |             ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item)); | ||||||
|             items.add(item); |             items.add(item); | ||||||
|   | |||||||
| @@ -2,7 +2,6 @@ package systems.brn.serverstorage.items; | |||||||
|  |  | ||||||
| import eu.pb4.polymer.core.api.item.PolymerBlockItem; | import eu.pb4.polymer.core.api.item.PolymerBlockItem; | ||||||
| import eu.pb4.polymer.core.api.item.PolymerItem; | import eu.pb4.polymer.core.api.item.PolymerItem; | ||||||
| import eu.pb4.polymer.resourcepack.api.PolymerModelData; |  | ||||||
| import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; | import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; | ||||||
| import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; | import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; | ||||||
| import net.minecraft.block.Block; | import net.minecraft.block.Block; | ||||||
| @@ -12,33 +11,34 @@ import net.minecraft.item.ItemStack; | |||||||
| import net.minecraft.item.Items; | import net.minecraft.item.Items; | ||||||
| import net.minecraft.registry.Registries; | import net.minecraft.registry.Registries; | ||||||
| import net.minecraft.registry.Registry; | import net.minecraft.registry.Registry; | ||||||
| import net.minecraft.server.network.ServerPlayerEntity; | import net.minecraft.registry.RegistryKey; | ||||||
|  | import net.minecraft.registry.RegistryKeys; | ||||||
| import net.minecraft.util.Identifier; | import net.minecraft.util.Identifier; | ||||||
| import org.jetbrains.annotations.Nullable; | import xyz.nucleoid.packettweaker.PacketContext; | ||||||
|  |  | ||||||
| import static systems.brn.serverstorage.ServerStorage.id; | import static systems.brn.serverstorage.ServerStorage.id; | ||||||
|  |  | ||||||
| public class SimpleBlockItem extends PolymerBlockItem implements PolymerItem { | public class SimpleBlockItem extends PolymerBlockItem implements PolymerItem { | ||||||
|     private final PolymerModelData polymerModel; |     private final Identifier polymerModel; | ||||||
|  |  | ||||||
|     public SimpleBlockItem(Item.Settings settings, Block block, Identifier identifier) { |     public SimpleBlockItem(Item.Settings settings, Block block, Identifier identifier) { | ||||||
|         super(block, settings, Items.BARRIER); |         super(block, settings, Items.BARRIER); | ||||||
|         this.polymerModel = PolymerResourcePackUtils.requestModel(Items.BARRIER, identifier.withPath("item/" + identifier.getPath())); |         this.polymerModel = PolymerResourcePackUtils.getBridgedModelId(identifier.withPath("item/" + identifier.getPath())); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Item getPolymerItem(ItemStack itemStack, @Nullable ServerPlayerEntity player) { |     public Identifier getPolymerItemModel(ItemStack stack, PacketContext context) { | ||||||
|         return this.polymerModel.item(); |         return this.polymerModel; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public int getPolymerCustomModelData(ItemStack itemStack, @Nullable ServerPlayerEntity player) { |     public Item getPolymerItem(ItemStack itemStack, PacketContext player) { | ||||||
|         return this.polymerModel.value(); |         return Items.BARRIER; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static void register(Block block) { |     public static void register(Block block) { | ||||||
|         Identifier identifier = id(block.getRegistryEntry().registryKey().getValue().getPath()); |         Identifier identifier = id(block.getRegistryEntry().registryKey().getValue().getPath()); | ||||||
|         Item item = Registry.register(Registries.ITEM, identifier, new SimpleBlockItem(new Item.Settings(), block, identifier)); |         Item item = Registry.register(Registries.ITEM, identifier, new SimpleBlockItem(new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)), block, identifier)); | ||||||
|         ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item)); |         ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item)); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -2,16 +2,18 @@ package systems.brn.serverstorage.items; | |||||||
|  |  | ||||||
| import eu.pb4.polymer.core.api.item.PolymerItem; | import eu.pb4.polymer.core.api.item.PolymerItem; | ||||||
| import eu.pb4.polymer.core.api.item.SimplePolymerItem; | import eu.pb4.polymer.core.api.item.SimplePolymerItem; | ||||||
| import eu.pb4.polymer.resourcepack.api.PolymerModelData; |  | ||||||
| import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; | import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils; | ||||||
| import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; | import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; | ||||||
| import net.minecraft.item.*; | import net.minecraft.item.Item; | ||||||
|  | import net.minecraft.item.ItemGroup; | ||||||
|  | import net.minecraft.item.ItemStack; | ||||||
|  | import net.minecraft.item.Items; | ||||||
| import net.minecraft.registry.Registries; | import net.minecraft.registry.Registries; | ||||||
| import net.minecraft.registry.Registry; | import net.minecraft.registry.Registry; | ||||||
| import net.minecraft.registry.RegistryKey; | import net.minecraft.registry.RegistryKey; | ||||||
| import net.minecraft.server.network.ServerPlayerEntity; | import net.minecraft.registry.RegistryKeys; | ||||||
| import net.minecraft.util.Identifier; | import net.minecraft.util.Identifier; | ||||||
| import org.jetbrains.annotations.Nullable; | import xyz.nucleoid.packettweaker.PacketContext; | ||||||
|  |  | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| import java.util.List; | import java.util.List; | ||||||
| @@ -19,21 +21,21 @@ import java.util.List; | |||||||
| import static systems.brn.serverstorage.ServerStorage.id; | import static systems.brn.serverstorage.ServerStorage.id; | ||||||
|  |  | ||||||
| public class SimpleItem extends SimplePolymerItem implements PolymerItem { | public class SimpleItem extends SimplePolymerItem implements PolymerItem { | ||||||
|     private final PolymerModelData polymerModel; |     private final Identifier polymerModel; | ||||||
|  |  | ||||||
|     public SimpleItem(Settings settings, Identifier identifier) { |     public SimpleItem(Settings settings, Identifier identifier) { | ||||||
|         super(settings, Items.STICK); |         super(settings, Items.STICK); | ||||||
|         this.polymerModel = PolymerResourcePackUtils.requestModel(Items.STICK, identifier.withPath("item/" + identifier.getPath())); |         this.polymerModel = PolymerResourcePackUtils.getBridgedModelId(identifier.withPath("item/" + identifier.getPath())); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Item getPolymerItem(ItemStack itemStack, @Nullable ServerPlayerEntity player) { |     public Identifier getPolymerItemModel(ItemStack stack, PacketContext context) { | ||||||
|         return this.polymerModel.item(); |         return this.polymerModel; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public int getPolymerCustomModelData(ItemStack itemStack, @Nullable ServerPlayerEntity player) { |     public Item getPolymerItem(ItemStack itemStack, PacketContext player) { | ||||||
|         return this.polymerModel.value(); |         return Items.STICK; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static Item register(String name, RegistryKey<ItemGroup> group){ |     public static Item register(String name, RegistryKey<ItemGroup> group){ | ||||||
| @@ -42,7 +44,7 @@ public class SimpleItem extends SimplePolymerItem implements PolymerItem { | |||||||
|  |  | ||||||
|     public static Item register(String name, int maxCount, RegistryKey<ItemGroup> group) { |     public static Item register(String name, int maxCount, RegistryKey<ItemGroup> group) { | ||||||
|         Identifier identifier = id(name); |         Identifier identifier = id(name); | ||||||
|         Item item = Registry.register(Registries.ITEM, identifier, new SimpleItem(new Settings().maxCount(maxCount), identifier)); |         Item item = Registry.register(Registries.ITEM, identifier, new SimpleItem(new Settings().maxCount(maxCount).registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)), identifier)); | ||||||
|         ItemGroupEvents.modifyEntriesEvent(group).register(content -> content.add(item)); |         ItemGroupEvents.modifyEntriesEvent(group).register(content -> content.add(item)); | ||||||
|         return item; |         return item; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -10,6 +10,8 @@ import net.minecraft.item.ItemGroups; | |||||||
| import net.minecraft.item.ItemStack; | import net.minecraft.item.ItemStack; | ||||||
| import net.minecraft.registry.Registries; | import net.minecraft.registry.Registries; | ||||||
| import net.minecraft.registry.Registry; | import net.minecraft.registry.Registry; | ||||||
|  | import net.minecraft.registry.RegistryKey; | ||||||
|  | import net.minecraft.registry.RegistryKeys; | ||||||
| import net.minecraft.server.MinecraftServer; | import net.minecraft.server.MinecraftServer; | ||||||
| import net.minecraft.server.network.ServerPlayerEntity; | import net.minecraft.server.network.ServerPlayerEntity; | ||||||
| import net.minecraft.server.world.ServerWorld; | import net.minecraft.server.world.ServerWorld; | ||||||
| @@ -45,6 +47,7 @@ public class WirelessTerminalItem extends SimpleItem { | |||||||
|                         .component(WirelessTerminalComponents.SORT_ALPHABETICALLY, false) |                         .component(WirelessTerminalComponents.SORT_ALPHABETICALLY, false) | ||||||
|                         .component(WirelessTerminalComponents.QUERY_STRING, "") |                         .component(WirelessTerminalComponents.QUERY_STRING, "") | ||||||
|                         .component(WirelessTerminalComponents.PAGE, 0) |                         .component(WirelessTerminalComponents.PAGE, 0) | ||||||
|  |                         .registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)) | ||||||
|                 , identifier)); |                 , identifier)); | ||||||
|         ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item)); |         ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item)); | ||||||
|         return item; |         return item; | ||||||
|   | |||||||
| @@ -7,6 +7,8 @@ import net.minecraft.item.Item; | |||||||
| import net.minecraft.item.ItemGroups; | import net.minecraft.item.ItemGroups; | ||||||
| import net.minecraft.registry.Registries; | import net.minecraft.registry.Registries; | ||||||
| import net.minecraft.registry.Registry; | import net.minecraft.registry.Registry; | ||||||
|  | import net.minecraft.registry.RegistryKey; | ||||||
|  | import net.minecraft.registry.RegistryKeys; | ||||||
| import net.minecraft.text.Text; | import net.minecraft.text.Text; | ||||||
| import net.minecraft.util.Identifier; | import net.minecraft.util.Identifier; | ||||||
| import systems.brn.serverstorage.items.SimpleItem; | import systems.brn.serverstorage.items.SimpleItem; | ||||||
| @@ -34,7 +36,7 @@ public class Antenna extends SimpleItem { | |||||||
|         for (String tier : tiers) { |         for (String tier : tiers) { | ||||||
|             Identifier identifier = id(tier + "_antenna"); |             Identifier identifier = id(tier + "_antenna"); | ||||||
|             Item item = Registry.register(Registries.ITEM, identifier, new Antenna(new Settings() |             Item item = Registry.register(Registries.ITEM, identifier, new Antenna(new Settings() | ||||||
|                     .maxCount(1) |                     .maxCount(1).registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)) | ||||||
|                     , identifier, range)); |                     , identifier, range)); | ||||||
|             ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item)); |             ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item)); | ||||||
|             items.add(item); |             items.add(item); | ||||||
|   | |||||||
| @@ -1,6 +1,5 @@ | |||||||
| package systems.brn.serverstorage.lib; | package systems.brn.serverstorage.lib; | ||||||
|  |  | ||||||
| import net.minecraft.item.Item; |  | ||||||
| import net.minecraft.item.ItemStack; | import net.minecraft.item.ItemStack; | ||||||
| import net.minecraft.recipe.CraftingRecipe; | import net.minecraft.recipe.CraftingRecipe; | ||||||
| import net.minecraft.recipe.RecipeEntry; | import net.minecraft.recipe.RecipeEntry; | ||||||
| @@ -33,11 +32,12 @@ public class CraftingEntry { | |||||||
|         for (Map.Entry<ItemStack, Integer> entry : inputs.entrySet()) { |         for (Map.Entry<ItemStack, Integer> entry : inputs.entrySet()) { | ||||||
|             ItemStack stackIn = entry.getKey(); |             ItemStack stackIn = entry.getKey(); | ||||||
|             Integer count = entry.getValue(); |             Integer count = entry.getValue(); | ||||||
|             if (count > 0 && stackIn.isEmpty() && stackIn.getItem().hasRecipeRemainder()) { |             if (count > 0 && stackIn.isEmpty() && stackIn.getItem().getRecipeRemainder() != null) { | ||||||
|                 Item remainderItem = stackIn.getItem().getRecipeRemainder(); |                 ItemStack remainderStack = stackIn.getItem().getRecipeRemainder(); | ||||||
|                 if (remainderItem != null) { |                 if (!remainderStack.isEmpty()) { | ||||||
|                     ItemStack remainderStack = new ItemStack(stackIn.getItem().getRecipeRemainder(), count); |                     ItemStack remainderStackNew = remainderStack.copy(); | ||||||
|                     tempOutputStacks.add(remainderStack); |                     remainderStackNew.setCount(count); | ||||||
|  |                     tempOutputStacks.add(remainderStackNew); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -5,27 +5,27 @@ import net.minecraft.item.Item; | |||||||
| import net.minecraft.item.ItemStack; | import net.minecraft.item.ItemStack; | ||||||
| import net.minecraft.server.network.ServerPlayerEntity; | import net.minecraft.server.network.ServerPlayerEntity; | ||||||
| import net.minecraft.server.world.ServerWorld; | import net.minecraft.server.world.ServerWorld; | ||||||
|  | import net.minecraft.util.ActionResult; | ||||||
| import net.minecraft.util.Hand; | import net.minecraft.util.Hand; | ||||||
| import net.minecraft.util.TypedActionResult; |  | ||||||
| import net.minecraft.world.World; | import net.minecraft.world.World; | ||||||
| import systems.brn.serverstorage.items.WirelessTerminalItem; | import systems.brn.serverstorage.items.WirelessTerminalItem; | ||||||
|  |  | ||||||
| import static systems.brn.serverstorage.ServerStorage.WIRELESS_TERMINAL; | import static systems.brn.serverstorage.ServerStorage.WIRELESS_TERMINAL; | ||||||
|  |  | ||||||
| public class EventHandler { | public class EventHandler { | ||||||
|     public static TypedActionResult<ItemStack> onItemUse(PlayerEntity playerEntity, World worldTemp, Hand hand) { |     public static ActionResult onItemUse(PlayerEntity playerEntity, World worldTemp, Hand hand) { | ||||||
|         ItemStack itemStack = playerEntity.getStackInHand(hand); |         ItemStack itemStack = playerEntity.getStackInHand(hand); | ||||||
|         Item item = itemStack.getItem(); |         Item item = itemStack.getItem(); | ||||||
|         if (!worldTemp.isClient) { |         if (!worldTemp.isClient) { | ||||||
|             if (playerEntity instanceof ServerPlayerEntity player) { |             if (playerEntity instanceof ServerPlayerEntity player) { | ||||||
|                 if (worldTemp instanceof ServerWorld world) { |                 if (worldTemp instanceof ServerWorld world) { | ||||||
|                     if (item == WIRELESS_TERMINAL) { |                     if (item == WIRELESS_TERMINAL) { | ||||||
|                         return WirelessTerminalItem.useItem(world, player, itemStack) ? TypedActionResult.success(itemStack) : TypedActionResult.pass(itemStack); |                         return WirelessTerminalItem.useItem(world, player, itemStack) ? ActionResult.SUCCESS : ActionResult.PASS; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return TypedActionResult.pass(itemStack); |         return ActionResult.PASS; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -187,7 +187,7 @@ public abstract class PagedGui extends SimpleGui { | |||||||
|             if (gui.canNextPage()) { |             if (gui.canNextPage()) { | ||||||
|                 return DisplayElement.of( |                 return DisplayElement.of( | ||||||
|                         new GuiElementBuilder(Items.PLAYER_HEAD) |                         new GuiElementBuilder(Items.PLAYER_HEAD) | ||||||
|                                 .setName(Text.translatable("createWorld.customize.custom.next").formatted(Formatting.WHITE)) |                                 .setName(Text.translatable("spectatorMenu.next_page").formatted(Formatting.WHITE)) | ||||||
|                                 .hideDefaultTooltip().noDefaults() |                                 .hideDefaultTooltip().noDefaults() | ||||||
|                                 .setSkullOwner(GUI_NEXT_PAGE) |                                 .setSkullOwner(GUI_NEXT_PAGE) | ||||||
|                                 .setCallback((x, y, z) -> { |                                 .setCallback((x, y, z) -> { | ||||||
| @@ -198,7 +198,7 @@ public abstract class PagedGui extends SimpleGui { | |||||||
|             } else { |             } else { | ||||||
|                 return DisplayElement.of( |                 return DisplayElement.of( | ||||||
|                         new GuiElementBuilder(Items.PLAYER_HEAD) |                         new GuiElementBuilder(Items.PLAYER_HEAD) | ||||||
|                                 .setName(Text.translatable("createWorld.customize.custom.next").formatted(Formatting.DARK_GRAY)) |                                 .setName(Text.translatable("spectatorMenu.next_page").formatted(Formatting.DARK_GRAY)) | ||||||
|                                 .hideDefaultTooltip().noDefaults() |                                 .hideDefaultTooltip().noDefaults() | ||||||
|                                 .setSkullOwner(GUI_NEXT_PAGE_BLOCKED) |                                 .setSkullOwner(GUI_NEXT_PAGE_BLOCKED) | ||||||
|                 ); |                 ); | ||||||
| @@ -209,7 +209,7 @@ public abstract class PagedGui extends SimpleGui { | |||||||
|             if (gui.canPreviousPage()) { |             if (gui.canPreviousPage()) { | ||||||
|                 return DisplayElement.of( |                 return DisplayElement.of( | ||||||
|                         new GuiElementBuilder(Items.PLAYER_HEAD) |                         new GuiElementBuilder(Items.PLAYER_HEAD) | ||||||
|                                 .setName(Text.translatable("createWorld.customize.custom.prev").formatted(Formatting.WHITE)) |                                 .setName(Text.translatable("spectatorMenu.previous_page").formatted(Formatting.WHITE)) | ||||||
|                                 .hideDefaultTooltip().noDefaults() |                                 .hideDefaultTooltip().noDefaults() | ||||||
|                                 .setSkullOwner(GUI_PREVIOUS_PAGE) |                                 .setSkullOwner(GUI_PREVIOUS_PAGE) | ||||||
|                                 .setCallback((x, y, z) -> { |                                 .setCallback((x, y, z) -> { | ||||||
| @@ -220,7 +220,7 @@ public abstract class PagedGui extends SimpleGui { | |||||||
|             } else { |             } else { | ||||||
|                 return DisplayElement.of( |                 return DisplayElement.of( | ||||||
|                         new GuiElementBuilder(Items.PLAYER_HEAD) |                         new GuiElementBuilder(Items.PLAYER_HEAD) | ||||||
|                                 .setName(Text.translatable("createWorld.customize.custom.prev").formatted(Formatting.DARK_GRAY)) |                                 .setName(Text.translatable("spectatorMenu.previous_page").formatted(Formatting.DARK_GRAY)) | ||||||
|                                 .hideDefaultTooltip().noDefaults() |                                 .hideDefaultTooltip().noDefaults() | ||||||
|                                 .setSkullOwner(GUI_PREVIOUS_PAGE_BLOCKED) |                                 .setSkullOwner(GUI_PREVIOUS_PAGE_BLOCKED) | ||||||
|                 ); |                 ); | ||||||
|   | |||||||
| @@ -5,7 +5,12 @@ import net.minecraft.component.DataComponentTypes; | |||||||
| import net.minecraft.component.type.LoreComponent; | import net.minecraft.component.type.LoreComponent; | ||||||
| import net.minecraft.item.Item; | import net.minecraft.item.Item; | ||||||
| import net.minecraft.item.ItemStack; | import net.minecraft.item.ItemStack; | ||||||
| import net.minecraft.recipe.*; | import net.minecraft.recipe.CraftingRecipe; | ||||||
|  | import net.minecraft.recipe.Ingredient; | ||||||
|  | import net.minecraft.recipe.RecipeEntry; | ||||||
|  | import net.minecraft.recipe.ServerRecipeManager; | ||||||
|  | import net.minecraft.recipe.input.CraftingRecipeInput; | ||||||
|  | import net.minecraft.registry.entry.RegistryEntry; | ||||||
| import net.minecraft.server.MinecraftServer; | import net.minecraft.server.MinecraftServer; | ||||||
| import net.minecraft.text.RawFilteredPair; | import net.minecraft.text.RawFilteredPair; | ||||||
| import net.minecraft.text.Style; | import net.minecraft.text.Style; | ||||||
| @@ -130,40 +135,42 @@ public class Util { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static ArrayList<CraftingEntry> getCraftableRecipes(Map<ItemStack, Integer> itemStackMap, MinecraftServer server) { |     public static ArrayList<CraftingEntry> getCraftableRecipes(Map<ItemStack, Integer> itemStackMap, MinecraftServer server) { | ||||||
|         RecipeManager recipeManager = server.getRecipeManager(); |         ServerRecipeManager recipeManager = server.getRecipeManager(); | ||||||
|         List<RecipeEntry<CraftingRecipe>> allRecipes = recipeManager.listAllOfType(RecipeType.CRAFTING); |         List<RecipeEntry<?>> allRecipes = (List<RecipeEntry<?>>) recipeManager.values(); | ||||||
|  |  | ||||||
|         ArrayList<CraftingEntry> craftingEntries = new ArrayList<>(); |         ArrayList<CraftingEntry> craftingEntries = new ArrayList<>(); | ||||||
|  |  | ||||||
|         for (RecipeEntry<CraftingRecipe> recipe : allRecipes) { |         for (RecipeEntry<?> recipex : allRecipes) { | ||||||
|  |             if (! (recipex.value() instanceof CraftingRecipe)) { | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|  |             RecipeEntry<CraftingRecipe> recipe = (RecipeEntry<CraftingRecipe>) recipex; | ||||||
|             int maxAmount = Integer.MAX_VALUE; |             int maxAmount = Integer.MAX_VALUE; | ||||||
|             boolean canMake = true; |             boolean canMake = true; | ||||||
|             HashMap<ItemStack, Integer> finalInputs = new HashMap<>(); |             HashMap<ItemStack, Integer> finalInputs = new HashMap<>(); | ||||||
|             Map<Item, Integer> ingredientCounts = new HashMap<>(); |             Map<Item, Integer> ingredientCounts = new HashMap<>(); | ||||||
|  |  | ||||||
|             // Count the occurrences of each ingredient in the recipe |             // Count the occurrences of each ingredient in the recipe | ||||||
|             for (Ingredient ingredient : recipe.value().getIngredients()) { |             for (Ingredient ingredient : recipe.value().getIngredientPlacement().getIngredients()) { | ||||||
|                 for (ItemStack stack : ingredient.getMatchingStacks()) { |                 for (RegistryEntry<Item> item : ingredient.getMatchingItems()) { | ||||||
|                     if (stack.isEmpty()) continue; |                     ingredientCounts.put(item.value(), ingredientCounts.getOrDefault(item.value(), 0) + 1); | ||||||
|                     ingredientCounts.put(stack.getItem(), ingredientCounts.getOrDefault(stack.getItem(), 0) + 1); |  | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             boolean usesAnyIngredient = false; |             boolean usesAnyIngredient = false; | ||||||
|  |  | ||||||
|             for (Ingredient ingredient : recipe.value().getIngredients()) { |             for (Ingredient ingredient : recipe.value().getIngredientPlacement().getIngredients()) { | ||||||
|                 int totalAvailable = 0; |                 int totalAvailable = 0; | ||||||
|                 HashMap<ItemStack, Integer> inputsTemp = new HashMap<>(); |                 HashMap<ItemStack, Integer> inputsTemp = new HashMap<>(); | ||||||
|  |  | ||||||
|                 for (ItemStack stack : ingredient.getMatchingStacks()) { |                 for (RegistryEntry<Item> item : ingredient.getMatchingItems()) { | ||||||
|                     if (stack.isEmpty()) continue; |  | ||||||
|                     for (Map.Entry<ItemStack, Integer> entry : itemStackMap.entrySet()) { |                     for (Map.Entry<ItemStack, Integer> entry : itemStackMap.entrySet()) { | ||||||
|                         ItemStack inventoryStack = entry.getKey(); |                         ItemStack inventoryStack = entry.getKey(); | ||||||
|                         int inventoryCount = entry.getValue(); |                         int inventoryCount = entry.getValue(); | ||||||
|  |  | ||||||
|                         if (ItemStack.areItemsEqual(stack, inventoryStack)) { |                         if (item.value() == inventoryStack.getItem()) { | ||||||
|                             totalAvailable += inventoryCount; |                             totalAvailable += inventoryCount; | ||||||
|                             inputsTemp.put(stack, inventoryCount); |                             inputsTemp.put(item.value().getDefaultStack(), inventoryCount); | ||||||
|                             usesAnyIngredient = true; |                             usesAnyIngredient = true; | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
| @@ -173,10 +180,12 @@ public class Util { | |||||||
|                     canMake = false; |                     canMake = false; | ||||||
|                     break; |                     break; | ||||||
|                 } |                 } | ||||||
|  |                 int occurrences = ingredientCounts.getOrDefault(ingredient.getMatchingItems().getFirst(),0); | ||||||
|                 int requiredCount = ingredient.getMatchingStacks()[0].getCount(); |                 if (occurrences == 0) { | ||||||
|                 int occurrences = ingredientCounts.get(ingredient.getMatchingStacks()[0].getItem()); |                     canMake = false; | ||||||
|                 maxAmount = Math.min(maxAmount, totalAvailable / (requiredCount * occurrences)); |                     break; | ||||||
|  |                 } | ||||||
|  |                 maxAmount = Math.min(maxAmount, totalAvailable / occurrences); | ||||||
|  |  | ||||||
|                 for (Map.Entry<ItemStack, Integer> entry : inputsTemp.entrySet()) { |                 for (Map.Entry<ItemStack, Integer> entry : inputsTemp.entrySet()) { | ||||||
|                     ItemStack stackIn = entry.getKey(); |                     ItemStack stackIn = entry.getKey(); | ||||||
| @@ -186,7 +195,9 @@ public class Util { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             if (canMake && maxAmount > 0 && usesAnyIngredient) { |             if (canMake && maxAmount > 0 && usesAnyIngredient) { | ||||||
|                 ItemStack outputItem = recipe.value().getResult(server.getRegistryManager()).copy(); |                 List<ItemStack> stacks = finalInputs.keySet().stream().toList(); | ||||||
|  |                 CraftingRecipeInput input = CraftingRecipeInput.create(stacks.size(), 1, stacks); | ||||||
|  |                 ItemStack outputItem = recipe.value().craft(input, server.getRegistryManager()).copy(); | ||||||
|                 CraftingEntry finalEntry = new CraftingEntry(outputItem, recipe, finalInputs, maxAmount); |                 CraftingEntry finalEntry = new CraftingEntry(outputItem, recipe, finalInputs, maxAmount); | ||||||
|                 craftingEntries.add(finalEntry); |                 craftingEntries.add(finalEntry); | ||||||
|             } |             } | ||||||
|   | |||||||
| @@ -4,11 +4,14 @@ import eu.pb4.sgui.api.elements.GuiElementBuilder; | |||||||
| import net.minecraft.entity.player.PlayerEntity; | import net.minecraft.entity.player.PlayerEntity; | ||||||
| import net.minecraft.entity.player.PlayerInventory; | import net.minecraft.entity.player.PlayerInventory; | ||||||
| import net.minecraft.inventory.Inventory; | import net.minecraft.inventory.Inventory; | ||||||
|  | import net.minecraft.item.Item; | ||||||
| import net.minecraft.item.ItemStack; | import net.minecraft.item.ItemStack; | ||||||
| import net.minecraft.item.Items; | import net.minecraft.item.Items; | ||||||
| import net.minecraft.recipe.CraftingRecipe; | import net.minecraft.recipe.CraftingRecipe; | ||||||
| import net.minecraft.recipe.Ingredient; | import net.minecraft.recipe.Ingredient; | ||||||
| import net.minecraft.recipe.RecipeEntry; | import net.minecraft.recipe.RecipeEntry; | ||||||
|  | import net.minecraft.recipe.input.CraftingRecipeInput; | ||||||
|  | import net.minecraft.registry.entry.RegistryEntry; | ||||||
| import net.minecraft.text.Text; | import net.minecraft.text.Text; | ||||||
| import net.minecraft.util.Formatting; | import net.minecraft.util.Formatting; | ||||||
| import systems.brn.serverstorage.blockentities.StorageInterfaceBlockEntity; | import systems.brn.serverstorage.blockentities.StorageInterfaceBlockEntity; | ||||||
| @@ -108,7 +111,7 @@ public class CraftingScreen extends PagedGui implements Searchable { | |||||||
|  |  | ||||||
|     private boolean canCraft(RecipeEntry<CraftingRecipe> recipeEntry) { |     private boolean canCraft(RecipeEntry<CraftingRecipe> recipeEntry) { | ||||||
|         reindexDrives(); |         reindexDrives(); | ||||||
|         for (Ingredient ingredient : recipeEntry.value().getIngredients()) { |         for (Ingredient ingredient : recipeEntry.value().getIngredientPlacement().getIngredients()) { | ||||||
|             if (findMatchingStack(ingredient) == null) { |             if (findMatchingStack(ingredient) == null) { | ||||||
|                 return false; |                 return false; | ||||||
|             } |             } | ||||||
| @@ -121,7 +124,7 @@ public class CraftingScreen extends PagedGui implements Searchable { | |||||||
|         ArrayList<ItemStack> stacksToRemove = new ArrayList<>(); |         ArrayList<ItemStack> stacksToRemove = new ArrayList<>(); | ||||||
|  |  | ||||||
|         // Check and remove ingredients for one crafting operation |         // Check and remove ingredients for one crafting operation | ||||||
|         for (Ingredient ingredient : recipeEntry.value().getIngredients()) { |         for (Ingredient ingredient : recipeEntry.value().getIngredientPlacement().getIngredients()) { | ||||||
|             ItemStack stackToRemove = findMatchingStack(ingredient); |             ItemStack stackToRemove = findMatchingStack(ingredient); | ||||||
|             if (stackToRemove == null) { |             if (stackToRemove == null) { | ||||||
|                 return false; // Unable to find required ingredient |                 return false; // Unable to find required ingredient | ||||||
| @@ -135,7 +138,7 @@ public class CraftingScreen extends PagedGui implements Searchable { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Add crafted item to the appropriate inventory |         // Add crafted item to the appropriate inventory | ||||||
|         ItemStack outputStack = recipeEntry.value().getResult(storageScreen.getPlayer().getRegistryManager()).copy(); |         ItemStack outputStack = recipeEntry.value().craft(CraftingRecipeInput.create(stacksToRemove.size(), 1, stacksToRemove), storageScreen.getPlayer().getRegistryManager()).copy(); | ||||||
|  |  | ||||||
|         if (toPlayerInventory) { |         if (toPlayerInventory) { | ||||||
|             PlayerInventory playerInventory = player.getInventory(); |             PlayerInventory playerInventory = player.getInventory(); | ||||||
| @@ -164,9 +167,10 @@ public class CraftingScreen extends PagedGui implements Searchable { | |||||||
|             ItemStack playerStack = playerInventory.getStack(i); |             ItemStack playerStack = playerInventory.getStack(i); | ||||||
|             if (ingredient.test(playerStack)) { |             if (ingredient.test(playerStack)) { | ||||||
|                 ItemStack stackToRemove = playerStack.copy(); |                 ItemStack stackToRemove = playerStack.copy(); | ||||||
|                 for (ItemStack matchingStack : ingredient.getMatchingStacks()) { |                 for (RegistryEntry<Item> matchingItemx : ingredient.getMatchingItems()) { | ||||||
|                     if (matchingStack.getItem() == stackToRemove.getItem()) { |                     Item matchingItem = matchingItemx.value(); | ||||||
|                         stackToRemove.setCount(matchingStack.getCount()); // Set count to ingredient requirement |                     if (matchingItem == stackToRemove.getItem()) { | ||||||
|  |                         stackToRemove.setCount(1); // Set count to ingredient requirement | ||||||
|                         break; |                         break; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
| @@ -175,10 +179,11 @@ public class CraftingScreen extends PagedGui implements Searchable { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Check storage network |         // Check storage network | ||||||
|         for (ItemStack stack : ingredient.getMatchingStacks()) { |         for (RegistryEntry<Item> itemx : ingredient.getMatchingItems()) { | ||||||
|             if (this.storageScreen.getNetwork().canRemove(stack)) { |             Item item = itemx.value(); | ||||||
|                 ItemStack stackToRemove = stack.copy(); |             if (this.storageScreen.getNetwork().canRemove(item.getDefaultStack())) { | ||||||
|                 stackToRemove.setCount(ingredient.getMatchingStacks()[0].getCount()); // Set count to ingredient requirement |                 ItemStack stackToRemove = item.getDefaultStack(); | ||||||
|  |                 stackToRemove.setCount(1); // Set count to ingredient requirement | ||||||
|                 return stackToRemove; |                 return stackToRemove; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -379,7 +379,7 @@ public class StorageScreen extends PagedGui implements Searchable { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     protected DisplayElement crafting() { |     protected DisplayElement crafting() { | ||||||
|         if (world != null && world.getGameRules().getBoolean(ServerStorage_Crafting_Enable)) { |         if (world != null && ((ServerWorld) world).getGameRules().getBoolean(ServerStorage_Crafting_Enable)) { | ||||||
|             return DisplayElement.of( |             return DisplayElement.of( | ||||||
|                     new GuiElementBuilder(Items.PLAYER_HEAD) |                     new GuiElementBuilder(Items.PLAYER_HEAD) | ||||||
|                             .setName(Text.translatable("container.crafting").formatted(Formatting.WHITE)) |                             .setName(Text.translatable("container.crafting").formatted(Formatting.WHITE)) | ||||||
|   | |||||||
| @@ -7,21 +7,11 @@ | |||||||
|     "BBP" |     "BBP" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "C": { |     "C": "serverstorage:material_cpu", | ||||||
|       "item": "serverstorage:material_cpu" |     "G": "minecraft:gold_nugget", | ||||||
|     }, |     "P": "serverstorage:material_pcb", | ||||||
|     "G": { |     "R": "minecraft:redstone_block", | ||||||
|       "item": "minecraft:gold_nugget" |     "B": "serverstorage:module_bus" | ||||||
|     }, |  | ||||||
|     "P": { |  | ||||||
|       "item": "serverstorage:material_pcb" |  | ||||||
|     }, |  | ||||||
|     "R": { |  | ||||||
|       "item": "minecraft:redstone_block" |  | ||||||
|     }, |  | ||||||
|     "B": { |  | ||||||
|       "item": "serverstorage:module_bus" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:bus_connector", |     "id": "serverstorage:bus_connector", | ||||||
|   | |||||||
| @@ -7,15 +7,9 @@ | |||||||
|     "GSG" |     "GSG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "P": "minecraft:amethyst_shard", | ||||||
|     }, |     "S": "serverstorage:material_cpu_substrate" | ||||||
|     "P": { |  | ||||||
|       "item": "minecraft:amethyst_shard" |  | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_cpu_substrate" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:material_cpu", |     "id": "serverstorage:material_cpu", | ||||||
|   | |||||||
| @@ -7,12 +7,8 @@ | |||||||
|     "AAA" |     "AAA" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "D": { |     "D": "minecraft:light_gray_dye", | ||||||
|       "item": "minecraft:light_gray_dye" |     "A": "minecraft:amethyst_shard" | ||||||
|     }, |  | ||||||
|     "A": { |  | ||||||
|       "item": "minecraft:amethyst_shard" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:material_cpu_substrate", |     "id": "serverstorage:material_cpu_substrate", | ||||||
|   | |||||||
| @@ -7,9 +7,7 @@ | |||||||
|     "#  " |     "#  " | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "#": { |     "#": "minecraft:diamond" | ||||||
|       "item": "minecraft:diamond" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:diamond_antenna", |     "id": "serverstorage:diamond_antenna", | ||||||
|   | |||||||
| @@ -7,18 +7,10 @@ | |||||||
|     "HXH" |     "HXH" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "H": { |     "H": "serverstorage:diamond_head", | ||||||
|       "item": "serverstorage:diamond_head" |     "P": "serverstorage:diamond_platter", | ||||||
|     }, |     "C": "serverstorage:material_drive_casing", | ||||||
|     "P": { |     "X": "serverstorage:material_drive_controller" | ||||||
|       "item": "serverstorage:diamond_platter" |  | ||||||
|     }, |  | ||||||
|     "C": { |  | ||||||
|       "item": "serverstorage:material_drive_casing" |  | ||||||
|     }, |  | ||||||
|     "X": { |  | ||||||
|       "item": "serverstorage:material_drive_controller" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:diamond_drive", |     "id": "serverstorage:diamond_drive", | ||||||
|   | |||||||
| @@ -7,9 +7,7 @@ | |||||||
|     " ##" |     " ##" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "#": { |     "#": "minecraft:diamond" | ||||||
|       "item": "minecraft:diamond" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:diamond_head", |     "id": "serverstorage:diamond_head", | ||||||
|   | |||||||
| @@ -7,9 +7,7 @@ | |||||||
|     "###" |     "###" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "#": { |     "#": "minecraft:diamond" | ||||||
|       "item": "minecraft:diamond" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:diamond_platter", |     "id": "serverstorage:diamond_platter", | ||||||
|   | |||||||
| @@ -7,15 +7,9 @@ | |||||||
|     "IRI" |     "IRI" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "I": { |     "I": "minecraft:iron_ingot", | ||||||
|       "item": "minecraft:iron_ingot" |     "R": "minecraft:redstone", | ||||||
|     }, |     "P": "minecraft:paper" | ||||||
|     "R": { |  | ||||||
|       "item": "minecraft:redstone" |  | ||||||
|     }, |  | ||||||
|     "P": { |  | ||||||
|       "item": "minecraft:paper" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:material_drive_casing", |     "id": "serverstorage:material_drive_casing", | ||||||
|   | |||||||
| @@ -7,21 +7,11 @@ | |||||||
|     "DDP" |     "DDP" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "C": { |     "C": "serverstorage:material_cpu", | ||||||
|       "item": "serverstorage:material_cpu" |     "P": "serverstorage:material_pcb", | ||||||
|     }, |     "R": "minecraft:redstone_block", | ||||||
|     "P": { |     "D": "serverstorage:module_drive", | ||||||
|       "item": "serverstorage:material_pcb" |     "B": "serverstorage:module_bus" | ||||||
|     }, |  | ||||||
|     "R": { |  | ||||||
|       "item": "minecraft:redstone_block" |  | ||||||
|     }, |  | ||||||
|     "D": { |  | ||||||
|       "item": "serverstorage:module_drive" |  | ||||||
|     }, |  | ||||||
|     "B": { |  | ||||||
|       "item": "serverstorage:module_bus" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:drive_container", |     "id": "serverstorage:drive_container", | ||||||
|   | |||||||
| @@ -7,18 +7,10 @@ | |||||||
|     "III" |     "III" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "I": { |     "I": "minecraft:gold_ingot", | ||||||
|       "item": "minecraft:gold_ingot" |     "X": "serverstorage:material_drive_casing", | ||||||
|     }, |     "C": "serverstorage:material_cpu", | ||||||
|     "X": { |     "S": "serverstorage:material_pcb_substrate" | ||||||
|       "item": "serverstorage:material_drive_casing" |  | ||||||
|     }, |  | ||||||
|     "C": { |  | ||||||
|       "item": "serverstorage:material_cpu" |  | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:material_drive_controller", |     "id": "serverstorage:material_drive_controller", | ||||||
|   | |||||||
| @@ -7,9 +7,7 @@ | |||||||
|     "#  " |     "#  " | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "#": { |     "#": "minecraft:gold_ingot" | ||||||
|       "item": "minecraft:gold_ingot" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:golden_antenna", |     "id": "serverstorage:golden_antenna", | ||||||
|   | |||||||
| @@ -7,18 +7,10 @@ | |||||||
|     "HXH" |     "HXH" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "H": { |     "H": "serverstorage:golden_head", | ||||||
|       "item": "serverstorage:golden_head" |     "P": "serverstorage:golden_platter", | ||||||
|     }, |     "C": "serverstorage:material_drive_casing", | ||||||
|     "P": { |     "X": "serverstorage:material_drive_controller" | ||||||
|       "item": "serverstorage:golden_platter" |  | ||||||
|     }, |  | ||||||
|     "C": { |  | ||||||
|       "item": "serverstorage:material_drive_casing" |  | ||||||
|     }, |  | ||||||
|     "X": { |  | ||||||
|       "item": "serverstorage:material_drive_controller" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:golden_drive", |     "id": "serverstorage:golden_drive", | ||||||
|   | |||||||
| @@ -7,9 +7,7 @@ | |||||||
|     " ##" |     " ##" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "#": { |     "#": "minecraft:gold_ingot" | ||||||
|       "item": "minecraft:gold_ingot" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:golden_head", |     "id": "serverstorage:golden_head", | ||||||
|   | |||||||
| @@ -7,9 +7,7 @@ | |||||||
|     "###" |     "###" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "#": { |     "#": "minecraft:gold_ingot" | ||||||
|       "item": "minecraft:gold_ingot" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:golden_platter", |     "id": "serverstorage:golden_platter", | ||||||
|   | |||||||
| @@ -7,30 +7,14 @@ | |||||||
|     "SPF" |     "SPF" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "P": { |     "P": "serverstorage:material_pcb", | ||||||
|       "item": "serverstorage:material_pcb" |     "U": "serverstorage:material_cpu", | ||||||
|     }, |     "C": "serverstorage:module_container", | ||||||
|     "U": { |     "B": "serverstorage:module_bus", | ||||||
|       "item": "serverstorage:material_cpu" |     "H": "minecraft:hopper", | ||||||
|     }, |     "S": "minecraft:chest", | ||||||
|     "C": { |     "G": "serverstorage:module_configuration", | ||||||
|       "item": "serverstorage:module_container" |     "F": "serverstorage:module_filtering" | ||||||
|     }, |  | ||||||
|     "B": { |  | ||||||
|       "item": "serverstorage:module_bus" |  | ||||||
|     }, |  | ||||||
|     "H": { |  | ||||||
|       "item": "minecraft:hopper" |  | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "minecraft:chest" |  | ||||||
|     }, |  | ||||||
|     "G": { |  | ||||||
|       "item": "serverstorage:module_configuration" |  | ||||||
|     }, |  | ||||||
|     "F": { |  | ||||||
|       "item": "serverstorage:module_filtering" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:inventory_interface", |     "id": "serverstorage:inventory_interface", | ||||||
|   | |||||||
| @@ -7,9 +7,7 @@ | |||||||
|     "#  " |     "#  " | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "#": { |     "#": "minecraft:iron_ingot" | ||||||
|       "item": "minecraft:iron_ingot" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:iron_antenna", |     "id": "serverstorage:iron_antenna", | ||||||
|   | |||||||
| @@ -7,18 +7,10 @@ | |||||||
|     "HXH" |     "HXH" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "H": { |     "H": "serverstorage:iron_head", | ||||||
|       "item": "serverstorage:iron_head" |     "P": "serverstorage:iron_platter", | ||||||
|     }, |     "C": "serverstorage:material_drive_casing", | ||||||
|     "P": { |     "X": "serverstorage:material_drive_controller" | ||||||
|       "item": "serverstorage:iron_platter" |  | ||||||
|     }, |  | ||||||
|     "C": { |  | ||||||
|       "item": "serverstorage:material_drive_casing" |  | ||||||
|     }, |  | ||||||
|     "X": { |  | ||||||
|       "item": "serverstorage:material_drive_controller" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:iron_drive", |     "id": "serverstorage:iron_drive", | ||||||
|   | |||||||
| @@ -7,9 +7,7 @@ | |||||||
|     " ##" |     " ##" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "#": { |     "#": "minecraft:iron_ingot" | ||||||
|       "item": "minecraft:iron_ingot" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:iron_head", |     "id": "serverstorage:iron_head", | ||||||
|   | |||||||
| @@ -7,9 +7,7 @@ | |||||||
|     "###" |     "###" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "#": { |     "#": "minecraft:iron_ingot" | ||||||
|       "item": "minecraft:iron_ingot" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:iron_platter", |     "id": "serverstorage:iron_platter", | ||||||
|   | |||||||
| @@ -7,21 +7,11 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "R": "minecraft:iron_ingot", | ||||||
|     }, |     "I": "minecraft:gold_ingot", | ||||||
|     "R": { |     "C": "serverstorage:material_cpu", | ||||||
|       "item": "minecraft:iron_ingot" |     "S": "serverstorage:material_pcb_substrate" | ||||||
|     }, |  | ||||||
|     "I": { |  | ||||||
|       "item": "minecraft:gold_ingot" |  | ||||||
|     }, |  | ||||||
|     "C": { |  | ||||||
|       "item": "serverstorage:material_cpu" |  | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_antenna", |     "id": "serverstorage:module_antenna", | ||||||
|   | |||||||
| @@ -7,18 +7,10 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "R": "minecraft:iron_ingot", | ||||||
|     }, |     "C": "serverstorage:material_cpu", | ||||||
|     "R": { |     "S": "serverstorage:material_pcb_substrate" | ||||||
|       "item": "minecraft:iron_ingot" |  | ||||||
|     }, |  | ||||||
|     "C": { |  | ||||||
|       "item": "serverstorage:material_cpu" |  | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_antenna_connector", |     "id": "serverstorage:module_antenna_connector", | ||||||
|   | |||||||
| @@ -7,21 +7,11 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "C": "serverstorage:material_cpu", | ||||||
|     }, |     "S": "serverstorage:material_pcb_substrate", | ||||||
|     "C": { |     "I": "minecraft:iron_ingot", | ||||||
|       "item": "serverstorage:material_cpu" |     "A": "minecraft:gold_ingot" | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     }, |  | ||||||
|     "I": { |  | ||||||
|       "item": "minecraft:iron_ingot" |  | ||||||
|     }, |  | ||||||
|     "A": { |  | ||||||
|       "item": "minecraft:gold_ingot" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_bus", |     "id": "serverstorage:module_bus", | ||||||
|   | |||||||
| @@ -7,18 +7,10 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "C": "serverstorage:material_cpu", | ||||||
|     }, |     "S": "serverstorage:material_pcb_substrate", | ||||||
|     "C": { |     "I": "minecraft:iron_ingot" | ||||||
|       "item": "serverstorage:material_cpu" |  | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     }, |  | ||||||
|     "I": { |  | ||||||
|       "item": "minecraft:iron_ingot" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_configuration", |     "id": "serverstorage:module_configuration", | ||||||
|   | |||||||
| @@ -7,18 +7,10 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "C": "serverstorage:material_cpu", | ||||||
|     }, |     "S": "serverstorage:material_pcb_substrate", | ||||||
|     "C": { |     "H": "minecraft:chest" | ||||||
|       "item": "serverstorage:material_cpu" |  | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     }, |  | ||||||
|     "H": { |  | ||||||
|       "item": "minecraft:chest" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_container", |     "id": "serverstorage:module_container", | ||||||
|   | |||||||
| @@ -7,18 +7,10 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "C": "serverstorage:material_cpu", | ||||||
|     }, |     "S": "serverstorage:material_pcb_substrate", | ||||||
|     "C": { |     "D": "minecraft:gray_stained_glass" | ||||||
|       "item": "serverstorage:material_cpu" |  | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     }, |  | ||||||
|     "D": { |  | ||||||
|       "item": "minecraft:gray_stained_glass" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_display", |     "id": "serverstorage:module_display", | ||||||
|   | |||||||
| @@ -7,18 +7,10 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "I": "minecraft:gold_ingot", | ||||||
|     }, |     "C": "serverstorage:material_cpu", | ||||||
|     "I": { |     "S": "serverstorage:material_pcb_substrate" | ||||||
|       "item": "minecraft:gold_ingot" |  | ||||||
|     }, |  | ||||||
|     "C": { |  | ||||||
|       "item": "serverstorage:material_cpu" |  | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_drive", |     "id": "serverstorage:module_drive", | ||||||
|   | |||||||
| @@ -7,21 +7,11 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "C": "serverstorage:material_cpu", | ||||||
|     }, |     "S": "serverstorage:material_pcb_substrate", | ||||||
|     "C": { |     "L": "minecraft:glass", | ||||||
|       "item": "serverstorage:material_cpu" |     "I": "minecraft:iron_ingot" | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     }, |  | ||||||
|     "L": { |  | ||||||
|       "item": "minecraft:glass" |  | ||||||
|     }, |  | ||||||
|     "I": { |  | ||||||
|       "item": "minecraft:iron_ingot" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_filtering", |     "id": "serverstorage:module_filtering", | ||||||
|   | |||||||
| @@ -7,21 +7,11 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "C": "serverstorage:material_cpu", | ||||||
|     }, |     "S": "serverstorage:material_pcb_substrate", | ||||||
|     "C": { |     "H": "minecraft:chest", | ||||||
|       "item": "serverstorage:material_cpu" |     "I": "minecraft:iron_ingot" | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     }, |  | ||||||
|     "H": { |  | ||||||
|       "item": "minecraft:chest" |  | ||||||
|     }, |  | ||||||
|     "I": { |  | ||||||
|       "item": "minecraft:iron_ingot" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_inventory", |     "id": "serverstorage:module_inventory", | ||||||
|   | |||||||
| @@ -7,18 +7,10 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "I": "minecraft:gold_ingot", | ||||||
|     }, |     "C": "serverstorage:material_cpu", | ||||||
|     "I": { |     "S": "serverstorage:material_pcb_substrate" | ||||||
|       "item": "minecraft:gold_ingot" |  | ||||||
|     }, |  | ||||||
|     "C": { |  | ||||||
|       "item": "serverstorage:material_cpu" |  | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_modem", |     "id": "serverstorage:module_modem", | ||||||
|   | |||||||
| @@ -7,18 +7,10 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "C": "serverstorage:material_cpu", | ||||||
|     }, |     "S": "serverstorage:material_pcb_substrate", | ||||||
|     "C": { |     "I": "minecraft:iron_ingot" | ||||||
|       "item": "serverstorage:material_cpu" |  | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     }, |  | ||||||
|     "I": { |  | ||||||
|       "item": "minecraft:iron_ingot" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_pagination", |     "id": "serverstorage:module_pagination", | ||||||
|   | |||||||
| @@ -7,15 +7,9 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "C": "serverstorage:material_cpu", | ||||||
|     }, |     "S": "serverstorage:material_pcb_substrate" | ||||||
|     "C": { |  | ||||||
|       "item": "serverstorage:material_cpu" |  | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_pcb", |     "id": "serverstorage:module_pcb", | ||||||
|   | |||||||
| @@ -7,18 +7,10 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "I": "minecraft:gold_ingot", | ||||||
|     }, |     "C": "serverstorage:material_cpu", | ||||||
|     "I": { |     "S": "serverstorage:material_pcb_substrate" | ||||||
|       "item": "minecraft:gold_ingot" |  | ||||||
|     }, |  | ||||||
|     "C": { |  | ||||||
|       "item": "serverstorage:material_cpu" |  | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_radio", |     "id": "serverstorage:module_radio", | ||||||
|   | |||||||
| @@ -7,18 +7,10 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:gold_nugget", | ||||||
|       "item": "minecraft:gold_nugget" |     "C": "serverstorage:material_cpu", | ||||||
|     }, |     "S": "serverstorage:material_pcb_substrate", | ||||||
|     "C": { |     "H": "minecraft:hopper" | ||||||
|       "item": "serverstorage:material_cpu" |  | ||||||
|     }, |  | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     }, |  | ||||||
|     "H": { |  | ||||||
|       "item": "minecraft:hopper" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_transport", |     "id": "serverstorage:module_transport", | ||||||
|   | |||||||
| @@ -1,16 +1,10 @@ | |||||||
| { | { | ||||||
|   "type": "minecraft:smithing_transform", |   "type": "minecraft:smithing_transform", | ||||||
|   "addition": { |   "addition": "minecraft:netherite_ingot", | ||||||
|     "item": "minecraft:netherite_ingot" |   "base": "serverstorage:diamond_antenna", | ||||||
|   }, |  | ||||||
|   "base": { |  | ||||||
|     "item": "serverstorage:diamond_antenna" |  | ||||||
|   }, |  | ||||||
|   "result": { |   "result": { | ||||||
|     "count": 1, |     "count": 1, | ||||||
|     "id": "serverstorage:netherite_antenna" |     "id": "serverstorage:netherite_antenna" | ||||||
|   }, |   }, | ||||||
|   "template": { |   "template": "serverstorage:module_netherite_upgrade" | ||||||
|     "item": "serverstorage:module_netherite_upgrade" |  | ||||||
|   } |  | ||||||
| } | } | ||||||
| @@ -7,18 +7,10 @@ | |||||||
|     "HXH" |     "HXH" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "H": { |     "H": "serverstorage:netherite_head", | ||||||
|       "item": "serverstorage:netherite_head" |     "P": "serverstorage:netherite_platter", | ||||||
|     }, |     "C": "serverstorage:material_drive_casing", | ||||||
|     "P": { |     "X": "serverstorage:material_drive_controller" | ||||||
|       "item": "serverstorage:netherite_platter" |  | ||||||
|     }, |  | ||||||
|     "C": { |  | ||||||
|       "item": "serverstorage:material_drive_casing" |  | ||||||
|     }, |  | ||||||
|     "X": { |  | ||||||
|       "item": "serverstorage:material_drive_controller" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:netherite_drive", |     "id": "serverstorage:netherite_drive", | ||||||
|   | |||||||
| @@ -1,16 +1,10 @@ | |||||||
| { | { | ||||||
|   "type": "minecraft:smithing_transform", |   "type": "minecraft:smithing_transform", | ||||||
|   "addition": { |   "addition": "minecraft:netherite_ingot", | ||||||
|     "item": "minecraft:netherite_ingot" |   "base": "serverstorage:diamond_head", | ||||||
|   }, |  | ||||||
|   "base": { |  | ||||||
|     "item": "serverstorage:diamond_head" |  | ||||||
|   }, |  | ||||||
|   "result": { |   "result": { | ||||||
|     "count": 1, |     "count": 1, | ||||||
|     "id": "serverstorage:netherite_head" |     "id": "serverstorage:netherite_head" | ||||||
|   }, |   }, | ||||||
|   "template": { |   "template": "serverstorage:module_netherite_upgrade" | ||||||
|     "item": "serverstorage:module_netherite_upgrade" |  | ||||||
|   } |  | ||||||
| } | } | ||||||
| @@ -1,16 +1,10 @@ | |||||||
| { | { | ||||||
|   "type": "minecraft:smithing_transform", |   "type": "minecraft:smithing_transform", | ||||||
|   "addition": { |   "addition": "minecraft:netherite_ingot", | ||||||
|     "item": "minecraft:netherite_ingot" |   "base": "serverstorage:diamond_platter", | ||||||
|   }, |  | ||||||
|   "base": { |  | ||||||
|     "item": "serverstorage:diamond_platter" |  | ||||||
|   }, |  | ||||||
|   "result": { |   "result": { | ||||||
|     "count": 1, |     "count": 1, | ||||||
|     "id": "serverstorage:netherite_platter" |     "id": "serverstorage:netherite_platter" | ||||||
|   }, |   }, | ||||||
|   "template": { |   "template": "serverstorage:module_netherite_upgrade" | ||||||
|     "item": "serverstorage:module_netherite_upgrade" |  | ||||||
|   } |  | ||||||
| } | } | ||||||
| @@ -7,15 +7,9 @@ | |||||||
|     "SLS" |     "SLS" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "C": { |     "C": "serverstorage:material_cpu", | ||||||
|       "item": "serverstorage:material_cpu" |     "S": "serverstorage:material_pcb_substrate", | ||||||
|     }, |     "L": "minecraft:glass" | ||||||
|     "S": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     }, |  | ||||||
|     "L": { |  | ||||||
|       "item": "minecraft:glass" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:module_netherite_upgrade", |     "id": "serverstorage:module_netherite_upgrade", | ||||||
|   | |||||||
| @@ -7,12 +7,8 @@ | |||||||
|     "GGG" |     "GGG" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:lime_dye", | ||||||
|       "item": "minecraft:lime_dye" |     "P": "serverstorage:material_pcb_substrate" | ||||||
|     }, |  | ||||||
|     "P": { |  | ||||||
|       "item": "serverstorage:material_pcb_substrate" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:material_pcb", |     "id": "serverstorage:material_pcb", | ||||||
|   | |||||||
| @@ -7,12 +7,8 @@ | |||||||
|     "AAA" |     "AAA" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "G": { |     "G": "minecraft:green_dye", | ||||||
|       "item": "minecraft:green_dye" |     "A": "minecraft:amethyst_shard" | ||||||
|     }, |  | ||||||
|     "A": { |  | ||||||
|       "item": "minecraft:amethyst_shard" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:material_pcb_substrate", |     "id": "serverstorage:material_pcb_substrate", | ||||||
|   | |||||||
| @@ -7,30 +7,14 @@ | |||||||
|     "MPF" |     "MPF" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "P": { |     "P": "serverstorage:material_pcb", | ||||||
|       "item": "serverstorage:material_pcb" |     "U": "serverstorage:material_cpu", | ||||||
|     }, |     "C": "serverstorage:module_radio", | ||||||
|     "U": { |     "B": "serverstorage:module_bus", | ||||||
|       "item": "serverstorage:material_cpu" |     "H": "serverstorage:module_antenna_connector", | ||||||
|     }, |     "M": "serverstorage:module_modem", | ||||||
|     "C": { |     "G": "serverstorage:module_configuration", | ||||||
|       "item": "serverstorage:module_radio" |     "F": "serverstorage:module_pagination" | ||||||
|     }, |  | ||||||
|     "B": { |  | ||||||
|       "item": "serverstorage:module_bus" |  | ||||||
|     }, |  | ||||||
|     "H": { |  | ||||||
|       "item": "serverstorage:module_antenna_connector" |  | ||||||
|     }, |  | ||||||
|     "M": { |  | ||||||
|       "item": "serverstorage:module_modem" |  | ||||||
|     }, |  | ||||||
|     "G": { |  | ||||||
|       "item": "serverstorage:module_configuration" |  | ||||||
|     }, |  | ||||||
|     "F": { |  | ||||||
|       "item": "serverstorage:module_pagination" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:radio_interface", |     "id": "serverstorage:radio_interface", | ||||||
|   | |||||||
| @@ -7,33 +7,15 @@ | |||||||
|     "ILX" |     "ILX" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "L": { |     "L": "minecraft:diamond_block", | ||||||
|       "item": "minecraft:diamond_block" |     "D": "serverstorage:module_display", | ||||||
|     }, |     "F": "serverstorage:module_filtering", | ||||||
|     "D": { |     "C": "serverstorage:module_configuration", | ||||||
|       "item": "serverstorage:module_display" |     "P": "serverstorage:module_pagination", | ||||||
|     }, |     "B": "serverstorage:module_bus", | ||||||
|     "F": { |     "I": "serverstorage:module_inventory", | ||||||
|       "item": "serverstorage:module_filtering" |     "X": "serverstorage:material_cpu", | ||||||
|     }, |     "O": "serverstorage:material_pcb" | ||||||
|     "C": { |  | ||||||
|       "item": "serverstorage:module_configuration" |  | ||||||
|     }, |  | ||||||
|     "P": { |  | ||||||
|       "item": "serverstorage:module_pagination" |  | ||||||
|     }, |  | ||||||
|     "B": { |  | ||||||
|       "item": "serverstorage:module_bus" |  | ||||||
|     }, |  | ||||||
|     "I": { |  | ||||||
|       "item": "serverstorage:module_inventory" |  | ||||||
|     }, |  | ||||||
|     "X": { |  | ||||||
|       "item": "serverstorage:material_cpu" |  | ||||||
|     }, |  | ||||||
|     "O": { |  | ||||||
|       "item": "serverstorage:material_pcb" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:storage", |     "id": "serverstorage:storage", | ||||||
|   | |||||||
| @@ -7,30 +7,14 @@ | |||||||
|     "UMP" |     "UMP" | ||||||
|   ], |   ], | ||||||
|   "key": { |   "key": { | ||||||
|     "P": { |     "P": "serverstorage:material_pcb", | ||||||
|       "item": "serverstorage:material_pcb" |     "U": "serverstorage:material_cpu", | ||||||
|     }, |     "A": "serverstorage:module_antenna", | ||||||
|     "U": { |     "C": "serverstorage:module_radio", | ||||||
|       "item": "serverstorage:material_cpu" |     "H": "serverstorage:module_antenna_connector", | ||||||
|     }, |     "M": "serverstorage:module_modem", | ||||||
|     "A": { |     "G": "serverstorage:module_configuration", | ||||||
|       "item": "serverstorage:module_antenna" |     "F": "serverstorage:module_pagination" | ||||||
|     }, |  | ||||||
|     "C": { |  | ||||||
|       "item": "serverstorage:module_radio" |  | ||||||
|     }, |  | ||||||
|     "H": { |  | ||||||
|       "item": "serverstorage:module_antenna_connector" |  | ||||||
|     }, |  | ||||||
|     "M": { |  | ||||||
|       "item": "serverstorage:module_modem" |  | ||||||
|     }, |  | ||||||
|     "G": { |  | ||||||
|       "item": "serverstorage:module_configuration" |  | ||||||
|     }, |  | ||||||
|     "F": { |  | ||||||
|       "item": "serverstorage:module_pagination" |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   "result": { |   "result": { | ||||||
|     "id": "serverstorage:wireless_terminal", |     "id": "serverstorage:wireless_terminal", | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user