diff --git a/src/main/java/storagecraft/block/BlockBase.java b/src/main/java/storagecraft/block/BlockBase.java index bb92cbceb..d98641d62 100644 --- a/src/main/java/storagecraft/block/BlockBase.java +++ b/src/main/java/storagecraft/block/BlockBase.java @@ -1,8 +1,11 @@ package storagecraft.block; +import java.util.ArrayList; +import java.util.List; import net.minecraft.block.Block; import net.minecraft.block.BlockPistonBase; import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; @@ -18,6 +21,8 @@ public abstract class BlockBase extends Block { private String name; + protected List states = new ArrayList(); + public BlockBase(String name) { super(Material.rock); @@ -73,7 +78,7 @@ public abstract class BlockBase extends Block } @Override - public void onBlockDestroyedByPlayer(World world, BlockPos pos, IBlockState state) // @TODO: Make this work all + public void breakBlock(World world, BlockPos pos, IBlockState state) { TileEntity tile = world.getTileEntity(pos); @@ -82,6 +87,6 @@ public abstract class BlockBase extends Block InventoryUtils.dropInventory(world, ((TileBase) tile).getDroppedInventory(), pos.getX(), pos.getY(), pos.getZ()); } - super.onBlockDestroyedByPlayer(world, pos, state); + super.breakBlock(world, pos, state); } } diff --git a/src/main/java/storagecraft/block/BlockCable.java b/src/main/java/storagecraft/block/BlockCable.java index 126ba1499..10518dfb8 100644 --- a/src/main/java/storagecraft/block/BlockCable.java +++ b/src/main/java/storagecraft/block/BlockCable.java @@ -34,13 +34,13 @@ public class BlockCable extends BlockBase implements ITileEntityProvider @Override public IBlockState getStateFromMeta(int meta) { - return getDefaultState().withProperty(SENSITIVE, meta == 1 ? true : false); + return getDefaultState().withProperty(SENSITIVE, meta == 1); } @Override public int getMetaFromState(IBlockState state) { - return ((Boolean) state.getValue(SENSITIVE)) ? 0 : 1; + return ((Boolean) state.getValue(SENSITIVE)) ? 1 : 0; } @Override diff --git a/src/main/java/storagecraft/block/BlockController.java b/src/main/java/storagecraft/block/BlockController.java index 184bc9540..140fe6e58 100644 --- a/src/main/java/storagecraft/block/BlockController.java +++ b/src/main/java/storagecraft/block/BlockController.java @@ -62,11 +62,11 @@ public class BlockController extends BlockBase implements ITileEntityProvider } @Override - public void onBlockDestroyedByPlayer(World world, BlockPos pos, IBlockState state) // @TODO: What about explosions? + public void breakBlock(World world, BlockPos pos, IBlockState state) { ((TileController) world.getTileEntity(pos)).onDestroyed(); - super.onBlockDestroyedByPlayer(world, pos, state); + super.breakBlock(world, pos, state); } @Override diff --git a/src/main/java/storagecraft/block/BlockGrid.java b/src/main/java/storagecraft/block/BlockGrid.java index d185756d4..6331af8fe 100644 --- a/src/main/java/storagecraft/block/BlockGrid.java +++ b/src/main/java/storagecraft/block/BlockGrid.java @@ -1,17 +1,27 @@ package storagecraft.block; +import java.util.List; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import storagecraft.StorageCraft; import storagecraft.StorageCraftGUI; +import static storagecraft.block.BlockMachine.CONNECTED; import storagecraft.tile.TileGrid; public class BlockGrid extends BlockMachine { + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumGridType.class); + public BlockGrid() { super("grid"); @@ -23,6 +33,54 @@ public class BlockGrid extends BlockMachine return new TileGrid(); } + @Override + public void getSubBlocks(Item item, CreativeTabs tab, List subItems) + { + for (int i = 0; i < 2; i++) + { + subItems.add(new ItemStack(item, 1, i)); + } + } + + @Override + protected BlockState createBlockState() + { + return new BlockState(this, new IProperty[] + { + CONNECTED, + TYPE + }); + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + switch (meta) + { + case 0: + return getDefaultState().withProperty(CONNECTED, false).withProperty(TYPE, EnumGridType.NORMAL); + case 1: + return getDefaultState().withProperty(CONNECTED, false).withProperty(TYPE, EnumGridType.CRAFTING); + case 2: + return getDefaultState().withProperty(CONNECTED, true).withProperty(TYPE, EnumGridType.NORMAL); + case 3: + return getDefaultState().withProperty(CONNECTED, true).withProperty(TYPE, EnumGridType.CRAFTING); + } + + return null; + } + + @Override + public int getMetaFromState(IBlockState state) + { + if ((Boolean) state.getValue(CONNECTED)) + { + return state.getValue(TYPE) == EnumGridType.NORMAL ? 2 : 3; + } + + return state.getValue(TYPE) == EnumGridType.NORMAL ? 0 : 1; + } + @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) { diff --git a/src/main/java/storagecraft/block/BlockMachine.java b/src/main/java/storagecraft/block/BlockMachine.java index a944dee57..9aec46bfb 100644 --- a/src/main/java/storagecraft/block/BlockMachine.java +++ b/src/main/java/storagecraft/block/BlockMachine.java @@ -9,14 +9,14 @@ import net.minecraft.block.state.IBlockState; public abstract class BlockMachine extends BlockBase implements ITileEntityProvider { public static final PropertyBool CONNECTED = PropertyBool.create("connected"); - + public BlockMachine(String name) { super(name); - - this.setDefaultState(this.blockState.getBaseState().withProperty(CONNECTED, false)); + + setDefaultState(blockState.getBaseState().withProperty(CONNECTED, false)); } - + @Override protected BlockState createBlockState() { @@ -25,16 +25,16 @@ public abstract class BlockMachine extends BlockBase implements ITileEntityProvi CONNECTED }); } - + @Override public IBlockState getStateFromMeta(int meta) { - return getDefaultState().withProperty(CONNECTED, meta == 1 ? true : false); + return getDefaultState().withProperty(CONNECTED, meta == 1); } - + @Override public int getMetaFromState(IBlockState state) { - return ((Boolean) state.getValue(CONNECTED)) ? 0 : 1; + return ((Boolean) state.getValue(CONNECTED)) ? 1 : 0; } } diff --git a/src/main/java/storagecraft/block/EnumGridType.java b/src/main/java/storagecraft/block/EnumGridType.java new file mode 100644 index 000000000..3c3c4ec5d --- /dev/null +++ b/src/main/java/storagecraft/block/EnumGridType.java @@ -0,0 +1,36 @@ +package storagecraft.block; + +import net.minecraft.util.IStringSerializable; + +public enum EnumGridType implements IStringSerializable +{ + NORMAL(0, "normal"), + CRAFTING(1, "crafting"); + + private int id; + private String name; + + EnumGridType(int id, String name) + { + this.id = id; + this.name = name; + } + + @Override + public String getName() + { + return name; + } + + public int getId() + { + return id; + } + + @Override + public String toString() + { + return name; + } + +} diff --git a/src/main/java/storagecraft/container/ContainerGrid.java b/src/main/java/storagecraft/container/ContainerGrid.java index 1723cdc00..9c3671e7f 100644 --- a/src/main/java/storagecraft/container/ContainerGrid.java +++ b/src/main/java/storagecraft/container/ContainerGrid.java @@ -1,37 +1,38 @@ -package storagecraft.container; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Slot; -import storagecraft.container.slot.SlotGridCraftingResult; -import storagecraft.tile.TileGrid; - -public class ContainerGrid extends ContainerBase -{ - public ContainerGrid(EntityPlayer player, TileGrid grid) - { - super(player); - - addPlayerInventory(8, grid.isCrafting() ? 174 : 108); - - if (grid.isCrafting()) - { - int x = 25; - int y = 106; - - for (int i = 0; i < 9; ++i) - { - addSlotToContainer(new Slot(grid.getCraftingMatrix(), i, x, y)); - - x += 18; - - if ((i + 1) % 3 == 0) - { - y += 18; - x = 25; - } - } - - addSlotToContainer(new SlotGridCraftingResult(player, grid.getCraftingMatrix(), grid.getCraftingResult(), grid, 0, 137, 124)); - } - } -} +package storagecraft.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import storagecraft.block.EnumGridType; +import storagecraft.container.slot.SlotGridCraftingResult; +import storagecraft.tile.TileGrid; + +public class ContainerGrid extends ContainerBase +{ + public ContainerGrid(EntityPlayer player, TileGrid grid) + { + super(player); + + addPlayerInventory(8, grid.getType() == EnumGridType.CRAFTING ? 174 : 108); + + if (grid.getType() == EnumGridType.CRAFTING) + { + int x = 25; + int y = 106; + + for (int i = 0; i < 9; ++i) + { + addSlotToContainer(new Slot(grid.getCraftingMatrix(), i, x, y)); + + x += 18; + + if ((i + 1) % 3 == 0) + { + y += 18; + x = 25; + } + } + + addSlotToContainer(new SlotGridCraftingResult(player, grid.getCraftingMatrix(), grid.getCraftingResult(), grid, 0, 137, 124)); + } + } +} diff --git a/src/main/java/storagecraft/gui/GuiGrid.java b/src/main/java/storagecraft/gui/GuiGrid.java index 774b5f6a3..05b2201f9 100644 --- a/src/main/java/storagecraft/gui/GuiGrid.java +++ b/src/main/java/storagecraft/gui/GuiGrid.java @@ -12,6 +12,7 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import storagecraft.StorageCraft; +import storagecraft.block.EnumGridType; import storagecraft.container.ContainerGrid; import storagecraft.gui.sidebutton.SideButtonGridSortingDirection; import storagecraft.gui.sidebutton.SideButtonGridSortingType; @@ -46,7 +47,7 @@ public class GuiGrid extends GuiBase public GuiGrid(ContainerGrid container, TileGrid grid) { - super(container, 176, grid.isCrafting() ? 256 : 190); + super(container, 176, grid.getType() == EnumGridType.CRAFTING ? 256 : 190); this.container = container; this.grid = grid; @@ -126,7 +127,7 @@ public class GuiGrid extends GuiBase @Override public void drawBackground(int x, int y, int mouseX, int mouseY) { - if (grid.isCrafting()) + if (grid.getType() == EnumGridType.CRAFTING) { bindTexture("gui/craftingGrid.png"); } @@ -145,12 +146,12 @@ public class GuiGrid extends GuiBase { drawString(7, 7, t("gui.storagecraft:grid")); - if (grid.isCrafting()) + if (grid.getType() == EnumGridType.CRAFTING) { drawString(7, 94, t("container.crafting")); } - drawString(7, grid.isCrafting() ? 163 : 96, t("container.inventory")); + drawString(7, grid.getType() == EnumGridType.CRAFTING ? 163 : 96, t("container.inventory")); int x = 8; int y = 20; @@ -202,7 +203,7 @@ public class GuiGrid extends GuiBase drawTooltip(mouseX, mouseY, items.get(hoveringSlotId).toItemStack()); } - if (grid.isCrafting() && isHoveringOverClear(mouseX, mouseY)) + if (grid.getType() == EnumGridType.CRAFTING && isHoveringOverClear(mouseX, mouseY)) { drawTooltip(mouseX, mouseY, t("misc.storagecraft:clear")); } @@ -284,7 +285,7 @@ public class GuiGrid extends GuiBase { super.mouseClicked(mouseX, mouseY, clickedButton); - boolean clickedClear = grid.isCrafting() && clickedButton == 0 && isHoveringOverClear(mouseX - guiLeft, mouseY - guiTop); + boolean clickedClear = grid.getType() == EnumGridType.CRAFTING && clickedButton == 0 && isHoveringOverClear(mouseX - guiLeft, mouseY - guiTop); if (grid.isConnected()) { diff --git a/src/main/java/storagecraft/item/ItemBlockBase.java b/src/main/java/storagecraft/item/ItemBlockBase.java index 8a5bc1e29..5ecd34873 100644 --- a/src/main/java/storagecraft/item/ItemBlockBase.java +++ b/src/main/java/storagecraft/item/ItemBlockBase.java @@ -1,16 +1,14 @@ package storagecraft.item; import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemColored; import net.minecraft.item.ItemStack; -public abstract class ItemBlockBase extends ItemBlock +public abstract class ItemBlockBase extends ItemColored { public ItemBlockBase(Block block) { - super(block); - - setHasSubtypes(true); + super(block, true); } @Override diff --git a/src/main/java/storagecraft/item/ItemWirelessGrid.java b/src/main/java/storagecraft/item/ItemWirelessGrid.java index d9d84d4cb..9b1459f0d 100644 --- a/src/main/java/storagecraft/item/ItemWirelessGrid.java +++ b/src/main/java/storagecraft/item/ItemWirelessGrid.java @@ -12,6 +12,7 @@ import net.minecraft.util.StatCollector; import net.minecraft.world.World; import storagecraft.StorageCraft; import storagecraft.StorageCraftGUI; +import storagecraft.block.EnumGridType; import storagecraft.tile.TileGrid; import storagecraft.tile.TileWirelessTransmitter; @@ -69,7 +70,7 @@ public class ItemWirelessGrid extends ItemBase if (wirelessTransmitter.isWorking()) { - TileGrid grid = wirelessTransmitter.getGrid(stack.getItemDamage()); + TileGrid grid = wirelessTransmitter.getGrid(stack.getItemDamage() == 1 ? EnumGridType.CRAFTING : EnumGridType.NORMAL); if (grid == null) { diff --git a/src/main/java/storagecraft/tile/RedstoneMode.java b/src/main/java/storagecraft/tile/RedstoneMode.java index 44c71b267..46fe48dff 100644 --- a/src/main/java/storagecraft/tile/RedstoneMode.java +++ b/src/main/java/storagecraft/tile/RedstoneMode.java @@ -8,28 +8,28 @@ public enum RedstoneMode IGNORE(0), HIGH(1), LOW(2); - + public static final String NBT = "RedstoneMode"; - + public final int id; - + RedstoneMode(int id) { this.id = id; } - + public RedstoneMode next() { RedstoneMode next = getById(id + 1); - + if (next == null) { return getById(0); } - + return next; } - + public boolean isEnabled(World world, BlockPos pos) { switch (this) @@ -37,14 +37,14 @@ public enum RedstoneMode case IGNORE: return true; case HIGH: - return true; // @TODO: ... + return world.isBlockPowered(pos); case LOW: - return true; + return !world.isBlockPowered(pos); } - + return false; } - + public static RedstoneMode getById(int id) { for (RedstoneMode control : values()) @@ -54,7 +54,7 @@ public enum RedstoneMode return control; } } - + return null; } } diff --git a/src/main/java/storagecraft/tile/TileBase.java b/src/main/java/storagecraft/tile/TileBase.java index 8210cbf15..45c095268 100644 --- a/src/main/java/storagecraft/tile/TileBase.java +++ b/src/main/java/storagecraft/tile/TileBase.java @@ -84,7 +84,7 @@ public abstract class TileBase extends TileEntity implements IUpdatePlayerListBo @Override public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newState) { - return false; + return oldState.getBlock() != newState.getBlock(); } public IInventory getDroppedInventory() diff --git a/src/main/java/storagecraft/tile/TileCable.java b/src/main/java/storagecraft/tile/TileCable.java index 47f882e2e..161ab7be7 100644 --- a/src/main/java/storagecraft/tile/TileCable.java +++ b/src/main/java/storagecraft/tile/TileCable.java @@ -28,14 +28,12 @@ public class TileCable extends TileBase public boolean isPowered() { - // @TODO: return worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord); - return false; + return worldObj.isBlockPowered(pos); } public boolean isSensitiveCable() { - // @TODO: return worldObj.getBlockMetadata(xCoord, yCoord, zCoord) == 1; - return false; + return (Boolean) worldObj.getBlockState(pos).getValue(BlockCable.SENSITIVE); } public boolean isEnabled() diff --git a/src/main/java/storagecraft/tile/TileGrid.java b/src/main/java/storagecraft/tile/TileGrid.java index 1885b3aaa..ebd5fc6a6 100644 --- a/src/main/java/storagecraft/tile/TileGrid.java +++ b/src/main/java/storagecraft/tile/TileGrid.java @@ -7,6 +7,8 @@ import net.minecraft.item.crafting.CraftingManager; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint; import storagecraft.StorageCraft; +import storagecraft.block.BlockGrid; +import storagecraft.block.EnumGridType; import storagecraft.container.ContainerGridCrafting; import storagecraft.inventory.InventorySimple; import storagecraft.network.MessageGridCraftingUpdate; @@ -30,14 +32,9 @@ public class TileGrid extends TileMachine { } - public int getType() + public EnumGridType getType() { - return 0; // @TODO: Make other grid work too - } - - public boolean isCrafting() - { - return getType() == 1; + return (EnumGridType) worldObj.getBlockState(pos).getValue(BlockGrid.TYPE); } public InventoryCrafting getCraftingMatrix() diff --git a/src/main/java/storagecraft/tile/TileWirelessTransmitter.java b/src/main/java/storagecraft/tile/TileWirelessTransmitter.java index 4102c08c3..7e58bccc1 100644 --- a/src/main/java/storagecraft/tile/TileWirelessTransmitter.java +++ b/src/main/java/storagecraft/tile/TileWirelessTransmitter.java @@ -6,6 +6,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IChatComponent; +import storagecraft.block.EnumGridType; import storagecraft.inventory.InventorySimple; import storagecraft.item.ItemWirelessGrid; import storagecraft.util.InventoryUtils; @@ -87,7 +88,7 @@ public class TileWirelessTransmitter extends TileMachine implements IInventory return progress; } - public TileGrid getGrid(int type) + public TileGrid getGrid(EnumGridType type) { for (TileMachine machine : getController().getMachines()) {