diff --git a/assets/hbm/lang/de_DE.lang b/assets/hbm/lang/de_DE.lang index a50a7a3fd..f09403f13 100644 --- a/assets/hbm/lang/de_DE.lang +++ b/assets/hbm/lang/de_DE.lang @@ -559,8 +559,11 @@ container.dfcEmitter=DFC-Emitter tile.dfc_receiver.name=DFC-Receiver container.dfcReceiver=DFC-Receiver tile.dfc_injector.name=DFC-Brennstoffinjektor +container.dfcInjector=DFC-Brennstoffinjektor +tile.dfc_stabilizer.name=DFC-Stabilisator +container.dfcStabilizer=DFC-Stabilisator tile.dfc_core.name=Dunkler Fusionskern -container.dfcCore.name=Dunkler Fusionskern +container.dfc_core=Dunkler Fusionskern item.template_folder.name=Produktionsvorlagen-Zeichenmappe item.fluid_identifier.name=Flüssigkeits-Kennzeichnung @@ -2249,6 +2252,8 @@ item.ams_focus_booster.name=Verstärkender Stabilisierungsfokus item.ams_muzzle.name=Strahlenemissions-Mündung +item.ams_lens.name=Stabilisierer-Linse + item.ams_core_sing.name=Vibrierende Singularität (AMS-Kern) item.ams_core_wormhole.name=Winziges Wurmloch (AMS-Kern) item.ams_core_eyeofharmony.name=Auge der Harmonie (AMS-Kern) diff --git a/assets/hbm/lang/en_US.lang b/assets/hbm/lang/en_US.lang index 16b0e6f54..9ae6ef9a5 100644 --- a/assets/hbm/lang/en_US.lang +++ b/assets/hbm/lang/en_US.lang @@ -559,8 +559,11 @@ container.dfcEmitter=DFC Emitter tile.dfc_receiver.name=DFC Receiver container.dfcReceiver=DFC Receiver tile.dfc_injector.name=DFC Fuel Injector +container.dfcInjector=DFC Fuel Injector +tile.dfc_stabilizer.name=DFC Stabilizer +container.dfcStabilizer=DFC Stabilizer tile.dfc_core.name=Dark Fusion Core -container.dfcCore.name=Dark Fusion Core +container.dfcCore=Dark Fusion Core item.template_folder.name=Machine Template Folder item.fluid_identifier.name=Fluid Identifier @@ -2249,6 +2252,8 @@ item.ams_focus_booster.name=Boosting Stabilizer Focus item.ams_muzzle.name=Ray-Emission Muzzle +item.ams_lens.name=Stabilizer Lens + item.ams_core_sing.name=Vibrant Singularity (AMS Core) item.ams_core_wormhole.name=Tiny Wormhole (AMS Core) item.ams_core_eyeofharmony.name=Eye of Harmony (AMS Core) diff --git a/assets/hbm/textures/blocks/dfc_stabilizer.png b/assets/hbm/textures/blocks/dfc_stabilizer.png new file mode 100644 index 000000000..06867a3b9 Binary files /dev/null and b/assets/hbm/textures/blocks/dfc_stabilizer.png differ diff --git a/assets/hbm/textures/items/ams_lens.png b/assets/hbm/textures/items/ams_lens.png new file mode 100644 index 000000000..94ca3cb16 Binary files /dev/null and b/assets/hbm/textures/items/ams_lens.png differ diff --git a/com/hbm/inventory/container/ContainerCoreStabilizer.java b/com/hbm/inventory/container/ContainerCoreStabilizer.java index 1f13f478e..88c62e570 100644 --- a/com/hbm/inventory/container/ContainerCoreStabilizer.java +++ b/com/hbm/inventory/container/ContainerCoreStabilizer.java @@ -6,6 +6,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; public class ContainerCoreStabilizer extends Container { @@ -15,6 +16,8 @@ public class ContainerCoreStabilizer extends Container { nukeBoy = tedf; + this.addSlotToContainer(new Slot(tedf, 0, 80, 17)); + for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) @@ -28,6 +31,38 @@ public class ContainerCoreStabilizer extends Container { this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); } } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) + { + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(par2); + + if (var4 != null && var4.getHasStack()) + { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if (par2 == 0) { + if (!this.mergeItemStack(var5, 1, this.inventorySlots.size(), true)) { + return null; + } + } else if (!this.mergeItemStack(var5, 0, 1, true)) { + return null; + } + + if (var5.stackSize == 0) + { + var4.putStack((ItemStack) null); + } + else + { + var4.onSlotChanged(); + } + } + + return var3; + } @Override public boolean canInteractWith(EntityPlayer player) { diff --git a/com/hbm/inventory/gui/GUICore.java b/com/hbm/inventory/gui/GUICore.java index 50bca6c66..ca6f7679b 100644 --- a/com/hbm/inventory/gui/GUICore.java +++ b/com/hbm/inventory/gui/GUICore.java @@ -33,7 +33,9 @@ public class GUICore extends GuiInfoContainer { core.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 134, guiTop + 17, 16, 52); String[] text = new String[] { "Restriction Field: " + core.field + "%" }; + String[] text1 = new String[] { "Heat Saturation: " + core.heat + "%" }; this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 8, guiTop + 17, 16, 52, mouseX, mouseY, text); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 152, guiTop + 17, 16, 52, mouseX, mouseY, text1); } @Override diff --git a/com/hbm/inventory/gui/GUICoreReceiver.java b/com/hbm/inventory/gui/GUICoreReceiver.java index c2a0db956..d471d71a0 100644 --- a/com/hbm/inventory/gui/GUICoreReceiver.java +++ b/com/hbm/inventory/gui/GUICoreReceiver.java @@ -40,7 +40,8 @@ public class GUICoreReceiver extends GuiInfoContainer { this.fontRendererObj.drawString("Input:", 40, 25, 0xFF7F7F); this.fontRendererObj.drawString(Library.getShortNumber(receiver.joules) + "Spk", 50, 35, 0xFF7F7F); - this.fontRendererObj.drawString(Library.getShortNumber(receiver.joules * 5000) + "HE", 50, 45, 0xFF7F7F); + this.fontRendererObj.drawString("Output:", 40, 45, 0xFF7F7F); + this.fontRendererObj.drawString(Library.getShortNumber(receiver.joules * 5000) + "HE", 50, 55, 0xFF7F7F); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } diff --git a/com/hbm/items/ModItems.java b/com/hbm/items/ModItems.java index fc41c3365..8cf716af4 100644 --- a/com/hbm/items/ModItems.java +++ b/com/hbm/items/ModItems.java @@ -536,6 +536,8 @@ public class ModItems { public static Item ams_muzzle; + public static Item ams_lens; + public static Item ams_core_sing; public static Item ams_core_wormhole; public static Item ams_core_eyeofharmony; @@ -3065,6 +3067,7 @@ public class ModItems { ams_focus_limiter = new ItemCustomLore().setUnlocalizedName("ams_focus_limiter").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_focus_limiter"); ams_focus_booster = new ItemCustomLore().setUnlocalizedName("ams_focus_booster").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_focus_booster"); ams_muzzle = new ItemCustomLore().setUnlocalizedName("ams_muzzle").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_muzzle"); + ams_lens = new ItemLens().setUnlocalizedName("ams_lens").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_lens"); ams_core_sing = new ItemAMSCore(1000000000L, 200, 10).setUnlocalizedName("ams_core_sing").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_core_sing"); ams_core_wormhole = new ItemAMSCore(1500000000L, 200, 15).setUnlocalizedName("ams_core_wormhole").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_core_wormhole"); ams_core_eyeofharmony = new ItemAMSCore(2500000000L, 300, 10).setUnlocalizedName("ams_core_eyeofharmony").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_core_eyeofharmony"); @@ -4226,6 +4229,7 @@ public class ModItems { GameRegistry.registerItem(ams_focus_limiter, ams_focus_limiter.getUnlocalizedName()); GameRegistry.registerItem(ams_focus_booster, ams_focus_booster.getUnlocalizedName()); GameRegistry.registerItem(ams_muzzle, ams_muzzle.getUnlocalizedName()); + GameRegistry.registerItem(ams_lens, ams_lens.getUnlocalizedName()); GameRegistry.registerItem(ams_core_sing, ams_core_sing.getUnlocalizedName()); GameRegistry.registerItem(ams_core_wormhole, ams_core_wormhole.getUnlocalizedName()); GameRegistry.registerItem(ams_core_eyeofharmony, ams_core_eyeofharmony.getUnlocalizedName()); diff --git a/com/hbm/items/special/ItemCatalyst.java b/com/hbm/items/special/ItemCatalyst.java index d75d5befd..a0dbfe25a 100644 --- a/com/hbm/items/special/ItemCatalyst.java +++ b/com/hbm/items/special/ItemCatalyst.java @@ -37,10 +37,14 @@ public class ItemCatalyst extends Item { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { - list.add("Absolute Energy Bonus: " + powerAbs + "HE"); + /*list.add("Absolute Energy Bonus: " + powerAbs + "HE"); list.add("Energy Modifier: " + (powerMod >= 1 ? "+" : "") + (Math.round(powerMod * 1000) * .10 - 100) + "%"); list.add("Heat Modifier: " + (heatMod >= 1 ? "+" : "") + (Math.round(heatMod * 1000) * .10 - 100) + "%"); - list.add("Fuel Modifier: " + (fuelMod >= 1 ? "+" : "") + (Math.round(fuelMod * 1000) * .10 - 100) + "%"); + list.add("Fuel Modifier: " + (fuelMod >= 1 ? "+" : "") + (Math.round(fuelMod * 1000) * .10 - 100) + "%");*/ + //TODO: do something useful with this + + list.add("Adds spice to the core."); + list.add("Look at all those colors!"); } public static long getPowerAbs(ItemStack stack) { diff --git a/com/hbm/items/special/ItemLens.java b/com/hbm/items/special/ItemLens.java new file mode 100644 index 000000000..d2c668f90 --- /dev/null +++ b/com/hbm/items/special/ItemLens.java @@ -0,0 +1,53 @@ +package com.hbm.items.special; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class ItemLens extends Item { + + public static final long maxDamage = 60 * 60 * 60 * 20 * 100; //1 hour at 100%, 100 hours at 1% + + public static long getLensDamage(ItemStack stack) { + + if(!stack.hasTagCompound()) { + stack.stackTagCompound = new NBTTagCompound(); + return 0; + } + + return stack.stackTagCompound.getLong("damage"); + } + + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + long damage = getLensDamage(stack); + int percent = (int) ((maxDamage - damage) * 100 / maxDamage); + + list.add("Durability: " + (maxDamage - damage) + "/" + maxDamage + " (" + percent + "%)"); + } + + public static void setLensDamage(ItemStack stack, long damage) { + + if(!stack.hasTagCompound()) { + stack.stackTagCompound = new NBTTagCompound(); + } + + stack.stackTagCompound.setLong("damage", damage); + } + + public double getDurabilityForDisplay(ItemStack stack) + { + return (double)getLensDamage(stack) / (double)maxDamage; + } + + public boolean showDurabilityBar(ItemStack stack) + { + return true; + } + +} diff --git a/com/hbm/lib/RefStrings.java b/com/hbm/lib/RefStrings.java index 5bbe2224d..f5d82a85e 100644 --- a/com/hbm/lib/RefStrings.java +++ b/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (3442)"; + public static final String VERSION = "1.0.27 BETA (3461)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/com/hbm/main/CraftingManager.java b/com/hbm/main/CraftingManager.java index 5e973d7d0..c388a18cb 100644 --- a/com/hbm/main/CraftingManager.java +++ b/com/hbm/main/CraftingManager.java @@ -1679,6 +1679,38 @@ public class CraftingManager { GameRegistry.addRecipe(new ItemStack(ModBlocks.struct_launcher_core_large, 1), new Object[] { "SIS", "ICI", "BEB", 'S', ModItems.circuit_red_copper, 'I', Blocks.iron_bars, 'C', ModItems.circuit_targeting_tier4, 'B', ModBlocks.struct_launcher, 'E', ModBlocks.machine_battery }); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.obj_tester, 1), new Object[] { "P", "I", "S", 'P', ModItems.polaroid, 'I', ModItems.flame_pony, 'S', "plateSteel" })); + + GameRegistry.addRecipe(new ItemStack(ModBlocks.fence_metal, 6), new Object[] { "BIB", "BIB", 'B', Blocks.iron_bars, 'I', Items.iron_ingot }); + + GameRegistry.addRecipe(new ItemStack(ModItems.rune_blank, 1), new Object[] { "PSP", "SDS", "PSP", 'P', ModItems.powder_magic, 'S', ModItems.ingot_starmetal, 'D', ModItems.dynosphere_dineutronium_charged }); + GameRegistry.addShapelessRecipe(new ItemStack(ModItems.rune_isa, 1), new Object[] { ModItems.rune_blank, ModItems.powder_spark_mix, ModItems.singularity_counter_resonant }); + GameRegistry.addShapelessRecipe(new ItemStack(ModItems.rune_dagaz, 1), new Object[] { ModItems.rune_blank, ModItems.powder_spark_mix, ModItems.singularity }); + GameRegistry.addShapelessRecipe(new ItemStack(ModItems.rune_hagalaz, 1), new Object[] { ModItems.rune_blank, ModItems.powder_spark_mix, ModItems.singularity_super_heated }); + GameRegistry.addShapelessRecipe(new ItemStack(ModItems.rune_jera, 1), new Object[] { ModItems.rune_blank, ModItems.powder_spark_mix, ModItems.singularity_spark }); + GameRegistry.addShapelessRecipe(new ItemStack(ModItems.rune_thurisaz, 1), new Object[] { ModItems.rune_blank, ModItems.powder_spark_mix, ModItems.black_hole }); + GameRegistry.addRecipe(new ItemStack(ModItems.ams_lens, 1), new Object[] { "PDP", "GDG", "PDP", 'P', ModItems.plate_dineutronium, 'G', ModBlocks.reinforced_glass, 'D', Blocks.diamond_block }); + GameRegistry.addRecipe(new ItemStack(ModItems.ams_catalyst_blank, 1), new Object[] { "TET", "ETE", "TET", 'T', ModItems.powder_tennessine, 'E', ModItems.ingot_euphemium}); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_lithium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_isa, ModItems.rune_isa, ModItems.rune_jera, ModItems.rune_jera, "dustLithium", "dustLithium", "dustLithium", "dustLithium" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_beryllium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_isa, ModItems.rune_dagaz, ModItems.rune_jera, ModItems.rune_jera, "dustBeryllium", "dustBeryllium", "dustBeryllium", "dustBeryllium" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_copper, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_dagaz, ModItems.rune_dagaz, ModItems.rune_jera, ModItems.rune_jera, "dustCopper", "dustCopper", "dustCopper", "dustCopper" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_cobalt, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_dagaz, ModItems.rune_hagalaz, ModItems.rune_jera, ModItems.rune_jera, "dustCobalt", "dustCobalt", "dustCobalt", "dustCobalt" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_tungsten, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_hagalaz, ModItems.rune_hagalaz, ModItems.rune_jera, ModItems.rune_jera, "dustTungsten", "dustTungsten", "dustTungsten", "dustTungsten" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_aluminium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_isa, ModItems.rune_isa, ModItems.rune_jera, ModItems.rune_thurisaz, "dustAluminum", "dustAluminum", "dustAluminum", "dustAluminum" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_iron, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_isa, ModItems.rune_dagaz, ModItems.rune_jera, ModItems.rune_thurisaz, "dustIron", "dustIron", "dustIron", "dustIron" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_strontium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_dagaz, ModItems.rune_dagaz, ModItems.rune_jera, ModItems.rune_thurisaz, "dustStrontium", "dustStrontium", "dustStrontium", "dustStrontium" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_niobium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_dagaz, ModItems.rune_hagalaz, ModItems.rune_jera, ModItems.rune_thurisaz, "dustNiobium", "dustNiobium", "dustNiobium", "dustNiobium" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_cerium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_hagalaz, ModItems.rune_hagalaz, ModItems.rune_jera, ModItems.rune_thurisaz, "dustCerium", "dustCerium", "dustCerium", "dustCerium" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_caesium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_isa, ModItems.rune_isa, ModItems.rune_thurisaz, ModItems.rune_thurisaz, "dustCaesium", "dustCaesium", "dustCaesium", "dustCaesium" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_thorium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_isa, ModItems.rune_dagaz, ModItems.rune_thurisaz, ModItems.rune_thurisaz, "dustThorium", "dustThorium", "dustThorium", "dustThorium" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_euphemium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_dagaz, ModItems.rune_dagaz, ModItems.rune_thurisaz, ModItems.rune_thurisaz, "dustEuphemium", "dustEuphemium", "dustEuphemium", "dustEuphemium" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_schrabidium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_dagaz, ModItems.rune_hagalaz, ModItems.rune_thurisaz, ModItems.rune_thurisaz, "dustSchrabidium", "dustSchrabidium", "dustSchrabidium", "dustSchrabidium" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.ams_catalyst_dineutronium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_hagalaz, ModItems.rune_hagalaz, ModItems.rune_thurisaz, ModItems.rune_thurisaz, "dustDineutronium", "dustDineutronium", "dustDineutronium", "dustDineutronium" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.dfc_core, 1), new Object[] { "DLD", "LML", "DLD", 'D', ModItems.plate_dineutronium, 'L', "blockLead", 'M', ModBlocks.block_meteor })); + GameRegistry.addRecipe(new ItemStack(ModBlocks.dfc_emitter, 1), new Object[] { "SDS", "TXL", "SDS", 'S', ModItems.ingot_starmetal, 'D', ModItems.plate_desh, 'T', ModBlocks.machine_transformer_dnt, 'X', ModItems.crystal_xen, 'L', ModItems.sat_head_laser }); + GameRegistry.addRecipe(new ItemStack(ModBlocks.dfc_receiver, 1), new Object[] { "SDS", "TXL", "SDS", 'S', ModItems.ingot_starmetal, 'D', ModItems.plate_desh, 'T', ModBlocks.machine_transformer_dnt, 'X', ModBlocks.sellafield_core, 'L', ModItems.hull_small_steel }); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.dfc_injector, 1), new Object[] { "SDS", "TXL", "SDS", 'S', ModItems.ingot_starmetal, 'D', ModItems.plate_combine_steel, 'T', ModBlocks.machine_fluidtank, 'X', ModItems.motor, 'L', ModItems.pipes_steel })); + GameRegistry.addRecipe(new ItemStack(ModBlocks.dfc_stabilizer, 1), new Object[] { "SDS", "TXL", "SDS", 'S', ModItems.ingot_starmetal, 'D', ModItems.plate_desh, 'T', ModItems.singularity_spark, 'X', ModItems.magnet_circular, 'L', ModItems.crystal_xen }); + } public static void AddSmeltingRec() diff --git a/com/hbm/render/tileentity/RenderCore.java b/com/hbm/render/tileentity/RenderCore.java index abd740d57..bb462d38f 100644 --- a/com/hbm/render/tileentity/RenderCore.java +++ b/com/hbm/render/tileentity/RenderCore.java @@ -27,7 +27,11 @@ public class RenderCore extends TileEntitySpecialRenderer { public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { TileEntityCore core = (TileEntityCore)tileEntity; - renderStandby(x, y, z); + + if(core.heat == 0) + renderStandby(x, y, z); + else + renderOrb(core, x, y, z); } public void renderStandby(double x, double y, double z) { @@ -62,6 +66,48 @@ public class RenderCore extends TileEntitySpecialRenderer { GL11.glPopMatrix(); } + public void renderOrb(TileEntityCore tile, double x, double y, double z) { + + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); + + int color = tile.color; + GL11.glColor3ub((byte)((color & 0xFF0000) >> 16), (byte)((color & 0x00FF00) >> 8), (byte)((color & 0x0000FF) >> 0)); + + int tot = tile.tanks[0].getMaxFill() + tile.tanks[1].getMaxFill(); + int fill = tile.tanks[0].getFill() + tile.tanks[1].getFill(); + + float scale = 4.5F * fill / tot + 0.5F; + GL11.glScalef(scale, scale, scale); + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_TEXTURE_2D); + + GL11.glScalef(0.5F, 0.5F, 0.5F); + ResourceManager.sphere_ruv.renderAll(); + GL11.glScalef(2F, 2F, 2F); + + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + + for(int i = 6; i <= 10; i++) { + + GL11.glPushMatrix(); + GL11.glScalef(i * 0.1F, i * 0.1F, i * 0.1F); + ResourceManager.sphere_ruv.renderAll(); + GL11.glPopMatrix(); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glPopMatrix(); + } + public void renderVoid(TileEntity tile, double x, double y, double z) { World world = tile.getWorldObj(); diff --git a/com/hbm/tileentity/machine/TileEntityCore.java b/com/hbm/tileentity/machine/TileEntityCore.java index 5bf78f194..62c30c542 100644 --- a/com/hbm/tileentity/machine/TileEntityCore.java +++ b/com/hbm/tileentity/machine/TileEntityCore.java @@ -1,7 +1,11 @@ package com.hbm.tileentity.machine; +import com.hbm.entity.effect.EntityCloudFleijaRainbow; +import com.hbm.entity.logic.EntityNukeExplosionMK3; import com.hbm.handler.FluidTypeHandler.FluidType; import com.hbm.inventory.FluidTank; +import com.hbm.items.ModItems; +import com.hbm.items.special.ItemCatalyst; import com.hbm.tileentity.TileEntityMachineBase; import net.minecraft.nbt.NBTTagCompound; @@ -22,7 +26,7 @@ public class TileEntityCore extends TileEntityMachineBase { @Override public String getName() { - return "container.dfc_core"; + return "container.dfcCore"; } @Override @@ -30,6 +34,44 @@ public class TileEntityCore extends TileEntityMachineBase { if(!worldObj.isRemote) { + if(heat > 0 && heat >= field) { + + int fill = tanks[0].getFill() + tanks[1].getFill(); + int max = tanks[0].getMaxFill() + tanks[1].getMaxFill(); + int mod = heat * 10; + + int size = Math.max(Math.min(fill * mod / max, 1000), 50); + + //System.out.println(fill + " * " + mod + " / " + max + " = " + size); + + worldObj.playSoundEffect(xCoord, yCoord, zCoord, "random.explode", 100000.0F, 1.0F); + + EntityNukeExplosionMK3 exp = new EntityNukeExplosionMK3(worldObj); + exp.posX = xCoord; + exp.posY = yCoord; + exp.posZ = zCoord; + exp.destructionRange = size; + exp.speed = 25; + exp.coefficient = 1.0F; + exp.waste = false; + + worldObj.spawnEntityInWorld(exp); + + EntityCloudFleijaRainbow cloud = new EntityCloudFleijaRainbow(worldObj, size); + cloud.posX = xCoord; + cloud.posY = yCoord; + cloud.posZ = zCoord; + worldObj.spawnEntityInWorld(cloud); + } + + if(slots[0] != null && slots[2] != null && slots[0].getItem() instanceof ItemCatalyst && slots[2].getItem() instanceof ItemCatalyst) + color = calcAvgHex( + ((ItemCatalyst)slots[0].getItem()).getColor(), + ((ItemCatalyst)slots[2].getItem()).getColor() + ); + else + color = 0; + NBTTagCompound data = new NBTTagCompound(); data.setInteger("tank0", tanks[0].getTankType().ordinal()); data.setInteger("tank1", tanks[1].getTankType().ordinal()); @@ -37,7 +79,15 @@ public class TileEntityCore extends TileEntityMachineBase { data.setInteger("fill1", tanks[1].getFill()); data.setInteger("field", field); data.setInteger("heat", heat); + data.setInteger("color", color); networkPack(data, 250); + + heat = 0; + field = 0; + this.markDirty(); + } else { + + //TODO: sick particle effects } } @@ -50,6 +100,7 @@ public class TileEntityCore extends TileEntityMachineBase { tanks[1].setFill(data.getInteger("fill1")); field = data.getInteger("field"); heat = data.getInteger("heat"); + color = data.getInteger("color"); } public int getFieldScaled(int i) { @@ -60,9 +111,39 @@ public class TileEntityCore extends TileEntityMachineBase { return (heat * i) / 100; } + public boolean isReady() { + + if(getCore() == 0) + return false; + + if(color == 0) + return false; + + if(getFuelEfficiency(tanks[0].getTankType()) <= 0 || getFuelEfficiency(tanks[1].getTankType()) <= 0) + return false; + + return true; + } + + //100 emitter watt = 10000 joules = 1 heat = 10mB burned public long burn(long joules) { - return 0; + //check if a reaction can take place + if(!isReady()) + return joules; + + int demand = (int)Math.ceil((double)joules / 1000D); + + //check if the reaction has enough valid fuel + if(tanks[0].getFill() < demand || tanks[1].getFill() < demand) + return joules; + + heat += (int)Math.ceil((double)joules / 10000D); + + tanks[0].setFill(tanks[0].getFill() - demand); + tanks[1].setFill(tanks[1].getFill() - demand); + + return (long) (joules * getCore() * getFuelEfficiency(tanks[0].getTankType()) * getFuelEfficiency(tanks[1].getTankType())); } public float getFuelEfficiency(FluidType type) { @@ -93,5 +174,60 @@ public class TileEntityCore extends TileEntityMachineBase { return 0; } } + + //TODO: move stats to the AMSCORE class + public int getCore() { + + if(slots[1] == null) { + return 0; + } + + if(slots[1].getItem() == ModItems.ams_core_sing) + return 500; + + if(slots[1].getItem() == ModItems.ams_core_wormhole) + return 650; + + if(slots[1].getItem() == ModItems.ams_core_eyeofharmony) + return 800; + + if(slots[1].getItem() == ModItems.ams_core_thingy) + return 2500; + + return 0; + } + + private int calcAvgHex(int h1, int h2) { + + int r1 = ((h1 & 0xFF0000) >> 16); + int g1 = ((h1 & 0x00FF00) >> 8); + int b1 = ((h1 & 0x0000FF) >> 0); + + int r2 = ((h2 & 0xFF0000) >> 16); + int g2 = ((h2 & 0x00FF00) >> 8); + int b2 = ((h2 & 0x0000FF) >> 0); + + int r = (((r1 + r2) / 2) << 16); + int g = (((g1 + g2) / 2) << 8); + int b = (((b1 + b2) / 2) << 0); + + return r | g | b; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + tanks[0].readFromNBT(nbt, "fuel1"); + tanks[1].readFromNBT(nbt, "fuel2"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + tanks[0].writeToNBT(nbt, "fuel1"); + tanks[1].writeToNBT(nbt, "fuel2"); + } } diff --git a/com/hbm/tileentity/machine/TileEntityCoreEmitter.java b/com/hbm/tileentity/machine/TileEntityCoreEmitter.java index 7b843ecaf..20b8c23b7 100644 --- a/com/hbm/tileentity/machine/TileEntityCoreEmitter.java +++ b/com/hbm/tileentity/machine/TileEntityCoreEmitter.java @@ -101,7 +101,7 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements ICon } if(te instanceof TileEntityCore) { - ((TileEntityCore)te).burn(out); + out = ((TileEntityCore)te).burn(out); continue; } diff --git a/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java b/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java index 15ef6d38c..03b88b93e 100644 --- a/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java +++ b/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java @@ -1,6 +1,8 @@ package com.hbm.tileentity.machine; import com.hbm.interfaces.IConsumer; +import com.hbm.items.ModItems; +import com.hbm.items.special.ItemLens; import com.hbm.tileentity.TileEntityMachineBase; import cpw.mods.fml.relauncher.Side; @@ -40,7 +42,7 @@ public class TileEntityCoreStabilizer extends TileEntityMachineBase implements I beam = 0; - if(power >= demand) { + if(power >= demand && slots[0] != null && slots[0].getItem() == ModItems.ams_lens && ItemLens.getLensDamage(slots[0]) < ItemLens.maxDamage) { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); for(int i = 1; i <= range; i++) { @@ -57,6 +59,15 @@ public class TileEntityCoreStabilizer extends TileEntityMachineBase implements I core.field = watts; this.power -= demand; beam = i; + + long dmg = ItemLens.getLensDamage(slots[0]); + dmg += watts; + + if(dmg >= ItemLens.maxDamage) + slots[0] = null; + else + ItemLens.setLensDamage(slots[0], dmg); + break; }