diff --git a/src/main/java/techreborn/client/render/parts/ClientPartModelBakery.java b/src/main/java/techreborn/client/render/parts/ClientPartModelBakery.java index 361d14b7d..cd48e6d64 100644 --- a/src/main/java/techreborn/client/render/parts/ClientPartModelBakery.java +++ b/src/main/java/techreborn/client/render/parts/ClientPartModelBakery.java @@ -18,7 +18,7 @@ public class ClientPartModelBakery { @SubscribeEvent(priority = EventPriority.LOWEST) public void onModelBake(ModelBakeEvent event){ for(EnumCableType type : EnumCableType.values()){ - event.modelRegistry.putObject(new ModelResourceLocation("techreborn:cable#type=" + type.name()), new RenderCablePart(type)); + event.modelRegistry.putObject(new ModelResourceLocation("techreborn:cable#type=" + type.getName().toLowerCase()), new RenderCablePart(type)); } } diff --git a/src/main/java/techreborn/client/render/parts/RenderCablePart.java b/src/main/java/techreborn/client/render/parts/RenderCablePart.java index 93b0e869b..217a93fdc 100644 --- a/src/main/java/techreborn/client/render/parts/RenderCablePart.java +++ b/src/main/java/techreborn/client/render/parts/RenderCablePart.java @@ -35,7 +35,7 @@ public class RenderCablePart implements ISmartMultipartModel { } public RenderCablePart(EnumCableType type) { - texture = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("fluxedredstone:blocks/cable_redstone"); + texture = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(type.textureName); this.type = type; } @@ -63,7 +63,7 @@ public class RenderCablePart implements ISmartMultipartModel { ArrayList list = new ArrayList(); BlockFaceUV uv = new BlockFaceUV(new float[]{0.0F, 0.0F, 16.0F, 16.0F}, 0); BlockPartFace face = new BlockPartFace(null, 0, "", uv); - int thickness = 4; + int thickness = 16 - (int) type.cableThickness * 2; int lastThickness = 16 - thickness; addCubeToList(new Vecs3dCube(thickness, thickness, thickness, lastThickness, lastThickness, lastThickness), list, face, ModelRotation.X0_Y0, texture); if (state != null) { diff --git a/src/main/java/techreborn/parts/CableMultipart.java b/src/main/java/techreborn/parts/CableMultipart.java index 422f34b0f..01781c2bb 100644 --- a/src/main/java/techreborn/parts/CableMultipart.java +++ b/src/main/java/techreborn/parts/CableMultipart.java @@ -33,7 +33,7 @@ import java.util.Map; /** * Created by mark on 02/03/2016. */ -public class CableMultipart extends Multipart implements IOccludingPart, ISlottedPart, ITickable { +public abstract class CableMultipart extends Multipart implements IOccludingPart, ISlottedPart, ITickable, ICableType { public Vecs3dCube[] boundingBoxes = new Vecs3dCube[14]; public float center = 0.6F; @@ -48,23 +48,16 @@ public class CableMultipart extends Multipart implements IOccludingPart, ISlotte public static final IUnlistedProperty EAST = Properties.toUnlisted(PropertyBool.create("east")); public static final IUnlistedProperty SOUTH = Properties.toUnlisted(PropertyBool.create("south")); public static final IUnlistedProperty WEST = Properties.toUnlisted(PropertyBool.create("west")); - public static final IProperty TYPE = PropertyEnum.create("type", EnumCableType.class); + public static final IProperty TYPE = PropertyEnum.create("type", EnumCableType.class); - EnumCableType type; - - public CableMultipart(EnumCableType type) { - this.type = type; + public CableMultipart() { connectedSides = new HashMap<>(); refreshBounding(); } - public CableMultipart(){ - this(EnumCableType.COPPER); - } - public void refreshBounding() { float centerFirst = center - offset; - double w = (type.cableThickness / 16) - 0.5; + double w = getCableType().cableThickness / 16; boundingBoxes[6] = new Vecs3dCube(centerFirst - w - 0.03, centerFirst - w - 0.08, centerFirst - w - 0.03, centerFirst + w + 0.08, centerFirst + w + 0.04, centerFirst + w + 0.08); @@ -245,7 +238,7 @@ public class CableMultipart extends Multipart implements IOccludingPart, ISlotte .withProperty(SOUTH, shouldConnectTo(EnumFacing.SOUTH)) .withProperty(WEST, shouldConnectTo(EnumFacing.WEST)) .withProperty(EAST, shouldConnectTo(EnumFacing.EAST)) - .withProperty(TYPE, type); + .withProperty(TYPE, getCableType()); } @Override @@ -268,4 +261,6 @@ public class CableMultipart extends Multipart implements IOccludingPart, ISlotte public String getModelPath() { return "techreborn:cable"; } + + } diff --git a/src/main/java/techreborn/parts/EnumCableType.java b/src/main/java/techreborn/parts/EnumCableType.java index 5f59334c9..4aaf85bf1 100644 --- a/src/main/java/techreborn/parts/EnumCableType.java +++ b/src/main/java/techreborn/parts/EnumCableType.java @@ -1,29 +1,36 @@ package techreborn.parts; import net.minecraft.util.IStringSerializable; +import techreborn.parts.types.*; public enum EnumCableType implements IStringSerializable { - COPPER("copper"), - TIN("tin"), - GOLD("gold"), - HV("hv"), - GLASSFIBER("glassfiber"), - ICOPPER("insulatedcopper"), - IGOLD("insulatedgold"), - IHV("insulatedhv"); + COPPER("copper", "minecraft:blocks/iron_block", 128, 4.0F, true, CopperCable.class), + TIN("tin", "minecraft:blocks/iron_block", 32, 4.0F, true, TinCable.class), + GOLD("gold", "minecraft:blocks/iron_block", 512, 3.0F, true, GoldCable.class), + HV("hv", "minecraft:blocks/iron_block", 2048, 6.0F, true, HVCable.class), + GLASSFIBER("glassfiber", "minecraft:blocks/iron_block", 8192, 4.0F, false, GlassFiberCable.class), + ICOPPER("insulatedcopper", "minecraft:blocks/iron_block", 128, 6.0F, false, InsulatedCopperCable.class), + IGOLD("insulatedgold", "minecraft:blocks/iron_block", 512, 6.0F, false, InsulatedGoldCable.class), + IHV("insulatedhv", "minecraft:blocks/iron_block", 2048, 10.0F, false, InsulatedHVCable.class); private String friendlyName; public String textureName = "minecraft:blocks/iron_block"; public int transferRate= 128; - public double cableThickness = 3.0; + public float cableThickness = 3.0F; public boolean canKill = false; + public Class cableClass; - EnumCableType(String friendlyName) { + EnumCableType(String friendlyName, String textureName, int transferRate, float cableThickness, boolean canKill, Class cableClass) { this.friendlyName = friendlyName; + this.textureName = textureName; + this.transferRate = transferRate; + this.cableThickness = cableThickness /2; + this.canKill = canKill; + this.cableClass = cableClass; } @Override public String getName() { - return friendlyName; + return friendlyName.toLowerCase(); } } diff --git a/src/main/java/techreborn/parts/ICableType.java b/src/main/java/techreborn/parts/ICableType.java new file mode 100644 index 000000000..8c85c8c18 --- /dev/null +++ b/src/main/java/techreborn/parts/ICableType.java @@ -0,0 +1,10 @@ +package techreborn.parts; + +/** + * Created by Mark on 05/03/2016. + */ +public interface ICableType { + + EnumCableType getCableType(); + +} diff --git a/src/main/java/techreborn/parts/ItemCables.java b/src/main/java/techreborn/parts/ItemCables.java index dff92bf49..142fe799c 100644 --- a/src/main/java/techreborn/parts/ItemCables.java +++ b/src/main/java/techreborn/parts/ItemCables.java @@ -32,7 +32,7 @@ public class ItemCables extends ItemMultiPart implements ITexturedItem { return new ItemStack(TechRebornParts.cables, count, i); } } - throw new InvalidParameterException("The cabel " + name + " could not be found."); + throw new InvalidParameterException("The cable " + name + " could not be found."); } public static ItemStack getCableByName(String name) { @@ -49,7 +49,12 @@ public class ItemCables extends ItemMultiPart implements ITexturedItem { @Override public IMultipart createPart(World world, BlockPos pos, EnumFacing side, Vec3 hit, ItemStack stack, EntityPlayer player) { - return new CableMultipart(EnumCableType.values()[stack.getItemDamage()]); + try { + return TechRebornParts.multipartHashMap.get(EnumCableType.values()[stack.getItemDamage()]).newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + return null; } diff --git a/src/main/java/techreborn/parts/TechRebornParts.java b/src/main/java/techreborn/parts/TechRebornParts.java index d7727ddee..e64669edd 100644 --- a/src/main/java/techreborn/parts/TechRebornParts.java +++ b/src/main/java/techreborn/parts/TechRebornParts.java @@ -10,6 +10,8 @@ import net.minecraftforge.fml.common.registry.GameRegistry; import techreborn.compat.ICompatModule; import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.HashMap; /** @@ -20,6 +22,8 @@ public class TechRebornParts implements ICompatModule { @Nullable public static Item cables; + public static HashMap> multipartHashMap = new HashMap<>(); + @Override public void preInit(FMLPreInitializationEvent event) { @@ -27,7 +31,10 @@ public class TechRebornParts implements ICompatModule { @Override public void init(FMLInitializationEvent event) { - MultipartRegistry.registerPart(CableMultipart.class, "techreborn:cable"); + for(EnumCableType cableType : EnumCableType.values()){ + multipartHashMap.put(cableType, cableType.cableClass); + MultipartRegistry.registerPart(cableType.cableClass, "techreborn:cable." + cableType.name()); + } cables = new ItemCables(); GameRegistry.registerItem(cables, "cables"); } diff --git a/src/main/java/techreborn/parts/types/CopperCable.java b/src/main/java/techreborn/parts/types/CopperCable.java new file mode 100644 index 000000000..24111e5ac --- /dev/null +++ b/src/main/java/techreborn/parts/types/CopperCable.java @@ -0,0 +1,14 @@ +package techreborn.parts.types; + +import techreborn.parts.CableMultipart; +import techreborn.parts.EnumCableType; + +/** + * Created by Mark on 05/03/2016. + */ +public class CopperCable extends CableMultipart { + @Override + public EnumCableType getCableType() { + return EnumCableType.COPPER; + } +} diff --git a/src/main/java/techreborn/parts/types/GlassFiberCable.java b/src/main/java/techreborn/parts/types/GlassFiberCable.java new file mode 100644 index 000000000..8a81bf91b --- /dev/null +++ b/src/main/java/techreborn/parts/types/GlassFiberCable.java @@ -0,0 +1,14 @@ +package techreborn.parts.types; + +import techreborn.parts.CableMultipart; +import techreborn.parts.EnumCableType; + +/** + * Created by Mark on 05/03/2016. + */ +public class GlassFiberCable extends CableMultipart { + @Override + public EnumCableType getCableType() { + return EnumCableType.GLASSFIBER; + } +} diff --git a/src/main/java/techreborn/parts/types/GoldCable.java b/src/main/java/techreborn/parts/types/GoldCable.java new file mode 100644 index 000000000..fd8639ab1 --- /dev/null +++ b/src/main/java/techreborn/parts/types/GoldCable.java @@ -0,0 +1,14 @@ +package techreborn.parts.types; + +import techreborn.parts.CableMultipart; +import techreborn.parts.EnumCableType; + +/** + * Created by Mark on 05/03/2016. + */ +public class GoldCable extends CableMultipart { + @Override + public EnumCableType getCableType() { + return EnumCableType.GOLD; + } +} diff --git a/src/main/java/techreborn/parts/types/HVCable.java b/src/main/java/techreborn/parts/types/HVCable.java new file mode 100644 index 000000000..422057fd7 --- /dev/null +++ b/src/main/java/techreborn/parts/types/HVCable.java @@ -0,0 +1,14 @@ +package techreborn.parts.types; + +import techreborn.parts.CableMultipart; +import techreborn.parts.EnumCableType; + +/** + * Created by Mark on 05/03/2016. + */ +public class HVCable extends CableMultipart { + @Override + public EnumCableType getCableType() { + return EnumCableType.HV; + } +} diff --git a/src/main/java/techreborn/parts/types/InsulatedCopperCable.java b/src/main/java/techreborn/parts/types/InsulatedCopperCable.java new file mode 100644 index 000000000..f0aa37b6a --- /dev/null +++ b/src/main/java/techreborn/parts/types/InsulatedCopperCable.java @@ -0,0 +1,14 @@ +package techreborn.parts.types; + +import techreborn.parts.CableMultipart; +import techreborn.parts.EnumCableType; + +/** + * Created by Mark on 05/03/2016. + */ +public class InsulatedCopperCable extends CableMultipart { + @Override + public EnumCableType getCableType() { + return EnumCableType.ICOPPER; + } +} diff --git a/src/main/java/techreborn/parts/types/InsulatedGoldCable.java b/src/main/java/techreborn/parts/types/InsulatedGoldCable.java new file mode 100644 index 000000000..38a9971a9 --- /dev/null +++ b/src/main/java/techreborn/parts/types/InsulatedGoldCable.java @@ -0,0 +1,14 @@ +package techreborn.parts.types; + +import techreborn.parts.CableMultipart; +import techreborn.parts.EnumCableType; + +/** + * Created by Mark on 05/03/2016. + */ +public class InsulatedGoldCable extends CableMultipart { + @Override + public EnumCableType getCableType() { + return EnumCableType.IGOLD; + } +} diff --git a/src/main/java/techreborn/parts/types/InsulatedHVCable.java b/src/main/java/techreborn/parts/types/InsulatedHVCable.java new file mode 100644 index 000000000..d70cd4e0c --- /dev/null +++ b/src/main/java/techreborn/parts/types/InsulatedHVCable.java @@ -0,0 +1,14 @@ +package techreborn.parts.types; + +import techreborn.parts.CableMultipart; +import techreborn.parts.EnumCableType; + +/** + * Created by Mark on 05/03/2016. + */ +public class InsulatedHVCable extends CableMultipart { + @Override + public EnumCableType getCableType() { + return EnumCableType.IHV; + } +} diff --git a/src/main/java/techreborn/parts/types/TinCable.java b/src/main/java/techreborn/parts/types/TinCable.java new file mode 100644 index 000000000..4105fb043 --- /dev/null +++ b/src/main/java/techreborn/parts/types/TinCable.java @@ -0,0 +1,14 @@ +package techreborn.parts.types; + +import techreborn.parts.CableMultipart; +import techreborn.parts.EnumCableType; + +/** + * Created by Mark on 05/03/2016. + */ +public class TinCable extends CableMultipart { + @Override + public EnumCableType getCableType() { + return EnumCableType.COPPER; + } +}