diff --git a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java index 2366558ed..8cb8da462 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java @@ -9,6 +9,7 @@ import com.raoulvdberge.refinedstorage.render.color.PatternItemColor; import com.raoulvdberge.refinedstorage.render.model.*; import com.raoulvdberge.refinedstorage.render.tesr.StorageMonitorTileRenderer; import com.raoulvdberge.refinedstorage.screen.*; +import com.raoulvdberge.refinedstorage.screen.factory.CrafterManagerScreenFactory; import com.raoulvdberge.refinedstorage.screen.factory.GridScreenFactory; import com.raoulvdberge.refinedstorage.tile.StorageMonitorTile; import net.minecraft.client.Minecraft; @@ -108,6 +109,8 @@ public class ClientSetup { new ResourceLocation(RS.ID, "block/crafter/cutouts/front_connected") )); + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "crafter_manager"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/crafter_manager/cutouts/front_connected"))); + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base)); ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/disk")); @@ -182,6 +185,7 @@ public class ClientSetup { ScreenManager.registerFactory(RSContainers.DESTRUCTOR, DestructorScreen::new); ScreenManager.registerFactory(RSContainers.DISK_MANIPULATOR, DiskManipulatorScreen::new); ScreenManager.registerFactory(RSContainers.CRAFTER, CrafterScreen::new); + ScreenManager.registerFactory(RSContainers.CRAFTER_MANAGER, new CrafterManagerScreenFactory()); ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_GRID); ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_FLUID_GRID); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RS.java b/src/main/java/com/raoulvdberge/refinedstorage/RS.java index 55a808342..d4a3f933d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -28,6 +28,7 @@ import com.raoulvdberge.refinedstorage.capability.NetworkNodeProxyCapability; import com.raoulvdberge.refinedstorage.config.ClientConfig; import com.raoulvdberge.refinedstorage.config.ServerConfig; import com.raoulvdberge.refinedstorage.container.*; +import com.raoulvdberge.refinedstorage.container.factory.CrafterManagerContainerFactory; import com.raoulvdberge.refinedstorage.container.factory.GridContainerFactory; import com.raoulvdberge.refinedstorage.container.factory.PositionalTileContainerFactory; import com.raoulvdberge.refinedstorage.item.*; @@ -137,6 +138,7 @@ public final class RS { API.instance().getNetworkNodeRegistry().add(DestructorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DestructorNetworkNode(world, pos))); API.instance().getNetworkNodeRegistry().add(DiskManipulatorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DiskManipulatorNetworkNode(world, pos))); API.instance().getNetworkNodeRegistry().add(CrafterNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new CrafterNetworkNode(world, pos))); + API.instance().getNetworkNodeRegistry().add(CrafterManagerNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new CrafterManagerNetworkNode(world, pos))); API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory()); API.instance().getGridManager().add(WirelessGridGridFactory.ID, new WirelessGridGridFactory()); @@ -208,6 +210,7 @@ public final class RS { e.getRegistry().register(new PortableGridBlock(PortableGridBlockItem.Type.NORMAL)); e.getRegistry().register(new PortableGridBlock(PortableGridBlockItem.Type.CREATIVE)); e.getRegistry().register(new CrafterBlock()); + e.getRegistry().register(new CrafterManagerBlock()); } @SubscribeEvent @@ -249,6 +252,7 @@ public final class RS { e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(DestructorTile::new, RSBlocks.DESTRUCTOR).build(null).setRegistryName(RS.ID, "destructor"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(DiskManipulatorTile::new, RSBlocks.DISK_MANIPULATOR).build(null).setRegistryName(RS.ID, "disk_manipulator"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(CrafterTile::new, RSBlocks.CRAFTER).build(null).setRegistryName(RS.ID, "crafter"))); + e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(CrafterManagerTile::new, RSBlocks.CRAFTER_MANAGER).build(null).setRegistryName(RS.ID, "crafter_manager"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new PortableGridTile(PortableGridBlockItem.Type.CREATIVE), RSBlocks.CREATIVE_PORTABLE_GRID).build(null).setRegistryName(RS.ID, "creative_portable_grid"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new PortableGridTile(PortableGridBlockItem.Type.NORMAL), RSBlocks.PORTABLE_GRID).build(null).setRegistryName(RS.ID, "portable_grid"))); @@ -285,6 +289,7 @@ public final class RS { e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new DestructorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "destructor")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new DiskManipulatorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "disk_manipulator")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new CrafterContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "crafter")); + e.getRegistry().register(IForgeContainerType.create(new CrafterManagerContainerFactory()).setRegistryName(RS.ID, "crafter_manager")); } @SubscribeEvent @@ -370,6 +375,7 @@ public final class RS { e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.DESTRUCTOR)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.DISK_MANIPULATOR)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CRAFTER)); + e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CRAFTER_MANAGER)); e.getRegistry().register(new WirelessGridItem(WirelessGridItem.Type.NORMAL)); e.getRegistry().register(new WirelessGridItem(WirelessGridItem.Type.CREATIVE)); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java index 153dd6845..07f2d667a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java @@ -80,7 +80,8 @@ public final class RSBlocks { public static final PortableGridBlock CREATIVE_PORTABLE_GRID = null; @ObjectHolder(RS.ID + ":crafter") public static final CrafterBlock CRAFTER = null; + @ObjectHolder(RS.ID + ":crafter_manager") + public static final CrafterManagerBlock CRAFTER_MANAGER = null; public static final BlockCraftingMonitor CRAFTING_MONITOR = null; - public static final BlockCrafterManager CRAFTER_MANAGER = null; } \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java b/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java index c7aed72aa..e956ce1be 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java @@ -47,9 +47,9 @@ public final class RSContainers { public static final ContainerType DISK_MANIPULATOR = null; @ObjectHolder(RS.ID + ":crafter") public static final ContainerType CRAFTER = null; + @ObjectHolder(RS.ID + ":crafter_manager") + public static final ContainerType CRAFTER_MANAGER = null; - //@ObjectHolder(RS.ID + ":crafter_manager") - public static final ContainerType CRAFTER_MANAGER = null; //@ObjectHolder(RS.ID + ":crafting_monitor") public static final ContainerType CRAFTING_MONITOR = null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java index 65d033885..5f62a9a47 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java @@ -3,7 +3,6 @@ package com.raoulvdberge.refinedstorage; public class RSOldConfig { //region Energy public int craftingMonitorUsage; - public int crafterManagerUsage; //endregion //region Wireless Crafting Monitor @@ -27,7 +26,6 @@ public class RSOldConfig { /*private void loadConfig() { //region Energy craftingMonitorUsage = config.getInt("craftingMonitor", ENERGY, 2, 0, Integer.MAX_VALUE, "The energy used by Crafting Monitors"); - crafterManagerUsage = config.getInt("crafterManager", ENERGY, 4, 0, Integer.MAX_VALUE, "The energy used by Crafter Managers"); //endregion //region Wireless Crafting Monitor diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java b/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java index e071ad6ec..b9b2efdab 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java @@ -80,9 +80,9 @@ public class RSTiles { public static final TileEntityType CREATIVE_PORTABLE_GRID = null; @ObjectHolder(RS.ID + ":crafter") public static final TileEntityType CRAFTER = null; - - //@ObjectHolder(RS.ID + ":crafter_manager") - public static final TileEntityType CRAFTER_MANAGER = null; + @ObjectHolder(RS.ID + ":crafter_manager") + public static final TileEntityType CRAFTER_MANAGER = null; + //@ObjectHolder(RS.ID + ":crafting_monitor") public static final TileEntityType CRAFTING_MONITOR = null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafterManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CrafterManagerNetworkNode.java similarity index 73% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafterManager.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CrafterManagerNetworkNode.java index 5d854ab5d..96ac0b576 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafterManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CrafterManagerNetworkNode.java @@ -3,14 +3,13 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.block.NetworkNodeBlock; -import com.raoulvdberge.refinedstorage.tile.TileCrafterManager; -import net.minecraft.entity.player.ServerPlayerEntity; +import com.raoulvdberge.refinedstorage.tile.CrafterManagerTile; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -public class NetworkNodeCrafterManager extends NetworkNode { +public class CrafterManagerNetworkNode extends NetworkNode { public static final ResourceLocation ID = new ResourceLocation(RS.ID, "crafter_manager"); private static final String NBT_SIZE = "Size"; @@ -19,13 +18,13 @@ public class NetworkNodeCrafterManager extends NetworkNode { private int size = IGrid.SIZE_STRETCH; private int searchBoxMode = IGrid.SEARCH_BOX_MODE_NORMAL; - public NetworkNodeCrafterManager(World world, BlockPos pos) { + public CrafterManagerNetworkNode(World world, BlockPos pos) { super(world, pos); } @Override public int getEnergyUsage() { - return RS.INSTANCE.config.crafterManagerUsage; + return RS.SERVER_CONFIG.getCrafterManager().getUsage(); } @Override @@ -33,14 +32,8 @@ public class NetworkNodeCrafterManager extends NetworkNode { return ID; } - public void sendTo(ServerPlayerEntity player) { - if (network != null) { - // TODO RS.INSTANCE.network.sendTo(new MessageCrafterManagerSlotSizes(network.getCraftingManager().getNamedContainers()), player); - } - } - public int getSize() { - return world.isRemote ? TileCrafterManager.SIZE.getValue() : size; + return world.isRemote ? CrafterManagerTile.SIZE.getValue() : size; } public void setSize(int size) { @@ -71,7 +64,7 @@ public class NetworkNodeCrafterManager extends NetworkNode { } public int getSearchBoxMode() { - return world.isRemote ? TileCrafterManager.SEARCH_BOX_MODE.getValue() : searchBoxMode; + return world.isRemote ? CrafterManagerTile.SEARCH_BOX_MODE.getValue() : searchBoxMode; } public void setSearchBoxMode(int searchBoxMode) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCrafterManager.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCrafterManager.java deleted file mode 100644 index 037ed75c8..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCrafterManager.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.raoulvdberge.refinedstorage.block; - -public class BlockCrafterManager extends NetworkNodeBlock { - public BlockCrafterManager(Properties props) { - super(props); - } - - /* TODO - @Override - @OnlyIn(Dist.CLIENT) - public void registerModels(IModelRegistration modelRegistration) { - modelRegistration.setModel(this, 0, new ModelResourceLocation(info.getId(), "connected=false,direction=north")); - - modelRegistration.addBakedModelOverride(info.getId(), base -> new BakedModelFullbright(base, RS.ID + ":blocks/crafter_manager/cutouts/front_connected")); - } - - @Override - public BlockRenderLayer getRenderLayer() { - return BlockRenderLayer.CUTOUT; - } - - @Override - @Nullable - public BlockDirection getDirection() { - return BlockDirection.HORIZONTAL; - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, BlockState state, PlayerEntity player, EnumHand hand, Direction side, float hitX, float hitY, float hitZ) { - if (!world.isRemote && openNetworkGui(RSGui.CRAFTER_MANAGER, player, world, pos, side, Permission.MODIFY, Permission.AUTOCRAFTING)) { - ((TileCrafterManager) world.getTileEntity(pos)).getNode().sendTo((ServerPlayerEntity) player); - } - - return true; - }*/ - - @Override - public boolean hasConnectedState() { - return true; - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/CrafterBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/CrafterBlock.java index 287316f39..aabe8878c 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/CrafterBlock.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/CrafterBlock.java @@ -1,6 +1,7 @@ package com.raoulvdberge.refinedstorage.block; import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.api.network.security.Permission; import com.raoulvdberge.refinedstorage.container.CrafterContainer; import com.raoulvdberge.refinedstorage.container.factory.PositionalTileContainerProvider; import com.raoulvdberge.refinedstorage.tile.CrafterTile; @@ -63,7 +64,7 @@ public class CrafterBlock extends NetworkNodeBlock { @SuppressWarnings("deprecation") public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { if (!world.isRemote) { - return NetworkUtils.attemptModify(world, pos, hit.getFace(), player, () -> NetworkHooks.openGui( + return NetworkUtils.attempt(world, pos, hit.getFace(), player, () -> NetworkHooks.openGui( (ServerPlayerEntity) player, new PositionalTileContainerProvider( ((CrafterTile) world.getTileEntity(pos)).getNode().getName(), @@ -71,7 +72,7 @@ public class CrafterBlock extends NetworkNodeBlock { pos ), pos - )); + ), Permission.MODIFY, Permission.AUTOCRAFTING); } return true; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/CrafterManagerBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/CrafterManagerBlock.java new file mode 100644 index 000000000..5d15c8338 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/CrafterManagerBlock.java @@ -0,0 +1,83 @@ +package com.raoulvdberge.refinedstorage.block; + +import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.api.network.security.Permission; +import com.raoulvdberge.refinedstorage.container.factory.CrafterManagerContainerProvider; +import com.raoulvdberge.refinedstorage.tile.CrafterManagerTile; +import com.raoulvdberge.refinedstorage.util.BlockUtils; +import com.raoulvdberge.refinedstorage.util.NetworkUtils; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.items.IItemHandlerModifiable; + +import javax.annotation.Nullable; +import java.util.List; +import java.util.Map; + +public class CrafterManagerBlock extends NetworkNodeBlock { + public CrafterManagerBlock() { + super(BlockUtils.DEFAULT_ROCK_PROPERTIES); + + this.setRegistryName(RS.ID, "crafter_manager"); + } + + @Override + public BlockRenderLayer getRenderLayer() { + return BlockRenderLayer.CUTOUT; + } + + @Override + public BlockDirection getDirection() { + return BlockDirection.HORIZONTAL; + } + + @Nullable + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new CrafterManagerTile(); + } + + @Override + @SuppressWarnings("deprecation") + public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { + if (!world.isRemote) { + return NetworkUtils.attempt(world, pos, hit.getFace(), player, () -> NetworkHooks.openGui( + (ServerPlayerEntity) player, + new CrafterManagerContainerProvider((CrafterManagerTile) world.getTileEntity(pos)), + buf -> { + buf.writeBlockPos(pos); + + Map> containerData = ((CrafterManagerTile) world.getTileEntity(pos)).getNode().getNetwork().getCraftingManager().getNamedContainers(); + + buf.writeInt(containerData.size()); + + for (Map.Entry> entry : containerData.entrySet()) { + buf.writeString(entry.getKey()); + + int slots = 0; + for (IItemHandlerModifiable handler : entry.getValue()) { + slots += handler.getSlots(); + } + buf.writeInt(slots); + } + } + ), Permission.MODIFY, Permission.AUTOCRAFTING); + } + + return true; + } + + @Override + public boolean hasConnectedState() { + return true; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/config/ClientConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/config/ClientConfig.java index b93ef88b3..5a24a6930 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/config/ClientConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/config/ClientConfig.java @@ -7,9 +7,11 @@ public class ClientConfig { private ForgeConfigSpec spec; private Grid grid; + private CrafterManager crafterManager; public ClientConfig() { grid = new Grid(); + crafterManager = new CrafterManager(); spec = builder.build(); } @@ -22,6 +24,10 @@ public class ClientConfig { return grid; } + public CrafterManager getCrafterManager() { + return crafterManager; + } + public class Grid { private final ForgeConfigSpec.IntValue maxRowsStretch; private final ForgeConfigSpec.BooleanValue detailedTooltip; @@ -49,4 +55,20 @@ public class ClientConfig { return largeFont.get(); } } + + public class CrafterManager { + private final ForgeConfigSpec.IntValue maxRowsStretch; + + public CrafterManager() { + builder.push("crafterManager"); + + maxRowsStretch = builder.comment("The maximum amount of rows that the Crafter Manager can show when stretched").defineInRange("maxRowsStretch", Integer.MAX_VALUE, 3, Integer.MAX_VALUE); + + builder.pop(); + } + + public int getMaxRowsStretch() { + return maxRowsStretch.get(); + } + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java index 0d3df78e7..8994a7b5e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java @@ -32,6 +32,7 @@ public class ServerConfig { private DiskManipulator diskManipulator; private PortableGrid portableGrid; private Crafter crafter; + private CrafterManager crafterManager; public ServerConfig() { upgrades = new Upgrades(); @@ -60,10 +61,15 @@ public class ServerConfig { diskManipulator = new DiskManipulator(); portableGrid = new PortableGrid(); crafter = new Crafter(); + crafterManager = new CrafterManager(); spec = builder.build(); } + public ForgeConfigSpec getSpec() { + return spec; + } + public Upgrades getUpgrades() { return upgrades; } @@ -168,8 +174,8 @@ public class ServerConfig { return crafter; } - public ForgeConfigSpec getSpec() { - return spec; + public CrafterManager getCrafterManager() { + return crafterManager; } public class Controller { @@ -815,4 +821,20 @@ public class ServerConfig { return patternUsage.get(); } } + + public class CrafterManager { + private final ForgeConfigSpec.IntValue usage; + + public CrafterManager() { + builder.push("crafterManager"); + + usage = builder.comment("The energy used by the Crafter Manager").defineInRange("usage", 8, 0, Integer.MAX_VALUE); + + builder.pop(); + } + + public int getUsage() { + return usage.get(); + } + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/CrafterManagerContainer.java b/src/main/java/com/raoulvdberge/refinedstorage/container/CrafterManagerContainer.java index 69101f8f7..13b033cfc 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/CrafterManagerContainer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/CrafterManagerContainer.java @@ -2,136 +2,83 @@ package com.raoulvdberge.refinedstorage.container; import com.raoulvdberge.refinedstorage.RSContainers; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingPattern; -import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCrafterManager; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.CrafterManagerNetworkNode; import com.raoulvdberge.refinedstorage.container.slot.CrafterManagerSlot; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.validator.PatternItemValidator; +import com.raoulvdberge.refinedstorage.item.PatternItem; import com.raoulvdberge.refinedstorage.screen.IScreenInfoProvider; import com.raoulvdberge.refinedstorage.screen.grid.filtering.GridFilterParser; import com.raoulvdberge.refinedstorage.screen.grid.stack.IGridStack; import com.raoulvdberge.refinedstorage.screen.grid.stack.ItemGridStack; -import com.raoulvdberge.refinedstorage.tile.TileCrafterManager; +import com.raoulvdberge.refinedstorage.tile.CrafterManagerTile; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.inventory.container.Container; -import net.minecraft.inventory.container.IContainerListener; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; import net.minecraftforge.items.IItemHandlerModifiable; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.*; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.function.Predicate; public class CrafterManagerContainer extends BaseContainer { - public class CrafterManagerListener implements IContainerListener { - private ServerPlayerEntity base; - private boolean receivedContainerData; - - public CrafterManagerListener(ServerPlayerEntity base) { - this.base = base; - } - - public ServerPlayerEntity getPlayer() { - return base; - } - - @Override - public void sendAllContents(Container container, NonNullList items) { - if (receivedContainerData) { - base.sendAllContents(container, items); - } - } - - @Override - public void sendSlotContents(Container container, int slotInd, ItemStack stack) { - if (receivedContainerData) { - base.sendSlotContents(container, slotInd, stack); - } - } - - public void setReceivedContainerData() { - receivedContainerData = true; - } - - @Override - public void sendWindowProperty(Container container, int varToUpdate, int newValue) { - base.sendWindowProperty(container, varToUpdate, newValue); - } - } - - private IScreenInfoProvider display; - private NetworkNodeCrafterManager crafterManager; + private IScreenInfoProvider screenInfoProvider; + private CrafterManagerNetworkNode crafterManager; private Map containerData; private Map dummyInventories = new HashMap<>(); private Map headings = new HashMap<>(); private int rows; - @Override - public void addListener(IContainerListener listener) { - if (listener instanceof ServerPlayerEntity) { - listener = new CrafterManagerListener((ServerPlayerEntity) listener); - } - - super.addListener(listener); - } - - // TODO add AT for listeners - public List getListeners() { - return new ArrayList<>(); - } - - public CrafterManagerContainer(TileCrafterManager crafterManager, PlayerEntity player, IScreenInfoProvider display, int windowId) { + public CrafterManagerContainer(CrafterManagerTile crafterManager, PlayerEntity player, int windowId) { super(RSContainers.CRAFTER_MANAGER, crafterManager, player, windowId); - this.display = display; this.crafterManager = crafterManager.getNode(); + } - if (!player.world.isRemote) { - addPlayerInventory(8, display.getYPlayerInventory()); + public void setScreenInfoProvider(IScreenInfoProvider infoProvider) { + this.screenInfoProvider = infoProvider; + } - if (crafterManager.getNode().getNetwork() != null) { - for (Map.Entry> entry : crafterManager.getNode().getNetwork().getCraftingManager().getNamedContainers().entrySet()) { - for (IItemHandlerModifiable handler : entry.getValue()) { - for (int i = 0; i < handler.getSlots(); ++i) { - addSlot(new CrafterManagerSlot(handler, i, 0, 0, true, display, this.crafterManager)); - } + public void initSlotsServer() { + addPlayerInventory(8, screenInfoProvider.getYPlayerInventory()); + + if (crafterManager.getNetwork() != null) { + for (Map.Entry> entry : crafterManager.getNetwork().getCraftingManager().getNamedContainers().entrySet()) { + for (IItemHandlerModifiable handler : entry.getValue()) { + for (int i = 0; i < handler.getSlots(); ++i) { + addSlot(new CrafterManagerSlot(handler, i, 0, 0, true, screenInfoProvider, this.crafterManager)); } } } } } - public void initSlots(@Nullable Map newContainerData) { - if (newContainerData == null) { // We resized - if (containerData == null) { // No container data received yet, do nothing.. - return; - } - } else { - containerData = newContainerData; // Received container data - - dummyInventories.clear(); + public void initSlots(@Nullable Map data) { + if (data != null) { + this.containerData = data; } this.inventorySlots.clear(); - // TODO at for inventoryItemStacks this.inventoryItemStacks.clear(); + this.inventoryItemStacks.clear(); this.headings.clear(); - rows = 0; + this.rows = 0; - addPlayerInventory(8, display.getYPlayerInventory()); + addPlayerInventory(8, screenInfoProvider.getYPlayerInventory()); - int y = 19 + 18 - display.getCurrentOffset() * 18; + int y = 19 + 18 - screenInfoProvider.getCurrentOffset() * 18; int x = 8; - List> filters = GridFilterParser.getFilters(null, display.getSearchFieldText(), Collections.emptyList()); + List> filters = GridFilterParser.getFilters(null, screenInfoProvider.getSearchFieldText(), Collections.emptyList()); for (Map.Entry category : containerData.entrySet()) { IItemHandlerModifiable dummy; - if (newContainerData == null) { // We're only resizing, get the previous inventory... + if (data == null) { // We're only resizing, get the previous inventory... dummy = dummyInventories.get(category.getKey()); } else { dummyInventories.put(category.getKey(), dummy = new BaseItemHandler(category.getValue()) { @@ -160,14 +107,13 @@ public class CrafterManagerContainer extends BaseContainer { for (int slot = 0; slot < category.getValue(); ++slot) { boolean visible = true; - if (!display.getSearchFieldText().trim().isEmpty()) { + if (!screenInfoProvider.getSearchFieldText().trim().isEmpty()) { ItemStack stack = dummy.getStackInSlot(slot); if (stack.isEmpty()) { visible = false; } else { - // TODO CraftingPattern pattern = ItemPattern.getPatternFromCache(crafterManager.getWorld(), stack); - CraftingPattern pattern = null; + CraftingPattern pattern = PatternItem.fromCache(crafterManager.getWorld(), stack); visible = false; @@ -184,7 +130,7 @@ public class CrafterManagerContainer extends BaseContainer { } } - addSlot(new CrafterManagerSlot(dummy, slot, x, y, visible, display, crafterManager)); + addSlot(new CrafterManagerSlot(dummy, slot, x, y, visible, screenInfoProvider, crafterManager)); if (visible) { foundItemsInCategory = true; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/factory/CrafterManagerContainerFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/container/factory/CrafterManagerContainerFactory.java new file mode 100644 index 000000000..870e26900 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/factory/CrafterManagerContainerFactory.java @@ -0,0 +1,34 @@ +package com.raoulvdberge.refinedstorage.container.factory; + +import com.raoulvdberge.refinedstorage.container.CrafterManagerContainer; +import com.raoulvdberge.refinedstorage.screen.EmptyScreenInfoProvider; +import com.raoulvdberge.refinedstorage.tile.CrafterManagerTile; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.network.IContainerFactory; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class CrafterManagerContainerFactory implements IContainerFactory { + @Override + public CrafterManagerContainer create(int windowId, PlayerInventory inv, PacketBuffer buf) { + Map data = new LinkedHashMap<>(); + + BlockPos pos = buf.readBlockPos(); + + int size = buf.readInt(); + + for (int i = 0; i < size; ++i) { + data.put(buf.readString(), buf.readInt()); + } + + CrafterManagerContainer container = new CrafterManagerContainer((CrafterManagerTile) inv.player.world.getTileEntity(pos), inv.player, windowId); + + container.setScreenInfoProvider(new EmptyScreenInfoProvider()); + container.initSlots(data); + + return container; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/factory/CrafterManagerContainerProvider.java b/src/main/java/com/raoulvdberge/refinedstorage/container/factory/CrafterManagerContainerProvider.java new file mode 100644 index 000000000..3af1379d8 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/factory/CrafterManagerContainerProvider.java @@ -0,0 +1,37 @@ +package com.raoulvdberge.refinedstorage.container.factory; + +import com.raoulvdberge.refinedstorage.container.CrafterManagerContainer; +import com.raoulvdberge.refinedstorage.screen.EmptyScreenInfoProvider; +import com.raoulvdberge.refinedstorage.tile.CrafterManagerTile; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; + +import javax.annotation.Nullable; + +public class CrafterManagerContainerProvider implements INamedContainerProvider { + private final CrafterManagerTile tile; + + public CrafterManagerContainerProvider(CrafterManagerTile tile) { + this.tile = tile; + } + + @Override + public ITextComponent getDisplayName() { + return new TranslationTextComponent("gui.refinedstorage.crafter_manager"); + } + + @Nullable + @Override + public Container createMenu(int windowId, PlayerInventory playerInventory, PlayerEntity playerEntity) { + CrafterManagerContainer container = new CrafterManagerContainer(tile, playerEntity, windowId); + + container.setScreenInfoProvider(new EmptyScreenInfoProvider()); + container.initSlotsServer(); + + return container; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/slot/CrafterManagerSlot.java b/src/main/java/com/raoulvdberge/refinedstorage/container/slot/CrafterManagerSlot.java index 59af10569..c461378fe 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/slot/CrafterManagerSlot.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/slot/CrafterManagerSlot.java @@ -1,15 +1,15 @@ package com.raoulvdberge.refinedstorage.container.slot; -import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCrafterManager; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.CrafterManagerNetworkNode; import com.raoulvdberge.refinedstorage.screen.IScreenInfoProvider; import net.minecraftforge.items.IItemHandler; public class CrafterManagerSlot extends BaseSlot { private boolean visible; - private NetworkNodeCrafterManager crafterManager; + private CrafterManagerNetworkNode crafterManager; private IScreenInfoProvider display; - public CrafterManagerSlot(IItemHandler itemHandler, int inventoryIndex, int x, int y, boolean visible, IScreenInfoProvider display, NetworkNodeCrafterManager crafterManager) { + public CrafterManagerSlot(IItemHandler itemHandler, int inventoryIndex, int x, int y, boolean visible, IScreenInfoProvider display, CrafterManagerNetworkNode crafterManager) { super(itemHandler, inventoryIndex, x, y); this.visible = visible; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCrafterManagerRequestSlotData.java.off b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCrafterManagerRequestSlotData.java.off deleted file mode 100644 index bbd1834a0..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCrafterManagerRequestSlotData.java.off +++ /dev/null @@ -1,33 +0,0 @@ -package com.raoulvdberge.refinedstorage.network; - -import com.raoulvdberge.refinedstorage.container.CrafterManagerContainer; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.inventory.IContainerListener; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; - -public class MessageCrafterManagerRequestSlotData extends MessageHandlerPlayerToServer implements IMessage { - @Override - public void fromBytes(ByteBuf buf) { - } - - @Override - public void toBytes(ByteBuf buf) { - } - - @Override - protected void handle(MessageCrafterManagerRequestSlotData message, ServerPlayerEntity player) { - if (player.openContainer instanceof ContainerCrafterManager) { - for (IContainerListener listener : ((ContainerCrafterManager) player.openContainer).getListeners()) { - if (listener instanceof ContainerCrafterManager.CrafterManagerListener) { - ContainerCrafterManager.CrafterManagerListener cmListener = (ContainerCrafterManager.CrafterManagerListener) listener; - - if (cmListener.getPlayer() == player) { - cmListener.setReceivedContainerData(); - cmListener.sendAllContents(player.openContainer, player.openContainer.getInventory()); - } - } - } - } - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCrafterManagerSlotSizes.java.off b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCrafterManagerSlotSizes.java.off deleted file mode 100644 index 1cb58c7f1..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCrafterManagerSlotSizes.java.off +++ /dev/null @@ -1,63 +0,0 @@ -package com.raoulvdberge.refinedstorage.network; - -import com.raoulvdberge.refinedstorage.RS; -import com.raoulvdberge.refinedstorage.container.CrafterManagerContainer; -import com.raoulvdberge.refinedstorage.gui.GuiBase; -import com.raoulvdberge.refinedstorage.gui.GuiCrafterManager; -import io.netty.buffer.ByteBuf; -import net.minecraftforge.fml.common.network.ByteBufUtils; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import net.minecraftforge.items.IItemHandlerModifiable; - -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -public class MessageCrafterManagerSlotSizes implements IMessage, IMessageHandler { - private Map> containerData; - private Map containerDataClient = new LinkedHashMap<>(); - - public MessageCrafterManagerSlotSizes(Map> containerData) { - this.containerData = containerData; - } - - public MessageCrafterManagerSlotSizes() { - } - - @Override - public void fromBytes(ByteBuf buf) { - int size = buf.readInt(); - - for (int i = 0; i < size; ++i) { - containerDataClient.put(ByteBufUtils.readUTF8String(buf), buf.readInt()); - } - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(containerData.size()); - - for (Map.Entry> entry : containerData.entrySet()) { - ByteBufUtils.writeUTF8String(buf, entry.getKey()); - - int slots = 0; - for (IItemHandlerModifiable handler : entry.getValue()) { - slots += handler.getSlots(); - } - buf.writeInt(slots); - } - } - - @Override - public IMessage onMessage(MessageCrafterManagerSlotSizes message, MessageContext ctx) { - GuiBase.executeLater(GuiCrafterManager.class, crafterManager -> { - ((ContainerCrafterManager) crafterManager.inventorySlots).initSlots(message.containerDataClient); - - RS.INSTANCE.network.sendToServer(new MessageCrafterManagerRequestSlotData()); - }); - - return null; - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiCrafterManager.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/CrafterManagerScreen.java similarity index 67% rename from src/main/java/com/raoulvdberge/refinedstorage/screen/GuiCrafterManager.java rename to src/main/java/com/raoulvdberge/refinedstorage/screen/CrafterManagerScreen.java index 0c9b657ae..d271c671c 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiCrafterManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/CrafterManagerScreen.java @@ -3,7 +3,7 @@ package com.raoulvdberge.refinedstorage.screen; import com.mojang.blaze3d.platform.GlStateManager; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; -import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCrafterManager; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.CrafterManagerNetworkNode; import com.raoulvdberge.refinedstorage.container.CrafterManagerContainer; import com.raoulvdberge.refinedstorage.container.slot.CrafterManagerSlot; import com.raoulvdberge.refinedstorage.screen.widget.ScrollbarWidget; @@ -11,102 +11,43 @@ import com.raoulvdberge.refinedstorage.screen.widget.SearchWidget; import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.CrafterManagerSearchBoxModeSideButton; import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.GridSizeSideButton; import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.RedstoneModeSideButton; -import com.raoulvdberge.refinedstorage.tile.TileCrafterManager; +import com.raoulvdberge.refinedstorage.tile.CrafterManagerTile; import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.container.Slot; +import net.minecraft.util.text.ITextComponent; +import org.lwjgl.glfw.GLFW; import java.util.Map; // TODO @MouseTweaksDisableWheelTweak -public class GuiCrafterManager extends BaseScreen implements IScreenInfoProvider { - private CrafterManagerContainer container; - private NetworkNodeCrafterManager crafterManager; +public class CrafterManagerScreen extends BaseScreen implements IScreenInfoProvider { + private CrafterManagerNetworkNode crafterManager; private ScrollbarWidget scrollbar; private SearchWidget searchField; - public GuiCrafterManager(NetworkNodeCrafterManager crafterManager, PlayerInventory inventory) { - super(null, 193, 0, inventory, null); + public CrafterManagerScreen(CrafterManagerContainer container, PlayerInventory inventory, ITextComponent title) { + super(container, 193, 0, inventory, title); - this.crafterManager = crafterManager; + this.crafterManager = ((CrafterManagerTile) container.getTile()).getNode(); } - public NetworkNodeCrafterManager getCrafterManager() { - return crafterManager; - } - - public void setContainer(CrafterManagerContainer container) { - this.container = container; - } - - /* TODO @Override - protected void calcHeight() { + protected void onPreInit() { this.ySize = getTopHeight() + getBottomHeight() + (getVisibleRows() * 18); - this.ySize = ySize; - }*/ - - @Override - public int getTopHeight() { - return 19; - } - - @Override - public int getBottomHeight() { - return 99; - } - - public int getVisibleRows() { - switch (crafterManager.getSize()) { - case IGrid.SIZE_STRETCH: - int screenSpaceAvailable = height - getTopHeight() - getBottomHeight(); - - return Math.max(3, Math.min((screenSpaceAvailable / 18) - 3, Integer.MAX_VALUE)); // TODO CrafterManager MaxRowsStretch - case IGrid.SIZE_SMALL: - return 3; - case IGrid.SIZE_MEDIUM: - return 5; - case IGrid.SIZE_LARGE: - return 8; - default: - return 3; - } - } - - @Override - public int getRows() { - return (container == null || !crafterManager.isActive()) ? 0 : container.getRows(); - } - - @Override - public int getCurrentOffset() { - return scrollbar == null ? 0 : scrollbar.getOffset(); - } - - @Override - public String getSearchFieldText() { - return searchField == null ? "" : searchField.getText(); - } - - public int getYPlayerInventory() { - return getTopHeight() + (getVisibleRows() * 18) + 16; } @Override public void onPostInit(int x, int y) { - addSideButton(new RedstoneModeSideButton(this, TileCrafterManager.REDSTONE_MODE)); + addSideButton(new RedstoneModeSideButton(this, CrafterManagerTile.REDSTONE_MODE)); addSideButton(new CrafterManagerSearchBoxModeSideButton(this)); - addSideButton(new GridSizeSideButton(this, () -> crafterManager.getSize(), size -> TileDataManager.setParameter(TileCrafterManager.SIZE, size))); + addSideButton(new GridSizeSideButton(this, () -> crafterManager.getSize(), size -> TileDataManager.setParameter(CrafterManagerTile.SIZE, size))); this.scrollbar = new ScrollbarWidget(this, 174, getTopHeight(), 12, (getVisibleRows() * 18) - 2); - this.scrollbar.addListener((oldOffset, newOffset) -> { - if (container != null) { - container.initSlots(null); - } - }); + this.scrollbar.addListener((oldOffset, newOffset) -> container.initSlots(null)); container.initSlots(null); @@ -125,6 +66,8 @@ public class GuiCrafterManager extends BaseScreen imple searchField.x = sx; searchField.y = sy; } + + addButton(searchField); } @Override @@ -153,7 +96,7 @@ public class GuiCrafterManager extends BaseScreen imple blit(x, yy, 0, getTopHeight() + (18 * 3), xSize, getBottomHeight()); - if (container != null && crafterManager.isActive()) { + if (crafterManager.isActive()) { for (Slot slot : container.inventorySlots) { if (slot instanceof CrafterManagerSlot && slot.isEnabled()) { blit(x + slot.xPos - 1, y + slot.yPos - 1, 0, 193, 18, 18); @@ -161,41 +104,14 @@ public class GuiCrafterManager extends BaseScreen imple } } - if (searchField != null) { - // TODO render searchField.render(); - } + searchField.render(0, 0, 0); + + scrollbar.render(); } - @Override - public boolean mouseClicked(double mouseX, double mouseY, int clickedButton) { - boolean clicked = searchField.mouseClicked(mouseX, mouseY, clickedButton); - - if (clicked) { - return true; - } - - return super.mouseClicked(mouseX, mouseY, clickedButton); - } - - /* TODO - @Override - protected void keyTyped(char character, int keyCode) throws IOException { - if (searchField == null) { - return; - } - - if (checkHotbarKeys(keyCode)) { - // NO OP - } else if (searchField.textboxKeyTyped(character, keyCode)) { - container.initSlots(null); - } else { - super.keyTyped(character, keyCode); - } - }*/ - @Override public void renderForeground(int mouseX, int mouseY) { - renderString(7, 7, I18n.format("gui.refinedstorage:crafter_manager")); + renderString(7, 7, title.getFormattedText()); renderString(7, getYPlayerInventory() - 12, I18n.format("container.inventory")); if (container != null && crafterManager.isActive()) { @@ -216,7 +132,109 @@ public class GuiCrafterManager extends BaseScreen imple } } + @Override + public boolean mouseClicked(double mouseX, double mouseY, int clickedButton) { + if (scrollbar.mouseClicked(mouseX, mouseY, clickedButton)) { + return true; + } + + return super.mouseClicked(mouseX, mouseY, clickedButton); + } + + @Override + public boolean charTyped(char p_charTyped_1_, int p_charTyped_2_) { + if (searchField.charTyped(p_charTyped_1_, p_charTyped_2_)) { + return true; + } + + return super.charTyped(p_charTyped_1_, p_charTyped_2_); + } + + @Override + public boolean keyPressed(int key, int scanCode, int modifiers) { + if (key == GLFW.GLFW_KEY_ESCAPE) { + minecraft.player.closeScreen(); + + return true; + } + + if (searchField.keyPressed(key, scanCode, modifiers) || searchField.func_212955_f()) { + return true; + } + + return super.keyPressed(key, scanCode, modifiers); + } + + @Override + public void mouseMoved(double mx, double my) { + scrollbar.mouseMoved(mx, my); + + super.mouseMoved(mx, my); + } + + @Override + public boolean mouseReleased(double mx, double my, int button) { + return scrollbar.mouseReleased(mx, my, button) || super.mouseReleased(mx, my, button); + } + + @Override + public boolean mouseScrolled(double x, double y, double delta) { + return this.scrollbar.mouseScrolled(x, y, delta) || super.mouseScrolled(x, y, delta); + } + public SearchWidget getSearchField() { return searchField; } + + public CrafterManagerNetworkNode getCrafterManager() { + return crafterManager; + } + + @Override + public int getTopHeight() { + return 19; + } + + @Override + public int getBottomHeight() { + return 99; + } + + @Override + public int getVisibleRows() { + switch (crafterManager.getSize()) { + case IGrid.SIZE_STRETCH: + int screenSpaceAvailable = height - getTopHeight() - getBottomHeight(); + + return Math.max(3, Math.min((screenSpaceAvailable / 18) - 3, RS.CLIENT_CONFIG.getCrafterManager().getMaxRowsStretch())); + case IGrid.SIZE_SMALL: + return 3; + case IGrid.SIZE_MEDIUM: + return 5; + case IGrid.SIZE_LARGE: + return 8; + default: + return 3; + } + } + + @Override + public int getRows() { + return !crafterManager.isActive() ? 0 : container.getRows(); + } + + @Override + public int getCurrentOffset() { + return scrollbar == null ? 0 : scrollbar.getOffset(); + } + + @Override + public String getSearchFieldText() { + return searchField == null ? "" : searchField.getText(); + } + + @Override + public int getYPlayerInventory() { + return getTopHeight() + (getVisibleRows() * 18) + 16; + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/factory/CrafterManagerScreenFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/factory/CrafterManagerScreenFactory.java new file mode 100644 index 000000000..39553a668 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/factory/CrafterManagerScreenFactory.java @@ -0,0 +1,18 @@ +package com.raoulvdberge.refinedstorage.screen.factory; + +import com.raoulvdberge.refinedstorage.container.CrafterManagerContainer; +import com.raoulvdberge.refinedstorage.screen.CrafterManagerScreen; +import net.minecraft.client.gui.ScreenManager; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.text.ITextComponent; + +public class CrafterManagerScreenFactory implements ScreenManager.IScreenFactory { + @Override + public CrafterManagerScreen create(CrafterManagerContainer container, PlayerInventory playerInventory, ITextComponent title) { + CrafterManagerScreen screen = new CrafterManagerScreen(container, playerInventory, title); + + container.setScreenInfoProvider(screen); + + return screen; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/factory/GridScreenFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/factory/GridScreenFactory.java index 45d0aef77..690be586c 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/factory/GridScreenFactory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/factory/GridScreenFactory.java @@ -9,10 +9,10 @@ import net.minecraft.util.text.ITextComponent; public class GridScreenFactory implements ScreenManager.IScreenFactory { @Override public GridScreen create(GridContainer container, PlayerInventory inv, ITextComponent title) { - GridScreen grid = new GridScreen(container, container.getGrid(), inv, title); + GridScreen screen = new GridScreen(container, container.getGrid(), inv, title); - container.setScreenInfoProvider(grid); + container.setScreenInfoProvider(screen); - return grid; + return screen; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/sidebutton/CrafterManagerSearchBoxModeSideButton.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/sidebutton/CrafterManagerSearchBoxModeSideButton.java index b5b11eb64..9a0610a41 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/sidebutton/CrafterManagerSearchBoxModeSideButton.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/sidebutton/CrafterManagerSearchBoxModeSideButton.java @@ -2,32 +2,32 @@ package com.raoulvdberge.refinedstorage.screen.widget.sidebutton; import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.integration.jei.JeiIntegration; -import com.raoulvdberge.refinedstorage.screen.GuiCrafterManager; -import com.raoulvdberge.refinedstorage.tile.TileCrafterManager; +import com.raoulvdberge.refinedstorage.screen.CrafterManagerScreen; +import com.raoulvdberge.refinedstorage.tile.CrafterManagerTile; import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; import net.minecraft.client.resources.I18n; import net.minecraft.util.text.TextFormatting; public class CrafterManagerSearchBoxModeSideButton extends SideButton { - public CrafterManagerSearchBoxModeSideButton(GuiCrafterManager screen) { + public CrafterManagerSearchBoxModeSideButton(CrafterManagerScreen screen) { super(screen); } @Override public String getTooltip() { - return I18n.format("sidebutton.refinedstorage.grid.search_box_mode") + "\n" + TextFormatting.GRAY + I18n.format("sidebutton.refinedstorage.grid.search_box_mode." + ((GuiCrafterManager) screen).getCrafterManager().getSearchBoxMode()); + return I18n.format("sidebutton.refinedstorage.grid.search_box_mode") + "\n" + TextFormatting.GRAY + I18n.format("sidebutton.refinedstorage.grid.search_box_mode." + ((CrafterManagerScreen) screen).getCrafterManager().getSearchBoxMode()); } @Override protected void renderButtonIcon(int x, int y) { - int mode = ((GuiCrafterManager) screen).getCrafterManager().getSearchBoxMode(); + int mode = ((CrafterManagerScreen) screen).getCrafterManager().getSearchBoxMode(); screen.blit(x, y, mode == IGrid.SEARCH_BOX_MODE_NORMAL_AUTOSELECTED || mode == IGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED_AUTOSELECTED ? 16 : 0, 96, 16, 16); } @Override public void onPress() { - int mode = ((GuiCrafterManager) screen).getCrafterManager().getSearchBoxMode(); + int mode = ((CrafterManagerScreen) screen).getCrafterManager().getSearchBoxMode(); if (mode == IGrid.SEARCH_BOX_MODE_NORMAL) { mode = IGrid.SEARCH_BOX_MODE_NORMAL_AUTOSELECTED; @@ -43,6 +43,6 @@ public class CrafterManagerSearchBoxModeSideButton extends SideButton { mode = IGrid.SEARCH_BOX_MODE_NORMAL; } - TileDataManager.setParameter(TileCrafterManager.SEARCH_BOX_MODE, mode); + TileDataManager.setParameter(CrafterManagerTile.SEARCH_BOX_MODE, mode); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileCrafterManager.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/CrafterManagerTile.java similarity index 52% rename from src/main/java/com/raoulvdberge/refinedstorage/tile/TileCrafterManager.java rename to src/main/java/com/raoulvdberge/refinedstorage/tile/CrafterManagerTile.java index ffa54acb6..a2bf11f02 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileCrafterManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/CrafterManagerTile.java @@ -2,29 +2,29 @@ package com.raoulvdberge.refinedstorage.tile; import com.raoulvdberge.refinedstorage.RSTiles; import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; -import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCrafterManager; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.CrafterManagerNetworkNode; import com.raoulvdberge.refinedstorage.screen.BaseScreen; -import com.raoulvdberge.refinedstorage.screen.GuiCrafterManager; +import com.raoulvdberge.refinedstorage.screen.CrafterManagerScreen; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -public class TileCrafterManager extends NetworkNodeTile { - public static final TileDataParameter SIZE = new TileDataParameter<>(DataSerializers.VARINT, IGrid.SIZE_STRETCH, t -> t.getNode().getSize(), (t, v) -> { +public class CrafterManagerTile extends NetworkNodeTile { + public static final TileDataParameter SIZE = new TileDataParameter<>(DataSerializers.VARINT, IGrid.SIZE_STRETCH, t -> t.getNode().getSize(), (t, v) -> { if (IGrid.isValidSize(v)) { t.getNode().setSize(v); t.getNode().markDirty(); } - }, (initial, p) -> BaseScreen.executeLater(GuiCrafterManager.class, BaseScreen::init)); - public static final TileDataParameter SEARCH_BOX_MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getSearchBoxMode(), (t, v) -> { + }, (initial, p) -> BaseScreen.executeLater(CrafterManagerScreen.class, BaseScreen::init)); + public static final TileDataParameter SEARCH_BOX_MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getSearchBoxMode(), (t, v) -> { if (IGrid.isValidSearchBoxMode(v)) { t.getNode().setSearchBoxMode(v); t.getNode().markDirty(); } - }, (initial, p) -> BaseScreen.executeLater(GuiCrafterManager.class, crafterManager -> crafterManager.getSearchField().setMode(p))); + }, (initial, p) -> BaseScreen.executeLater(CrafterManagerScreen.class, crafterManager -> crafterManager.getSearchField().setMode(p))); - public TileCrafterManager() { + public CrafterManagerTile() { super(RSTiles.CRAFTER_MANAGER); dataManager.addWatchedParameter(SIZE); @@ -32,7 +32,7 @@ public class TileCrafterManager extends NetworkNodeTile