From e0bd3b6bfa85d5f40bf8b38ee44899838e69b3b9 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 21 Oct 2019 18:47:03 +0200 Subject: [PATCH] Re-add the Fluid Interface --- .../refinedstorage/ClientSetup.java | 1 + .../com/raoulvdberge/refinedstorage/RS.java | 5 ++ .../raoulvdberge/refinedstorage/RSBlocks.java | 3 +- .../refinedstorage/RSContainers.java | 4 +- .../refinedstorage/RSOldConfig.java | 2 - .../raoulvdberge/refinedstorage/RSTiles.java | 4 +- .../apiimpl/network/Network.java | 2 + ...ce.java => FluidInterfaceNetworkNode.java} | 16 ++--- .../FluidExternalStorageProvider.java | 4 +- .../block/BlockFluidInterface.java | 26 -------- .../block/FluidInterfaceBlock.java | 59 +++++++++++++++++++ .../refinedstorage/config/ServerConfig.java | 24 +++++++- .../container/FluidInterfaceContainer.java | 4 +- ...terface.java => FluidInterfaceScreen.java} | 39 ++++++------ .../tile/FluidInterfaceTile.java | 52 ++++++++++++++++ .../tile/TileFluidInterface.java | 46 --------------- .../blockstates/fluid_interface.json | 25 ++------ .../assets/refinedstorage/lang/en_us.json | 8 +-- .../block/fluid_interface_connected.json | 6 ++ .../block/fluid_interface_disconnected.json | 6 ++ .../models/item/fluid_interface.json | 3 + .../loot_tables/blocks/fluid_interface.json | 19 ++++++ .../recipes/fluid_interface.json | 2 +- 23 files changed, 223 insertions(+), 137 deletions(-) rename src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/{NetworkNodeFluidInterface.java => FluidInterfaceNetworkNode.java} (92%) mode change 100755 => 100644 delete mode 100755 src/main/java/com/raoulvdberge/refinedstorage/block/BlockFluidInterface.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/block/FluidInterfaceBlock.java rename src/main/java/com/raoulvdberge/refinedstorage/screen/{GuiFluidInterface.java => FluidInterfaceScreen.java} (55%) create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/tile/FluidInterfaceTile.java delete mode 100755 src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidInterface.java create mode 100644 src/main/resources/assets/refinedstorage/models/block/fluid_interface_connected.json create mode 100644 src/main/resources/assets/refinedstorage/models/block/fluid_interface_disconnected.json create mode 100644 src/main/resources/assets/refinedstorage/models/item/fluid_interface.json create mode 100644 src/main/resources/data/refinedstorage/loot_tables/blocks/fluid_interface.json rename src/main/resources/{assets => data}/refinedstorage/recipes/fluid_interface.json (82%) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java index 13f542927..a8ec0afab 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java @@ -123,6 +123,7 @@ public class ClientSetup { ScreenManager.registerFactory(RSContainers.DETECTOR, DetectorScreen::new); ScreenManager.registerFactory(RSContainers.SECURITY_MANAGER, SecurityManagerScreen::new); ScreenManager.registerFactory(RSContainers.INTERFACE, InterfaceScreen::new); + ScreenManager.registerFactory(RSContainers.FLUID_INTERFACE, FluidInterfaceScreen::new); ClientRegistry.registerKeyBinding(RSKeyBindings.FOCUS_SEARCH_BAR); ClientRegistry.registerKeyBinding(RSKeyBindings.CLEAR_GRID_CRAFTING_MATRIX); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RS.java b/src/main/java/com/raoulvdberge/refinedstorage/RS.java index 8acb89b89..18b9fa9f7 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -124,6 +124,7 @@ public final class RS { API.instance().getNetworkNodeRegistry().add(DetectorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DetectorNetworkNode(world, pos))); API.instance().getNetworkNodeRegistry().add(SecurityManagerNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new SecurityManagerNetworkNode(world, pos))); API.instance().getNetworkNodeRegistry().add(InterfaceNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new InterfaceNetworkNode(world, pos))); + API.instance().getNetworkNodeRegistry().add(FluidInterfaceNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new FluidInterfaceNetworkNode(world, pos))); API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory()); @@ -174,6 +175,7 @@ public final class RS { e.getRegistry().register(new DetectorBlock()); e.getRegistry().register(new SecurityManagerBlock()); e.getRegistry().register(new InterfaceBlock()); + e.getRegistry().register(new FluidInterfaceBlock()); } @SubscribeEvent @@ -208,6 +210,7 @@ public final class RS { e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(DetectorTile::new, RSBlocks.DETECTOR).build(null).setRegistryName(RS.ID, "detector"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(SecurityManagerTile::new, RSBlocks.SECURITY_MANAGER).build(null).setRegistryName(RS.ID, "security_manager"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(InterfaceTile::new, RSBlocks.INTERFACE).build(null).setRegistryName(RS.ID, "interface"))); + e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(FluidInterfaceTile::new, RSBlocks.FLUID_INTERFACE).build(null).setRegistryName(RS.ID, "fluid_interface"))); } private TileEntityType registerTileDataParameters(TileEntityType t) { @@ -234,6 +237,7 @@ public final class RS { e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new DetectorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "detector")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new SecurityManagerContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "security_manager")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new InterfaceContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "interface")); + e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new FluidInterfaceContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "fluid_interface")); } @SubscribeEvent @@ -310,6 +314,7 @@ public final class RS { e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.DETECTOR)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.SECURITY_MANAGER)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.INTERFACE)); + e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.FLUID_INTERFACE)); } /* TODO diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java index a39900180..f4de470c6 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java @@ -62,13 +62,14 @@ public final class RSBlocks { public static final SecurityManagerBlock SECURITY_MANAGER = null; @ObjectHolder(RS.ID + ":interface") public static final InterfaceBlock INTERFACE = null; + @ObjectHolder(RS.ID + ":fluid_interface") + public static final FluidInterfaceBlock FLUID_INTERFACE = null; public static final BlockDestructor DESTRUCTOR = new BlockDestructor(); public static final BlockConstructor CONSTRUCTOR = new BlockConstructor(); public static final BlockCraftingMonitor CRAFTING_MONITOR = new BlockCraftingMonitor(); public static final BlockWirelessTransmitter WIRELESS_TRANSMITTER = new BlockWirelessTransmitter(); public static final BlockCrafter CRAFTER = new BlockCrafter(); - public static final BlockFluidInterface FLUID_INTERFACE = new BlockFluidInterface(); public static final BlockDiskManipulator DISK_MANIPULATOR = new BlockDiskManipulator(); public static final BlockStorageMonitor STORAGE_MONITOR = new BlockStorageMonitor(); public static final BlockPortableGrid PORTABLE_GRID = new BlockPortableGrid(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java b/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java index 4d34e9585..6b87c2e41 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java @@ -33,6 +33,8 @@ public final class RSContainers { public static final ContainerType SECURITY_MANAGER = null; @ObjectHolder(RS.ID + ":interface") public static final ContainerType INTERFACE = null; + @ObjectHolder(RS.ID + ":fluid_interface") + public static final ContainerType FLUID_INTERFACE = null; //@ObjectHolder(RS.ID + ":crafter") public static final ContainerType CRAFTER = null; @@ -46,8 +48,6 @@ public final class RSContainers { public static final ContainerType CONSTRUCTOR = null; //@ObjectHolder(RS.ID + ":disk_manipulator") public static final ContainerType DISK_MANIPULATOR = null; - //@ObjectHolder(RS.ID + ":fluid_interface") - public static final ContainerType FLUID_INTERFACE = null; //@ObjectHolder(RS.ID + ":storage_monitor") public static final ContainerType STORAGE_MONITOR = null; //@ObjectHolder(RS.ID + ":wireless_transmitter") diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java index 23bb38399..bf3e18066 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java @@ -8,7 +8,6 @@ public class RSOldConfig { public int craftingMonitorUsage; public int crafterManagerUsage; public int destructorUsage; - public int fluidInterfaceUsage; public int wirelessTransmitterUsage; public int diskManipulatorUsage; //endregion @@ -72,7 +71,6 @@ public class RSOldConfig { 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"); destructorUsage = config.getInt("destructor", ENERGY, 1, 0, Integer.MAX_VALUE, "The energy used by Destructors"); - fluidInterfaceUsage = config.getInt("fluidInterface", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Fluid Interfaces"); wirelessTransmitterUsage = config.getInt("wirelessTransmitter", ENERGY, 8, 0, Integer.MAX_VALUE, "The energy used by Wireless Transmitters"); diskManipulatorUsage = config.getInt("diskManipulator", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Disk Manipulators"); //endregion diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java b/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java index e45a96d4f..6e2e3cf75 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java @@ -62,6 +62,8 @@ public class RSTiles { public static final TileEntityType SECURITY_MANAGER = null; @ObjectHolder(RS.ID + ":interface") public static final TileEntityType INTERFACE = null; + @ObjectHolder(RS.ID + ":fluid_interface") + public static final TileEntityType FLUID_INTERFACE = null; //@ObjectHolder(RS.ID + ":portable_grid") public static final TileEntityType PORTABLE_GRID = null; @@ -69,8 +71,6 @@ public class RSTiles { public static final TileEntityType STORAGE_MONITOR = null; //@ObjectHolder(RS.ID + ":wireless_transmitter") public static final TileEntityType WIRELESS_TRANSMITTER = null; - //@ObjectHolder(RS.ID + ":fluid_interface") - public static final TileEntityType FLUID_INTERFACE = null; //@ObjectHolder(RS.ID + ":disk_manipulator") public static final TileEntityType DISK_MANIPULATOR = null; //@ObjectHolder(RS.ID + ":crafter") diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/Network.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/Network.java index 8de9c0ec4..e00119045 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/Network.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/Network.java @@ -81,6 +81,8 @@ public class Network implements INetwork, IRedstoneConfigurable { this.world = world; this.type = type; this.root = new RootNetworkNode(this, world, pos); + + // TODO: Update ControllerTile.NODES when graph changes? } public RootNetworkNode getRoot() { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/FluidInterfaceNetworkNode.java old mode 100755 new mode 100644 similarity index 92% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/FluidInterfaceNetworkNode.java index e6d12a857..d9bdf8ba3 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/FluidInterfaceNetworkNode.java @@ -13,7 +13,7 @@ import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener; import com.raoulvdberge.refinedstorage.item.UpgradeItem; -import com.raoulvdberge.refinedstorage.tile.TileFluidInterface; +import com.raoulvdberge.refinedstorage.tile.FluidInterfaceTile; import com.raoulvdberge.refinedstorage.tile.config.IType; import com.raoulvdberge.refinedstorage.util.StackUtils; import net.minecraft.item.ItemStack; @@ -31,7 +31,7 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import org.apache.commons.lang3.tuple.Pair; -public class NetworkNodeFluidInterface extends NetworkNode { +public class FluidInterfaceNetworkNode extends NetworkNode { public static final ResourceLocation ID = new ResourceLocation(RS.ID, "fluid_interface"); public static final int TANK_CAPACITY = 16_000; @@ -46,7 +46,7 @@ public class NetworkNodeFluidInterface extends NetworkNode { super.onContentsChanged(); if (!world.isRemote) { - ((TileFluidInterface) world.getTileEntity(pos)).getDataManager().sendParameterToWatchers(TileFluidInterface.TANK_IN); + ((FluidInterfaceTile) world.getTileEntity(pos)).getDataManager().sendParameterToWatchers(FluidInterfaceTile.TANK_IN); } markDirty(); @@ -59,9 +59,9 @@ public class NetworkNodeFluidInterface extends NetworkNode { private BaseItemHandler in = new BaseItemHandler(1).addListener(new NetworkNodeInventoryListener(this)).addValidator(stack -> !StackUtils.getFluid(stack, true).getValue().isEmpty()); private FluidInventory out = new FluidInventory(1, TANK_CAPACITY).addListener(new NetworkNodeFluidInventoryListener(this)); - private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4 /* TODO, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK, ItemUpgrade.TYPE_CRAFTING*/).addListener(new NetworkNodeInventoryListener(this)); + private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4, UpgradeItem.Type.SPEED, UpgradeItem.Type.STACK, UpgradeItem.Type.CRAFTING).addListener(new NetworkNodeInventoryListener(this)); - public NetworkNodeFluidInterface(World world, BlockPos pos) { + public FluidInterfaceNetworkNode(World world, BlockPos pos) { super(world, pos); } @@ -98,7 +98,7 @@ public class NetworkNodeFluidInterface extends NetworkNode { FluidStack wanted = out.getFluid(0); FluidStack got = tankOut.getFluid(); - if (!wanted.isEmpty()) { + if (wanted.isEmpty()) { if (!got.isEmpty()) { tankOut.setFluid(network.insertFluidTracked(got, got.getAmount())); @@ -170,7 +170,7 @@ public class NetworkNodeFluidInterface extends NetworkNode { @Override public int getEnergyUsage() { - return RS.INSTANCE.config.fluidInterfaceUsage; + return RS.SERVER_CONFIG.getFluidInterface().getUsage(); } @Override @@ -251,7 +251,7 @@ public class NetworkNodeFluidInterface extends NetworkNode { private void onTankOutChanged() { if (!world.isRemote) { - ((TileFluidInterface) world.getTileEntity(pos)).getDataManager().sendParameterToWatchers(TileFluidInterface.TANK_OUT); + ((FluidInterfaceTile) world.getTileEntity(pos)).getDataManager().sendParameterToWatchers(FluidInterfaceTile.TANK_OUT); } markDirty(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageProvider.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageProvider.java index b30eba540..835cf67e1 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageProvider.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageProvider.java @@ -3,7 +3,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.storage.externalstorage; import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorage; import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorageContext; import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorageProvider; -import com.raoulvdberge.refinedstorage.tile.TileFluidInterface; +import com.raoulvdberge.refinedstorage.tile.FluidInterfaceTile; import com.raoulvdberge.refinedstorage.util.WorldUtils; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; @@ -21,7 +21,7 @@ public class FluidExternalStorageProvider implements IExternalStorageProvider provide(IExternalStorageContext context, Supplier tile, Direction direction) { - return new FluidExternalStorage(context, () -> WorldUtils.getFluidHandler(tile.get(), direction.getOpposite()), tile.get() instanceof TileFluidInterface); + return new FluidExternalStorage(context, () -> WorldUtils.getFluidHandler(tile.get(), direction.getOpposite()), tile.get() instanceof FluidInterfaceTile); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockFluidInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockFluidInterface.java deleted file mode 100755 index 8ac59b4c7..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockFluidInterface.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.raoulvdberge.refinedstorage.block; - -import com.raoulvdberge.refinedstorage.block.info.BlockInfoBuilder; -import com.raoulvdberge.refinedstorage.tile.TileFluidInterface; - -public class BlockFluidInterface extends BlockNode { - public BlockFluidInterface() { - super(BlockInfoBuilder.forId("fluid_interface").tileEntity(TileFluidInterface::new).create()); - } -/* TODO - @Override - @OnlyIn(Dist.CLIENT) - public void registerModels(IModelRegistration modelRegistration) { - modelRegistration.setModel(this, 0, new ModelResourceLocation(info.getId(), "inventory")); - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, BlockState state, PlayerEntity player, EnumHand hand, Direction side, float hitX, float hitY, float hitZ) { - return openNetworkGui(RSGui.FLUID_INTERFACE, player, world, pos, side, Permission.MODIFY, Permission.INSERT, Permission.EXTRACT); - } */ - - @Override - public boolean hasConnectedState() { - return true; - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/FluidInterfaceBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/FluidInterfaceBlock.java new file mode 100644 index 000000000..b5d374f6a --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/FluidInterfaceBlock.java @@ -0,0 +1,59 @@ +package com.raoulvdberge.refinedstorage.block; + +import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.api.network.security.Permission; +import com.raoulvdberge.refinedstorage.container.FluidInterfaceContainer; +import com.raoulvdberge.refinedstorage.container.factory.PositionalTileContainerProvider; +import com.raoulvdberge.refinedstorage.tile.FluidInterfaceTile; +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.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.fml.network.NetworkHooks; + +import javax.annotation.Nullable; + +public class FluidInterfaceBlock extends NodeBlock { + public FluidInterfaceBlock() { + super(BlockUtils.DEFAULT_ROCK_PROPERTIES); + + this.setRegistryName(RS.ID, "fluid_interface"); + } + + @Nullable + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new FluidInterfaceTile(); + } + + @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 PositionalTileContainerProvider( + new TranslationTextComponent("gui.refinedstorage.fluid_interface"), + (tile, windowId, inventory, p) -> new FluidInterfaceContainer(tile, player, windowId), + pos + ), + pos + ), Permission.MODIFY, Permission.INSERT, Permission.EXTRACT); + } + + return true; + } + + @Override + public boolean hasConnectedState() { + return true; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java index 1d718c962..2b4165135 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java @@ -21,6 +21,7 @@ public class ServerConfig { private Detector detector; private SecurityManager securityManager; private Interface _interface; + private FluidInterface fluidInterface; private Upgrades upgrades; public ServerConfig() { @@ -38,8 +39,9 @@ public class ServerConfig { relay = new Relay(); detector = new Detector(); securityManager = new SecurityManager(); - upgrades = new Upgrades(); _interface = new Interface(); + fluidInterface = new FluidInterface(); + upgrades = new Upgrades(); spec = builder.build(); } @@ -108,6 +110,10 @@ public class ServerConfig { return _interface; } + public FluidInterface getFluidInterface() { + return fluidInterface; + } + public ForgeConfigSpec getSpec() { return spec; } @@ -505,4 +511,20 @@ public class ServerConfig { return usage.get(); } } + + public class FluidInterface { + private final ForgeConfigSpec.IntValue usage; + + public FluidInterface() { + builder.push("fluidInterface"); + + usage = builder.comment("The energy used by the Fluid Interface").defineInRange("usage", 2, 0, Integer.MAX_VALUE); + + builder.pop(); + } + + public int getUsage() { + return usage.get(); + } + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/FluidInterfaceContainer.java b/src/main/java/com/raoulvdberge/refinedstorage/container/FluidInterfaceContainer.java index d969e2536..6a79065a7 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/FluidInterfaceContainer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/FluidInterfaceContainer.java @@ -3,12 +3,12 @@ package com.raoulvdberge.refinedstorage.container; import com.raoulvdberge.refinedstorage.RSContainers; import com.raoulvdberge.refinedstorage.container.slot.filter.FilterSlot; import com.raoulvdberge.refinedstorage.container.slot.filter.FluidFilterSlot; -import com.raoulvdberge.refinedstorage.tile.TileFluidInterface; +import com.raoulvdberge.refinedstorage.tile.FluidInterfaceTile; import net.minecraft.entity.player.PlayerEntity; import net.minecraftforge.items.SlotItemHandler; public class FluidInterfaceContainer extends BaseContainer { - public FluidInterfaceContainer(TileFluidInterface fluidInterface, PlayerEntity player, int windowId) { + public FluidInterfaceContainer(FluidInterfaceTile fluidInterface, PlayerEntity player, int windowId) { super(RSContainers.FLUID_INTERFACE, fluidInterface, player, windowId); for (int i = 0; i < 4; ++i) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiFluidInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/FluidInterfaceScreen.java similarity index 55% rename from src/main/java/com/raoulvdberge/refinedstorage/screen/GuiFluidInterface.java rename to src/main/java/com/raoulvdberge/refinedstorage/screen/FluidInterfaceScreen.java index a717dd0c4..ad3379f88 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiFluidInterface.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/FluidInterfaceScreen.java @@ -2,26 +2,27 @@ package com.raoulvdberge.refinedstorage.screen; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.apiimpl.API; -import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeFluidInterface; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.FluidInterfaceNetworkNode; import com.raoulvdberge.refinedstorage.container.FluidInterfaceContainer; import com.raoulvdberge.refinedstorage.render.FluidRenderer; import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.RedstoneModeSideButton; -import com.raoulvdberge.refinedstorage.tile.TileFluidInterface; +import com.raoulvdberge.refinedstorage.tile.FluidInterfaceTile; import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextFormatting; -public class GuiFluidInterface extends BaseScreen { - private static final FluidRenderer TANK_RENDERER = new FluidRenderer(NetworkNodeFluidInterface.TANK_CAPACITY, 12, 47); +public class FluidInterfaceScreen extends BaseScreen { + private static final FluidRenderer TANK_RENDERER = new FluidRenderer(FluidInterfaceNetworkNode.TANK_CAPACITY, 12, 47); - public GuiFluidInterface(FluidInterfaceContainer container, PlayerInventory inventory) { - super(container, 211, 204, inventory, null); + public FluidInterfaceScreen(FluidInterfaceContainer container, PlayerInventory inventory, ITextComponent title) { + super(container, 211, 204, inventory, title); } @Override public void onPostInit(int x, int y) { - addSideButton(new RedstoneModeSideButton(this, TileFluidInterface.REDSTONE_MODE)); + addSideButton(new RedstoneModeSideButton(this, FluidInterfaceTile.REDSTONE_MODE)); } @Override @@ -34,30 +35,28 @@ public class GuiFluidInterface extends BaseScreen { blit(x, y, 0, 0, xSize, ySize); - if (TileFluidInterface.TANK_IN.getValue() != null) { - TANK_RENDERER.render(x + 46, y + 56, TileFluidInterface.TANK_IN.getValue()); + if (!FluidInterfaceTile.TANK_IN.getValue().isEmpty()) { + TANK_RENDERER.render(x + 46, y + 56, FluidInterfaceTile.TANK_IN.getValue()); } - if (TileFluidInterface.TANK_OUT.getValue() != null) { - TANK_RENDERER.render(x + 118, y + 56, TileFluidInterface.TANK_OUT.getValue()); + if (!FluidInterfaceTile.TANK_OUT.getValue().isEmpty()) { + TANK_RENDERER.render(x + 118, y + 56, FluidInterfaceTile.TANK_OUT.getValue()); } } @Override public void renderForeground(int mouseX, int mouseY) { - renderString(7, 7, I18n.format("gui.refinedstorage:fluid_interface")); - renderString(43 + 4, 20, I18n.format("gui.refinedstorage:fluid_interface.in")); - renderString(115 + 1, 20, I18n.format("gui.refinedstorage:fluid_interface.out")); + renderString(7, 7, title.getFormattedText()); + renderString(43 + 4, 20, I18n.format("gui.refinedstorage.fluid_interface.in")); + renderString(115 + 1, 20, I18n.format("gui.refinedstorage.fluid_interface.out")); renderString(7, 111, I18n.format("container.inventory")); - // TODO getFormattedText - if (RenderUtils.inBounds(46, 56, 12, 47, mouseX, mouseY) && TileFluidInterface.TANK_IN.getValue() != null) { - renderTooltip(mouseX, mouseY, TileFluidInterface.TANK_IN.getValue().getDisplayName().getFormattedText() + "\n" + TextFormatting.GRAY + API.instance().getQuantityFormatter().formatInBucketForm(TileFluidInterface.TANK_IN.getValue().getAmount()) + TextFormatting.RESET); + if (RenderUtils.inBounds(46, 56, 12, 47, mouseX, mouseY) && !FluidInterfaceTile.TANK_IN.getValue().isEmpty()) { + renderTooltip(mouseX, mouseY, FluidInterfaceTile.TANK_IN.getValue().getDisplayName().getFormattedText() + "\n" + TextFormatting.GRAY + API.instance().getQuantityFormatter().formatInBucketForm(FluidInterfaceTile.TANK_IN.getValue().getAmount()) + TextFormatting.RESET); } - // TODO getFormattedText - if (RenderUtils.inBounds(118, 56, 12, 47, mouseX, mouseY) && TileFluidInterface.TANK_OUT.getValue() != null) { - renderTooltip(mouseX, mouseY, TileFluidInterface.TANK_OUT.getValue().getDisplayName().getFormattedText() + "\n" + TextFormatting.GRAY + API.instance().getQuantityFormatter().formatInBucketForm(TileFluidInterface.TANK_OUT.getValue().getAmount()) + TextFormatting.RESET); + if (RenderUtils.inBounds(118, 56, 12, 47, mouseX, mouseY) && !FluidInterfaceTile.TANK_OUT.getValue().isEmpty()) { + renderTooltip(mouseX, mouseY, FluidInterfaceTile.TANK_OUT.getValue().getDisplayName().getFormattedText() + "\n" + TextFormatting.GRAY + API.instance().getQuantityFormatter().formatInBucketForm(FluidInterfaceTile.TANK_OUT.getValue().getAmount()) + TextFormatting.RESET); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/FluidInterfaceTile.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/FluidInterfaceTile.java new file mode 100644 index 000000000..e8f86b157 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/FluidInterfaceTile.java @@ -0,0 +1,52 @@ +package com.raoulvdberge.refinedstorage.tile; + +import com.raoulvdberge.refinedstorage.RSTiles; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.FluidInterfaceNetworkNode; +import com.raoulvdberge.refinedstorage.tile.data.RSSerializers; +import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class FluidInterfaceTile extends NetworkNodeTile { + public static final TileDataParameter TANK_IN = new TileDataParameter<>(RSSerializers.FLUID_STACK_SERIALIZER, FluidStack.EMPTY, t -> t.getNode().getTankIn().getFluid()); + public static final TileDataParameter TANK_OUT = new TileDataParameter<>(RSSerializers.FLUID_STACK_SERIALIZER, FluidStack.EMPTY, t -> t.getNode().getTankOut().getFluid()); + + private LazyOptional tankCapability = LazyOptional.of(() -> getNode().getTank()); + private LazyOptional inCapability = LazyOptional.of(() -> getNode().getIn()); + + public FluidInterfaceTile() { + super(RSTiles.FLUID_INTERFACE); + + dataManager.addParameter(TANK_IN); + dataManager.addParameter(TANK_OUT); + } + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction direction) { + if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return inCapability.cast(); + } else if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { + return tankCapability.cast(); + } + + return super.getCapability(cap, direction); + } + + @Override + @Nonnull + public FluidInterfaceNetworkNode createNode(World world, BlockPos pos) { + return new FluidInterfaceNetworkNode(world, pos); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidInterface.java deleted file mode 100755 index 760ab1d26..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileFluidInterface.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.raoulvdberge.refinedstorage.tile; - -import com.raoulvdberge.refinedstorage.RSTiles; -import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeFluidInterface; -import com.raoulvdberge.refinedstorage.tile.data.RSSerializers; -import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; - -import javax.annotation.Nonnull; - -public class TileFluidInterface extends NetworkNodeTile { - public static final TileDataParameter TANK_IN = new TileDataParameter<>(RSSerializers.FLUID_STACK_SERIALIZER, null, t -> t.getNode().getTankIn().getFluid()); - public static final TileDataParameter TANK_OUT = new TileDataParameter<>(RSSerializers.FLUID_STACK_SERIALIZER, null, t -> t.getNode().getTankOut().getFluid()); - - public TileFluidInterface() { - super(RSTiles.FLUID_INTERFACE); - - dataManager.addParameter(TANK_IN); - dataManager.addParameter(TANK_OUT); - } - - /* TODO - @Override - public boolean hasCapability(@Nonnull Capability capability, @Nullable Direction facing) { - return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); - } - - @Override - public T getCapability(@Nonnull Capability capability, @Nullable Direction facing) { - if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { - return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(getNode().getTank()); - } else if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(getNode().getIn()); - } - - return super.getCapability(capability, facing); - }*/ - - @Override - @Nonnull - public NetworkNodeFluidInterface createNode(World world, BlockPos pos) { - return new NetworkNodeFluidInterface(world, pos); - } -} diff --git a/src/main/resources/assets/refinedstorage/blockstates/fluid_interface.json b/src/main/resources/assets/refinedstorage/blockstates/fluid_interface.json index e51a496b8..cd6332840 100755 --- a/src/main/resources/assets/refinedstorage/blockstates/fluid_interface.json +++ b/src/main/resources/assets/refinedstorage/blockstates/fluid_interface.json @@ -1,25 +1,10 @@ { - "forge_marker": 1, - "defaults": { - "model": "cube_all", - "textures": { - "all": "refinedstorage:blocks/fluid_interface_disconnected" - } - }, "variants": { - "inventory": [ - { - "transform": "forge:default-block" - } - ], - "connected": { - "true": { - "textures": { - "all": "refinedstorage:blocks/fluid_interface_connected" - } - }, - "false": { - } + "connected=true": { + "model": "refinedstorage:block/fluid_interface_connected" + }, + "connected=false": { + "model": "refinedstorage:block/fluid_interface_disconnected" } } } \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/lang/en_us.json b/src/main/resources/assets/refinedstorage/lang/en_us.json index 3677ed50d..f910b168d 100644 --- a/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -50,9 +50,9 @@ "gui.refinedstorage.network_transmitter": "Network Transmitter", "gui.refinedstorage.network_transmitter.distance": "%d block(s)", "gui.refinedstorage.network_transmitter.missing_card": "Missing Network Card", - "gui.refinedstorage:fluid_interface": "Fluid Interface", - "gui.refinedstorage:fluid_interface.in": "In", - "gui.refinedstorage:fluid_interface.out": "Out", + "gui.refinedstorage.fluid_interface": "Fluid Interface", + "gui.refinedstorage.fluid_interface.in": "In", + "gui.refinedstorage.fluid_interface.out": "Out", "gui.refinedstorage:crafting_preview": "Crafting Preview", "gui.refinedstorage:crafting_preview.to_craft": "To craft: %d", "gui.refinedstorage:crafting_preview.available": "Available: %d", @@ -202,7 +202,7 @@ "block.refinedstorage:crafter": "Crafter", "block.refinedstorage.network_receiver": "Network Receiver", "block.refinedstorage.network_transmitter": "Network Transmitter", - "block.refinedstorage:fluid_interface": "Fluid Interface", + "block.refinedstorage.fluid_interface": "Fluid Interface", "block.refinedstorage.64k_fluid_storage_block": "64k Fluid Storage Block", "block.refinedstorage.256k_fluid_storage_block": "256k Fluid Storage Block", "block.refinedstorage.1024k_fluid_storage_block": "1024k Fluid Storage Block", diff --git a/src/main/resources/assets/refinedstorage/models/block/fluid_interface_connected.json b/src/main/resources/assets/refinedstorage/models/block/fluid_interface_connected.json new file mode 100644 index 000000000..7a38b6d4e --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/fluid_interface_connected.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "refinedstorage:block/fluid_interface_connected" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/fluid_interface_disconnected.json b/src/main/resources/assets/refinedstorage/models/block/fluid_interface_disconnected.json new file mode 100644 index 000000000..1002f0a77 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/fluid_interface_disconnected.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "refinedstorage:block/fluid_interface_disconnected" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/item/fluid_interface.json b/src/main/resources/assets/refinedstorage/models/item/fluid_interface.json new file mode 100644 index 000000000..c68c470ff --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/fluid_interface.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/fluid_interface_disconnected" +} \ No newline at end of file diff --git a/src/main/resources/data/refinedstorage/loot_tables/blocks/fluid_interface.json b/src/main/resources/data/refinedstorage/loot_tables/blocks/fluid_interface.json new file mode 100644 index 000000000..9565911d5 --- /dev/null +++ b/src/main/resources/data/refinedstorage/loot_tables/blocks/fluid_interface.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:fluid_interface" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/recipes/fluid_interface.json b/src/main/resources/data/refinedstorage/recipes/fluid_interface.json similarity index 82% rename from src/main/resources/assets/refinedstorage/recipes/fluid_interface.json rename to src/main/resources/data/refinedstorage/recipes/fluid_interface.json index dbceada83..fdc4fb05a 100644 --- a/src/main/resources/assets/refinedstorage/recipes/fluid_interface.json +++ b/src/main/resources/data/refinedstorage/recipes/fluid_interface.json @@ -5,7 +5,7 @@ "item": "refinedstorage:interface" }, { - "item": "#advanced_processor" + "item": "refinedstorage:advanced_processor" }, { "item": "minecraft:bucket"