From 4cd0bfe33eb46fecb6fc3e3496fa9491265dfe31 Mon Sep 17 00:00:00 2001 From: Justin Aquadro Date: Sat, 25 Apr 2015 03:10:14 -0400 Subject: [PATCH] Most of the controller slave implementation. --- .../storagedrawers/block/BlockSlave.java | 72 +++++++ .../storagedrawers/block/tile/BlockCoord.java | 48 +++++ .../block/tile/TileEntityController.java | 39 +--- .../block/tile/TileEntitySlave.java | 183 ++++++++++++++++++ .../storagedrawers/config/ConfigManager.java | 3 + .../storagedrawers/core/ModBlocks.java | 12 +- 6 files changed, 320 insertions(+), 37 deletions(-) create mode 100644 src/com/jaquadro/minecraft/storagedrawers/block/BlockSlave.java create mode 100644 src/com/jaquadro/minecraft/storagedrawers/block/tile/BlockCoord.java create mode 100644 src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntitySlave.java diff --git a/src/com/jaquadro/minecraft/storagedrawers/block/BlockSlave.java b/src/com/jaquadro/minecraft/storagedrawers/block/BlockSlave.java new file mode 100644 index 0000000..2fde1c4 --- /dev/null +++ b/src/com/jaquadro/minecraft/storagedrawers/block/BlockSlave.java @@ -0,0 +1,72 @@ +package com.jaquadro.minecraft.storagedrawers.block; + +import com.jaquadro.minecraft.storagedrawers.StorageDrawers; +import com.jaquadro.minecraft.storagedrawers.api.storage.INetworked; +import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntitySlave; +import com.jaquadro.minecraft.storagedrawers.core.ModCreativeTabs; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +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; + +public class BlockSlave extends BlockContainer implements INetworked +{ + @SideOnly(Side.CLIENT) + private IIcon iconSide; + @SideOnly(Side.CLIENT) + private IIcon iconSideEtched; + + public BlockSlave (String blockName) { + super(Material.rock); + + setCreativeTab(ModCreativeTabs.tabStorageDrawers); + setHardness(5f); + setBlockName(blockName); + setStepSound(Block.soundTypeStone); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon (int side, int meta) { + switch (side) { + case 0: + case 1: + return iconSide; + default: + return iconSideEtched; + } + } + + @Override + public TileEntitySlave createNewTileEntity (World world, int meta) { + return new TileEntitySlave(); + } + + public TileEntitySlave getTileEntity (IBlockAccess blockAccess, int x, int y, int z) { + TileEntity tile = blockAccess.getTileEntity(x, y, z); + return (tile instanceof TileEntitySlave) ? (TileEntitySlave) tile : null; + } + + public TileEntitySlave getTileEntitySafe (World world, int x, int y, int z) { + TileEntitySlave tile = getTileEntity(world, x, y, z); + if (tile == null) { + tile = createNewTileEntity(world, world.getBlockMetadata(x, y, z)); + world.setTileEntity(x, y, z, tile); + } + + return tile; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons (IIconRegister register) { + iconSide = register.registerIcon(StorageDrawers.MOD_ID + ":drawers_comp_side"); + iconSideEtched = register.registerIcon(StorageDrawers.MOD_ID + ":drawers_comp_side_2"); + } +} diff --git a/src/com/jaquadro/minecraft/storagedrawers/block/tile/BlockCoord.java b/src/com/jaquadro/minecraft/storagedrawers/block/tile/BlockCoord.java new file mode 100644 index 0000000..61c704f --- /dev/null +++ b/src/com/jaquadro/minecraft/storagedrawers/block/tile/BlockCoord.java @@ -0,0 +1,48 @@ +package com.jaquadro.minecraft.storagedrawers.block.tile; + +/** +* Created by Justin on 4/25/2015. +*/ +class BlockCoord +{ + private int x; + private int y; + private int z; + + public BlockCoord (int x, int y, int z) { + this.x = x; + this.y = y; + this.z = z; + } + + public int x () { + return x; + } + + public int y () { + return y; + } + + public int z () { + return z; + } + + @Override + public boolean equals (Object obj) { + if (obj == null || obj.getClass() != getClass()) + return false; + + BlockCoord that = (BlockCoord)obj; + return x == that.x && y == that.y && z == that.z; + } + + @Override + public int hashCode () { + int hash = 23; + hash = hash * 31 + x; + hash = hash * 31 + y; + hash = hash * 31 + z; + + return hash; + } +} diff --git a/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntityController.java b/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntityController.java index 630af0a..d8181fc 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntityController.java +++ b/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntityController.java @@ -23,37 +23,6 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IS private static final int DEPTH_LIMIT = 12; private static final int[] emptySlots = new int[0]; - private static class BlockCoord { - private int x; - private int y; - private int z; - - public BlockCoord (int x, int y, int z) { - this.x = x; - this.y = y; - this.z = z; - } - - @Override - public boolean equals (Object obj) { - if (obj == null || obj.getClass() != getClass()) - return false; - - BlockCoord that = (BlockCoord)obj; - return x == that.x && y == that.y && z == that.z; - } - - @Override - public int hashCode () { - int hash = 23; - hash = hash * 31 + x; - hash = hash * 31 + y; - hash = hash * 31 + z; - - return hash; - } - } - private static class StorageRecord { public IDrawerGroup storage; @@ -156,6 +125,10 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IS updateCache(); } + public boolean isValidSlave (int x, int y, int z) { + return false; + } + public void updateCache () { int preCount = inventorySlots.length; @@ -339,7 +312,7 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IS if (!storage.containsKey(coord)) return null; - TileEntity te = worldObj.getTileEntity(coord.x, coord.y, coord.z); + TileEntity te = worldObj.getTileEntity(coord.x(), coord.y(), coord.z()); if (!(te instanceof IDrawerGroup)) { storage.remove(coord); return null; @@ -359,7 +332,7 @@ public class TileEntityController extends TileEntity implements IDrawerGroup, IS if (!storage.containsKey(coord)) return null; - TileEntity te = worldObj.getTileEntity(coord.x, coord.y, coord.z); + TileEntity te = worldObj.getTileEntity(coord.x(), coord.y(), coord.z()); if (!(te instanceof IDrawerGroup)) { storage.remove(coord); return null; diff --git a/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntitySlave.java b/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntitySlave.java new file mode 100644 index 0000000..20a3967 --- /dev/null +++ b/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntitySlave.java @@ -0,0 +1,183 @@ +package com.jaquadro.minecraft.storagedrawers.block.tile; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +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.Constants; + +public class TileEntitySlave extends TileEntity implements ISidedInventory +{ + private BlockCoord controllerCoord; + + private int[] inventorySlots = new int[] { 0 }; + private int[] autoSides = new int[] { 0, 1, 2, 3, 4, 5 }; + + @Override + public void readFromNBT (NBTTagCompound tag) { + super.readFromNBT(tag); + + if (tag.hasKey("Controller", Constants.NBT.TAG_COMPOUND)) { + NBTTagCompound ctag = tag.getCompoundTag("Controller"); + controllerCoord = new BlockCoord(ctag.getInteger("x"), ctag.getInteger("y"), ctag.getInteger("z")); + } + } + + @Override + public void writeToNBT (NBTTagCompound tag) { + super.writeToNBT(tag); + + if (controllerCoord != null) { + NBTTagCompound ctag = new NBTTagCompound(); + ctag.setInteger("x", controllerCoord.x()); + ctag.setInteger("y", controllerCoord.y()); + ctag.setInteger("z", controllerCoord.z()); + tag.setTag("Controller", ctag); + } + } + + @Override + public Packet getDescriptionPacket () { + NBTTagCompound tag = new NBTTagCompound(); + writeToNBT(tag); + + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 5, tag); + } + + @Override + public void onDataPacket (NetworkManager net, S35PacketUpdateTileEntity pkt) { + readFromNBT(pkt.func_148857_g()); + getWorldObj().func_147479_m(xCoord, yCoord, zCoord); // markBlockForRenderUpdate + } + + private TileEntityController getController () { + if (controllerCoord == null) + return null; + + TileEntity te = worldObj.getTileEntity(controllerCoord.x(), controllerCoord.y(), controllerCoord.z()); + if (!(te instanceof TileEntityController)) { + controllerCoord = null; + markDirty(); + return null; + } + + return (TileEntityController)te; + } + + @Override + public int[] getAccessibleSlotsFromSide (int side) { + TileEntityController controller = getController(); + if (controller == null || !controller.isValidSlave(xCoord, yCoord, zCoord)) + return inventorySlots; + + return controller.getAccessibleSlotsFromSide(0); + } + + @Override + public boolean canInsertItem (int slot, ItemStack stack, int side) { + TileEntityController controller = getController(); + if (controller == null || !controller.isValidSlave(xCoord, yCoord, zCoord)) + return false; + + return controller.canInsertItem(slot, stack, 0); + } + + @Override + public boolean canExtractItem (int slot, ItemStack stack, int side) { + TileEntityController controller = getController(); + if (controller == null || !controller.isValidSlave(xCoord, yCoord, zCoord)) + return false; + + return controller.canExtractItem(slot, stack, side); + } + + @Override + public int getSizeInventory () { + TileEntityController controller = getController(); + if (controller == null || !controller.isValidSlave(xCoord, yCoord, zCoord)) + return 1; + + return controller.getSizeInventory(); + } + + @Override + public ItemStack getStackInSlot (int slot) { + TileEntityController controller = getController(); + if (controller == null || !controller.isValidSlave(xCoord, yCoord, zCoord)) + return null; + + return controller.getStackInSlot(slot); + } + + @Override + public ItemStack decrStackSize (int slot, int count) { + TileEntityController controller = getController(); + if (controller == null || !controller.isValidSlave(xCoord, yCoord, zCoord)) + return null; + + return controller.decrStackSize(slot, count); + } + + @Override + public ItemStack getStackInSlotOnClosing (int slot) { + TileEntityController controller = getController(); + if (controller == null || !controller.isValidSlave(xCoord, yCoord, zCoord)) + return null; + + return controller.getStackInSlotOnClosing(slot); + } + + @Override + public void setInventorySlotContents (int slot, ItemStack stack) { + TileEntityController controller = getController(); + if (controller == null || !controller.isValidSlave(xCoord, yCoord, zCoord)) + return; + + controller.setInventorySlotContents(slot, stack); + } + + @Override + public String getInventoryName () { + // TODO + return null; + } + + @Override + public boolean hasCustomInventoryName () { + // TODO + return false; + } + + @Override + public int getInventoryStackLimit () { + return 64; + } + + @Override + public boolean isUseableByPlayer (EntityPlayer player) { + return false; + } + + @Override + public void openInventory () { + + } + + @Override + public void closeInventory () { + + } + + @Override + public boolean isItemValidForSlot (int slot, ItemStack stack) { + TileEntityController controller = getController(); + if (controller == null || !controller.isValidSlave(xCoord, yCoord, zCoord)) + return false; + + return controller.isItemValidForSlot(slot, stack); + } +} diff --git a/src/com/jaquadro/minecraft/storagedrawers/config/ConfigManager.java b/src/com/jaquadro/minecraft/storagedrawers/config/ConfigManager.java index 6e7c6df..bbcdf44 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/config/ConfigManager.java +++ b/src/com/jaquadro/minecraft/storagedrawers/config/ConfigManager.java @@ -93,6 +93,7 @@ public class ConfigManager public final ConfigSection sectionBlocksCompDrawers = new ConfigSection(blockSections, sectionBlocks, "compdrawers", "blocks.compDrawers"); public final ConfigSection sectionBlocksController = new ConfigSection(blockSections, sectionBlocks, "controller", "blocks.controller"); public final ConfigSection sectionBlocksTrim = new ConfigSection(blockSections, sectionBlocks, "trim", "blocks.trim"); + public final ConfigSection sectionBlocksSlave = new ConfigSection(blockSections, sectionBlocks, "controllerSlave", "blocks.controllerSlave"); public Map blockSectionsMap = new HashMap(); @@ -164,6 +165,8 @@ public class ConfigManager config.get(sectionBlocksTrim.getQualifiedName(), "enabled", true).setLanguageKey(LANG_PREFIX + "prop.enabled").setRequiresMcRestart(true); + config.get(sectionBlocksSlave.getQualifiedName(), "enabled", true).setLanguageKey(LANG_PREFIX + "prop.enabled").setRequiresMcRestart(true); + cache.level2Mult = config.get(sectionUpgrades.getQualifiedName(), "level2Mult", 2).setLanguageKey(LANG_PREFIX + "upgrades.level2Mult").setRequiresWorldRestart(true).getInt(); cache.level3Mult = config.get(sectionUpgrades.getQualifiedName(), "level3Mult", 3).setLanguageKey(LANG_PREFIX + "upgrades.level3Mult").setRequiresWorldRestart(true).getInt(); cache.level4Mult = config.get(sectionUpgrades.getQualifiedName(), "level4Mult", 5).setLanguageKey(LANG_PREFIX + "upgrades.level4Mult").setRequiresWorldRestart(true).getInt(); diff --git a/src/com/jaquadro/minecraft/storagedrawers/core/ModBlocks.java b/src/com/jaquadro/minecraft/storagedrawers/core/ModBlocks.java index 7133b2d..ad70f41 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/core/ModBlocks.java +++ b/src/com/jaquadro/minecraft/storagedrawers/core/ModBlocks.java @@ -1,13 +1,11 @@ package com.jaquadro.minecraft.storagedrawers.core; import com.jaquadro.minecraft.storagedrawers.StorageDrawers; -import com.jaquadro.minecraft.storagedrawers.block.BlockCompDrawers; -import com.jaquadro.minecraft.storagedrawers.block.BlockController; -import com.jaquadro.minecraft.storagedrawers.block.BlockDrawers; -import com.jaquadro.minecraft.storagedrawers.block.BlockTrim; +import com.jaquadro.minecraft.storagedrawers.block.*; import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityController; import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityDrawersComp; import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityDrawersStandard; +import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntitySlave; import com.jaquadro.minecraft.storagedrawers.config.ConfigManager; import com.jaquadro.minecraft.storagedrawers.item.ItemCompDrawers; import com.jaquadro.minecraft.storagedrawers.item.ItemController; @@ -27,6 +25,7 @@ public class ModBlocks public static BlockCompDrawers compDrawers; public static BlockController controller; public static BlockTrim trim; + public static BlockSlave controllerSlave; public void init () { fullDrawers1 = new BlockDrawers("fullDrawers1", 1, false); @@ -37,6 +36,7 @@ public class ModBlocks compDrawers = new BlockCompDrawers("compDrawers"); controller = new BlockController("drawerController"); trim = new BlockTrim("trim"); + controllerSlave = new BlockSlave("controllerSlave"); ConfigManager config = StorageDrawers.config; @@ -68,6 +68,10 @@ public class ModBlocks GameRegistry.registerBlock(controller, ItemController.class, "controller"); GameRegistry.registerTileEntity(TileEntityController.class, ModBlocks.getQualifiedName(controller)); } + if (config.isBlockEnabled("controllerSlave")) { + GameRegistry.registerBlock(controllerSlave, "controllerSlave"); + GameRegistry.registerTileEntity(TileEntitySlave.class, ModBlocks.getQualifiedName(controllerSlave)); + } if (config.isBlockEnabled("trim")) { GameRegistry.registerBlock(trim, ItemTrim.class, "trim"); }