From 6a0ffe582ea98790ace4bd39df237be1272bdc29 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Sat, 8 Mar 2014 22:30:08 -0800 Subject: [PATCH] Started to work on Quantum Gates --- .../electrical/ClientProxy.java | 3 + .../electrical/Electrical.java | 6 +- .../electrical/MultipartElectrical.java | 5 +- .../electrical/charger/ItemCharger.java | 6 + .../electrical/levitator/ItemLevitator.java | 6 + .../electrical/multimeter/ItemMultimeter.java | 6 + .../transformer/ItemTransformer.java | 6 + .../electrical/wire/ItemWire.java | 7 +- .../quantum/gate/ItemQuantumGlyph.java | 95 +++++++++++++ .../quantum/gate/PartQuantumGlyph.java | 127 ++++++++++++++++++ .../quantum/gate/RenderQuantumGlyph.java | 43 ++++++ .../MicroblockHighlightHandler.java | 12 +- .../mechanical/energy/gear/ItemGear.java | 6 + .../mechanical/energy/gear/ItemGearShaft.java | 6 + .../core/handler/TextureHookHandler.java | 5 + .../core/prefab/part/IHighlight.java | 2 +- .../languages/en_US.properties | 9 +- 17 files changed, 334 insertions(+), 16 deletions(-) create mode 100644 electrical/src/main/java/resonantinduction/quantum/gate/ItemQuantumGlyph.java create mode 100644 electrical/src/main/java/resonantinduction/quantum/gate/PartQuantumGlyph.java create mode 100644 electrical/src/main/java/resonantinduction/quantum/gate/RenderQuantumGlyph.java diff --git a/electrical/src/main/java/resonantinduction/electrical/ClientProxy.java b/electrical/src/main/java/resonantinduction/electrical/ClientProxy.java index b9de89b4..6c62031e 100644 --- a/electrical/src/main/java/resonantinduction/electrical/ClientProxy.java +++ b/electrical/src/main/java/resonantinduction/electrical/ClientProxy.java @@ -18,6 +18,8 @@ import resonantinduction.electrical.render.FXElectricBolt; import resonantinduction.electrical.tesla.RenderTesla; import resonantinduction.electrical.tesla.TileTesla; import resonantinduction.electrical.transformer.RenderTransformer; +import resonantinduction.mechanical.energy.gear.RenderGear; +import resonantinduction.quantum.gate.RenderQuantumGlyph; import universalelectricity.api.vector.Vector3; import calclavia.lib.render.item.GlobalItemRenderer; import codechicken.multipart.TMultiPart; @@ -39,6 +41,7 @@ public class ClientProxy extends CommonProxy GlobalItemRenderer.register(Electrical.itemTransformer.itemID, RenderTransformer.INSTANCE); GlobalItemRenderer.register(Electrical.itemCharger.itemID, RenderCharger.INSTANCE); GlobalItemRenderer.register(Electrical.itemLevitator.itemID, RenderLevitator.INSTANCE); + GlobalItemRenderer.register(Electrical.itemQuantumGlyph.itemID, RenderQuantumGlyph.INSTANCE); ClientRegistry.bindTileEntitySpecialRenderer(TileTesla.class, new RenderTesla()); ClientRegistry.bindTileEntitySpecialRenderer(TileBattery.class, new RenderBattery()); ClientRegistry.bindTileEntitySpecialRenderer(TileSolarPanel.class, new RenderSolarPanel()); diff --git a/electrical/src/main/java/resonantinduction/electrical/Electrical.java b/electrical/src/main/java/resonantinduction/electrical/Electrical.java index f4fd6964..38a6e257 100644 --- a/electrical/src/main/java/resonantinduction/electrical/Electrical.java +++ b/electrical/src/main/java/resonantinduction/electrical/Electrical.java @@ -31,6 +31,7 @@ import resonantinduction.electrical.wire.EnumWireMaterial; import resonantinduction.electrical.wire.ItemWire; import resonantinduction.quantum.gate.BlockGlyph; import resonantinduction.quantum.gate.BlockQuantumGate; +import resonantinduction.quantum.gate.ItemQuantumGlyph; import resonantinduction.quantum.gate.TileQuantumGate; import calclavia.lib.content.ContentRegistry; import calclavia.lib.network.PacketHandler; @@ -94,8 +95,8 @@ public class Electrical public static Item itemDisk; // Quantum - public static Block blockGlyph; public static Block blockQuantumGate; + public static Item itemQuantumGlyph; @EventHandler public void preInit(FMLPreInitializationEvent evt) @@ -124,9 +125,8 @@ public class Electrical blockThermopile = contentRegistry.createTile(BlockThermopile.class, TileThermopile.class); // Quantum - blockGlyph = contentRegistry.createBlock(BlockGlyph.class, ItemBlockMetadata.class); blockQuantumGate = contentRegistry.createTile(BlockQuantumGate.class, TileQuantumGate.class); - + itemQuantumGlyph = contentRegistry.createItem(ItemQuantumGlyph.class); Settings.save(); OreDictionary.registerOre("wire", itemWire); diff --git a/electrical/src/main/java/resonantinduction/electrical/MultipartElectrical.java b/electrical/src/main/java/resonantinduction/electrical/MultipartElectrical.java index 230bda8d..e401bee4 100644 --- a/electrical/src/main/java/resonantinduction/electrical/MultipartElectrical.java +++ b/electrical/src/main/java/resonantinduction/electrical/MultipartElectrical.java @@ -8,6 +8,7 @@ import resonantinduction.electrical.wire.flat.PartFlatSwitchWire; import resonantinduction.electrical.wire.flat.PartFlatWire; import resonantinduction.electrical.wire.framed.PartFramedSwitchWire; import resonantinduction.electrical.wire.framed.PartFramedWire; +import resonantinduction.quantum.gate.PartQuantumGlyph; import codechicken.multipart.MultiPartRegistry; import codechicken.multipart.MultiPartRegistry.IPartFactory; import codechicken.multipart.MultipartGenerator; @@ -17,7 +18,7 @@ public class MultipartElectrical implements IPartFactory { public static MultipartElectrical INSTANCE; - public static final String[] PART_TYPES = { "resonant_induction_wire", "resonant_induction_switch_wire", "resonant_induction_flat_wire", "resonant_induction_flat_switch_wire", "resonant_induction_multimeter", "resonant_induction_transformer", "resonant_induction_charger", "resonant_induction_levitator" }; + public static final String[] PART_TYPES = { "resonant_induction_quantum_glyph", "resonant_induction_wire", "resonant_induction_switch_wire", "resonant_induction_flat_wire", "resonant_induction_flat_switch_wire", "resonant_induction_multimeter", "resonant_induction_transformer", "resonant_induction_charger", "resonant_induction_levitator" }; public MultipartElectrical() { @@ -47,6 +48,8 @@ public class MultipartElectrical implements IPartFactory return new PartCharger(); else if (name.equals("resonant_induction_levitator")) return new PartLevitator(); + else if (name.equals("resonant_induction_quantum_glyph")) + return new PartQuantumGlyph(); return null; } diff --git a/electrical/src/main/java/resonantinduction/electrical/charger/ItemCharger.java b/electrical/src/main/java/resonantinduction/electrical/charger/ItemCharger.java index 6bf84712..09129b33 100644 --- a/electrical/src/main/java/resonantinduction/electrical/charger/ItemCharger.java +++ b/electrical/src/main/java/resonantinduction/electrical/charger/ItemCharger.java @@ -34,4 +34,10 @@ public class ItemCharger extends JItemMultiPart implements IHighlight return part; } + + @Override + public int getHighlightType() + { + return 0; + } } diff --git a/electrical/src/main/java/resonantinduction/electrical/levitator/ItemLevitator.java b/electrical/src/main/java/resonantinduction/electrical/levitator/ItemLevitator.java index cb1d8546..2f5b93b2 100644 --- a/electrical/src/main/java/resonantinduction/electrical/levitator/ItemLevitator.java +++ b/electrical/src/main/java/resonantinduction/electrical/levitator/ItemLevitator.java @@ -34,4 +34,10 @@ public class ItemLevitator extends JItemMultiPart implements IHighlight return part; } + + @Override + public int getHighlightType() + { + return 0; + } } diff --git a/electrical/src/main/java/resonantinduction/electrical/multimeter/ItemMultimeter.java b/electrical/src/main/java/resonantinduction/electrical/multimeter/ItemMultimeter.java index b55466b4..fa6cb874 100644 --- a/electrical/src/main/java/resonantinduction/electrical/multimeter/ItemMultimeter.java +++ b/electrical/src/main/java/resonantinduction/electrical/multimeter/ItemMultimeter.java @@ -81,4 +81,10 @@ public class ItemMultimeter extends JItemMultiPart implements IHighlight itemStack.stackTagCompound.setFloat("detection", detection); } + + @Override + public int getHighlightType() + { + return 0; + } } diff --git a/electrical/src/main/java/resonantinduction/electrical/transformer/ItemTransformer.java b/electrical/src/main/java/resonantinduction/electrical/transformer/ItemTransformer.java index 771ec85b..a3fb9e88 100644 --- a/electrical/src/main/java/resonantinduction/electrical/transformer/ItemTransformer.java +++ b/electrical/src/main/java/resonantinduction/electrical/transformer/ItemTransformer.java @@ -34,4 +34,10 @@ public class ItemTransformer extends JItemMultiPart implements IHighlight return part; } + + @Override + public int getHighlightType() + { + return 0; + } } diff --git a/electrical/src/main/java/resonantinduction/electrical/wire/ItemWire.java b/electrical/src/main/java/resonantinduction/electrical/wire/ItemWire.java index 70581aa5..0a703c5a 100644 --- a/electrical/src/main/java/resonantinduction/electrical/wire/ItemWire.java +++ b/electrical/src/main/java/resonantinduction/electrical/wire/ItemWire.java @@ -36,14 +36,9 @@ import cpw.mods.fml.relauncher.SideOnly; public class ItemWire extends JItemMultiPart { - public ItemWire() - { - this(Settings.getNextItemID()); - } - public ItemWire(int id) { - super(Settings.CONFIGURATION.get(Configuration.CATEGORY_ITEM, "wire", id).getInt(id)); + super(id); this.setUnlocalizedName(Reference.PREFIX + "wire"); this.setTextureName(Reference.PREFIX + "wire"); this.setCreativeTab(TabRI.DEFAULT); diff --git a/electrical/src/main/java/resonantinduction/quantum/gate/ItemQuantumGlyph.java b/electrical/src/main/java/resonantinduction/quantum/gate/ItemQuantumGlyph.java new file mode 100644 index 00000000..40b6e563 --- /dev/null +++ b/electrical/src/main/java/resonantinduction/quantum/gate/ItemQuantumGlyph.java @@ -0,0 +1,95 @@ +package resonantinduction.quantum.gate; + +import java.util.List; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import resonantinduction.core.prefab.part.IHighlight; +import resonantinduction.mechanical.energy.gear.PartGearShaft; +import codechicken.lib.vec.BlockCoord; +import codechicken.lib.vec.Vector3; +import codechicken.microblock.CornerPlacementGrid$; +import codechicken.multipart.JItemMultiPart; +import codechicken.multipart.MultiPartRegistry; +import codechicken.multipart.PartMap; +import codechicken.multipart.TMultiPart; +import codechicken.multipart.TileMultipart; + +public class ItemQuantumGlyph extends JItemMultiPart implements IHighlight +{ + public ItemQuantumGlyph(int id) + { + super(id); + setHasSubtypes(true); + } + + @Override + public String getUnlocalizedName(ItemStack itemStack) + { + return super.getUnlocalizedName(itemStack) + "." + itemStack.getItemDamage(); + } + + @Override + public TMultiPart newPart(ItemStack itemStack, EntityPlayer player, World world, BlockCoord pos, int slot, Vector3 hit) + { + PartQuantumGlyph part = (PartQuantumGlyph) MultiPartRegistry.createPart("resonant_induction_quantum_glyph", false); + slot = CornerPlacementGrid$.MODULE$.getHitSlot(hit, slot); + System.out.println(slot); + switch (slot) + { + case 7: + slot = 0; + break; + case 9: + slot = 1; + break; + case 11: + slot = 2; + break; + case 13: + slot = 3; + break; + + case 8: + slot = 4; + break; + case 10: + slot = 5; + break; + case 12: + slot = 6; + break; + case 14: + slot = 7; + break; + } + + TileEntity tile = world.getBlockTileEntity(pos.x, pos.y, pos.z); + + if (tile instanceof TileMultipart) + { + + } + + part.preparePlacement(slot, itemStack.getItemDamage()); + return part; + } + + @Override + public void getSubItems(int itemID, CreativeTabs tab, List listToAddTo) + { + for (int i = 0; i < 4; i++) + { + listToAddTo.add(new ItemStack(itemID, 1, i)); + } + } + + @Override + public int getHighlightType() + { + return 1; + } +} diff --git a/electrical/src/main/java/resonantinduction/quantum/gate/PartQuantumGlyph.java b/electrical/src/main/java/resonantinduction/quantum/gate/PartQuantumGlyph.java new file mode 100644 index 00000000..6104447b --- /dev/null +++ b/electrical/src/main/java/resonantinduction/quantum/gate/PartQuantumGlyph.java @@ -0,0 +1,127 @@ +package resonantinduction.quantum.gate; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MovingObjectPosition; +import resonantinduction.core.Reference; +import resonantinduction.electrical.Electrical; +import calclavia.lib.render.RenderUtility; +import codechicken.lib.data.MCDataInput; +import codechicken.lib.data.MCDataOutput; +import codechicken.lib.vec.Cuboid6; +import codechicken.lib.vec.Vector3; +import codechicken.multipart.JCuboidPart; +import codechicken.multipart.JNormalOcclusion; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class PartQuantumGlyph extends JCuboidPart implements JNormalOcclusion +{ + static final Cuboid6[] bounds = new Cuboid6[8]; + + static + { + bounds[0] = new Cuboid6(0, 0, 0, 0.5, 0.5, 0.5); + bounds[1] = new Cuboid6(0, 0, 0.5, 0.5, 0.5, 1); + bounds[2] = new Cuboid6(0.5, 0, 0, 1, 0.5, 0.5); + bounds[3] = new Cuboid6(0.5, 0, 0.5, 1, 0.5, 1); + + bounds[4] = new Cuboid6(0, 0.5, 0, 0.5, 1, 0.5); + bounds[5] = new Cuboid6(0, 0.5, 0.5, 0.5, 1, 1); + bounds[6] = new Cuboid6(0.5, 0.5, 0, 1, 1, 0.5); + bounds[7] = new Cuboid6(0.5, 0.5, 0.5, 1, 1, 1); + } + + private byte side; + byte number; + + public void preparePlacement(int side, int itemDamage) + { + this.side = (byte) side; + this.number = (byte) itemDamage; + } + + @Override + public String getType() + { + return "resonant_induction_quantum_glyph"; + } + + @SideOnly(Side.CLIENT) + @Override + public void renderDynamic(Vector3 pos, float frame, int pass) + { + RenderQuantumGlyph.INSTANCE.render(this, pos.x, pos.y, pos.z); + } + + @Override + public Cuboid6 getBounds() + { + if (side < bounds.length) + if (bounds[side] != null) + return bounds[side]; + + return new Cuboid6(0, 0, 0, 0.5, 0.5, 0.5); + } + + @Override + public Iterable getOcclusionBoxes() + { + return Arrays.asList(new Cuboid6[] { getBounds() }); + } + + protected ItemStack getItem() + { + return new ItemStack(Electrical.itemQuantumGlyph); + } + + @Override + public Iterable getDrops() + { + List drops = new ArrayList(); + drops.add(getItem()); + return drops; + } + + @Override + public ItemStack pickItem(MovingObjectPosition hit) + { + return getItem(); + } + + /** Packet Code. */ + @Override + public void readDesc(MCDataInput packet) + { + load(packet.readNBTTagCompound()); + } + + @Override + public void writeDesc(MCDataOutput packet) + { + // packet.writeByte(0); + NBTTagCompound nbt = new NBTTagCompound(); + save(nbt); + packet.writeNBTTagCompound(nbt); + } + + @Override + public void load(NBTTagCompound nbt) + { + side = nbt.getByte("side"); + number = nbt.getByte("number"); + } + + @Override + public void save(NBTTagCompound nbt) + { + nbt.setByte("side", side); + nbt.setByte("number", number); + } + +} diff --git a/electrical/src/main/java/resonantinduction/quantum/gate/RenderQuantumGlyph.java b/electrical/src/main/java/resonantinduction/quantum/gate/RenderQuantumGlyph.java new file mode 100644 index 00000000..5231c430 --- /dev/null +++ b/electrical/src/main/java/resonantinduction/quantum/gate/RenderQuantumGlyph.java @@ -0,0 +1,43 @@ +package resonantinduction.quantum.gate; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.AdvancedModelLoader; +import net.minecraftforge.client.model.IModelCustom; + +import org.lwjgl.opengl.GL11; + +import codechicken.lib.vec.Cuboid6; +import codechicken.lib.vec.Vector3; +import resonantinduction.core.Reference; +import resonantinduction.electrical.Electrical; +import calclavia.lib.render.RenderUtility; +import calclavia.lib.render.item.ISimpleItemRenderer; +import cpw.mods.fml.client.FMLClientHandler; + +public class RenderQuantumGlyph implements ISimpleItemRenderer +{ + public static final RenderQuantumGlyph INSTANCE = new RenderQuantumGlyph(); + + public void render(PartQuantumGlyph part, double x, double y, double z) + { + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + Cuboid6 bound = part.getBounds().copy(); + bound.expand(-0.02); + RenderUtility.bind(TextureMap.locationBlocksTexture); + RenderUtility.renderCube(bound.min.x, bound.min.y, bound.min.z, bound.max.x, bound.max.y, bound.max.z, Block.stone, RenderUtility.getIcon(Reference.PREFIX + "glyph_" + part.number)); + GL11.glPopMatrix(); + } + + @Override + public void renderInventoryItem(ItemStack itemStack) + { + GL11.glPushMatrix(); + RenderUtility.bind(TextureMap.locationBlocksTexture); + RenderUtility.renderCube(-0.5, -0.5, -0.5, 0.5, 0.5, 0.5, Block.stone, RenderUtility.getIcon(Reference.PREFIX + "glyph_" + itemStack.getItemDamage())); + GL11.glPopMatrix(); + } +} diff --git a/mechanical/src/main/java/resonantinduction/mechanical/MicroblockHighlightHandler.java b/mechanical/src/main/java/resonantinduction/mechanical/MicroblockHighlightHandler.java index 1ea1d6c7..d19df39e 100644 --- a/mechanical/src/main/java/resonantinduction/mechanical/MicroblockHighlightHandler.java +++ b/mechanical/src/main/java/resonantinduction/mechanical/MicroblockHighlightHandler.java @@ -10,6 +10,7 @@ import resonantinduction.core.prefab.part.IHighlight; import codechicken.lib.render.RenderUtils; import codechicken.lib.vec.Vector3; import codechicken.microblock.FacePlacementGrid$; +import codechicken.microblock.CornerPlacementGrid$; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -24,7 +25,16 @@ public class MicroblockHighlightHandler GL11.glPushMatrix(); RenderUtils.translateToWorldCoords(event.player, event.partialTicks); Vector3 hit = new Vector3(event.target.hitVec); - FacePlacementGrid$.MODULE$.render(hit, event.target.sideHit); + + switch (((IHighlight) event.currentItem.getItem()).getHighlightType()) + { + case 0: + FacePlacementGrid$.MODULE$.render(hit, event.target.sideHit); + break; + case 1: + CornerPlacementGrid$.MODULE$.render(hit, event.target.sideHit); + } + event.setCanceled(true); GL11.glPopMatrix(); } diff --git a/mechanical/src/main/java/resonantinduction/mechanical/energy/gear/ItemGear.java b/mechanical/src/main/java/resonantinduction/mechanical/energy/gear/ItemGear.java index cce6eaea..1deb3251 100644 --- a/mechanical/src/main/java/resonantinduction/mechanical/energy/gear/ItemGear.java +++ b/mechanical/src/main/java/resonantinduction/mechanical/energy/gear/ItemGear.java @@ -63,4 +63,10 @@ public class ItemGear extends JItemMultiPart implements IHighlight listToAddTo.add(new ItemStack(itemID, 1, i)); } } + + @Override + public int getHighlightType() + { + return 0; + } } diff --git a/mechanical/src/main/java/resonantinduction/mechanical/energy/gear/ItemGearShaft.java b/mechanical/src/main/java/resonantinduction/mechanical/energy/gear/ItemGearShaft.java index acf746c7..0e187e6c 100644 --- a/mechanical/src/main/java/resonantinduction/mechanical/energy/gear/ItemGearShaft.java +++ b/mechanical/src/main/java/resonantinduction/mechanical/energy/gear/ItemGearShaft.java @@ -48,4 +48,10 @@ public class ItemGearShaft extends JItemMultiPart implements IHighlight listToAddTo.add(new ItemStack(itemID, 1, i)); } } + + @Override + public int getHighlightType() + { + return 0; + } } diff --git a/src/main/java/resonantinduction/core/handler/TextureHookHandler.java b/src/main/java/resonantinduction/core/handler/TextureHookHandler.java index 167923f1..b1cc93d0 100644 --- a/src/main/java/resonantinduction/core/handler/TextureHookHandler.java +++ b/src/main/java/resonantinduction/core/handler/TextureHookHandler.java @@ -23,6 +23,11 @@ public class TextureHookHandler { if (event.map.textureType == 0) { + RenderUtility.registerIcon(Reference.PREFIX + "glyph_0", event.map); + RenderUtility.registerIcon(Reference.PREFIX + "glyph_1", event.map); + RenderUtility.registerIcon(Reference.PREFIX + "glyph_2", event.map); + RenderUtility.registerIcon(Reference.PREFIX + "glyph_3", event.map); + RenderUtility.registerIcon(Reference.PREFIX + "mixture_flow", event.map); RenderUtility.registerIcon(Reference.PREFIX + "molten_flow", event.map); RenderUtility.registerIcon(Reference.PREFIX + "multimeter_screen", event.map); diff --git a/src/main/java/resonantinduction/core/prefab/part/IHighlight.java b/src/main/java/resonantinduction/core/prefab/part/IHighlight.java index 4e32b45e..cb7995fa 100644 --- a/src/main/java/resonantinduction/core/prefab/part/IHighlight.java +++ b/src/main/java/resonantinduction/core/prefab/part/IHighlight.java @@ -2,5 +2,5 @@ package resonantinduction.core.prefab.part; public interface IHighlight { - + public int getHighlightType(); } diff --git a/src/main/resources/assets/resonantinduction/languages/en_US.properties b/src/main/resources/assets/resonantinduction/languages/en_US.properties index f8482b52..82a2f6f3 100644 --- a/src/main/resources/assets/resonantinduction/languages/en_US.properties +++ b/src/main/resources/assets/resonantinduction/languages/en_US.properties @@ -147,10 +147,11 @@ item.resonantinduction\:multimeter.tooltip=Multimeter is a panel that display th ### Quantum Tier tile.resonantinduction\:quantumGate.name=Quantum Gate -tile.resonantinduction\:glyph.0.name=Monogon Glyph -tile.resonantinduction\:glyph.1.name=Digon Glyph -tile.resonantinduction\:glyph.2.name=Trigon Glyph -tile.resonantinduction\:glyph.3.name=Tetragon Glyph +item.resonantinduction\:quantumGlyph.0.name=Nought Glyph +item.resonantinduction\:quantumGlyph.1.name=Monogon Glyph +item.resonantinduction\:quantumGlyph.2.name=Digon Glyph +item.resonantinduction\:quantumGlyph.3.name=Trigon Glyph +item.resonantinduction\:quantumGlyph.4.name=Tetragon Glyph ## Tool-tips tooltip.pipe.rate=Flow Rate: %v