From 61790da7880d295f4ae876001b7444826116dc4d Mon Sep 17 00:00:00 2001 From: HbmMods Date: Wed, 1 Apr 2020 21:25:22 +0200 Subject: [PATCH] finished the base AMS --- assets/hbm/lang/de_DE.lang | 7 +- assets/hbm/lang/en_US.lang | 7 +- assets/hbm/textures/blocks/dfc_stabilizer.png | Bin 0 -> 233 bytes assets/hbm/textures/items/ams_lens.png | Bin 0 -> 388 bytes .../container/ContainerCoreStabilizer.java | 35 +++++ com/hbm/inventory/gui/GUICore.java | 2 + com/hbm/inventory/gui/GUICoreReceiver.java | 3 +- com/hbm/items/ModItems.java | 4 + com/hbm/items/special/ItemCatalyst.java | 8 +- com/hbm/items/special/ItemLens.java | 53 +++++++ com/hbm/lib/RefStrings.java | 2 +- com/hbm/main/CraftingManager.java | 32 ++++ com/hbm/render/tileentity/RenderCore.java | 48 +++++- .../tileentity/machine/TileEntityCore.java | 140 +++++++++++++++++- .../machine/TileEntityCoreEmitter.java | 2 +- .../machine/TileEntityCoreStabilizer.java | 13 +- 16 files changed, 345 insertions(+), 11 deletions(-) create mode 100644 assets/hbm/textures/blocks/dfc_stabilizer.png create mode 100644 assets/hbm/textures/items/ams_lens.png create mode 100644 com/hbm/items/special/ItemLens.java 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 0000000000000000000000000000000000000000..06867a3b9ea3e730239e9d0837370ecf4e38f279 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfHmfLsViHd&u_PO%09ad9|a}aY)Xqz!n4F^-S`DbGUWv-$L?C+ eIQ5hN73+FA!=uh7dV7FwW$<+Mb6Mw<&;$VE{#8`~ literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/ams_lens.png b/assets/hbm/textures/items/ams_lens.png new file mode 100644 index 0000000000000000000000000000000000000000..94ca3cb168b0d3fcc0aeabca8953e6af1e202032 GIT binary patch literal 388 zcmV-~0ek+5P)ntQ5FJY9xvjC`-2o;1W=fG>M3k z701GsJ!xPCyAVafo#*Gx^Lt~s@tA9gxvHMtUyZp~n_X+%<@v>U8z^fR9UIHCL{%}y zV6Ell5TC2+DTrw|FBS{D_rw@UDRKY)z|Ye+&N-ZO%w{tNb=@%OJi&X9_nr^}DWxU` zAR-+N72tdEz$68C4Weu~73{F`9R8`e1l87*!P65uQcL0tc&|T$0 iT?5@!zWFoVe0~AoQL(l^0)x!}0000= 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; }