diff --git a/src/main/java/storagecraft/StorageCraft.java b/src/main/java/storagecraft/StorageCraft.java index e50763db9..fdbc08876 100644 --- a/src/main/java/storagecraft/StorageCraft.java +++ b/src/main/java/storagecraft/StorageCraft.java @@ -30,6 +30,7 @@ public class StorageCraft public static final int SOLDERER = 7; public static final int WIRELESS_TRANSMITTER = 8; public static final int DESTRUCTOR = 9; + public static final int CONSTRUCTOR = 10; } public static final String ID = "storagecraft"; diff --git a/src/main/java/storagecraft/StorageCraftBlocks.java b/src/main/java/storagecraft/StorageCraftBlocks.java index 068c92c25..66104040a 100644 --- a/src/main/java/storagecraft/StorageCraftBlocks.java +++ b/src/main/java/storagecraft/StorageCraftBlocks.java @@ -1,6 +1,7 @@ package storagecraft; import storagecraft.block.BlockCable; +import storagecraft.block.BlockConstructor; import storagecraft.block.BlockController; import storagecraft.block.BlockDestructor; import storagecraft.block.BlockDetector; @@ -27,4 +28,5 @@ public class StorageCraftBlocks public static final BlockSolderer SOLDERER = new BlockSolderer(); public static final BlockWirelessTransmitter WIRELESS_TRANSMITTER = new BlockWirelessTransmitter(); public static final BlockDestructor DESTRUCTOR = new BlockDestructor(); + public static final BlockConstructor CONSTRUCTOR = new BlockConstructor(); } diff --git a/src/main/java/storagecraft/block/BlockConstructor.java b/src/main/java/storagecraft/block/BlockConstructor.java new file mode 100644 index 000000000..d4c3ab929 --- /dev/null +++ b/src/main/java/storagecraft/block/BlockConstructor.java @@ -0,0 +1,72 @@ +package storagecraft.block; + +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import storagecraft.StorageCraft; +import storagecraft.tile.TileConstructor; + +public class BlockConstructor extends BlockBase implements ITileEntityProvider +{ + private IIcon sideIcon; + private IIcon connectedIcon; + private IIcon disconnectedIcon; + + public BlockConstructor() + { + super("constructor"); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileConstructor(); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) + { + if (!world.isRemote) + { + player.openGui(StorageCraft.INSTANCE, StorageCraft.GUI.CONSTRUCTOR, world, x, y, z); + } + + return true; + } + + @Override + public void registerBlockIcons(IIconRegister register) + { + connectedIcon = register.registerIcon("storagecraft:constructorConnected"); + disconnectedIcon = register.registerIcon("storagecraft:constructorDisconnected"); + sideIcon = register.registerIcon("storagecraft:side"); + } + + @Override + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) + { + TileConstructor tile = (TileConstructor) world.getTileEntity(x, y, z); + + if (side == tile.getDirection().ordinal()) + { + return tile.isConnected() ? connectedIcon : disconnectedIcon; + } + + return sideIcon; + } + + @Override + public IIcon getIcon(int side, int damage) + { + if (side == 3) + { + return disconnectedIcon; + } + + return sideIcon; + } +} diff --git a/src/main/java/storagecraft/container/ContainerBase.java b/src/main/java/storagecraft/container/ContainerBase.java index a5bd69af3..abe52e947 100644 --- a/src/main/java/storagecraft/container/ContainerBase.java +++ b/src/main/java/storagecraft/container/ContainerBase.java @@ -61,13 +61,13 @@ public abstract class ContainerBase extends Container if (slot instanceof SlotSpecimen) { - if (clickedButton == 2) + if (clickedButton == 2 || player.inventory.getItemStack() == null) { slot.putStack(null); } - else + else if (slot.isItemValid(player.inventory.getItemStack())) { - slot.putStack(player.inventory.getItemStack() == null ? null : player.inventory.getItemStack().copy()); + slot.putStack(player.inventory.getItemStack().copy()); } return player.inventory.getItemStack(); diff --git a/src/main/java/storagecraft/container/ContainerConstructor.java b/src/main/java/storagecraft/container/ContainerConstructor.java new file mode 100644 index 000000000..2a4c51ca8 --- /dev/null +++ b/src/main/java/storagecraft/container/ContainerConstructor.java @@ -0,0 +1,34 @@ +package storagecraft.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import storagecraft.container.slot.SlotSpecimen; +import storagecraft.tile.TileConstructor; + +public class ContainerConstructor extends ContainerBase +{ + class SlotConstructor extends SlotSpecimen + { + public SlotConstructor(IInventory inventory, int id, int x, int y) + { + super(inventory, id, x, y); + } + + @Override + public boolean isItemValid(ItemStack stack) + { + return stack.getItem() instanceof ItemBlock; + } + } + + public ContainerConstructor(EntityPlayer player, TileConstructor constructor) + { + super(player); + + addSlotToContainer(new SlotConstructor(constructor, 0, 80, 20)); + + addPlayerInventory(8, 55); + } +} diff --git a/src/main/java/storagecraft/gui/GuiConstructor.java b/src/main/java/storagecraft/gui/GuiConstructor.java new file mode 100644 index 000000000..e3a128052 --- /dev/null +++ b/src/main/java/storagecraft/gui/GuiConstructor.java @@ -0,0 +1,48 @@ +package storagecraft.gui; + +import storagecraft.container.ContainerConstructor; +import storagecraft.gui.sidebutton.SideButtonCompare; +import storagecraft.gui.sidebutton.SideButtonRedstoneMode; +import storagecraft.tile.TileConstructor; +import storagecraft.util.InventoryUtils; + +public class GuiConstructor extends GuiBase +{ + private TileConstructor constructor; + + public GuiConstructor(ContainerConstructor container, TileConstructor constructor) + { + super(container, 176, 137); + + this.constructor = constructor; + } + + @Override + public void init(int x, int y) + { + addSideButton(new SideButtonRedstoneMode(constructor)); + + addSideButton(new SideButtonCompare(constructor, InventoryUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(constructor, InventoryUtils.COMPARE_NBT)); + } + + @Override + public void update(int x, int y) + { + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) + { + bindTexture("gui/constructor.png"); + + drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + } + + @Override + public void drawForeground(int mouseX, int mouseY) + { + drawString(7, 7, t("gui.storagecraft:constructor")); + drawString(7, 43, t("container.inventory")); + } +} diff --git a/src/main/java/storagecraft/gui/GuiHandler.java b/src/main/java/storagecraft/gui/GuiHandler.java index ef9ec09ed..3f7c59f2e 100644 --- a/src/main/java/storagecraft/gui/GuiHandler.java +++ b/src/main/java/storagecraft/gui/GuiHandler.java @@ -6,6 +6,7 @@ import net.minecraft.inventory.Container; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import storagecraft.StorageCraft; +import storagecraft.container.ContainerConstructor; import storagecraft.container.ContainerController; import storagecraft.container.ContainerDestructor; import storagecraft.container.ContainerDetector; @@ -16,6 +17,7 @@ import storagecraft.container.ContainerImporter; import storagecraft.container.ContainerSolderer; import storagecraft.container.ContainerExternalStorage; import storagecraft.container.ContainerWirelessTransmitter; +import storagecraft.tile.TileConstructor; import storagecraft.tile.TileController; import storagecraft.tile.TileDestructor; import storagecraft.tile.TileDetector; @@ -53,6 +55,8 @@ public class GuiHandler implements IGuiHandler return new ContainerWirelessTransmitter(player, (TileWirelessTransmitter) tile); case StorageCraft.GUI.DESTRUCTOR: return new ContainerDestructor(player); + case StorageCraft.GUI.CONSTRUCTOR: + return new ContainerConstructor(player, (TileConstructor) tile); default: return null; } @@ -91,6 +95,8 @@ public class GuiHandler implements IGuiHandler return new GuiWirelessTransmitter((ContainerWirelessTransmitter) getContainer(ID, player, tile), (TileWirelessTransmitter) tile); case StorageCraft.GUI.DESTRUCTOR: return new GuiDestructor((ContainerDestructor) getContainer(ID, player, tile), (TileDestructor) tile); + case StorageCraft.GUI.CONSTRUCTOR: + return new GuiConstructor((ContainerConstructor) getContainer(ID, player, tile), (TileConstructor) tile); default: return null; } diff --git a/src/main/java/storagecraft/nei/CraftingHandlerSolderer.java b/src/main/java/storagecraft/nei/CraftingHandlerSolderer.java index 97b447351..e6b979b82 100644 --- a/src/main/java/storagecraft/nei/CraftingHandlerSolderer.java +++ b/src/main/java/storagecraft/nei/CraftingHandlerSolderer.java @@ -15,7 +15,7 @@ import storagecraft.tile.solderer.SoldererRegistry; public class CraftingHandlerSolderer extends TemplateRecipeHandler { - public class SoldererRecipe extends CachedRecipe + class SoldererRecipe extends CachedRecipe { private ArrayList ingredients = new ArrayList(); private PositionedStack result; diff --git a/src/main/java/storagecraft/proxy/CommonProxy.java b/src/main/java/storagecraft/proxy/CommonProxy.java index aeae67d4c..9777bdea3 100644 --- a/src/main/java/storagecraft/proxy/CommonProxy.java +++ b/src/main/java/storagecraft/proxy/CommonProxy.java @@ -30,6 +30,7 @@ import storagecraft.network.MessageStoragePull; import storagecraft.network.MessageStoragePush; import storagecraft.network.MessageTileUpdate; import storagecraft.tile.TileCable; +import storagecraft.tile.TileConstructor; import storagecraft.tile.TileController; import storagecraft.tile.TileDestructor; import storagecraft.tile.TileDetector; @@ -75,6 +76,7 @@ public class CommonProxy GameRegistry.registerTileEntity(TileSolderer.class, "solderer"); GameRegistry.registerTileEntity(TileWirelessTransmitter.class, "wirelessTransmitter"); GameRegistry.registerTileEntity(TileDestructor.class, "destructor"); + GameRegistry.registerTileEntity(TileConstructor.class, "constructor"); GameRegistry.registerBlock(StorageCraftBlocks.CONTROLLER, "controller"); GameRegistry.registerBlock(StorageCraftBlocks.CABLE, ItemBlockCable.class, "cable"); @@ -88,6 +90,7 @@ public class CommonProxy GameRegistry.registerBlock(StorageCraftBlocks.SOLDERER, "solderer"); GameRegistry.registerBlock(StorageCraftBlocks.WIRELESS_TRANSMITTER, "wirelessTransmitter"); GameRegistry.registerBlock(StorageCraftBlocks.DESTRUCTOR, "destructor"); + GameRegistry.registerBlock(StorageCraftBlocks.CONSTRUCTOR, "constructor"); GameRegistry.registerItem(StorageCraftItems.STORAGE_CELL, "storageCell"); GameRegistry.registerItem(StorageCraftItems.WIRELESS_GRID, "wirelessGrid"); @@ -141,7 +144,7 @@ public class CommonProxy new ItemStack(Items.quartz) ); - // Constroller + // Controller GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.CONTROLLER), "EDE", "SRS", @@ -259,6 +262,18 @@ public class CommonProxy 'I', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) ); + // Constructor + GameRegistry.addShapedRecipe(new ItemStack(StorageCraftBlocks.CONSTRUCTOR), + "ECE", + "RMR", + "EIE", + 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), + 'C', new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), + 'R', new ItemStack(Items.redstone), + 'M', new ItemStack(StorageCraftBlocks.MACHINE_CASING), + 'I', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) + ); + // Detector GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.DETECTOR), "ECE", diff --git a/src/main/java/storagecraft/tile/TileConstructor.java b/src/main/java/storagecraft/tile/TileConstructor.java new file mode 100644 index 000000000..f4c83f014 --- /dev/null +++ b/src/main/java/storagecraft/tile/TileConstructor.java @@ -0,0 +1,174 @@ +package storagecraft.tile; + +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import storagecraft.inventory.InventorySimple; +import storagecraft.util.InventoryUtils; + +public class TileConstructor extends TileMachine implements IInventory, ISidedInventory, ICompareSetting +{ + public static final String NBT_COMPARE = "Compare"; + + private InventorySimple inventory = new InventorySimple("constructor", 1); + + private int compare = 0; + + @Override + public int getEnergyUsage() + { + return 1; + } + + @Override + public void updateMachine() + { + // @TODO: ... + } + + @Override + public int getCompare() + { + return compare; + } + + @Override + public void setCompare(int compare) + { + this.compare = compare; + } + + @Override + public int getSizeInventory() + { + return inventory.getSizeInventory(); + } + + @Override + public ItemStack getStackInSlot(int slot) + { + return inventory.getStackInSlot(slot); + } + + @Override + public ItemStack decrStackSize(int slot, int amount) + { + return inventory.decrStackSize(slot, amount); + } + + @Override + public ItemStack getStackInSlotOnClosing(int slot) + { + return inventory.getStackInSlotOnClosing(slot); + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) + { + inventory.setInventorySlotContents(slot, stack); + } + + @Override + public String getInventoryName() + { + return inventory.getInventoryName(); + } + + @Override + public boolean hasCustomInventoryName() + { + return inventory.hasCustomInventoryName(); + } + + @Override + public int getInventoryStackLimit() + { + return inventory.getInventoryStackLimit(); + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) + { + return inventory.isUseableByPlayer(player); + } + + @Override + public void openInventory() + { + inventory.openInventory(); + } + + @Override + public void closeInventory() + { + inventory.closeInventory(); + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) + { + return inventory.isItemValidForSlot(slot, stack); + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) + { + return new int[] + { + }; + } + + @Override + public boolean canInsertItem(int slot, ItemStack stack, int side) + { + return false; + } + + @Override + public boolean canExtractItem(int slot, ItemStack stack, int side) + { + return false; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + if (nbt.hasKey(NBT_COMPARE)) + { + compare = nbt.getInteger(NBT_COMPARE); + } + + InventoryUtils.restoreInventory(this, nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + nbt.setInteger(NBT_COMPARE, compare); + + InventoryUtils.saveInventory(this, nbt); + } + + @Override + public void fromBytes(ByteBuf buf) + { + super.fromBytes(buf); + + compare = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) + { + super.toBytes(buf); + + buf.writeInt(compare); + } +} diff --git a/src/main/resources/assets/storagecraft/lang/en_US.lang b/src/main/resources/assets/storagecraft/lang/en_US.lang index 120aa343e..3c34c1f92 100644 --- a/src/main/resources/assets/storagecraft/lang/en_US.lang +++ b/src/main/resources/assets/storagecraft/lang/en_US.lang @@ -10,6 +10,7 @@ gui.storagecraft:detector=Detector gui.storagecraft:solderer=Solderer gui.storagecraft:wirelessTransmitter=Wireless Transmitter gui.storagecraft:destructor=Destructor +gui.storagecraft:constructor=Constructor misc.storagecraft:energyStored=%d / %d RF misc.storagecraft:energyUsage=Usage: %d RF/t @@ -69,6 +70,7 @@ block.storagecraft:machineCasing.name=Machine Casing block.storagecraft:solderer.name=Solderer block.storagecraft:wirelessTransmitter.name=Wireless Transmitter block.storagecraft:destructor.name=Destructor +block.storagecraft:constructor.name=Constructor item.storagecraft:storageCell.0.name=1k Storage Cell item.storagecraft:storageCell.1.name=4k Storage Cell diff --git a/src/main/resources/assets/storagecraft/textures/blocks/constructorConnected.png b/src/main/resources/assets/storagecraft/textures/blocks/constructorConnected.png new file mode 100644 index 000000000..99d628be6 Binary files /dev/null and b/src/main/resources/assets/storagecraft/textures/blocks/constructorConnected.png differ diff --git a/src/main/resources/assets/storagecraft/textures/blocks/constructorDisconnected.png b/src/main/resources/assets/storagecraft/textures/blocks/constructorDisconnected.png new file mode 100644 index 000000000..fffbf8eb7 Binary files /dev/null and b/src/main/resources/assets/storagecraft/textures/blocks/constructorDisconnected.png differ diff --git a/src/main/resources/assets/storagecraft/textures/gui/constructor.png b/src/main/resources/assets/storagecraft/textures/gui/constructor.png new file mode 100644 index 000000000..ed6758a12 Binary files /dev/null and b/src/main/resources/assets/storagecraft/textures/gui/constructor.png differ