diff --git a/block/crafting/BlockCraftingMonitor.java b/block/crafting/BlockCraftingMonitor.java new file mode 100644 index 000000000..f0e7d0869 --- /dev/null +++ b/block/crafting/BlockCraftingMonitor.java @@ -0,0 +1,17 @@ +package appeng.block.crafting; + +import java.util.EnumSet; + +import net.minecraft.block.material.Material; +import appeng.block.AEBaseBlock; +import appeng.core.features.AEFeature; + +public class BlockCraftingMonitor extends AEBaseBlock +{ + + public BlockCraftingMonitor() { + super( BlockCraftingMonitor.class, Material.iron ); + setfeature( EnumSet.of( AEFeature.Crafting ) ); + } + +} diff --git a/block/crafting/BlockCraftingStorage.java b/block/crafting/BlockCraftingStorage.java new file mode 100644 index 000000000..72c700838 --- /dev/null +++ b/block/crafting/BlockCraftingStorage.java @@ -0,0 +1,17 @@ +package appeng.block.crafting; + +import java.util.EnumSet; + +import net.minecraft.block.material.Material; +import appeng.block.AEBaseBlock; +import appeng.core.features.AEFeature; + +public class BlockCraftingStorage extends AEBaseBlock +{ + + public BlockCraftingStorage() { + super( BlockCraftingStorage.class, Material.iron ); + setfeature( EnumSet.of( AEFeature.Crafting ) ); + } + +} diff --git a/block/crafting/BlockMolecularAssembler.java b/block/crafting/BlockMolecularAssembler.java index 9348068b9..3b855ac21 100644 --- a/block/crafting/BlockMolecularAssembler.java +++ b/block/crafting/BlockMolecularAssembler.java @@ -3,8 +3,14 @@ package appeng.block.crafting; import java.util.EnumSet; import net.minecraft.block.material.Material; +import net.minecraft.world.IBlockAccess; import appeng.block.AEBaseBlock; +import appeng.client.render.BaseBlockRender; +import appeng.client.render.blocks.RenderQuartzGlass; import appeng.core.features.AEFeature; +import appeng.tile.crafting.TileMolecularAssembler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; public class BlockMolecularAssembler extends AEBaseBlock { @@ -12,6 +18,22 @@ public class BlockMolecularAssembler extends AEBaseBlock public BlockMolecularAssembler() { super( BlockMolecularAssembler.class, Material.iron ); setfeature( EnumSet.of( AEFeature.Crafting ) ); + setTileEntiy( TileMolecularAssembler.class ); + isOpaque = false; + lightOpacity = 1; + } + + @Override + @SideOnly(Side.CLIENT) + public Class getRenderer() + { + return RenderQuartzGlass.class; + } + + @Override + public boolean shouldSideBeRendered(IBlockAccess w, int x, int y, int z, int side) + { + return super.shouldSideBeRendered( w, x, y, z, side ); } } diff --git a/client/gui/implementations/GuiPatternTerm.java b/client/gui/implementations/GuiPatternTerm.java new file mode 100644 index 000000000..a57231ce1 --- /dev/null +++ b/client/gui/implementations/GuiPatternTerm.java @@ -0,0 +1,60 @@ +package appeng.client.gui.implementations; + +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.InventoryPlayer; +import appeng.api.config.ActionItems; +import appeng.api.config.Settings; +import appeng.api.storage.ITerminalHost; +import appeng.client.gui.widgets.GuiImgButton; +import appeng.container.implementations.ContainerPatternTerm; +import appeng.core.localization.GuiText; + +public class GuiPatternTerm extends GuiMEMonitorable +{ + + GuiImgButton clearBtn; + GuiImgButton substitutionsBtn; + + @Override + public void initGui() + { + super.initGui(); + buttonList.add( clearBtn = new GuiImgButton( this.guiLeft + 92, this.guiTop + this.ySize - 156, Settings.ACTIONS, ActionItems.CLOSE ) ); + buttonList.add( substitutionsBtn = new GuiImgButton( this.guiLeft + 92, this.guiTop + this.ySize - 156, Settings.ACTIONS, ActionItems.CLOSE ) ); + clearBtn.halfSize = true; + } + + @Override + protected void actionPerformed(GuiButton btn) + { + super.actionPerformed( btn ); + + if ( clearBtn == btn ) + { + + } + + if ( substitutionsBtn == btn ) + { + + } + } + + public GuiPatternTerm(InventoryPlayer inventoryPlayer, ITerminalHost te) { + super( inventoryPlayer, te, new ContainerPatternTerm( inventoryPlayer, te ) ); + reservedSpace = 73; + } + + protected String getBackground() + { + return "guis/pattern.png"; + } + + @Override + public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY) + { + super.drawFG( offsetX, offsetY, mouseX, mouseY ); + fontRendererObj.drawString( GuiText.PatternTerminal.getLocal(), 8, ySize - 96 + 1 - reservedSpace, 4210752 ); + } + +} diff --git a/container/implementations/ContainerPatternTerm.java b/container/implementations/ContainerPatternTerm.java new file mode 100644 index 000000000..142c99403 --- /dev/null +++ b/container/implementations/ContainerPatternTerm.java @@ -0,0 +1,54 @@ +package appeng.container.implementations; + +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import appeng.api.storage.ITerminalHost; +import appeng.container.slot.SlotFake; +import appeng.container.slot.SlotPatternTerm; +import appeng.parts.reporting.PartPatternTerminal; +import appeng.tile.inventory.AppEngInternalInventory; +import appeng.tile.inventory.IAEAppEngInventory; +import appeng.tile.inventory.InvOperation; + +public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEAppEngInventory +{ + + AppEngInternalInventory craftSlotInv = new AppEngInternalInventory( this, 1 ); + + SlotFake craftingSlots[] = new SlotFake[9]; + SlotFake outputSlots[] = new SlotFake[3]; + SlotPatternTerm craftSlot; + + PartPatternTerminal ct; + + public ContainerPatternTerm(InventoryPlayer ip, ITerminalHost montiorable) { + super( ip, montiorable, false ); + ct = (PartPatternTerminal) montiorable; + + IInventory crafting = ct.getInventoryByName( "crafting" ); + + for (int y = 0; y < 3; y++) + for (int x = 0; x < 3; x++) + addSlotToContainer( craftingSlots[x + y * 3] = new SlotFake( crafting, x + y * 3, 37 + x * 18, -72 + y * 18 ) ); + + for (int y = 0; y < 3; y++) + addSlotToContainer( outputSlots[y] = new SlotFake( crafting, y * 3, 37, -72 + y * 18 ) ); + + addSlotToContainer( craftSlot = new SlotPatternTerm( craftSlotInv, 0, 37, -72 ) ); + + bindPlayerInventory( ip, 0, 0 ); + } + + @Override + public void saveChanges() + { + + } + + @Override + public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removedStack, ItemStack newStack) + { + + } +} diff --git a/container/slot/SlotPatternTerm.java b/container/slot/SlotPatternTerm.java new file mode 100644 index 000000000..b6fa682f7 --- /dev/null +++ b/container/slot/SlotPatternTerm.java @@ -0,0 +1,25 @@ +package appeng.container.slot; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +public class SlotPatternTerm extends AppEngSlot +{ + + public SlotPatternTerm(IInventory inv, int idx, int x, int y) { + super( inv, idx, x, y ); + } + + @Override + public boolean canTakeStack(EntityPlayer par1EntityPlayer) + { + return false; + } + + @Override + public void onPickupFromSlot(EntityPlayer p, ItemStack is) + { + } + +} diff --git a/core/localization/GuiText.java b/core/localization/GuiText.java index b84f444a5..69a9a8139 100644 --- a/core/localization/GuiText.java +++ b/core/localization/GuiText.java @@ -26,7 +26,7 @@ public enum GuiText METunnel, ItemTunnel, RedstoneTunnel, MJTunnel, EUTunnel, FluidTunnel, StoredSize, - StoredPower, MaxPower, RequiredPower, Efficiency, CopyMode, CopyModeDesc; + StoredPower, MaxPower, RequiredPower, Efficiency, CopyMode, CopyModeDesc, PatternTerminal; String root; diff --git a/core/sync/GuiBridge.java b/core/sync/GuiBridge.java index 5d2eb4534..081eb2dd0 100644 --- a/core/sync/GuiBridge.java +++ b/core/sync/GuiBridge.java @@ -43,6 +43,7 @@ import appeng.container.implementations.ContainerMEMonitorable; import appeng.container.implementations.ContainerMEPortableCell; import appeng.container.implementations.ContainerNetworkStatus; import appeng.container.implementations.ContainerNetworkTool; +import appeng.container.implementations.ContainerPatternTerm; import appeng.container.implementations.ContainerPriority; import appeng.container.implementations.ContainerQNB; import appeng.container.implementations.ContainerQuartzKnife; @@ -62,6 +63,7 @@ import appeng.parts.automation.PartFormationPlane; import appeng.parts.automation.PartLevelEmitter; import appeng.parts.misc.PartStorageBus; import appeng.parts.reporting.PartCraftingTerminal; +import appeng.parts.reporting.PartPatternTerminal; import appeng.server.AccessType; import appeng.tile.grindstone.TileGrinder; import appeng.tile.misc.TileCellWorkbench; @@ -128,6 +130,8 @@ public enum GuiBridge implements IGuiHandler GUI_CRAFTING_TERMINAL(ContainerCraftingTerm.class, PartCraftingTerminal.class, false, SecurityPermissions.CRAFT), + GUI_PATTERN_TERMINAL(ContainerPatternTerm.class, PartPatternTerminal.class, false, SecurityPermissions.CRAFT), + // extends (Container/Gui) + Bus GUI_LEVELEMITTER(ContainerLevelEmitter.class, PartLevelEmitter.class, false, SecurityPermissions.BUILD), diff --git a/parts/reporting/PartPatternTerminal.java b/parts/reporting/PartPatternTerminal.java index 537494c53..ed7c33902 100644 --- a/parts/reporting/PartPatternTerminal.java +++ b/parts/reporting/PartPatternTerminal.java @@ -1,11 +1,43 @@ package appeng.parts.reporting; -import net.minecraft.item.ItemStack; -import appeng.client.texture.CableBusTextures; +import java.util.List; -public class PartPatternTerminal extends PartMonitor +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import appeng.client.texture.CableBusTextures; +import appeng.core.sync.GuiBridge; +import appeng.tile.inventory.AppEngInternalInventory; +import appeng.tile.inventory.IAEAppEngInventory; +import appeng.tile.inventory.InvOperation; + +public class PartPatternTerminal extends PartTerminal implements IAEAppEngInventory { + AppEngInternalInventory craftingGrid = new AppEngInternalInventory( this, 9 + 3 ); + + @Override + public void writeToNBT(NBTTagCompound data) + { + super.writeToNBT( data ); + craftingGrid.writeToNBT( data, "craftingGrid" ); + } + + @Override + public void readFromNBT(NBTTagCompound data) + { + super.readFromNBT( data ); + craftingGrid.readFromNBT( data, "craftingGrid" ); + } + + @Override + public void getDrops(List drops, boolean wrenched) + { + for (ItemStack is : craftingGrid) + if ( is != null ) + drops.add( is ); + } + public PartPatternTerminal(ItemStack is) { super( PartPatternTerminal.class, is ); frontBright = CableBusTextures.PartPatternTerm_Bright; @@ -14,4 +46,22 @@ public class PartPatternTerminal extends PartMonitor // frontSolid = CableBusTextures.PartPatternTerm_Solid; } + public GuiBridge getGui() + { + return GuiBridge.GUI_PATTERN_TERMINAL; + } + + @Override + public IInventory getInventoryByName(String name) + { + if ( name.equals( "crafting" ) ) + return craftingGrid; + return super.getInventoryByName( name ); + } + + @Override + public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removedStack, ItemStack newStack) + { + host.markForSave(); + } } diff --git a/tile/crafting/TileMolecularAssembler.java b/tile/crafting/TileMolecularAssembler.java new file mode 100644 index 000000000..753688287 --- /dev/null +++ b/tile/crafting/TileMolecularAssembler.java @@ -0,0 +1,100 @@ +package appeng.tile.crafting; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import appeng.api.util.AECableType; +import appeng.api.util.DimensionalCoord; +import appeng.tile.events.AETileEventHandler; +import appeng.tile.events.TileEventType; +import appeng.tile.grid.AENetworkInvTile; +import appeng.tile.inventory.AppEngInternalInventory; +import appeng.tile.inventory.IAEAppEngInventory; +import appeng.tile.inventory.InvOperation; + +public class TileMolecularAssembler extends AENetworkInvTile implements IAEAppEngInventory, ISidedInventory +{ + + final int[] sides = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + + boolean hasPattern = false; + AppEngInternalInventory inv = new AppEngInternalInventory( this, 9 + 2 ); + + private class TileMolecularAssemblerHandler extends AETileEventHandler + { + + public TileMolecularAssemblerHandler() { + super( TileEventType.WORLD_NBT ); + } + + @Override + public void writeToNBT(NBTTagCompound data) + { + + } + + @Override + public void readFromNBT(NBTTagCompound data) + { + + } + + }; + + public TileMolecularAssembler() { + addNewHandler( new TileMolecularAssemblerHandler() ); + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + if ( i >= 9 ) + return false; + + if ( hasPattern ) + { + + } + + return false; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemstack, int j) + { + return i == 9; + } + + @Override + public IInventory getInternalInventory() + { + return inv; + } + + @Override + public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removed, ItemStack added) + { + + } + + @Override + public int[] getAccessibleSlotsBySide(ForgeDirection whichSide) + { + return sides; + } + + @Override + public AECableType getCableConnectionType(ForgeDirection dir) + { + return AECableType.COVERED; + } + + @Override + public DimensionalCoord getLocation() + { + return new DimensionalCoord( this ); + } + +}