diff options
Diffstat (limited to 'src/Java/binnie/core/machines')
76 files changed, 6649 insertions, 0 deletions
diff --git a/src/Java/binnie/core/machines/BlockMachine.java b/src/Java/binnie/core/machines/BlockMachine.java new file mode 100644 index 0000000000..042e213aec --- /dev/null +++ b/src/Java/binnie/core/machines/BlockMachine.java @@ -0,0 +1,181 @@ +package binnie.core.machines; + +import binnie.Binnie; +import binnie.core.BinnieCore; +import binnie.core.machines.component.IRender.RandomDisplayTick; +import binnie.core.proxy.BinnieProxy; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +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.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.PlayerCapabilities; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +class BlockMachine + extends BlockContainer + implements IBlockMachine +{ + private MachineGroup group; + + public BlockMachine(MachineGroup group, String blockName) + { + super(Material.iron); + this.group = group; + setHardness(1.5F); + setBlockName(blockName); + } + + public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List itemList) + { + for (MachinePackage pack : this.group.getPackages()) { + if (pack.isActive()) { + itemList.add(new ItemStack(this, 1, pack.getMetadata().intValue())); + } + } + } + + public boolean isOpaqueCube() + { + return false; + } + + public boolean renderAsNormalBlock() + { + return !this.group.customRenderer; + } + + public int getRenderType() + { + return Binnie.Machine.getMachineRenderID(); + } + + public TileEntity createTileEntity(World world, int metadata) + { + if (this.group.getPackage(metadata) == null) { + return null; + } + return this.group.getPackage(metadata).createTileEntity(); + } + + public MachinePackage getPackage(int meta) + { + return this.group.getPackage(meta); + } + + public String getMachineName(int meta) + { + return getPackage(meta) == null ? "Unnamed Machine" : getPackage(meta).getDisplayName(); + } + + public int damageDropped(int par1) + { + return par1; + } + + public TileEntity createNewTileEntity(World var1, int meta) + { + return createTileEntity(var1, meta); + } + + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9) + { + if (!BinnieCore.proxy.isSimulating(world)) { + return true; + } + if (player.isSneaking()) { + return true; + } + TileEntity entity = world.getTileEntity(x, y, z); + if ((entity instanceof TileEntityMachine)) { + ((TileEntityMachine)entity).getMachine().onRightClick(world, player, x, y, z); + } + return true; + } + + public void onBlockPlacedBy(World world, int i, int j, int k, EntityLivingBase entityliving, ItemStack stack) + { + super.onBlockPlacedBy(world, i, j, k, entityliving, stack); + if (!BinnieCore.proxy.isSimulating(world)) { + return; + } + IMachine machine = Machine.getMachine(world.getTileEntity(i, j, k)); + if (machine == null) { + return; + } + if ((entityliving instanceof EntityPlayer)) { + machine.setOwner(((EntityPlayer)entityliving).getGameProfile()); + } + } + + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) + { + TileEntity entity = world.getTileEntity(x, y, z); + if (((entity instanceof TileEntityMachine)) && (((TileEntityMachine)entity).getMachine().hasInterface(IMachineTexturedFaces.class))) { + return ((IMachineTexturedFaces)((TileEntityMachine)entity).getMachine().getInterface(IMachineTexturedFaces.class)).getIcon(side); + } + return Blocks.dirt.getIcon(0, 0); + } + + public void breakBlock(World world, int x, int y, int z, Block par5, int par6) + { + TileEntity tileentity = world.getTileEntity(x, y, z); + if (!(tileentity instanceof TileEntityMachine)) { + return; + } + TileEntityMachine entity = (TileEntityMachine)tileentity; + if (entity != null) { + entity.onBlockDestroy(); + } + super.breakBlock(world, x, y, z, par5, par6); + } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister register) {} + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(World world, int x, int y, int z, Random rand) + { + IMachine machine = Machine.getMachine(world.getTileEntity(x, y, z)); + if (machine != null) { + for (IRender.RandomDisplayTick renders : machine.getInterfaces(IRender.RandomDisplayTick.class)) { + renders.onRandomDisplayTick(world, x, y, z, rand); + } + } + } + + public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) + { + return new ArrayList(); + } + + public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) + { + if ((BinnieCore.proxy.isSimulating(world)) && (canHarvestBlock(player, world.getBlockMetadata(x, y, z))) && + (!player.capabilities.isCreativeMode)) + { + int metadata = world.getBlockMetadata(x, y, z); + ItemStack stack = new ItemStack(Item.getItemFromBlock(this), 1, damageDropped(metadata)); + dropBlockAsItem(world, x, y, z, stack); + } + return world.setBlockToAir(x, y, z); + } + + public static abstract interface IMachineTexturedFaces + { + public abstract IIcon getIcon(int paramInt); + } +} diff --git a/src/Java/binnie/core/machines/IBlockMachine.java b/src/Java/binnie/core/machines/IBlockMachine.java new file mode 100644 index 0000000000..01b7e321a1 --- /dev/null +++ b/src/Java/binnie/core/machines/IBlockMachine.java @@ -0,0 +1,8 @@ +package binnie.core.machines; + +abstract interface IBlockMachine +{ + public abstract MachinePackage getPackage(int paramInt); + + public abstract String getMachineName(int paramInt); +} diff --git a/src/Java/binnie/core/machines/IMachine.java b/src/Java/binnie/core/machines/IMachine.java new file mode 100644 index 0000000000..9a57b0e019 --- /dev/null +++ b/src/Java/binnie/core/machines/IMachine.java @@ -0,0 +1,25 @@ +package binnie.core.machines; + +import java.util.Collection; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public abstract interface IMachine + extends IOwnable +{ + public abstract void addComponent(MachineComponent paramMachineComponent); + + public abstract MachineUtil getMachineUtil(); + + public abstract <T> T getInterface(Class<T> paramClass); + + public abstract void markDirty(); + + public abstract World getWorld(); + + public abstract TileEntity getTileEntity(); + + public abstract <T> Collection<T> getInterfaces(Class<T> paramClass); + + public abstract MachinePackage getPackage(); +} diff --git a/src/Java/binnie/core/machines/IMachineType.java b/src/Java/binnie/core/machines/IMachineType.java new file mode 100644 index 0000000000..06c02218a0 --- /dev/null +++ b/src/Java/binnie/core/machines/IMachineType.java @@ -0,0 +1,11 @@ +package binnie.core.machines; + +import binnie.core.network.IOrdinaled; + +public abstract interface IMachineType + extends IOrdinaled +{ + public abstract Class<? extends MachinePackage> getPackageClass(); + + public abstract boolean isActive(); +} diff --git a/src/Java/binnie/core/machines/IOwnable.java b/src/Java/binnie/core/machines/IOwnable.java new file mode 100644 index 0000000000..78aa1a76f9 --- /dev/null +++ b/src/Java/binnie/core/machines/IOwnable.java @@ -0,0 +1,10 @@ +package binnie.core.machines; + +import com.mojang.authlib.GameProfile; + +abstract interface IOwnable +{ + public abstract GameProfile getOwner(); + + public abstract void setOwner(GameProfile paramGameProfile); +} diff --git a/src/Java/binnie/core/machines/ItemMachine.java b/src/Java/binnie/core/machines/ItemMachine.java new file mode 100644 index 0000000000..08426cdb7a --- /dev/null +++ b/src/Java/binnie/core/machines/ItemMachine.java @@ -0,0 +1,29 @@ +package binnie.core.machines; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemMachine + extends ItemBlock +{ + private IBlockMachine associatedBlock; + + public ItemMachine(Block block) + { + super(block); + setMaxDamage(0); + setHasSubtypes(true); + this.associatedBlock = ((IBlockMachine)block); + } + + public int getMetadata(int i) + { + return i; + } + + public String getItemStackDisplayName(ItemStack itemstack) + { + return this.associatedBlock.getMachineName(itemstack.getItemDamage()); + } +} diff --git a/src/Java/binnie/core/machines/Machine.java b/src/Java/binnie/core/machines/Machine.java new file mode 100644 index 0000000000..474b32c627 --- /dev/null +++ b/src/Java/binnie/core/machines/Machine.java @@ -0,0 +1,320 @@ +package binnie.core.machines; + +import binnie.core.BinnieCore; +import binnie.core.machines.component.IInteraction.RightClick; +import binnie.core.machines.component.IRender.DisplayTick; +import binnie.core.machines.network.INetwork.GuiNBT; +import binnie.core.machines.network.INetwork.RecieveGuiNBT; +import binnie.core.machines.network.INetwork.SendGuiNBT; +import binnie.core.machines.network.INetwork.TilePacketSync; +import binnie.core.machines.power.ITankMachine; +import binnie.core.network.BinnieCorePacketID; +import binnie.core.network.INetworkedEntity; +import binnie.core.network.packet.MessageTileNBT; +import binnie.core.network.packet.PacketPayload; +import binnie.core.proxy.BinnieProxy; +import com.mojang.authlib.GameProfile; +import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; +import cpw.mods.fml.relauncher.Side; +import forestry.api.core.INBTTagable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.network.Packet; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class Machine + implements INetworkedEntity, INBTTagable, INetwork.TilePacketSync, IMachine, INetwork.GuiNBT +{ + private MachinePackage machinePackage; + private Map<Class, List<MachineComponent>> componentInterfaceMap = new LinkedHashMap(); + private Map<Class<? extends MachineComponent>, MachineComponent> componentMap = new LinkedHashMap(); + private TileEntity tile; + + public Machine(MachinePackage pack, TileEntity tile) + { + this.tile = tile; + + pack.createMachine(this); + this.machinePackage = pack; + } + + public void addComponent(MachineComponent component) + { + if (component == null) { + throw new NullPointerException("Can't have a null machine component!"); + } + component.setMachine(this); + this.componentMap.put(component.getClass(), component); + for (Class inter : component.getComponentInterfaces()) + { + if (!this.componentInterfaceMap.containsKey(inter)) { + this.componentInterfaceMap.put(inter, new ArrayList()); + } + ((List)this.componentInterfaceMap.get(inter)).add(component); + } + } + + public Collection<MachineComponent> getComponents() + { + return this.componentMap.values(); + } + + public <T extends MachineComponent> T getComponent(Class<T> componentClass) + { + return hasComponent(componentClass) ? (MachineComponent)componentClass.cast(this.componentMap.get(componentClass)) : null; + } + + public <T> T getInterface(Class<T> interfaceClass) + { + if (hasInterface(interfaceClass)) { + return getInterfaces(interfaceClass).get(0); + } + if (interfaceClass.isInstance(getPackage())) { + return interfaceClass.cast(getPackage()); + } + for (MachineComponent component : getComponents()) { + if (interfaceClass.isInstance(component)) { + return interfaceClass.cast(component); + } + } + return null; + } + + public <T> List<T> getInterfaces(Class<T> interfaceClass) + { + ArrayList<T> interfaces = new ArrayList(); + if (!hasInterface(interfaceClass)) { + return interfaces; + } + for (MachineComponent component : (List)this.componentInterfaceMap.get(interfaceClass)) { + interfaces.add(interfaceClass.cast(component)); + } + return interfaces; + } + + public boolean hasInterface(Class<?> interfaceClass) + { + return this.componentInterfaceMap.containsKey(interfaceClass); + } + + public boolean hasComponent(Class<? extends MachineComponent> componentClass) + { + return this.componentMap.containsKey(componentClass); + } |
