From 59bf4d1a9b5fa6cfb1261f48595187d7e7429917 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Mon, 20 Apr 2015 18:36:04 +0100 Subject: [PATCH] Initial work on the fmp cable --- .../java/techreborn/compat/CompatManager.java | 4 + .../java/techreborn/compat/fmp/CablePart.java | 117 ++++++++++++++++++ .../techreborn/compat/fmp/FMPFactory.java | 27 ++++ .../java/techreborn/compat/fmp/ItemCable.java | 17 +++ 4 files changed, 165 insertions(+) create mode 100644 src/main/java/techreborn/compat/fmp/CablePart.java create mode 100644 src/main/java/techreborn/compat/fmp/FMPFactory.java create mode 100644 src/main/java/techreborn/compat/fmp/ItemCable.java diff --git a/src/main/java/techreborn/compat/CompatManager.java b/src/main/java/techreborn/compat/CompatManager.java index 7cf46919e..3a5ef33f2 100644 --- a/src/main/java/techreborn/compat/CompatManager.java +++ b/src/main/java/techreborn/compat/CompatManager.java @@ -2,6 +2,7 @@ package techreborn.compat; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.event.FMLInitializationEvent; +import techreborn.compat.fmp.FMPFactory; import techreborn.compat.waila.CompatModuleWaila; public class CompatManager { @@ -12,5 +13,8 @@ public class CompatManager { { new CompatModuleWaila().init(event); } + if(Loader.isModLoaded("ForgeMultipart")){ + FMPFactory.init(); + } } } diff --git a/src/main/java/techreborn/compat/fmp/CablePart.java b/src/main/java/techreborn/compat/fmp/CablePart.java new file mode 100644 index 000000000..db21a4a07 --- /dev/null +++ b/src/main/java/techreborn/compat/fmp/CablePart.java @@ -0,0 +1,117 @@ +package techreborn.compat.fmp; + +import codechicken.lib.vec.Cuboid6; +import codechicken.lib.vec.Vector3; +import codechicken.multipart.JNormalOcclusion; +import codechicken.multipart.NormalOcclusionTest; +import codechicken.multipart.TMultiPart; +import ic2.api.energy.event.EnergyTileLoadEvent; +import ic2.api.energy.event.EnergyTileUnloadEvent; +import ic2.api.energy.tile.IEnergyConductor; +import ic2.api.energy.tile.IEnergyTile; +import ic2.core.IC2; +import ic2.core.ITickCallback; +import ic2.core.block.wiring.TileEntityCable; +import ic2.core.block.wiring.TileEntityLuminator; +import ic2.core.network.NetworkManager; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.ArrayList; +import java.util.List; + +public class CablePart extends TMultiPart implements IEnergyConductor, JNormalOcclusion { + + public boolean addedToEnergyNet = false; + + @Override + public String getType() { + return "TRCable"; + } + + @Override + public double getConductionLoss() { + return 1D; + } + + @Override + public double getInsulationEnergyAbsorption() { + return 2048; + } + + @Override + public double getInsulationBreakdownEnergy() { + return 9001.0D; + } + + @Override + public double getConductorBreakdownEnergy() { + return 2048; + } + + @Override + public void removeInsulation() { + + } + + @Override + public void removeConductor() { + + } + + @Override + public boolean acceptsEnergyFrom(TileEntity te, ForgeDirection forgeDirection) { + return canInteractWith(te); + } + + public boolean canInteractWith(TileEntity te) { + return !(te instanceof IEnergyTile)?false:(te instanceof TileEntityLuminator?((TileEntityLuminator)te).canCableConnectFrom(this.x(), this.y(), this.z()):true); + } + + @Override + public boolean emitsEnergyTo(TileEntity tileEntity, ForgeDirection forgeDirection) { + return canInteractWith(tileEntity); + } + + + @Override + public void update() { + super.update(); + } + + @Override + public void onChunkUnload() { + if(IC2.platform.isSimulating() && this.addedToEnergyNet) { + MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(this)); + this.addedToEnergyNet = false; + } + super.onChunkUnload(); + } + + @Override + public void onChunkLoad() { + super.onChunkLoad(); + if(IC2.platform.isSimulating()) { + + MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent(this)); + this.addedToEnergyNet = true; + this.onNeighborChanged(); + + } + } + + @Override + public boolean occlusionTest(TMultiPart npart) { + return NormalOcclusionTest.apply(this, npart); + } + + @Override + public Iterable getOcclusionBoxes() { + List cubes = new ArrayList(); + cubes.add(new Cuboid6(0, 0, 0, 1, 1, 1)); + return cubes; + } + + +} diff --git a/src/main/java/techreborn/compat/fmp/FMPFactory.java b/src/main/java/techreborn/compat/fmp/FMPFactory.java new file mode 100644 index 000000000..7b58e9f12 --- /dev/null +++ b/src/main/java/techreborn/compat/fmp/FMPFactory.java @@ -0,0 +1,27 @@ +package techreborn.compat.fmp; + +import codechicken.multipart.MultiPartRegistry; +import codechicken.multipart.TMultiPart; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.item.Item; +import techreborn.client.TechRebornCreativeTab; + +public class FMPFactory implements MultiPartRegistry.IPartFactory { + + static Item cableItem; + + @Override + public TMultiPart createPart(String s, boolean b) { + if(s.equals("TRCable")){ + return new CablePart(); + } + return null; + } + + public static void init(){ + MultiPartRegistry.registerParts(new FMPFactory(), new String[]{"TRCable"}); + cableItem = new ItemCable().setCreativeTab(TechRebornCreativeTab.instance).setUnlocalizedName("TRCable"); + GameRegistry.registerItem(cableItem, "TRCable"); + } + +} diff --git a/src/main/java/techreborn/compat/fmp/ItemCable.java b/src/main/java/techreborn/compat/fmp/ItemCable.java new file mode 100644 index 000000000..cf6e6700f --- /dev/null +++ b/src/main/java/techreborn/compat/fmp/ItemCable.java @@ -0,0 +1,17 @@ +package techreborn.compat.fmp; + +import codechicken.lib.vec.BlockCoord; +import codechicken.lib.vec.Vector3; +import codechicken.multipart.JItemMultiPart; +import codechicken.multipart.MultiPartRegistry; +import codechicken.multipart.TMultiPart; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class ItemCable extends JItemMultiPart { + @Override + public TMultiPart newPart(ItemStack itemStack, EntityPlayer entityPlayer, World world, BlockCoord blockCoord, int i, Vector3 vector3) { + return MultiPartRegistry.createPart("TRCable", false); + } +}