Re-add the Network Transmitter

This commit is contained in:
raoulvdberge
2019-10-18 22:30:12 +02:00
parent 4a8ddeeb6d
commit c142e6b63a
24 changed files with 324 additions and 194 deletions

View File

@@ -67,6 +67,11 @@ public class ClientSetup {
new ResourceLocation(RS.ID, "block/network_receiver/cutouts/connected") 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, "pattern"), (base, registry) -> new PatternBakedModel(base));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "disk_drive"), (base, registry) -> new FullbrightBakedModel( 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.EXTERNAL_STORAGE, ExternalStorageScreen::new);
ScreenManager.registerFactory(RSContainers.IMPORTER, ImporterScreen::new); ScreenManager.registerFactory(RSContainers.IMPORTER, ImporterScreen::new);
ScreenManager.registerFactory(RSContainers.EXPORTER, ExporterScreen::new); ScreenManager.registerFactory(RSContainers.EXPORTER, ExporterScreen::new);
ScreenManager.registerFactory(RSContainers.NETWORK_TRANSMITTER, NetworkTransmitterScreen::new);
ClientRegistry.registerKeyBinding(RSKeyBindings.FOCUS_SEARCH_BAR); ClientRegistry.registerKeyBinding(RSKeyBindings.FOCUS_SEARCH_BAR);
ClientRegistry.registerKeyBinding(RSKeyBindings.CLEAR_GRID_CRAFTING_MATRIX); ClientRegistry.registerKeyBinding(RSKeyBindings.CLEAR_GRID_CRAFTING_MATRIX);

View File

@@ -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(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(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(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()); 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 ImporterBlock());
e.getRegistry().register(new ExporterBlock()); e.getRegistry().register(new ExporterBlock());
e.getRegistry().register(new NetworkReceiverBlock()); e.getRegistry().register(new NetworkReceiverBlock());
e.getRegistry().register(new NetworkTransmitterBlock());
} }
@SubscribeEvent @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(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(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(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 <T extends TileEntity> TileEntityType<T> registerTileDataParameters(TileEntityType<T> t) { private <T extends TileEntity> TileEntityType<T> registerTileDataParameters(TileEntityType<T> t) {
@@ -211,6 +214,7 @@ public final class RS {
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<ExternalStorageContainer, ExternalStorageTile>((windowId, inv, tile) -> new ExternalStorageContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "external_storage")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<ExternalStorageContainer, ExternalStorageTile>((windowId, inv, tile) -> new ExternalStorageContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "external_storage"));
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<ImporterContainer, ImporterTile>((windowId, inv, tile) -> new ImporterContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "importer")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<ImporterContainer, ImporterTile>((windowId, inv, tile) -> new ImporterContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "importer"));
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<ExporterContainer, ExporterTile>((windowId, inv, tile) -> new ExporterContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "exporter")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<ExporterContainer, ExporterTile>((windowId, inv, tile) -> new ExporterContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "exporter"));
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<NetworkTransmitterContainer, NetworkTransmitterTile>((windowId, inv, tile) -> new NetworkTransmitterContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "network_transmitter"));
} }
@SubscribeEvent @SubscribeEvent
@@ -282,6 +286,7 @@ public final class RS {
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.IMPORTER)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.IMPORTER));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.EXPORTER)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.EXPORTER));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.NETWORK_RECEIVER)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.NETWORK_RECEIVER));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.NETWORK_TRANSMITTER));
} }
/* TODO /* TODO

View File

@@ -18,8 +18,9 @@ public final class RSBlocks {
public static final BlockCraftingMonitor CRAFTING_MONITOR = new BlockCraftingMonitor(); public static final BlockCraftingMonitor CRAFTING_MONITOR = new BlockCraftingMonitor();
public static final BlockWirelessTransmitter WIRELESS_TRANSMITTER = new BlockWirelessTransmitter(); public static final BlockWirelessTransmitter WIRELESS_TRANSMITTER = new BlockWirelessTransmitter();
public static final BlockCrafter CRAFTER = new BlockCrafter(); 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") @ObjectHolder(RS.ID + ":network_receiver")
public static final NetworkReceiverBlock NETWORK_RECEIVER = null; public static final NetworkReceiverBlock NETWORK_RECEIVER = null;

View File

@@ -45,8 +45,10 @@ public final class RSContainers {
//@ObjectHolder(RS.ID + ":interface") //@ObjectHolder(RS.ID + ":interface")
public static final ContainerType<ImporterContainer> INTERFACE = null; public static final ContainerType<ImporterContainer> INTERFACE = null;
//@ObjectHolder(RS.ID + ":network_transmitter")
@ObjectHolder(RS.ID + ":network_transmitter")
public static final ContainerType<NetworkTransmitterContainer> NETWORK_TRANSMITTER = null; public static final ContainerType<NetworkTransmitterContainer> NETWORK_TRANSMITTER = null;
//@ObjectHolder(RS.ID + ":relay") //@ObjectHolder(RS.ID + ":relay")
public static final ContainerType<RelayContainer> RELAY = null; public static final ContainerType<RelayContainer> RELAY = null;
//@ObjectHolder(RS.ID + ":security_manager") //@ObjectHolder(RS.ID + ":security_manager")

View File

@@ -13,7 +13,6 @@ public class RSOldConfig {
public int fluidInterfaceUsage; public int fluidInterfaceUsage;
public int relayUsage; public int relayUsage;
public int wirelessTransmitterUsage; public int wirelessTransmitterUsage;
public int networkTransmitterUsage;
public int diskManipulatorUsage; public int diskManipulatorUsage;
public int securityManagerUsage; public int securityManagerUsage;
public int securityManagerPerSecurityCardUsage; 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"); 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"); 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"); 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"); 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"); 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"); securityManagerPerSecurityCardUsage = config.getInt("securityManagerPerSecurityCard", ENERGY, 10, 0, Integer.MAX_VALUE, "The additional energy used by Security Cards in Security Managers");

View File

@@ -57,9 +57,9 @@ public class RSTiles {
//@ObjectHolder(RS.ID + ":interface") //@ObjectHolder(RS.ID + ":interface")
public static final TileEntityType<ImporterTile> INTERFACE = null; public static final TileEntityType<ImporterTile> INTERFACE = null;
//@ObjectHolder(RS.ID + ":network_transmitter")
public static final TileEntityType<TileNetworkTransmitter> NETWORK_TRANSMITTER = null;
@ObjectHolder(RS.ID + ":network_transmitter")
public static final TileEntityType<NetworkTransmitterTile> NETWORK_TRANSMITTER = null;
@ObjectHolder(RS.ID + ":network_receiver") @ObjectHolder(RS.ID + ":network_receiver")
public static final TileEntityType<NetworkReceiverTile> NETWORK_RECEIVER = null; public static final TileEntityType<NetworkReceiverTile> NETWORK_RECEIVER = null;

View File

@@ -72,6 +72,7 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor {
@Nonnull @Nonnull
@Override @Override
public ItemStack getItemStack() { public ItemStack getItemStack() {
// TODO This doesn't work crossdim.
return new ItemStack(Item.BLOCK_TO_ITEM.get(world.getBlockState(pos).getBlock()), 1); return new ItemStack(Item.BLOCK_TO_ITEM.get(world.getBlockState(pos).getBlock()), 1);
} }

View File

@@ -6,17 +6,19 @@ import com.raoulvdberge.refinedstorage.api.util.Action;
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.validator.ItemValidator; import com.raoulvdberge.refinedstorage.inventory.item.validator.ItemValidator;
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
import com.raoulvdberge.refinedstorage.item.NetworkCardItem;
import com.raoulvdberge.refinedstorage.util.StackUtils; import com.raoulvdberge.refinedstorage.util.StackUtils;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.dimension.DimensionType;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import javax.annotation.Nullable; 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"); public static final ResourceLocation ID = new ResourceLocation(RS.ID, "network_transmitter");
private BaseItemHandler networkCard = new BaseItemHandler(1) private BaseItemHandler networkCard = new BaseItemHandler(1)
@@ -27,9 +29,10 @@ public class NetworkNodeNetworkTransmitter extends NetworkNode {
if (card.isEmpty()) { if (card.isEmpty()) {
receiver = null; receiver = null;
receiverDimension = null;
} else { } else {
// TODO receiver = ItemNetworkCard.getReceiver(card); receiver = NetworkCardItem.getReceiver(card);
// TODO receiverDimension = ItemNetworkCard.getDimension(card); receiverDimension = NetworkCardItem.getDimension(card);
} }
if (network != null) { if (network != null) {
@@ -38,9 +41,9 @@ public class NetworkNodeNetworkTransmitter extends NetworkNode {
}); });
private BlockPos receiver; private BlockPos receiver;
private int receiverDimension; private DimensionType receiverDimension;
public NetworkNodeNetworkTransmitter(World world, BlockPos pos) { public NetworkTransmitterNetworkNode(World world, BlockPos pos) {
super(world, pos); super(world, pos);
} }
@@ -67,7 +70,7 @@ public class NetworkNodeNetworkTransmitter extends NetworkNode {
@Override @Override
public int getEnergyUsage() { public int getEnergyUsage() {
return RS.INSTANCE.config.networkTransmitterUsage; return RS.SERVER_CONFIG.getNetworkTransmitter().getUsage();
} }
public BaseItemHandler getNetworkCard() { public BaseItemHandler getNetworkCard() {
@@ -84,24 +87,25 @@ public class NetworkNodeNetworkTransmitter extends NetworkNode {
return receiver; return receiver;
} }
public int getReceiverDimension() { @Nullable
public DimensionType getReceiverDimension() {
return receiverDimension; return receiverDimension;
} }
public int getDistance() { public int getDistance() {
if (receiver == null) { if (receiver == null || receiverDimension == null || !isSameDimension()) {
return 0; 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)); 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() { public boolean isSameDimension() {
return world.getDimension().getType().getId() == receiverDimension; return world.getDimension().getType() == receiverDimension;
} }
private boolean canTransmit() { private boolean canTransmit() {
return canUpdate() && receiver != null; return canUpdate() && receiver != null && receiverDimension != null;
} }
@Override @Override
@@ -115,15 +119,18 @@ public class NetworkNodeNetworkTransmitter extends NetworkNode {
if (canTransmit()) { if (canTransmit()) {
if (!isSameDimension()) { if (!isSameDimension()) {
return;
// TODO final World dimensionWorld = DimensionManager.getWorld(receiverDimension);
// if (dimensionWorld != null) {
// operator.apply(dimensionWorld, receiver, null);
// }
} else {
operator.apply(world, receiver, null);
} }
// 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);
//}
} }
} }
} }

View File

@@ -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;
}
}

View File

@@ -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<NetworkTransmitterTile>(
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;
}
}

View File

@@ -16,6 +16,7 @@ public class ServerConfig {
private Importer importer; private Importer importer;
private Exporter exporter; private Exporter exporter;
private NetworkReceiver networkReceiver; private NetworkReceiver networkReceiver;
private NetworkTransmitter networkTransmitter;
private Upgrades upgrades; private Upgrades upgrades;
public ServerConfig() { public ServerConfig() {
@@ -29,6 +30,7 @@ public class ServerConfig {
importer = new Importer(); importer = new Importer();
exporter = new Exporter(); exporter = new Exporter();
networkReceiver = new NetworkReceiver(); networkReceiver = new NetworkReceiver();
networkTransmitter = new NetworkTransmitter();
upgrades = new Upgrades(); upgrades = new Upgrades();
spec = builder.build(); spec = builder.build();
@@ -78,6 +80,10 @@ public class ServerConfig {
return networkReceiver; return networkReceiver;
} }
public NetworkTransmitter getNetworkTransmitter() {
return networkTransmitter;
}
public ForgeConfigSpec getSpec() { public ForgeConfigSpec getSpec() {
return spec; return spec;
} }
@@ -389,4 +395,20 @@ public class ServerConfig {
return usage.get(); 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();
}
}
} }

View File

@@ -1,12 +1,12 @@
package com.raoulvdberge.refinedstorage.container; package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.RSContainers; 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.minecraft.entity.player.PlayerEntity;
import net.minecraftforge.items.SlotItemHandler; import net.minecraftforge.items.SlotItemHandler;
public class NetworkTransmitterContainer extends BaseContainer { 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); super(RSContainers.NETWORK_TRANSMITTER, networkTransmitter, player, windowId);
addSlot(new SlotItemHandler(networkTransmitter.getNode().getNetworkCard(), 0, 8, 20)); addSlot(new SlotItemHandler(networkTransmitter.getNode().getNetworkCard(), 0, 8, 20));

View File

@@ -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<NetworkTransmitterContainer> {
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"));
}
}

View File

@@ -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<NetworkTransmitterContainer> {
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<ResourceLocation> 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"));
}
}

View File

@@ -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<NetworkTransmitterNetworkNode> {
public static final TileDataParameter<Integer, NetworkTransmitterTile> DISTANCE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getDistance());
public static final TileDataParameter<Optional<ResourceLocation>, 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<IItemHandler> 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 <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction direction) {
if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return networkCardCapability.cast();
}
return super.getCapability(cap, direction);
}
}

View File

@@ -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<NetworkNodeNetworkTransmitter> {
public static final TileDataParameter<Integer, TileNetworkTransmitter> 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<Integer, TileNetworkTransmitter> 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> T getCapability(@Nonnull Capability<T> capability, @Nullable Direction facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(getNode().getNetworkCard());
}
return super.getCapability(capability, facing);
}*/
}

View File

@@ -6,10 +6,12 @@ import com.raoulvdberge.refinedstorage.util.AccessTypeUtils;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
import net.minecraft.network.datasync.DataParameter; import net.minecraft.network.datasync.DataParameter;
import net.minecraft.network.datasync.IDataSerializer; import net.minecraft.network.datasync.IDataSerializer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional;
public final class RSSerializers { public final class RSSerializers {
public static final IDataSerializer<List<ClientNode>> CLIENT_NODE_SERIALIZER = new IDataSerializer<List<ClientNode>>() { public static final IDataSerializer<List<ClientNode>> CLIENT_NODE_SERIALIZER = new IDataSerializer<List<ClientNode>>() {
@@ -113,4 +115,32 @@ public final class RSSerializers {
return value; return value;
} }
}; };
public static final IDataSerializer<Optional<ResourceLocation>> OPTIONAL_RESOURCE_LOCATION_SERIALIZER = new IDataSerializer<Optional<ResourceLocation>>() {
@Override
public void write(PacketBuffer buf, Optional<ResourceLocation> value) {
buf.writeBoolean(value.isPresent());
value.ifPresent(buf::writeResourceLocation);
}
@Override
public Optional<ResourceLocation> read(PacketBuffer buf) {
if (!buf.readBoolean()) {
return Optional.empty();
}
return Optional.of(buf.readResourceLocation());
}
@Override
public DataParameter<Optional<ResourceLocation>> createKey(int id) {
return null;
}
@Override
public Optional<ResourceLocation> copyValue(Optional<ResourceLocation> value) {
return value;
}
};
} }

View File

@@ -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": { "variants": {
"inventory": [ "connected=true": {
{ "model": "refinedstorage:block/network_transmitter_connected"
"transform": "forge:default-block" },
} "connected=false": {
], "model": "refinedstorage:block/network_transmitter_disconnected"
"connected": {
"true": {
"textures": {
"cutout": "refinedstorage:blocks/network_transmitter/cutouts/connected"
}
},
"false": {
}
} }
} }
} }

View File

@@ -47,10 +47,9 @@
"gui.refinedstorage.filter": "Filter", "gui.refinedstorage.filter": "Filter",
"gui.refinedstorage.filter.compare_nbt": "NBT", "gui.refinedstorage.filter.compare_nbt": "NBT",
"gui.refinedstorage.filter.mod_filter": "Mod filter", "gui.refinedstorage.filter.mod_filter": "Mod filter",
"gui.refinedstorage:network_transmitter": "Network Transmitter", "gui.refinedstorage.network_transmitter": "Network Transmitter",
"gui.refinedstorage:network_transmitter.distance": "%d block(s)", "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.missing_card": "Missing Network Card",
"gui.refinedstorage:fluid_interface": "Fluid Interface", "gui.refinedstorage:fluid_interface": "Fluid Interface",
"gui.refinedstorage:fluid_interface.in": "In", "gui.refinedstorage:fluid_interface.in": "In",
"gui.refinedstorage:fluid_interface.out": "Out", "gui.refinedstorage:fluid_interface.out": "Out",
@@ -202,7 +201,7 @@
"block.refinedstorage:wireless_transmitter.tooltip": "Must be placed on %s.", "block.refinedstorage:wireless_transmitter.tooltip": "Must be placed on %s.",
"block.refinedstorage:crafter": "Crafter", "block.refinedstorage:crafter": "Crafter",
"block.refinedstorage.network_receiver": "Network Receiver", "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:fluid_interface": "Fluid Interface",
"block.refinedstorage.64k_fluid_storage_block": "64k Fluid Storage Block", "block.refinedstorage.64k_fluid_storage_block": "64k Fluid Storage Block",
"block.refinedstorage.256k_fluid_storage_block": "256k Fluid Storage Block", "block.refinedstorage.256k_fluid_storage_block": "256k Fluid Storage Block",

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -0,0 +1,3 @@
{
"parent": "refinedstorage:block/network_transmitter_disconnected"
}

View File

@@ -0,0 +1,19 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "refinedstorage:network_transmitter"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View File

@@ -7,19 +7,19 @@
], ],
"key": { "key": {
"E": { "E": {
"item": "minecraft:ender_pearl" "tag": "forge:ender_pearls"
}, },
"C": { "C": {
"item": "#construction_core" "item": "refinedstorage:construction_core"
}, },
"M": { "M": {
"item": "refinedstorage:machine_casing" "item": "refinedstorage:machine_casing"
}, },
"D": { "D": {
"item": "#destruction_core" "item": "refinedstorage:destruction_core"
}, },
"A": { "A": {
"item": "#advanced_processor" "item": "refinedstorage:advanced_processor"
} }
}, },
"result": { "result": {