diff --git a/src/main/java/storagecraft/block/BlockController.java b/src/main/java/storagecraft/block/BlockController.java index 56933fa0c..2bec9c71c 100644 --- a/src/main/java/storagecraft/block/BlockController.java +++ b/src/main/java/storagecraft/block/BlockController.java @@ -1,13 +1,19 @@ 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.SC; import storagecraft.tile.TileController; public class BlockController extends BlockSC implements ITileEntityProvider { + private IIcon sideIcon; + private IIcon[] icons = new IIcon[6]; + public BlockController() { super("controller"); } @@ -32,4 +38,33 @@ public class BlockController extends BlockSC implements ITileEntityProvider { super.onBlockPreDestroy(world, x, y, z, meta); } + + @Override + public void registerBlockIcons(IIconRegister register) { + for (int i = 0; i <= 5; ++i) { + icons[i] = register.registerIcon("storagecraft:controller" + i); + } + + sideIcon = register.registerIcon("storagecraft:generic"); + } + + @Override + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + if (side == 0 || side == 1) { + return sideIcon; + } + + TileController controller = (TileController) world.getTileEntity(x, y, z); + + return icons[(int) ((float) controller.getEnergyStored(null) / (float) controller.getMaxEnergyStored(null) * 5f)]; + } + + @Override + public IIcon getIcon(int side, int meta) { + if (side == 0 || side == 1) { + return sideIcon; + } + + return icons[0]; + } } diff --git a/src/main/java/storagecraft/block/BlockGrid.java b/src/main/java/storagecraft/block/BlockGrid.java index d82fcb38a..ba482f378 100644 --- a/src/main/java/storagecraft/block/BlockGrid.java +++ b/src/main/java/storagecraft/block/BlockGrid.java @@ -1,11 +1,18 @@ package storagecraft.block; import net.minecraft.block.ITileEntityProvider; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import storagecraft.tile.TileGrid; +import storagecraft.tile.TileSC; public class BlockGrid extends BlockSC implements ITileEntityProvider { + private IIcon sideIcon; + private IIcon icon; + public BlockGrid() { super("grid"); } @@ -14,4 +21,30 @@ public class BlockGrid extends BlockSC implements ITileEntityProvider { public TileEntity createNewTileEntity(World world, int meta) { return new TileGrid(); } + + @Override + public void registerBlockIcons(IIconRegister register) { + icon = register.registerIcon("storagecraft:grid"); + sideIcon = register.registerIcon("storagecraft:generic"); + } + + @Override + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + TileSC tile = (TileSC) world.getTileEntity(x, y, z); + + if (side == tile.getDirection().getOpposite().ordinal()) { + return icon; + } + + return sideIcon; + } + + @Override + public IIcon getIcon(int side, int meta) { + if (side == 3) { + return icon; + } + + return sideIcon; + } } diff --git a/src/main/java/storagecraft/block/BlockSC.java b/src/main/java/storagecraft/block/BlockSC.java index 5d36b0110..d26f4eab4 100644 --- a/src/main/java/storagecraft/block/BlockSC.java +++ b/src/main/java/storagecraft/block/BlockSC.java @@ -2,7 +2,13 @@ package storagecraft.block; import net.minecraft.block.Block; import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; import storagecraft.SC; +import storagecraft.tile.TileSC; public class BlockSC extends Block { private String name; @@ -12,11 +18,40 @@ public class BlockSC extends Block { this.name = name; - this.setCreativeTab(SC.TAB); + setCreativeTab(SC.TAB); + setBlockTextureName("storagecraft:" + name); } @Override public String getUnlocalizedName() { return "block." + SC.ID + ":" + name; } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityLiving, ItemStack itemStack) { + super.onBlockPlacedBy(world, x, y, z, entityLiving, itemStack); + + if (world.getTileEntity(x, y, z) instanceof TileSC) { + ForgeDirection direction = ForgeDirection.UNKNOWN; + + int facing = MathHelper.floor_double(entityLiving.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + + switch (facing) { + case 0: + direction = ForgeDirection.SOUTH; + break; + case 1: + direction = ForgeDirection.WEST; + break; + case 2: + direction = ForgeDirection.NORTH; + break; + case 3: + direction = ForgeDirection.EAST; + break; + } + + ((TileSC) world.getTileEntity(x, y, z)).setDirection(direction); + } + } } diff --git a/src/main/java/storagecraft/gui/GuiController.java b/src/main/java/storagecraft/gui/GuiController.java index baa8e11a7..7808be884 100644 --- a/src/main/java/storagecraft/gui/GuiController.java +++ b/src/main/java/storagecraft/gui/GuiController.java @@ -34,7 +34,7 @@ public class GuiController extends GuiContainer { drawTexturedModalRect(x, y, 0, 0, xSize, ySize); int barWidth = 16; - int barHeight = 59; + int barHeight = 58; int barX = x + 17; int barY = y + 25; diff --git a/src/main/java/storagecraft/tile/TileController.java b/src/main/java/storagecraft/tile/TileController.java index 6dc8390ad..b03890b9e 100644 --- a/src/main/java/storagecraft/tile/TileController.java +++ b/src/main/java/storagecraft/tile/TileController.java @@ -61,6 +61,8 @@ public class TileController extends TileSC implements IEnergyHandler, INetworkTi } storage.extractEnergy(energyUsage, false); + } else { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); } } diff --git a/src/main/java/storagecraft/tile/TileSC.java b/src/main/java/storagecraft/tile/TileSC.java index 459f8ae09..3cf137bef 100644 --- a/src/main/java/storagecraft/tile/TileSC.java +++ b/src/main/java/storagecraft/tile/TileSC.java @@ -1,13 +1,20 @@ package storagecraft.tile; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; import storagecraft.SC; import storagecraft.network.MessageTileUpdate; public class TileSC extends TileEntity { public static final int UPDATE_RANGE = 64; + private ForgeDirection direction; + @Override public void updateEntity() { super.updateEntity(); @@ -20,4 +27,40 @@ public class TileSC extends TileEntity { } } } + + public void setDirection(ForgeDirection direction) { + this.direction = direction; + } + + public ForgeDirection getDirection() { + return direction; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + direction = ForgeDirection.getOrientation(nbt.getInteger("Direction")); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setInteger("Direction", direction.ordinal()); + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + + nbt.setInteger("Direction", direction.ordinal()); + + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) { + direction = ForgeDirection.getOrientation(packet.func_148857_g().getInteger("Direction")); + } } diff --git a/src/main/resources/assets/storagecraft/textures/blocks/cable.png b/src/main/resources/assets/storagecraft/textures/blocks/cable.png index b9411ce06..eb2fc313a 100644 Binary files a/src/main/resources/assets/storagecraft/textures/blocks/cable.png and b/src/main/resources/assets/storagecraft/textures/blocks/cable.png differ diff --git a/src/main/resources/assets/storagecraft/textures/blocks/controller0.png b/src/main/resources/assets/storagecraft/textures/blocks/controller0.png new file mode 100644 index 000000000..8621e8954 Binary files /dev/null and b/src/main/resources/assets/storagecraft/textures/blocks/controller0.png differ diff --git a/src/main/resources/assets/storagecraft/textures/blocks/controller1.png b/src/main/resources/assets/storagecraft/textures/blocks/controller1.png new file mode 100644 index 000000000..8460387be Binary files /dev/null and b/src/main/resources/assets/storagecraft/textures/blocks/controller1.png differ diff --git a/src/main/resources/assets/storagecraft/textures/blocks/controller2.png b/src/main/resources/assets/storagecraft/textures/blocks/controller2.png new file mode 100644 index 000000000..52bcff594 Binary files /dev/null and b/src/main/resources/assets/storagecraft/textures/blocks/controller2.png differ diff --git a/src/main/resources/assets/storagecraft/textures/blocks/controller3.png b/src/main/resources/assets/storagecraft/textures/blocks/controller3.png new file mode 100644 index 000000000..572291cd7 Binary files /dev/null and b/src/main/resources/assets/storagecraft/textures/blocks/controller3.png differ diff --git a/src/main/resources/assets/storagecraft/textures/blocks/controller4.png b/src/main/resources/assets/storagecraft/textures/blocks/controller4.png new file mode 100644 index 000000000..4d390f27d Binary files /dev/null and b/src/main/resources/assets/storagecraft/textures/blocks/controller4.png differ diff --git a/src/main/resources/assets/storagecraft/textures/blocks/controller5.png b/src/main/resources/assets/storagecraft/textures/blocks/controller5.png new file mode 100644 index 000000000..e04b8e879 Binary files /dev/null and b/src/main/resources/assets/storagecraft/textures/blocks/controller5.png differ diff --git a/src/main/resources/assets/storagecraft/textures/blocks/generic.png b/src/main/resources/assets/storagecraft/textures/blocks/generic.png new file mode 100644 index 000000000..e7a20fa9d Binary files /dev/null and b/src/main/resources/assets/storagecraft/textures/blocks/generic.png differ diff --git a/src/main/resources/assets/storagecraft/textures/blocks/grid.png b/src/main/resources/assets/storagecraft/textures/blocks/grid.png new file mode 100644 index 000000000..12a2b38d1 Binary files /dev/null and b/src/main/resources/assets/storagecraft/textures/blocks/grid.png differ diff --git a/src/main/resources/assets/storagecraft/textures/gui/controller.png b/src/main/resources/assets/storagecraft/textures/gui/controller.png index 85b4b9ac7..96810b8fe 100644 Binary files a/src/main/resources/assets/storagecraft/textures/gui/controller.png and b/src/main/resources/assets/storagecraft/textures/gui/controller.png differ