From c142e6b63a325eb9c5dc826d03376015faf891da Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 18 Oct 2019 22:30:12 +0200 Subject: [PATCH] Re-add the Network Transmitter --- .../refinedstorage/ClientSetup.java | 6 ++ .../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/node/NetworkNode.java | 1 + ...ava => NetworkTransmitterNetworkNode.java} | 45 +++++++------ .../block/BlockNetworkTransmitter.java | 34 ---------- .../block/NetworkTransmitterBlock.java | 64 +++++++++++++++++++ .../refinedstorage/config/ServerConfig.java | 22 +++++++ .../NetworkTransmitterContainer.java | 4 +- .../screen/GuiNetworkTransmitter.java | 54 ---------------- .../screen/NetworkTransmitterScreen.java | 55 ++++++++++++++++ .../tile/NetworkTransmitterTile.java | 55 ++++++++++++++++ .../tile/TileNetworkTransmitter.java | 48 -------------- .../tile/data/RSSerializers.java | 30 +++++++++ .../blockstates/network_transmitter.json | 27 ++------ .../assets/refinedstorage/lang/en_us.json | 9 ++- .../block/network_transmitter_connected.json | 8 +++ .../network_transmitter_disconnected.json | 8 +++ .../models/item/network_transmitter.json | 3 + .../blocks/network_transmitter.json | 19 ++++++ .../recipes/network_transmitter.json | 8 +-- 24 files changed, 324 insertions(+), 194 deletions(-) rename src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/{NetworkNodeNetworkTransmitter.java => NetworkTransmitterNetworkNode.java} (70%) mode change 100755 => 100644 delete mode 100755 src/main/java/com/raoulvdberge/refinedstorage/block/BlockNetworkTransmitter.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/block/NetworkTransmitterBlock.java delete mode 100644 src/main/java/com/raoulvdberge/refinedstorage/screen/GuiNetworkTransmitter.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/screen/NetworkTransmitterScreen.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/tile/NetworkTransmitterTile.java delete mode 100755 src/main/java/com/raoulvdberge/refinedstorage/tile/TileNetworkTransmitter.java create mode 100644 src/main/resources/assets/refinedstorage/models/block/network_transmitter_connected.json create mode 100644 src/main/resources/assets/refinedstorage/models/block/network_transmitter_disconnected.json create mode 100644 src/main/resources/assets/refinedstorage/models/item/network_transmitter.json create mode 100644 src/main/resources/data/refinedstorage/loot_tables/blocks/network_transmitter.json rename src/main/resources/{assets => data}/refinedstorage/recipes/network_transmitter.json (63%) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java index 0045f60d3..7426b8040 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java @@ -67,6 +67,11 @@ public class ClientSetup { new ResourceLocation(RS.ID, "block/network_receiver/cutouts/connected") )); + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "network_transmitter"), (base, registry) -> new FullbrightBakedModel( + base, + new ResourceLocation(RS.ID, "block/network_transmitter/cutouts/connected") + )); + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base)); bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "disk_drive"), (base, registry) -> new FullbrightBakedModel( @@ -128,6 +133,7 @@ public class ClientSetup { ScreenManager.registerFactory(RSContainers.EXTERNAL_STORAGE, ExternalStorageScreen::new); ScreenManager.registerFactory(RSContainers.IMPORTER, ImporterScreen::new); ScreenManager.registerFactory(RSContainers.EXPORTER, ExporterScreen::new); + ScreenManager.registerFactory(RSContainers.NETWORK_TRANSMITTER, NetworkTransmitterScreen::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 4a470c2c8..fa5e4e7af 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -116,6 +116,7 @@ public final class RS { API.instance().getNetworkNodeRegistry().add(ImporterNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new ImporterNetworkNode(world, pos))); API.instance().getNetworkNodeRegistry().add(ExporterNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new ExporterNetworkNode(world, pos))); API.instance().getNetworkNodeRegistry().add(NetworkReceiverNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new NetworkReceiverNetworkNode(world, pos))); + API.instance().getNetworkNodeRegistry().add(NetworkTransmitterNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new NetworkTransmitterNetworkNode(world, pos))); API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory()); @@ -161,6 +162,7 @@ public final class RS { e.getRegistry().register(new ImporterBlock()); e.getRegistry().register(new ExporterBlock()); e.getRegistry().register(new NetworkReceiverBlock()); + e.getRegistry().register(new NetworkTransmitterBlock()); } @SubscribeEvent @@ -190,6 +192,7 @@ public final class RS { e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(ImporterTile::new, RSBlocks.IMPORTER).build(null).setRegistryName(RS.ID, "importer"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(ExporterTile::new, RSBlocks.EXPORTER).build(null).setRegistryName(RS.ID, "exporter"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(NetworkReceiverTile::new, RSBlocks.NETWORK_RECEIVER).build(null).setRegistryName(RS.ID, "network_receiver"))); + e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(NetworkTransmitterTile::new, RSBlocks.NETWORK_TRANSMITTER).build(null).setRegistryName(RS.ID, "network_transmitter"))); } private TileEntityType registerTileDataParameters(TileEntityType t) { @@ -211,6 +214,7 @@ public final class RS { e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new ExternalStorageContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "external_storage")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new ImporterContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "importer")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new ExporterContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "exporter")); + e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new NetworkTransmitterContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "network_transmitter")); } @SubscribeEvent @@ -282,6 +286,7 @@ public final class RS { e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.IMPORTER)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.EXPORTER)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.NETWORK_RECEIVER)); + e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.NETWORK_TRANSMITTER)); } /* TODO diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java index 8cf8c4ce3..c98e7c292 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java @@ -18,8 +18,9 @@ public final class RSBlocks { 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 BlockNetworkTransmitter NETWORK_TRANSMITTER = new BlockNetworkTransmitter(); + @ObjectHolder(RS.ID + ":network_transmitter") + public static final NetworkTransmitterBlock NETWORK_TRANSMITTER = null; @ObjectHolder(RS.ID + ":network_receiver") public static final NetworkReceiverBlock NETWORK_RECEIVER = null; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java b/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java index 3d067c9ce..1e49092d1 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java @@ -45,8 +45,10 @@ public final class RSContainers { //@ObjectHolder(RS.ID + ":interface") public static final ContainerType INTERFACE = null; - //@ObjectHolder(RS.ID + ":network_transmitter") + + @ObjectHolder(RS.ID + ":network_transmitter") public static final ContainerType NETWORK_TRANSMITTER = null; + //@ObjectHolder(RS.ID + ":relay") public static final ContainerType RELAY = null; //@ObjectHolder(RS.ID + ":security_manager") diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java index f49cf4480..e7b97752b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java @@ -13,7 +13,6 @@ public class RSOldConfig { public int fluidInterfaceUsage; public int relayUsage; public int wirelessTransmitterUsage; - public int networkTransmitterUsage; public int diskManipulatorUsage; public int securityManagerUsage; public int securityManagerPerSecurityCardUsage; @@ -83,7 +82,6 @@ public class RSOldConfig { fluidInterfaceUsage = config.getInt("fluidInterface", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Fluid Interfaces"); relayUsage = config.getInt("relay", ENERGY, 1, 0, Integer.MAX_VALUE, "The energy used by Relays"); wirelessTransmitterUsage = config.getInt("wirelessTransmitter", ENERGY, 8, 0, Integer.MAX_VALUE, "The energy used by Wireless Transmitters"); - networkTransmitterUsage = config.getInt("networkTransmitter", ENERGY, 64, 0, Integer.MAX_VALUE, "The energy used by Network Transmitters"); diskManipulatorUsage = config.getInt("diskManipulator", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Disk Manipulators"); securityManagerUsage = config.getInt("securityManager", ENERGY, 4, 0, Integer.MAX_VALUE, "The base energy used by Security Managers"); securityManagerPerSecurityCardUsage = config.getInt("securityManagerPerSecurityCard", ENERGY, 10, 0, Integer.MAX_VALUE, "The additional energy used by Security Cards in Security Managers"); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java b/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java index ef7e20452..2a5ec06c3 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java @@ -57,9 +57,9 @@ public class RSTiles { //@ObjectHolder(RS.ID + ":interface") public static final TileEntityType INTERFACE = null; - //@ObjectHolder(RS.ID + ":network_transmitter") - public static final TileEntityType NETWORK_TRANSMITTER = null; + @ObjectHolder(RS.ID + ":network_transmitter") + public static final TileEntityType NETWORK_TRANSMITTER = null; @ObjectHolder(RS.ID + ":network_receiver") public static final TileEntityType NETWORK_RECEIVER = null; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java index 4fe6224da..09dea025d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java @@ -72,6 +72,7 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor { @Nonnull @Override public ItemStack getItemStack() { + // TODO This doesn't work crossdim. return new ItemStack(Item.BLOCK_TO_ITEM.get(world.getBlockState(pos).getBlock()), 1); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeNetworkTransmitter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkTransmitterNetworkNode.java old mode 100755 new mode 100644 similarity index 70% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeNetworkTransmitter.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkTransmitterNetworkNode.java index bd883a0c0..2226de3fe --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeNetworkTransmitter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkTransmitterNetworkNode.java @@ -6,17 +6,19 @@ import com.raoulvdberge.refinedstorage.api.util.Action; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.validator.ItemValidator; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener; +import com.raoulvdberge.refinedstorage.item.NetworkCardItem; import com.raoulvdberge.refinedstorage.util.StackUtils; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraft.world.dimension.DimensionType; import net.minecraftforge.items.IItemHandler; import javax.annotation.Nullable; -public class NetworkNodeNetworkTransmitter extends NetworkNode { +public class NetworkTransmitterNetworkNode extends NetworkNode { public static final ResourceLocation ID = new ResourceLocation(RS.ID, "network_transmitter"); private BaseItemHandler networkCard = new BaseItemHandler(1) @@ -27,9 +29,10 @@ public class NetworkNodeNetworkTransmitter extends NetworkNode { if (card.isEmpty()) { receiver = null; + receiverDimension = null; } else { - // TODO receiver = ItemNetworkCard.getReceiver(card); - // TODO receiverDimension = ItemNetworkCard.getDimension(card); + receiver = NetworkCardItem.getReceiver(card); + receiverDimension = NetworkCardItem.getDimension(card); } if (network != null) { @@ -38,9 +41,9 @@ public class NetworkNodeNetworkTransmitter extends NetworkNode { }); private BlockPos receiver; - private int receiverDimension; + private DimensionType receiverDimension; - public NetworkNodeNetworkTransmitter(World world, BlockPos pos) { + public NetworkTransmitterNetworkNode(World world, BlockPos pos) { super(world, pos); } @@ -67,7 +70,7 @@ public class NetworkNodeNetworkTransmitter extends NetworkNode { @Override public int getEnergyUsage() { - return RS.INSTANCE.config.networkTransmitterUsage; + return RS.SERVER_CONFIG.getNetworkTransmitter().getUsage(); } public BaseItemHandler getNetworkCard() { @@ -84,24 +87,25 @@ public class NetworkNodeNetworkTransmitter extends NetworkNode { return receiver; } - public int getReceiverDimension() { + @Nullable + public DimensionType getReceiverDimension() { return receiverDimension; } public int getDistance() { - if (receiver == null) { - return 0; + if (receiver == null || receiverDimension == null || !isSameDimension()) { + return -1; } return (int) Math.sqrt(Math.pow(pos.getX() - receiver.getX(), 2) + Math.pow(pos.getY() - receiver.getY(), 2) + Math.pow(pos.getZ() - receiver.getZ(), 2)); } public boolean isSameDimension() { - return world.getDimension().getType().getId() == receiverDimension; + return world.getDimension().getType() == receiverDimension; } private boolean canTransmit() { - return canUpdate() && receiver != null; + return canUpdate() && receiver != null && receiverDimension != null; } @Override @@ -115,15 +119,18 @@ public class NetworkNodeNetworkTransmitter extends NetworkNode { if (canTransmit()) { if (!isSameDimension()) { - -// TODO final World dimensionWorld = DimensionManager.getWorld(receiverDimension); - - // if (dimensionWorld != null) { - // operator.apply(dimensionWorld, receiver, null); - // } - } else { - operator.apply(world, receiver, null); + return; } + + // TODO if (!isSameDimension()) { + // World dimensionWorld = DimensionManager.getWorld(world.getServer(), receiverDimension, true, true); + + //if (dimensionWorld != null) { + // operator.apply(dimensionWorld, receiver, null); + // } + //} else { + operator.apply(world, receiver, null); + //} } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNetworkTransmitter.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNetworkTransmitter.java deleted file mode 100755 index d414d6862..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNetworkTransmitter.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.raoulvdberge.refinedstorage.block; - -import com.raoulvdberge.refinedstorage.block.info.BlockInfoBuilder; -import com.raoulvdberge.refinedstorage.tile.TileNetworkTransmitter; - -public class BlockNetworkTransmitter extends BlockNode { - public BlockNetworkTransmitter() { - super(BlockInfoBuilder.forId("network_transmitter").tileEntity(TileNetworkTransmitter::new).create()); - } - - /* TODO - @Override - @OnlyIn(Dist.CLIENT) - public void registerModels(IModelRegistration modelRegistration) { - modelRegistration.setModel(this, 0, new ModelResourceLocation(info.getId(), "inventory")); - - modelRegistration.addBakedModelOverride(info.getId(), base -> new BakedModelFullbright(base, RS.ID + ":blocks/network_transmitter/cutouts/connected")); - } - - @Override - public BlockRenderLayer getRenderLayer() { - return BlockRenderLayer.CUTOUT; - } - - @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.NETWORK_TRANSMITTER, player, world, pos, side); - }*/ - - @Override - public boolean hasConnectedState() { - return true; - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/NetworkTransmitterBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/NetworkTransmitterBlock.java new file mode 100644 index 000000000..e9943c99e --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/NetworkTransmitterBlock.java @@ -0,0 +1,64 @@ +package com.raoulvdberge.refinedstorage.block; + +import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.container.NetworkTransmitterContainer; +import com.raoulvdberge.refinedstorage.container.factory.PositionalTileContainerProvider; +import com.raoulvdberge.refinedstorage.tile.NetworkTransmitterTile; +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.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 NetworkTransmitterBlock extends NodeBlock { + public NetworkTransmitterBlock() { + super(BlockUtils.DEFAULT_ROCK_PROPERTIES); + + this.setRegistryName(RS.ID, "network_transmitter"); + } + + @Override + public BlockRenderLayer getRenderLayer() { + return BlockRenderLayer.CUTOUT; + } + + @Nullable + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new NetworkTransmitterTile(); + } + + @Override + @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( + (ServerPlayerEntity) player, + new PositionalTileContainerProvider( + new TranslationTextComponent("gui.refinedstorage.network_transmitter"), + (tile, windowId, inventory, p) -> new NetworkTransmitterContainer(tile, player, windowId), + pos + ), + pos + )); + } + + 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 3ed9e88ea..4a54e8986 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java @@ -16,6 +16,7 @@ public class ServerConfig { private Importer importer; private Exporter exporter; private NetworkReceiver networkReceiver; + private NetworkTransmitter networkTransmitter; private Upgrades upgrades; public ServerConfig() { @@ -29,6 +30,7 @@ public class ServerConfig { importer = new Importer(); exporter = new Exporter(); networkReceiver = new NetworkReceiver(); + networkTransmitter = new NetworkTransmitter(); upgrades = new Upgrades(); spec = builder.build(); @@ -78,6 +80,10 @@ public class ServerConfig { return networkReceiver; } + public NetworkTransmitter getNetworkTransmitter() { + return networkTransmitter; + } + public ForgeConfigSpec getSpec() { return spec; } @@ -389,4 +395,20 @@ public class ServerConfig { return usage.get(); } } + + public class NetworkTransmitter { + private final ForgeConfigSpec.IntValue usage; + + public NetworkTransmitter() { + builder.push("networkTransmitter"); + + usage = builder.comment("The energy used by the Network Transmitter").defineInRange("usage", 64, 0, Integer.MAX_VALUE); + + builder.pop(); + } + + public int getUsage() { + return usage.get(); + } + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/NetworkTransmitterContainer.java b/src/main/java/com/raoulvdberge/refinedstorage/container/NetworkTransmitterContainer.java index 7e7f3036a..6fe44ce89 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/NetworkTransmitterContainer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/NetworkTransmitterContainer.java @@ -1,12 +1,12 @@ package com.raoulvdberge.refinedstorage.container; import com.raoulvdberge.refinedstorage.RSContainers; -import com.raoulvdberge.refinedstorage.tile.TileNetworkTransmitter; +import com.raoulvdberge.refinedstorage.tile.NetworkTransmitterTile; import net.minecraft.entity.player.PlayerEntity; import net.minecraftforge.items.SlotItemHandler; public class NetworkTransmitterContainer extends BaseContainer { - public NetworkTransmitterContainer(TileNetworkTransmitter networkTransmitter, PlayerEntity player, int windowId) { + public NetworkTransmitterContainer(NetworkTransmitterTile networkTransmitter, PlayerEntity player, int windowId) { super(RSContainers.NETWORK_TRANSMITTER, networkTransmitter, player, windowId); addSlot(new SlotItemHandler(networkTransmitter.getNode().getNetworkCard(), 0, 8, 20)); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiNetworkTransmitter.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiNetworkTransmitter.java deleted file mode 100644 index 21b0fab1a..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiNetworkTransmitter.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.raoulvdberge.refinedstorage.screen; - -import com.raoulvdberge.refinedstorage.RS; -import com.raoulvdberge.refinedstorage.container.NetworkTransmitterContainer; -import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.RedstoneModeSideButton; -import com.raoulvdberge.refinedstorage.tile.TileNetworkTransmitter; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.PlayerInventory; - -public class GuiNetworkTransmitter extends BaseScreen { - private TileNetworkTransmitter networkTransmitter; - - public GuiNetworkTransmitter(NetworkTransmitterContainer container, TileNetworkTransmitter networkTransmitter, PlayerInventory inventory) { - super(container, 176, 137, inventory, null); - - this.networkTransmitter = networkTransmitter; - } - - @Override - public void onPostInit(int x, int y) { - addSideButton(new RedstoneModeSideButton(this, TileNetworkTransmitter.REDSTONE_MODE)); - } - - @Override - public void tick(int x, int y) { - } - - @Override - public void renderBackground(int x, int y, int mouseX, int mouseY) { - bindTexture(RS.ID, "gui/network_transmitter.png"); - - blit(x, y, 0, 0, xSize, ySize); - } - - @Override - public void renderForeground(int mouseX, int mouseY) { - renderString(7, 7, I18n.format("gui.refinedstorage:network_transmitter")); - - String distance; - - if (networkTransmitter.getNode().getNetworkCard().getStackInSlot(0).isEmpty()) { - distance = I18n.format("gui.refinedstorage:network_transmitter.missing_card"); - } else if (TileNetworkTransmitter.RECEIVER_DIMENSION.getValue() != networkTransmitter.getWorld().getDimension().getType().getId()) { - distance = I18n.format("gui.refinedstorage:network_transmitter.dimension", TileNetworkTransmitter.RECEIVER_DIMENSION.getValue()); - } else if (TileNetworkTransmitter.DISTANCE.getValue() != -1) { - distance = I18n.format("gui.refinedstorage:network_transmitter.distance", TileNetworkTransmitter.DISTANCE.getValue()); - } else { - distance = I18n.format("gui.refinedstorage:network_transmitter.missing_card"); - } - - renderString(51, 24, distance); - renderString(7, 42, I18n.format("container.inventory")); - } -} \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/NetworkTransmitterScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/NetworkTransmitterScreen.java new file mode 100644 index 000000000..963c2e96c --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/NetworkTransmitterScreen.java @@ -0,0 +1,55 @@ +package com.raoulvdberge.refinedstorage.screen; + +import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.container.NetworkTransmitterContainer; +import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.RedstoneModeSideButton; +import com.raoulvdberge.refinedstorage.tile.NetworkTransmitterTile; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; + +import java.util.Optional; + +public class NetworkTransmitterScreen extends BaseScreen { + public NetworkTransmitterScreen(NetworkTransmitterContainer container, PlayerInventory inventory, ITextComponent title) { + super(container, 176, 137, inventory, title); + } + + @Override + public void onPostInit(int x, int y) { + addSideButton(new RedstoneModeSideButton(this, NetworkTransmitterTile.REDSTONE_MODE)); + } + + @Override + public void tick(int x, int y) { + } + + @Override + public void renderBackground(int x, int y, int mouseX, int mouseY) { + bindTexture(RS.ID, "gui/network_transmitter.png"); + + blit(x, y, 0, 0, xSize, ySize); + } + + @Override + public void renderForeground(int mouseX, int mouseY) { + renderString(7, 7, title.getFormattedText()); + + String text; + + Optional receiverDim = NetworkTransmitterTile.RECEIVER_DIMENSION.getValue(); + int distance = NetworkTransmitterTile.DISTANCE.getValue(); + + if (!receiverDim.isPresent()) { + text = I18n.format("gui.refinedstorage.network_transmitter.missing_card"); + } else if (distance != -1) { + text = I18n.format("gui.refinedstorage.network_transmitter.distance", distance); + } else { + text = receiverDim.get().toString(); + } + + renderString(51, 24, text); + renderString(7, 42, I18n.format("container.inventory")); + } +} \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/NetworkTransmitterTile.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/NetworkTransmitterTile.java new file mode 100644 index 000000000..cac4f76bb --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/NetworkTransmitterTile.java @@ -0,0 +1,55 @@ +package com.raoulvdberge.refinedstorage.tile; + +import com.raoulvdberge.refinedstorage.RSTiles; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkTransmitterNetworkNode; +import com.raoulvdberge.refinedstorage.tile.data.RSSerializers; +import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +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.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Optional; + +public class NetworkTransmitterTile extends NetworkNodeTile { + public static final TileDataParameter DISTANCE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getDistance()); + public static final TileDataParameter, NetworkTransmitterTile> RECEIVER_DIMENSION = new TileDataParameter<>(RSSerializers.OPTIONAL_RESOURCE_LOCATION_SERIALIZER, Optional.empty(), t -> { + if (t.getNode().getReceiverDimension() != null) { + return Optional.of(t.getNode().getReceiverDimension().getRegistryName()); + } + + return Optional.empty(); + }); + + private LazyOptional networkCardCapability = LazyOptional.of(() -> getNode().getNetworkCard()); + + public NetworkTransmitterTile() { + super(RSTiles.NETWORK_TRANSMITTER); + + dataManager.addWatchedParameter(DISTANCE); + dataManager.addWatchedParameter(RECEIVER_DIMENSION); + } + + @Override + @Nonnull + public NetworkTransmitterNetworkNode createNode(World world, BlockPos pos) { + return new NetworkTransmitterNetworkNode(world, pos); + } + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction direction) { + if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return networkCardCapability.cast(); + } + + return super.getCapability(cap, direction); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNetworkTransmitter.java deleted file mode 100755 index 784dedbdd..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNetworkTransmitter.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.raoulvdberge.refinedstorage.tile; - -import com.raoulvdberge.refinedstorage.RSTiles; -import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeNetworkTransmitter; -import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; -import net.minecraft.network.datasync.DataSerializers; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import javax.annotation.Nonnull; - -public class TileNetworkTransmitter extends NetworkNodeTile { - public static final TileDataParameter DISTANCE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> { - NetworkNodeNetworkTransmitter transmitter = t.getNode(); - - return (transmitter.getReceiver() != null && transmitter.isSameDimension()) ? transmitter.getDistance() : -1; - }); - // TODO Use dim here instead? - public static final TileDataParameter RECEIVER_DIMENSION = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getReceiverDimension()); - - public TileNetworkTransmitter() { - super(RSTiles.NETWORK_TRANSMITTER); - - dataManager.addWatchedParameter(DISTANCE); - dataManager.addWatchedParameter(RECEIVER_DIMENSION); - } - - @Override - @Nonnull - public NetworkNodeNetworkTransmitter createNode(World world, BlockPos pos) { - return new NetworkNodeNetworkTransmitter(world, pos); - } - - /* TODO - @Override - public boolean hasCapability(@Nonnull Capability capability, @Nullable Direction facing) { - return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); - } - - @Override - public T getCapability(@Nonnull Capability capability, @Nullable Direction facing) { - if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(getNode().getNetworkCard()); - } - - return super.getCapability(capability, facing); - }*/ -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/data/RSSerializers.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/data/RSSerializers.java index 7365f945b..42acd5f59 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/data/RSSerializers.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/data/RSSerializers.java @@ -6,10 +6,12 @@ import com.raoulvdberge.refinedstorage.util.AccessTypeUtils; import net.minecraft.network.PacketBuffer; import net.minecraft.network.datasync.DataParameter; import net.minecraft.network.datasync.IDataSerializer; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidStack; import java.util.ArrayList; import java.util.List; +import java.util.Optional; public final class RSSerializers { public static final IDataSerializer> CLIENT_NODE_SERIALIZER = new IDataSerializer>() { @@ -113,4 +115,32 @@ public final class RSSerializers { return value; } }; + + public static final IDataSerializer> OPTIONAL_RESOURCE_LOCATION_SERIALIZER = new IDataSerializer>() { + @Override + public void write(PacketBuffer buf, Optional value) { + buf.writeBoolean(value.isPresent()); + + value.ifPresent(buf::writeResourceLocation); + } + + @Override + public Optional read(PacketBuffer buf) { + if (!buf.readBoolean()) { + return Optional.empty(); + } + + return Optional.of(buf.readResourceLocation()); + } + + @Override + public DataParameter> createKey(int id) { + return null; + } + + @Override + public Optional copyValue(Optional value) { + return value; + } + }; } diff --git a/src/main/resources/assets/refinedstorage/blockstates/network_transmitter.json b/src/main/resources/assets/refinedstorage/blockstates/network_transmitter.json index a88a3dae1..0169d1630 100755 --- a/src/main/resources/assets/refinedstorage/blockstates/network_transmitter.json +++ b/src/main/resources/assets/refinedstorage/blockstates/network_transmitter.json @@ -1,27 +1,10 @@ { - "forge_marker": 1, - "defaults": { - "model": "refinedstorage:cube_all_cutout", - "textures": { - "particle": "refinedstorage:blocks/network_transmitter/network_transmitter", - "all": "refinedstorage:blocks/network_transmitter/network_transmitter", - "cutout": "refinedstorage:blocks/network_transmitter/cutouts/disconnected" - } - }, "variants": { - "inventory": [ - { - "transform": "forge:default-block" - } - ], - "connected": { - "true": { - "textures": { - "cutout": "refinedstorage:blocks/network_transmitter/cutouts/connected" - } - }, - "false": { - } + "connected=true": { + "model": "refinedstorage:block/network_transmitter_connected" + }, + "connected=false": { + "model": "refinedstorage:block/network_transmitter_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 bf9029dab..4fab7cf52 100644 --- a/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -47,10 +47,9 @@ "gui.refinedstorage.filter": "Filter", "gui.refinedstorage.filter.compare_nbt": "NBT", "gui.refinedstorage.filter.mod_filter": "Mod filter", - "gui.refinedstorage:network_transmitter": "Network Transmitter", - "gui.refinedstorage:network_transmitter.distance": "%d block(s)", - "gui.refinedstorage:network_transmitter.dimension": "Dimension %d", - "gui.refinedstorage:network_transmitter.missing_card": "Missing Network Card", + "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", @@ -202,7 +201,7 @@ "block.refinedstorage:wireless_transmitter.tooltip": "Must be placed on %s.", "block.refinedstorage:crafter": "Crafter", "block.refinedstorage.network_receiver": "Network Receiver", - "block.refinedstorage:network_transmitter": "Network Transmitter", + "block.refinedstorage.network_transmitter": "Network Transmitter", "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", diff --git a/src/main/resources/assets/refinedstorage/models/block/network_transmitter_connected.json b/src/main/resources/assets/refinedstorage/models/block/network_transmitter_connected.json new file mode 100644 index 000000000..0c6ed2741 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/network_transmitter_connected.json @@ -0,0 +1,8 @@ +{ + "parent": "refinedstorage:block/cube_all_cutout", + "textures": { + "particle": "refinedstorage:block/network_transmitter/network_transmitter", + "all": "refinedstorage:block/network_transmitter/network_transmitter", + "cutout": "refinedstorage:block/network_transmitter/cutouts/connected" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/network_transmitter_disconnected.json b/src/main/resources/assets/refinedstorage/models/block/network_transmitter_disconnected.json new file mode 100644 index 000000000..4b4406b4d --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/network_transmitter_disconnected.json @@ -0,0 +1,8 @@ +{ + "parent": "refinedstorage:block/cube_all_cutout", + "textures": { + "particle": "refinedstorage:block/network_transmitter/network_transmitter", + "all": "refinedstorage:block/network_transmitter/network_transmitter", + "cutout": "refinedstorage:block/network_transmitter/cutouts/disconnected" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/item/network_transmitter.json b/src/main/resources/assets/refinedstorage/models/item/network_transmitter.json new file mode 100644 index 000000000..d9b3e2db2 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/network_transmitter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/network_transmitter_disconnected" +} \ No newline at end of file diff --git a/src/main/resources/data/refinedstorage/loot_tables/blocks/network_transmitter.json b/src/main/resources/data/refinedstorage/loot_tables/blocks/network_transmitter.json new file mode 100644 index 000000000..26bd49edb --- /dev/null +++ b/src/main/resources/data/refinedstorage/loot_tables/blocks/network_transmitter.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:network_transmitter" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/recipes/network_transmitter.json b/src/main/resources/data/refinedstorage/recipes/network_transmitter.json similarity index 63% rename from src/main/resources/assets/refinedstorage/recipes/network_transmitter.json rename to src/main/resources/data/refinedstorage/recipes/network_transmitter.json index 08b681876..325d7633f 100644 --- a/src/main/resources/assets/refinedstorage/recipes/network_transmitter.json +++ b/src/main/resources/data/refinedstorage/recipes/network_transmitter.json @@ -7,19 +7,19 @@ ], "key": { "E": { - "item": "minecraft:ender_pearl" + "tag": "forge:ender_pearls" }, "C": { - "item": "#construction_core" + "item": "refinedstorage:construction_core" }, "M": { "item": "refinedstorage:machine_casing" }, "D": { - "item": "#destruction_core" + "item": "refinedstorage:destruction_core" }, "A": { - "item": "#advanced_processor" + "item": "refinedstorage:advanced_processor" } }, "result": {