Implement network transmitter GUI and network card logic

This commit is contained in:
Raoul Van den Berge
2016-07-30 22:51:18 +02:00
parent b814273b11
commit ae80ef0fbb
10 changed files with 253 additions and 6 deletions

View File

@@ -19,4 +19,5 @@ public final class RefinedStorageGui {
public static final int CRAFTER = 15;
public static final int PROCESSING_PATTERN_ENCODER = 16;
public static final int GRID_FILTER = 17;
public static final int NETWORK_TRANSMITTER = 18;
}

View File

@@ -5,7 +5,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import refinedstorage.tile.TileNetworkReceiver;
public class BlockNetworkReceiver extends BlockBase {
public class BlockNetworkReceiver extends BlockNode {
public BlockNetworkReceiver() {
super("network_receiver");
}

View File

@@ -1,8 +1,15 @@
package refinedstorage.block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageGui;
import refinedstorage.tile.TileNetworkTransmitter;
public class BlockNetworkTransmitter extends BlockNode {
@@ -10,6 +17,15 @@ public class BlockNetworkTransmitter extends BlockNode {
super("network_transmitter");
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) {
if (!world.isRemote) {
player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.NETWORK_TRANSMITTER, world, pos.getX(), pos.getY(), pos.getZ());
}
return true;
}
@Override
public TileEntity createTileEntity(World world, IBlockState state) {
return new TileNetworkTransmitter();

View File

@@ -0,0 +1,16 @@
package refinedstorage.container;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.items.SlotItemHandler;
import refinedstorage.tile.TileNetworkTransmitter;
public class ContainerNetworkTransmitter extends ContainerBase {
public ContainerNetworkTransmitter(EntityPlayer player, TileNetworkTransmitter networkTransmitter) {
super(player);
addSlotToContainer(new SlotItemHandler(networkTransmitter.getNetworkCard(), 0, 8, 20));
addSlotToContainer(new SlotItemHandler(networkTransmitter.getUpgrade(), 0, 187, 6));
addPlayerInventory(8, 55);
}
}

View File

@@ -50,6 +50,8 @@ public class GuiHandler implements IGuiHandler {
return new ContainerCrafter(player, (TileCrafter) tile);
case RefinedStorageGui.PROCESSING_PATTERN_ENCODER:
return new ContainerProcessingPatternEncoder(player, (TileProcessingPatternEncoder) tile);
case RefinedStorageGui.NETWORK_TRANSMITTER:
return new ContainerNetworkTransmitter(player, (TileNetworkTransmitter) tile);
default:
return null;
}
@@ -107,6 +109,8 @@ public class GuiHandler implements IGuiHandler {
return new GuiProcessingPatternEncoder((ContainerProcessingPatternEncoder) getContainer(ID, player, tile), (TileProcessingPatternEncoder) tile);
case RefinedStorageGui.GRID_FILTER:
return new GuiGridFilter(getGridFilterContainer(player, x));
case RefinedStorageGui.NETWORK_TRANSMITTER:
return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile);
default:
return null;
}

View File

@@ -0,0 +1,47 @@
package refinedstorage.gui;
import refinedstorage.container.ContainerNetworkTransmitter;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.tile.TileNetworkTransmitter;
public class GuiNetworkTransmitter extends GuiBase {
private TileNetworkTransmitter networkTransmitter;
public GuiNetworkTransmitter(ContainerNetworkTransmitter container, TileNetworkTransmitter networkTransmitter) {
super(container, 211, 137);
this.networkTransmitter = networkTransmitter;
}
@Override
public void init(int x, int y) {
addSideButton(new SideButtonRedstoneMode(networkTransmitter));
}
@Override
public void update(int x, int y) {
}
@Override
public void drawBackground(int x, int y, int mouseX, int mouseY) {
bindTexture("gui/network_transmitter.png");
drawTexture(x, y, 0, 0, width, height);
}
@Override
public void drawForeground(int mouseX, int mouseY) {
drawString(7, 7, t("gui.refinedstorage:network_transmitter"));
String distance;
if (networkTransmitter.getReceiver() == null) {
distance = t("gui.refinedstorage:network_transmitter.distance_missing");
} else {
distance = t("gui.refinedstorage:network_transmitter.distance", networkTransmitter.getDistance());
}
drawString(50, 24, distance);
drawString(7, 42, t("container.inventory"));
}
}

View File

@@ -1,7 +1,69 @@
package refinedstorage.item;
import net.minecraft.block.Block;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import refinedstorage.RefinedStorageBlocks;
import java.util.List;
public class ItemNetworkCard extends ItemBase {
private static final String NBT_RECEIVER_X = "ReceiverX";
private static final String NBT_RECEIVER_Y = "ReceiverY";
private static final String NBT_RECEIVER_Z = "ReceiverZ";
public ItemNetworkCard() {
super("network_card");
}
@Override
public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
Block block = world.getBlockState(pos).getBlock();
if (block == RefinedStorageBlocks.NETWORK_RECEIVER) {
setReceiver(stack, pos);
return EnumActionResult.SUCCESS;
}
return EnumActionResult.PASS;
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced) {
super.addInformation(stack, player, tooltip, advanced);
BlockPos pos = getReceiver(stack);
if (pos != null) {
tooltip.add(I18n.format("misc.refinedstorage:network_card.tooltip.0", pos.getX()));
tooltip.add(I18n.format("misc.refinedstorage:network_card.tooltip.1", pos.getY()));
tooltip.add(I18n.format("misc.refinedstorage:network_card.tooltip.2", pos.getZ()));
}
}
public static BlockPos getReceiver(ItemStack stack) {
if (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_RECEIVER_X) && stack.getTagCompound().hasKey(NBT_RECEIVER_Y) && stack.getTagCompound().hasKey(NBT_RECEIVER_Z)) {
return new BlockPos(stack.getTagCompound().getInteger(NBT_RECEIVER_X), stack.getTagCompound().getInteger(NBT_RECEIVER_Y), stack.getTagCompound().getInteger(NBT_RECEIVER_Z));
}
return null;
}
public static void setReceiver(ItemStack stack, BlockPos pos) {
NBTTagCompound tag = new NBTTagCompound();
tag.setInteger(NBT_RECEIVER_X, pos.getX());
tag.setInteger(NBT_RECEIVER_Y, pos.getY());
tag.setInteger(NBT_RECEIVER_Z, pos.getZ());
stack.setTagCompound(tag);
}
}

View File

@@ -1,12 +1,79 @@
package refinedstorage.tile;
import io.netty.buffer.ByteBuf;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.math.BlockPos;
import refinedstorage.RefinedStorageItems;
import refinedstorage.container.ContainerNetworkTransmitter;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemValidatorBasic;
import refinedstorage.item.ItemNetworkCard;
public class TileNetworkTransmitter extends TileNode {
private ItemHandlerBasic networkCard = new ItemHandlerBasic(1, this, new ItemValidatorBasic(RefinedStorageItems.NETWORK_CARD)) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
ItemStack card = getStackInSlot(slot);
if (card == null) {
receiver = null;
} else {
receiver = ItemNetworkCard.getReceiver(card);
}
}
};
private ItemHandlerBasic upgrade = new ItemHandlerBasic(1, this);
private BlockPos receiver;
@Override
public void updateNode() {
}
@Override
public NBTTagCompound write(NBTTagCompound tag) {
super.write(tag);
writeItems(networkCard, 0, tag);
writeItems(upgrade, 1, tag);
return tag;
}
@Override
public void read(NBTTagCompound tag) {
super.read(tag);
readItems(networkCard, 0, tag);
readItems(upgrade, 1, tag);
}
@Override
public void writeContainerData(ByteBuf buf) {
super.writeContainerData(buf);
buf.writeBoolean(receiver != null);
if (receiver != null) {
buf.writeLong(receiver.toLong());
}
}
@Override
public void readContainerData(ByteBuf buf) {
super.readContainerData(buf);
if (buf.readBoolean()) {
receiver = BlockPos.fromLong(buf.readLong());
} else {
receiver = null;
}
}
@Override
public int getEnergyUsage() {
return 0;
@@ -14,6 +81,26 @@ public class TileNetworkTransmitter extends TileNode {
@Override
public Class<? extends Container> getContainer() {
return null;
return ContainerNetworkTransmitter.class;
}
public ItemHandlerBasic getUpgrade() {
return upgrade;
}
public ItemHandlerBasic getNetworkCard() {
return networkCard;
}
public BlockPos getReceiver() {
return receiver;
}
public int getDistance() {
if (receiver == null) {
return 0;
}
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));
}
}

View File

@@ -31,6 +31,9 @@ gui.refinedstorage:crafter.processing=Processing
gui.refinedstorage:processing_pattern_encoder=Processing Pattern Encoder
gui.refinedstorage:processing_pattern_encoder.pattern_create=Create Pattern
gui.refinedstorage:grid_filter=Grid Filter
gui.refinedstorage:network_transmitter=Network Transmitter
gui.refinedstorage:network_transmitter.distance=%d blocks
gui.refinedstorage:network_transmitter.distance_missing=Missing Network Card
misc.refinedstorage:energy_stored=%d / %d RS
misc.refinedstorage:energy_usage=Usage: %d RS/t
@@ -48,6 +51,10 @@ misc.refinedstorage:wireless_grid.tooltip.2=Z: %d
misc.refinedstorage:wireless_grid.out_of_range=There is no Wireless Transmitter in range.
misc.refinedstorage:wireless_grid.not_found=Controller not found.
misc.refinedstorage:network_card.tooltip.0=X: %d
misc.refinedstorage:network_card.tooltip.1=Y: %d
misc.refinedstorage:network_card.tooltip.2=Z: %d
misc.refinedstorage:pattern.inputs=Inputs
misc.refinedstorage:pattern.outputs=Outputs
@@ -115,8 +122,8 @@ block.refinedstorage:crafting_monitor.name=Crafting Monitor
block.refinedstorage:wireless_transmitter.name=Wireless Transmitter
block.refinedstorage:crafter.name=Crafter
block.refinedstorage:processing_pattern_encoder.name=Processing Pattern Encoder
block.refinedstorage:network_receiver.name=Wireless Receiver
block.refinedstorage:network_transmitter.name=Wireless Transmitter
block.refinedstorage:network_receiver.name=Network Receiver
block.refinedstorage:network_transmitter.name=Network Transmitter
item.refinedstorage:storage_disk.0.name=1k Storage Disk
item.refinedstorage:storage_disk.1.name=4k Storage Disk

View File

@@ -31,6 +31,9 @@ gui.refinedstorage:crafter.processing=Verwerking
gui.refinedstorage:processing_pattern_encoder=Verwerkingspatroon Codeerder
gui.refinedstorage:processing_pattern_encoder.pattern_create=Patroon maken
gui.refinedstorage:grid_filter=Rooster Filter
gui.refinedstorage:network_transmitter=Netwerkzender
gui.refinedstorage:network_transmitter.distance=%d blokken
gui.refinedstorage:network_transmitter.distance_missing=Geen Netwerkkaart
misc.refinedstorage:energy_stored=%d / %d RS
misc.refinedstorage:energy_usage=Vebruik: %d RS/t
@@ -48,6 +51,10 @@ misc.refinedstorage:wireless_grid.tooltip.2=Z: %d
misc.refinedstorage:wireless_grid.out_of_range=Er is geen Draadloze Zender binnen bereik.
misc.refinedstorage:wireless_grid.not_found=Controller niet gevonden.
misc.refinedstorage:network_card.tooltip.0=X: %d
misc.refinedstorage:network_card.tooltip.1=Y: %d
misc.refinedstorage:network_card.tooltip.2=Z: %d
misc.refinedstorage:pattern.inputs=Inputs
misc.refinedstorage:pattern.outputs=Outputs
@@ -115,8 +122,8 @@ block.refinedstorage:crafting_monitor.name=Crafting Monitor
block.refinedstorage:wireless_transmitter.name=Draadloze Zender
block.refinedstorage:crafter.name=Crafter
block.refinedstorage:processing_pattern_encoder.name=Verwerkingspatroon Codeerder
block.refinedstorage:network_receiver.name=Draadloze Networkontvanger
block.refinedstorage:network_transmitter.name=Draadloze Netwerkzender
block.refinedstorage:network_receiver.name=Netwerkontvanger
block.refinedstorage:network_transmitter.name=Netwerkzender
item.refinedstorage:storage_disk.0.name=1k Opslagschijf
item.refinedstorage:storage_disk.1.name=4k Opslagschijf