diff --git a/gradle.properties b/gradle.properties index cf2273c3a..9383abbe4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=4562 +mod_build_number=4578 credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\ \ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models, porting),\ diff --git a/src/main/java/com/hbm/blocks/generic/BlockTallPlant.java b/src/main/java/com/hbm/blocks/generic/BlockTallPlant.java index f9ff43fb0..60ef35c47 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockTallPlant.java +++ b/src/main/java/com/hbm/blocks/generic/BlockTallPlant.java @@ -177,12 +177,7 @@ public class BlockTallPlant extends BlockEnumMulti implements IPlantable, IGrowa public void onBlockHarvested(World world, int x, int y, int z, int meta, EntityPlayer player) { if(meta > 7) { - - if(world.getBlock(x, y - 1, z) == this) { - if(!player.capabilities.isCreativeMode) { - this.dropBlockAsItem(world, x, y - 1, z, world.getBlockMetadata(x, y - 1, z), 0); - } - } + // dead } else if(world.getBlock(x, y + 1, z) == this) { if(player.capabilities.isCreativeMode) { diff --git a/src/main/java/com/hbm/blocks/machine/MachineCrucible.java b/src/main/java/com/hbm/blocks/machine/MachineCrucible.java index cde554cd5..b2ccf824c 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCrucible.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCrucible.java @@ -11,6 +11,7 @@ import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityCrucible; +import api.hbm.block.ICrucibleAcceptor; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -24,8 +25,9 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.client.event.DrawBlockHighlightEvent; +import net.minecraftforge.common.util.ForgeDirection; -public class MachineCrucible extends BlockDummyable { +public class MachineCrucible extends BlockDummyable implements ICrucibleAcceptor { public MachineCrucible() { super(Material.rock); @@ -151,4 +153,31 @@ public class MachineCrucible extends BlockDummyable { for(AxisAlignedBB aabb : this.bounding) event.context.drawOutlinedBoundingBox(aabb.expand(exp, exp, exp).getOffsetBoundingBox(x - dX + 0.5, y - dY, z - dZ + 0.5), -1); ICustomBlockHighlight.cleanup(); } + + @Override + public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return false; + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if(!(tile instanceof TileEntityCrucible)) return false; + TileEntityCrucible crucible = (TileEntityCrucible) tile; + + return crucible.canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack); + } + + @Override + public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return stack; + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if(!(tile instanceof TileEntityCrucible)) return stack; + TileEntityCrucible crucible = (TileEntityCrucible) tile; + + return crucible.pour(world, x, y, z, dX, dY, dZ, side, stack); + } + + @Override public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return false; } + @Override public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return null; } } diff --git a/src/main/java/com/hbm/crafting/RodRecipes.java b/src/main/java/com/hbm/crafting/RodRecipes.java index 1928d5b38..77e6a2aa5 100644 --- a/src/main/java/com/hbm/crafting/RodRecipes.java +++ b/src/main/java/com/hbm/crafting/RodRecipes.java @@ -3,12 +3,14 @@ package com.hbm.crafting; import static com.hbm.inventory.OreDictManager.*; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBreedingRod.*; +import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.items.machine.ItemZirnoxRod.EnumZirnoxType; import com.hbm.main.CraftingManager; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.ShapedOreRecipe; /** @@ -123,6 +125,20 @@ public class RodRecipes { addRBMKRod(ModItems.billet_zfb_pu241, ModItems.rbmk_fuel_zfb_pu241); addRBMKRod(ModItems.billet_zfb_am_mix, ModItems.rbmk_fuel_zfb_am_mix); CraftingManager.addShapelessAuto(new ItemStack(ModItems.rbmk_fuel_drx, 1), new Object[] { ModItems.rbmk_fuel_balefire, ModItems.particle_digamma }); + + addPellet(SA326, EnumWatzType.SCHRABIDIUM); + addPellet(ModItems.ingot_hes, EnumWatzType.HES); + addPellet(ModItems.ingot_schrabidium_fuel, EnumWatzType.MES); + addPellet(ModItems.ingot_les, EnumWatzType.LES); + addPellet(NP237, EnumWatzType.HEN); + addPellet(ModItems.ingot_uranium_fuel, EnumWatzType.MEU); + addPellet(ModItems.ingot_pu_mix, EnumWatzType.MEP); + addPellet(PB, EnumWatzType.LEAD); + addPellet(B, EnumWatzType.BORON); + addPellet(U238, EnumWatzType.DU); + /* GT6 */ + if(OreDictionary.doesOreNameExist("ingotNaquadah-Enriched")) addPellet(new DictFrame("Naquadah-Enriched"), EnumWatzType.NQD); + if(OreDictionary.doesOreNameExist("ingotNaquadria")) addPellet(new DictFrame("Naquadria"), EnumWatzType.NQR); } //Fill rods with one billet. For fuels only, therefore no unloading or ore dict @@ -223,4 +239,12 @@ public class RodRecipes { public static void addZIRNOXRod(DictFrame mat, EnumZirnoxType num) { CraftingManager.addShapelessAuto(new ItemStack(ModItems.rod_zirnox, 1, num.ordinal()), new Object[] { ModItems.rod_zirnox_empty, mat.billet(), mat.billet() }); } + + /** Watz pellet crafting **/ + public static void addPellet(DictFrame mat, EnumWatzType num) { + CraftingManager.addRecipeAuto(new ItemStack(ModItems.watz_pellet, 1, num.ordinal()), new Object[] { " I ", "IGI", " I ", 'I', mat.ingot(), 'G', GRAPHITE.ingot() }); + } + public static void addPellet(Item item, EnumWatzType num) { + CraftingManager.addRecipeAuto(new ItemStack(ModItems.watz_pellet, 1, num.ordinal()), new Object[] { " I ", "IGI", " I ", 'I', item, 'G', GRAPHITE.ingot() }); + } } diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index 2d6d82b78..91ddd5338 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -5,6 +5,8 @@ import com.hbm.config.GeneralConfig; import com.hbm.inventory.fluid.Fluids; import static com.hbm.inventory.OreDictManager.*; + +import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBattery; import com.hbm.items.tool.ItemBlowtorch; @@ -137,6 +139,7 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.chemistry_set_boron), new Object[] { "GIG", "GCG", 'G', ModBlocks.glass_boron, 'I', STEEL.ingot(), 'C', CO.ingot() }); CraftingManager.addRecipeAuto(ItemBlowtorch.getEmptyTool(ModItems.blowtorch), new Object[] { "CC ", " I ", "CCC", 'C', CU.plate528(), 'I', IRON.ingot() }); CraftingManager.addRecipeAuto(ItemBlowtorch.getEmptyTool(ModItems.acetylene_torch), new Object[] { "SS ", " PS", " T ", 'S', STEEL.plate528(), 'P', ANY_PLASTIC.ingot(), 'T', ModItems.tank_steel }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.boltgun), new Object[] { "DPS", " RD", " D ", 'D', DURA.ingot(), 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'R', RUBBER.ingot(), 'S', ModItems.hull_small_steel }); //Bobmazon CraftingManager.addShapelessAuto(new ItemStack(ModItems.bobmazon_materials), new Object[] { Items.book, Items.gold_nugget, Items.string }); diff --git a/src/main/java/com/hbm/entity/effect/EntityMist.java b/src/main/java/com/hbm/entity/effect/EntityMist.java index 06de19176..4150a436b 100644 --- a/src/main/java/com/hbm/entity/effect/EntityMist.java +++ b/src/main/java/com/hbm/entity/effect/EntityMist.java @@ -29,6 +29,7 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.world.World; @@ -66,8 +67,9 @@ public class EntityMist extends Entity { public void onEntityUpdate() { float height = this.dataWatcher.getWatchableObjectFloat(12); - this.yOffset = -height / 2F; + this.yOffset = 0; this.setSize(this.dataWatcher.getWatchableObjectFloat(11), height); + this.setPosition(this.posX, this.posY, this.posZ); if(!worldObj.isRemote) { @@ -90,11 +92,20 @@ public class EntityMist extends Entity { return; } - List affected = worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox); + AxisAlignedBB aabb = this.boundingBox.copy(); + List affected = worldObj.getEntitiesWithinAABBExcludingEntity(this, aabb.offset(-this.width / 2, 0, -this.width / 2)); for(Entity e : affected) { this.affect(e, intensity); } + } else { + + for(int i = 0; i < 2; i++) { + double x = this.boundingBox.minX + rand.nextDouble() * (this.boundingBox.maxX - this.boundingBox.minX); + double y = this.boundingBox.minY + rand.nextDouble() * (this.boundingBox.maxY - this.boundingBox.minY); + double z = this.boundingBox.minZ + rand.nextDouble() * (this.boundingBox.maxZ - this.boundingBox.minZ); + worldObj.spawnParticle("cloud", x, y, z, 0, 0, 0); + } } } diff --git a/src/main/java/com/hbm/entity/mob/EntityCreeperPhosgene.java b/src/main/java/com/hbm/entity/mob/EntityCreeperPhosgene.java index 53cfbe7f7..dc6015870 100644 --- a/src/main/java/com/hbm/entity/mob/EntityCreeperPhosgene.java +++ b/src/main/java/com/hbm/entity/mob/EntityCreeperPhosgene.java @@ -32,6 +32,7 @@ public class EntityCreeperPhosgene extends EntityCreeper { if(!this.worldObj.isRemote) { this.setDead(); + worldObj.createExplosion(this, posX, posY + this.height / 2, posZ, 2F, false); EntityMist mist = new EntityMist(worldObj); mist.setType(Fluids.PHOSGENE); mist.setPosition(posX, posY, posZ); diff --git a/src/main/java/com/hbm/entity/projectile/EntityShrapnel.java b/src/main/java/com/hbm/entity/projectile/EntityShrapnel.java index 0d07ee058..3b1c7dea5 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityShrapnel.java +++ b/src/main/java/com/hbm/entity/projectile/EntityShrapnel.java @@ -80,10 +80,15 @@ public class EntityShrapnel extends EntityThrowable { } } + } else if(this.dataWatcher.getWatchableObjectByte(16) == 3) { + + if(worldObj.getBlock(mop.blockX, mop.blockY + 1, mop.blockZ).isReplaceable(worldObj, mop.blockX, mop.blockY + 1, mop.blockZ)) { + worldObj.setBlock(mop.blockX, mop.blockY + 1, mop.blockZ, ModBlocks.mud_block); + } + } else { - for(int i = 0; i < 5; i++) - worldObj.spawnParticle("lava", posX, posY, posZ, 0.0, 0.0, 0.0); + for(int i = 0; i < 5; i++) worldObj.spawnParticle("lava", posX, posY, posZ, 0.0, 0.0, 0.0); } worldObj.playSoundEffect(posX, posY, posZ, "random.fizz", 1.0F, 1.0F); @@ -97,4 +102,8 @@ public class EntityShrapnel extends EntityThrowable { public void setVolcano(boolean b) { this.dataWatcher.updateObject(16, (byte) (b ? 2 : 0)); } + + public void setWatz(boolean b) { + this.dataWatcher.updateObject(16, (byte) (b ? 3 : 0)); + } } diff --git a/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java index 744314be0..d5da7444f 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java @@ -162,8 +162,8 @@ public class Gun762mmFactory { final BulletConfiguration bullet = Gun556mmFactory.get556Config().clone(); bullet.ammo = new ComparableStack(ModItems.ammo_762.stackFromEnum(Ammo762NATO.STOCK)); - bullet.dmgMax *= 2; - bullet.dmgMin *= 2; + bullet.dmgMax = 20; + bullet.dmgMin = 24; bullet.velocity *= 2.5; bullet.maxAge *= 2; bullet.spread /= 2; @@ -177,8 +177,8 @@ public class Gun762mmFactory { final BulletConfiguration bullet = get762NATOConfig(); bullet.ammo = new ComparableStack(ModItems.ammo_762.stackFromEnum(Ammo762NATO.AP)); - bullet.dmgMax *= 1.5; - bullet.dmgMin *= 1.5; + bullet.dmgMax = 24; + bullet.dmgMin = 28; bullet.spentCasing = CASING762NATO.clone().register("762NATOAP"); @@ -189,8 +189,8 @@ public class Gun762mmFactory { final BulletConfiguration bullet = get762NATOConfig(); bullet.ammo = new ComparableStack(ModItems.ammo_762.stackFromEnum(Ammo762NATO.DU)); - bullet.dmgMax *= 2; - bullet.dmgMin *= 2; + bullet.dmgMax = 36; + bullet.dmgMin = 40; bullet.spentCasing = CASING762NATO.clone().register("762NATODU"); diff --git a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java index 8d5772be4..3f4fcbe67 100644 --- a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java +++ b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java @@ -223,8 +223,8 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler { case 4: return new int[][] { {102, 24 - 9}, {120, 24 - 9}, - {138 + 36, 24 + 9}, - {156 + 36, 24 + 9} + {102, 24 + 9}, + {120, 24 + 9} }; } diff --git a/src/main/java/com/hbm/hazard/HazardRegistry.java b/src/main/java/com/hbm/hazard/HazardRegistry.java index b404040a2..b670bfde7 100644 --- a/src/main/java/com/hbm/hazard/HazardRegistry.java +++ b/src/main/java/com/hbm/hazard/HazardRegistry.java @@ -9,10 +9,12 @@ import com.hbm.config.GeneralConfig; import com.hbm.hazard.modifier.*; import com.hbm.hazard.transformer.*; import com.hbm.hazard.type.*; +import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.material.MaterialShapes; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBreedingRod.BreedingRodType; import com.hbm.items.machine.ItemRTGPelletDepleted.DepletedRTGMaterial; +import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.items.machine.ItemZirnoxRod.EnumZirnoxType; import com.hbm.items.special.ItemHolotapeImage.EnumHoloImage; import com.hbm.util.Compat; @@ -104,6 +106,7 @@ public class HazardRegistry { public static final float saf = 5.85F; public static final float sas3 = 5F; public static final float gh336 = 5.0F; + public static final float mud = 1.0F; public static final float radsource_mult = 3.0F; public static final float pobe = po210 * radsource_mult; public static final float rabe = ra226 * radsource_mult; @@ -429,6 +432,17 @@ public class HazardRegistry { registerRBMKPellet(rbmk_pellet_zfb_am_mix, pu241 * billet * 0.1F, wst * billet * 10F); registerRBMKPellet(rbmk_pellet_drx, bf * billet, bf * billet * 100F, true, 0F, 1F/24F); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.SCHRABIDIUM), makeData(RADIATION, sa326 * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.HES), makeData(RADIATION, saf * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.MES), makeData(RADIATION, saf * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.LES), makeData(RADIATION, saf * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.HEN), makeData(RADIATION, np237 * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.MEU), makeData(RADIATION, uf * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.MEP), makeData(RADIATION, purg * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.DU), makeData(RADIATION, u238 * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.NQD), makeData(RADIATION, u235 * ingot * 4)); + HazardSystem.register(DictFrame.fromOne(ModItems.watz_pellet, EnumWatzType.NQR), makeData(RADIATION, pu239 * ingot * 4)); + HazardSystem.register(powder_yellowcake, makeData(RADIATION, yc * powder)); HazardSystem.register(block_yellowcake, makeData(RADIATION, yc * block * powder_mult)); HazardSystem.register(ModItems.fallout, makeData(RADIATION, fo * powder)); diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index ca1ef53d8..8bd6b507a 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -32,6 +32,7 @@ import com.hbm.util.Compat; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import net.minecraft.block.Block; +import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -138,6 +139,7 @@ public class OreDictManager { public static final DictFrame SBD = new DictFrame("Schrabidate"); public static final DictFrame SRN = new DictFrame("Schraranium"); public static final DictFrame GH336 = new DictFrame("Ghiorsium336", "Gh336"); + public static final DictFrame MUD = new DictFrame("WatzMud"); /* * STABLE */ @@ -297,7 +299,7 @@ public class OreDictManager { IRON.plate(plate_iron).dust(powder_iron).ore(ore_gneiss_iron); GOLD.plate(plate_gold).dust(powder_gold).ore(ore_gneiss_gold); LAPIS.dust(powder_lapis); - NETHERQUARTZ.gem(Items.quartz).dust(powder_quartz); + NETHERQUARTZ.gem(Items.quartz).dust(powder_quartz).ore(Blocks.quartz_ore); DIAMOND.dust(powder_diamond).ore(gravel_diamond); EMERALD.dust(powder_emerald); @@ -331,6 +333,7 @@ public class OreDictManager { SBD .rad(HazardRegistry.sb) .blinding(50F) .ingot(ingot_schrabidate) .dust(powder_schrabidate) .block(block_schrabidate); SRN .rad(HazardRegistry.sr) .blinding(50F) .ingot(ingot_schraranium) .block(block_schraranium); GH336 .rad(HazardRegistry.gh336) .nugget(nugget_gh336) .billet(billet_gh336) .ingot(ingot_gh336); + MUD .rad(HazardRegistry.mud) .ingot(ingot_mud); /* * STABLE diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index f6b839d9e..ffb7d3516 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -123,6 +123,7 @@ public class Mats { public static final NTMMaterial MAT_CMB = makeSmeltable(_AS + 9, CMB, 0x6F6FB4, 0x000011, 0x6F6FB4).setShapes(INGOT, DUST, PLATE, CASTPLATE, BLOCK); public static final NTMMaterial MAT_FLUX = makeAdditive(_AS + 10, df("Flux"), 0xF1E0BB, 0x6F6256, 0xDECCAD).setShapes(DUST); public static final NTMMaterial MAT_SLAG = makeSmeltable(_AS + 11, SLAG, 0x554940, 0x34281F, 0x6C6562).setShapes(BLOCK); + public static final NTMMaterial MAT_MUD = makeSmeltable(_AS + 14, MUD, 0xBCB5A9, 0x481213, 0x96783B).setShapes(INGOT); @Deprecated public static NTMMaterial makeSmeltable(int id, DictFrame dict, int color) { return makeSmeltable(id, dict, color, color, color); } @Deprecated public static NTMMaterial makeAdditive(int id, DictFrame dict, int color) { return makeAdditive(id, dict, color, color, color); } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index c067c89db..383e87b4b 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -298,15 +298,13 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModBlocks.machine_turbinegas, 1), new AStack[] {new ComparableStack(ModItems.hull_big_steel, 4), new ComparableStack(ModItems.hull_small_steel, 6), new ComparableStack(ModItems.generator_steel, 2), new ComparableStack(ModItems.bolt_compound, 4), new ComparableStack(ModBlocks.steel_scaffold, 8), new ComparableStack(ModBlocks.deco_pipe_quad, 4), new ComparableStack(ModItems.turbine_tungsten, 3), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.ingot_rubber, 4), new ComparableStack(ModItems.circuit_red_copper, 3)}, 600); makeRecipe(new ComparableStack(ModBlocks.machine_teleporter, 1), new AStack[] {new OreDictStack(TI.ingot(), 8), new OreDictStack(ALLOY.plate528(), 12), new ComparableStack(ModItems.wire_gold, 32), new ComparableStack(ModItems.entanglement_kit, 1), new ComparableStack(ModBlocks.machine_battery, 1) },300); makeRecipe(new ComparableStack(ModBlocks.machine_schrabidium_transmutator, 1), new AStack[] {new OreDictStack(MAGTUNG.ingot(), 1), new OreDictStack(TI.ingot(), 24), new OreDictStack(ALLOY.plate(), 18), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModItems.plate_desh, 6), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModBlocks.machine_battery, 5), new ComparableStack(ModItems.circuit_gold, 5), },500); - makeRecipe(new ComparableStack(ModBlocks.machine_combine_factory, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 8), new OreDictStack(ANY_PLASTIC.ingot(), 6), new OreDictStack(TI.plate(), 4), new OreDictStack(CU.plate(), 6), new ComparableStack(ModItems.circuit_gold, 6), new ComparableStack(ModItems.coil_advanced_alloy, 8), new ComparableStack(ModItems.coil_tungsten, 4), new OreDictStack(MAGTUNG.ingot(), 12), },150); makeRecipe(new ComparableStack(ModBlocks.fusion_conductor, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 2), new ComparableStack(ModItems.coil_advanced_alloy, 5), },150); makeRecipe(new ComparableStack(ModBlocks.fusion_center, 1), new AStack[] {new OreDictStack(ANY_HARDPLASTIC.ingot(), 4), new OreDictStack(STEEL.plate528(), 6), new ComparableStack(ModItems.wire_advanced_alloy, 24), },200); makeRecipe(new ComparableStack(ModBlocks.fusion_motor, 1), new AStack[] {new OreDictStack(TI.ingot(), 4), new OreDictStack(STEEL.ingot(), 2), new ComparableStack(ModItems.motor, 4), },250); makeRecipe(new ComparableStack(ModBlocks.fusion_heater, 1), new AStack[] {new OreDictStack(W.ingot(), 4), new OreDictStack(STEEL.plate528(), 2), new OreDictStack(OreDictManager.getReflector(), 2), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.magnetron, 1), new ComparableStack(ModItems.wire_advanced_alloy, 4), },150); - makeRecipe(new ComparableStack(ModBlocks.watz_element, 1), new AStack[] {new OreDictStack(W.ingot(), 4), new OreDictStack(ALLOY.plate(), 4), new ComparableStack(ModItems.rod_empty, 2), new ComparableStack(ModItems.wire_magnetized_tungsten, 2), new ComparableStack(ModItems.wire_advanced_alloy, 4), },200); - makeRecipe(new ComparableStack(ModBlocks.watz_cooler, 1), new AStack[] {new OreDictStack(W.ingot(), 2), new OreDictStack(STEEL.ingot(), 2), new OreDictStack(KNO.dust(), 4), },300); + makeRecipe(new ComparableStack(ModBlocks.watz_element, 3), new AStack[] {new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(ZR.ingot(), 2), new OreDictStack(BIGMT.ingot(), 2), new OreDictStack(ANY_HARDPLASTIC.ingot(), 4)},200); + makeRecipe(new ComparableStack(ModBlocks.watz_cooler, 3), new AStack[] {new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 2), }, 200); makeRecipe(new ComparableStack(ModBlocks.watz_end, 3), new AStack[] {new OreDictStack(ANY_RESISTANTALLOY.plateTriple()), new OreDictStack(B.ingot(), 3), new OreDictStack(STEEL.plate(), 9), }, 100); - makeRecipe(new ComparableStack(ModBlocks.watz_core, 1), new AStack[] {new ComparableStack(ModBlocks.block_meteor, 1), new ComparableStack(ModItems.circuit_gold, 5), new ComparableStack(ModItems.circuit_schrabidium, 2), new ComparableStack(ModItems.wire_magnetized_tungsten, 12), },350); makeRecipe(new ComparableStack(ModBlocks.fwatz_hatch, 1), new AStack[] {new OreDictStack(W.ingot(), 6), new OreDictStack(CMB.plate(), 4), },250); makeRecipe(new ComparableStack(ModBlocks.fwatz_conductor, 1), new AStack[] {new OreDictStack(CMB.plate(), 2), new ComparableStack(ModItems.coil_magnetized_tungsten, 5), },250); makeRecipe(new ComparableStack(ModBlocks.fwatz_computer, 1), new AStack[] {new ComparableStack(ModBlocks.block_meteor, 1), new ComparableStack(ModItems.wire_magnetized_tungsten, 16), new OreDictStack(DIAMOND.dust(), 6), new OreDictStack(MAGTUNG.dust(), 6), new OreDictStack(DESH.dust(), 4), },300); diff --git a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java index 3569d3c52..992ed2e3e 100644 --- a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java @@ -20,6 +20,7 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre; import com.hbm.items.special.ItemByproduct.EnumByproduct; import com.hbm.main.MainRegistry; @@ -134,6 +135,73 @@ public class CentrifugeRecipes extends SerializableRecipe { new ItemStack(ModItems.nugget_pu238, 1), new ItemStack(ModItems.nugget_technetium, 1), new ItemStack(ModItems.nuclear_waste_tiny, 6) }); + + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.SCHRABIDIUM)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_solinium, 15), + new ItemStack(ModItems.nugget_euphemium, 3), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.HES)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_solinium, 17), + new ItemStack(ModItems.nugget_euphemium, 1), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.MES)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_solinium, 12), + new ItemStack(ModItems.nugget_tantalium, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.LES)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_solinium, 9), + new ItemStack(ModItems.nugget_tantalium, 9), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.HEN)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_pu239, 12), + new ItemStack(ModItems.nugget_technetium, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.MEU)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_pu239, 12), + new ItemStack(ModItems.nugget_bismuth, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.MEP)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_pu241, 12), + new ItemStack(ModItems.nugget_bismuth, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.LEAD)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_lead, 6), + new ItemStack(ModItems.nugget_bismuth, 12), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.BORON)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.powder_coal_tiny, 12), + new ItemStack(ModItems.nugget_co60, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.DU)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_polonium, 12), + new ItemStack(ModItems.nugget_pu238, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + + if(OreDictionary.doesOreNameExist("nuggetNaquadria")) { + ItemStack nuggetNQR = OreDictionary.getOres("nuggetNaquadria").get(0); + ItemStack copy = nuggetNQR.copy(); + copy.stackSize = 12; + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.NQD)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + copy, + new ItemStack(ModItems.nugget_euphemium, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.watz_pellet_depleted, EnumWatzType.NQR)), new ItemStack[] { + new ItemStack(ModItems.ingot_mud, 1), + new ItemStack(ModItems.nugget_co60, 12), + new ItemStack(ModItems.nugget_euphemium, 6), + new ItemStack(ModItems.nuclear_waste, 2) }); + } recipes.put(new ComparableStack(ModItems.powder_cloud), new ItemStack[] { new ItemStack(ModItems.powder_copper, 1), diff --git a/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java b/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java index 42f2dc872..9fa52a29e 100644 --- a/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java @@ -96,6 +96,10 @@ public class CrucibleRecipes extends SerializableRecipe { .inputs(new MaterialStack(Mats.MAT_STEEL, n * 8), new MaterialStack(Mats.MAT_CADMIUM, n)) .outputs(new MaterialStack(Mats.MAT_CDALLOY, i))); + recipes.add(new CrucibleRecipe(13, "crucible.cmb", 3, new ItemStack(ModItems.ingot_combine_steel)) + .inputs(new MaterialStack(Mats.MAT_MAGTUNG, n * 6), new MaterialStack(Mats.MAT_MUD, n * 3)) + .outputs(new MaterialStack(Mats.MAT_CMB, i))); + registerMoldsForNEI(); } diff --git a/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java b/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java index 05385ff54..91940bef6 100644 --- a/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java @@ -66,6 +66,7 @@ public class SolidificationRecipes extends SerializableRecipe { registerRecipe(BIOGAS, 250, ModItems.biomass_compressed); registerRecipe(SALIENT, 1280, new ItemStack(ModItems.bio_wafer, 8)); //4 (food val) * 2 (sat mod) * 2 (constant) * 10 (quanta) * 8 (batch size) registerRecipe(ENDERJUICE, 100, Items.ender_pearl); + registerRecipe(WATZ, 1000, ModItems.ingot_mud); registerRecipe(OIL, SF_OIL, DictFrame.fromOne(ModItems.oil_tar, EnumTarType.CRUDE)); registerRecipe(CRACKOIL, SF_CRACK, DictFrame.fromOne(ModItems.oil_tar, EnumTarType.CRACK)); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index d63f62630..fbfec83a4 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -359,6 +359,7 @@ public class ModItems { public static Item ingot_cadmium; public static Item powder_cadmium; public static Item powder_bismuth; + public static Item ingot_mud; public static Item ingot_lanthanium; public static Item ingot_actinium; @@ -2651,6 +2652,7 @@ public class ModItems { ingot_cadmium = new Item().setUnlocalizedName("ingot_cadmium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_cadmium"); powder_cadmium = new Item().setUnlocalizedName("powder_cadmium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cadmium"); powder_bismuth = new Item().setUnlocalizedName("powder_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_bismuth"); + ingot_mud = new Item().setUnlocalizedName("ingot_mud").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_mud"); ore_byproduct = new ItemByproduct().setUnlocalizedName("ore_byproduct").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":byproduct"); @@ -5540,6 +5542,7 @@ public class ModItems { //GameRegistry.registerItem(ingot_pet, ingot_pet.getUnlocalizedName()); GameRegistry.registerItem(ingot_pc, ingot_pc.getUnlocalizedName()); GameRegistry.registerItem(ingot_pvc, ingot_pvc.getUnlocalizedName()); + GameRegistry.registerItem(ingot_mud, ingot_mud.getUnlocalizedName()); GameRegistry.registerItem(ingot_schraranium, ingot_schraranium.getUnlocalizedName()); GameRegistry.registerItem(ingot_schrabidium, ingot_schrabidium.getUnlocalizedName()); GameRegistry.registerItem(ingot_schrabidate, ingot_schrabidate.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemWatzPellet.java b/src/main/java/com/hbm/items/machine/ItemWatzPellet.java index 4a0f35dc1..c8e31a111 100644 --- a/src/main/java/com/hbm/items/machine/ItemWatzPellet.java +++ b/src/main/java/com/hbm/items/machine/ItemWatzPellet.java @@ -36,18 +36,18 @@ public class ItemWatzPellet extends ItemEnumMulti { public static enum EnumWatzType { - SCHRABIDIUM( 0x32FFFF, 0x005C5C, 2_000, 20D, 0.02D, new FunctionLinear(1.5D), new FunctionSqrt(1D/20D).withOff(20D * 20D), null), - HES( 0x66DCD6, 0x023933, 1_750, 20D, 0.01D, new FunctionLinear(1.25D), new FunctionSqrt(1/15D).withOff(15D*15D), null), - MES( 0xCBEADF, 0x28473C, 1_500, 15D, 0.005D, new FunctionLinear(1.15D), new FunctionSqrt(1/15D).withOff(15D*15D), null), - LES( 0xABB4A8, 0x0C1105, 1_250, 15D, 0.0025D, new FunctionLinear(1D), new FunctionSqrt(1/10D).withOff(10D*10D), null), - HEN( 0xA6B2A6, 0x030F03, 0, 10D, 0.001D, new FunctionSqrt(100), null, null), - MEU( 0xC1C7BD, 0x2B3227, 0, 10D, 0.001D, new FunctionSqrt(75), null, null), - MEP( 0x9AA3A0, 0x111A17, 0, 15D, 0.001D, new FunctionSqrt(150), new FunctionSqrt(1D/20D).withOff(20D * 20D), null), - LEAD( 0xA6A6B2, 0x03030F, 0, 0, 0.005D, null, null, new FunctionSqrt(10)), //standard absorber, negative coefficient - BORON( 0xBDC8D2, 0x29343E, 0, 0, 0.005D, null, null, new FunctionLinear(10)), //improved absorber, linear - DU( 0xC1C7BD, 0x2B3227, 0, 0, 0.005D, null, null, new FunctionQuadratic(1D, 1D).withDiv(100)), //absorber with positive coefficient - NQD( 0x4B4B4B, 0x121212, 2_000, 20, 0.02D, new FunctionLinear(2D), new FunctionSqrt(1D/25D).withOff(25D * 25D), null), - NQR( 0x2D2D2D, 0x0B0B0B, 2_500, 30, 0.02D, new FunctionLinear(1.5D), new FunctionSqrt(1D/25D).withOff(25D * 25D), null); + SCHRABIDIUM( 0x32FFFF, 0x005C5C, 2_000, 20D, 0.01D, new FunctionLinear(1.5D), new FunctionSqrtFalling(10D), null), + HES( 0x66DCD6, 0x023933, 1_750, 20D, 0.005D, new FunctionLinear(1.25D), new FunctionSqrtFalling(15D), null), + MES( 0xCBEADF, 0x28473C, 1_500, 15D, 0.0025D, new FunctionLinear(1.15D), new FunctionSqrtFalling(15D), null), + LES( 0xABB4A8, 0x0C1105, 1_250, 15D, 0.00125D, new FunctionLinear(1D), new FunctionSqrtFalling(20D), null), + HEN( 0xA6B2A6, 0x030F03, 0, 10D, 0.0005D, new FunctionSqrt(100), new FunctionSqrtFalling(10D), null), + MEU( 0xC1C7BD, 0x2B3227, 0, 10D, 0.0005D, new FunctionSqrt(75), new FunctionSqrtFalling(10D), null), + MEP( 0x9AA3A0, 0x111A17, 0, 15D, 0.0005D, new FunctionSqrt(150), new FunctionSqrtFalling(10D), null), + LEAD( 0xA6A6B2, 0x03030F, 0, 0, 0.0025D, null, null, new FunctionSqrt(10)), //standard absorber, negative coefficient + BORON( 0xBDC8D2, 0x29343E, 0, 0, 0.0025D, null, null, new FunctionLinear(10)), //improved absorber, linear + DU( 0xC1C7BD, 0x2B3227, 0, 0, 0.0025D, null, null, new FunctionQuadratic(1D, 1D).withDiv(100)), //absorber with positive coefficient + NQD( 0x4B4B4B, 0x121212, 2_000, 20, 0.01D, new FunctionLinear(2D), new FunctionSqrt(1D/25D).withOff(25D * 25D), null), + NQR( 0x2D2D2D, 0x0B0B0B, 2_500, 30, 0.01D, new FunctionLinear(1.5D), new FunctionSqrt(1D/25D).withOff(25D * 25D), null); public double yield = 1_000_000_000; public int colorLight; @@ -123,6 +123,9 @@ public class ItemWatzPellet extends ItemEnumMulti { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + if(this != ModItems.watz_pellet) return; + EnumWatzType num = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); list.add(EnumChatFormatting.GREEN + "Depletion: " + String.format(Locale.US, "%.1f", getDurabilityForDisplay(stack) * 100D) + "%"); @@ -145,7 +148,7 @@ public class ItemWatzPellet extends ItemEnumMulti { @Override public boolean showDurabilityBar(ItemStack stack) { - return getDurabilityForDisplay(stack) > 0D; + return this == ModItems.watz_pellet && getDurabilityForDisplay(stack) > 0D; } @Override @@ -184,6 +187,7 @@ public class ItemWatzPellet extends ItemEnumMulti { @Override public void onCreated(ItemStack stack, World world, EntityPlayer player) { + if(this != ModItems.watz_pellet) return; setNBTDefaults(stack); //minimize the window where NBT screwups can happen } } diff --git a/src/main/java/com/hbm/items/weapon/ItemGunBase.java b/src/main/java/com/hbm/items/weapon/ItemGunBase.java index 507b1a603..347570496 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunBase.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunBase.java @@ -690,7 +690,9 @@ public class ItemGunBase extends Item implements IHoldableWeapon, IItemHUD, IEqu GunConfiguration gcfg = gun.mainConfig; if(type == ElementType.HOTBAR) { - BulletConfiguration bcfg = BulletConfigSyncingUtil.pullConfig(gun.mainConfig.config.get(ItemGunBase.getMagType(stack))); + int mag = ItemGunBase.getMagType(stack); + if(gun.mainConfig.config.size() == 0) return; + BulletConfiguration bcfg = BulletConfigSyncingUtil.pullConfig(gun.mainConfig.config.get(mag < gun.mainConfig.config.size() ? mag : 0)); if(bcfg == null) { return; diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 3eb20ac61..0a206e0f1 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/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 (4562)"; + public static final String VERSION = "1.0.27 BETA (4578)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index f0b062205..baadb5428 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -366,7 +366,8 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.mechanism_launcher_1, 1), new Object[] { "TTT", "SSS", "BBI", 'T', TI.plate(), 'S', STEEL.ingot(), 'B', ModItems.bolt_tungsten, 'I', MINGRADE.ingot() }); addRecipeAuto(new ItemStack(ModItems.mechanism_launcher_2, 1), new Object[] { "TTT", "SSS", "BBI", 'T', ALLOY.plate(), 'S', ANY_PLASTIC.ingot(), 'B', ModItems.bolt_dura_steel, 'I', DESH.ingot() }); addRecipeAuto(new ItemStack(ModItems.mechanism_special, 1), new Object[] { "PCI", "ISS", "PCI", 'P', ModItems.plate_desh, 'C', ModItems.coil_advanced_alloy, 'I', STAR.ingot(), 'S', ModItems.circuit_targeting_tier3 }); - + + addRecipeAuto(new ItemStack(ModBlocks.watz_pump, 1), new Object[] { "MPM", "PCP", "PSP", 'M', ModItems.motor_desh, 'P', ANY_RESISTANTALLOY.plateTriple(), 'C', KEY_CIRCUIT_BISMUTH, 'S', ModItems.pipes_steel }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.fwatz_cooler), 1), new Object[] { "IPI", "IPI", "IPI", 'I', TI.ingot(), 'P', TI.plate() }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.fwatz_tank), 1), new Object[] { "CGC", "GGG", "CGC", 'C', CMB.plate(), 'G', KEY_ANYPANE }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.fwatz_scaffold), 1), new Object[] { "IPI", "P P", "IPI", 'I', W.ingot(), 'P', getReflector() }); @@ -765,6 +766,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.barrel_antimatter, 1), new Object[] { "IPI", "IBI", "IPI", 'I', BIGMT.plate(), 'P', ModItems.coil_advanced_torus, 'B', ModItems.battery_sc_technetium }); addRecipeAuto(new ItemStack(ModBlocks.tesla, 1), new Object[] { "CCC", "PIP", "WTW", 'C', ModItems.coil_copper, 'I', IRON.ingot(), 'P', ANY_PLASTIC.ingot(), 'T', ModBlocks.machine_transformer, 'W', KEY_PLANKS }); addRecipeAuto(new ItemStack(ModBlocks.struct_plasma_core, 1), new Object[] { "CBC", "BHB", "CBC", 'C', ModItems.circuit_gold, 'B', ModBlocks.machine_lithium_battery, 'H', ModBlocks.fusion_heater }); + addRecipeAuto(new ItemStack(ModBlocks.struct_watz_core, 1), new Object[] { "CBC", "BHB", "CBC", 'C', ModItems.circuit_schrabidium, 'B', ANY_RESISTANTALLOY.plateTriple(), 'H', ModBlocks.watz_cooler }); addShapelessAuto(new ItemStack(ModBlocks.fusion_heater), new Object[] { ModBlocks.fusion_hatch }); addShapelessAuto(new ItemStack(ModItems.energy_core), new Object[] { ModItems.fusion_core, ModItems.fuse }); addRecipeAuto(new ItemStack(ModItems.catalytic_converter, 1), new Object[] { "PCP", "PBP", "PCP", 'P', ANY_HARDPLASTIC.ingot(), 'C', CO.dust(), 'B', BI.ingot() }); diff --git a/src/main/java/com/hbm/render/entity/projectile/RenderShrapnel.java b/src/main/java/com/hbm/render/entity/projectile/RenderShrapnel.java index 8bc74b359..69c387e22 100644 --- a/src/main/java/com/hbm/render/entity/projectile/RenderShrapnel.java +++ b/src/main/java/com/hbm/render/entity/projectile/RenderShrapnel.java @@ -29,7 +29,7 @@ public class RenderShrapnel extends Render { bindTexture(new ResourceLocation(RefStrings.MODID + ":textures/entity/shrapnel.png")); if(rocket instanceof EntityShrapnel) { - if(rocket.getDataWatcher().getWatchableObjectByte(16) == 2) { //scale up lava blobs + if(rocket.getDataWatcher().getWatchableObjectByte(16) >= 2) { //scale up lava blobs GL11.glScaled(3, 3, 3); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java index 6ee9c5d3b..bc44e2653 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java @@ -23,6 +23,7 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CrucibleUtil; +import api.hbm.block.ICrucibleAcceptor; import api.hbm.tile.IHeatSource; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; @@ -41,7 +42,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCrucible extends TileEntityMachineBase implements IGUIProvider, IConfigurableMachine { +public class TileEntityCrucible extends TileEntityMachineBase implements IGUIProvider, ICrucibleAcceptor, IConfigurableMachine { public int heat; public int progress; @@ -529,4 +530,57 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + + CrucibleRecipe recipe = getLoadedRecipe(); + + if(recipe == null) { + return getQuantaFromType(this.wasteStack, null) < this.wasteZCapacity; + } + + int recipeContent = recipe.getInputAmount(); + int recipeInputRequired = getQuantaFromType(recipe.input, stack.material); + int matMaximum = recipeInputRequired * this.recipeZCapacity / recipeContent; + int amountStored = getQuantaFromType(recipeStack, stack.material); + + return amountStored < matMaximum; + } + + @Override + public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { + + CrucibleRecipe recipe = getLoadedRecipe(); + + if(recipe == null) { + + int amount = getQuantaFromType(this.wasteStack, null); + + if(amount + stack.amount <= this.wasteZCapacity) { + this.addToStack(this.wasteStack, stack.copy()); + return null; + } else { + int toAdd = this.wasteZCapacity - amount; + this.addToStack(this.wasteStack, new MaterialStack(stack.material, toAdd)); + return new MaterialStack(stack.material, stack.amount - toAdd); + } + } + + int recipeContent = recipe.getInputAmount(); + int recipeInputRequired = getQuantaFromType(recipe.input, stack.material); + int matMaximum = recipeInputRequired * this.recipeZCapacity / recipeContent; + + if(recipeInputRequired + stack.amount <= matMaximum) { + this.addToStack(this.recipeStack, stack.copy()); + return null; + } + + int toAdd = matMaximum - stack.amount; + this.addToStack(this.recipeStack, new MaterialStack(stack.material, toAdd)); + return new MaterialStack(stack.material, stack.amount - toAdd); + } + + @Override public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return false; } + @Override public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return null; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java index be72c62f4..4f1124f8e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java @@ -2,8 +2,11 @@ package com.hbm.tileentity.machine; import java.util.ArrayList; import java.util.List; +import java.util.Random; import com.hbm.blocks.ModBlocks; +import com.hbm.entity.projectile.EntityShrapnel; +import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerWatz; import com.hbm.inventory.fluid.Fluids; @@ -14,6 +17,9 @@ import com.hbm.inventory.gui.GUIWatz; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemWatzPellet; import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; +import com.hbm.main.MainRegistry; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.Compat; @@ -22,10 +28,13 @@ import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.util.function.Function; import api.hbm.fluid.IFluidStandardTransceiver; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -126,6 +135,29 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand } segments.get(segments.size() - 1).sendOutBottom(); + + /* explode on mud overflow */ + if(sharedTanks[2].getFill() > 0) { + for(int x = -3; x <= 3; x++) { + for(int y = 3; y < 6; y++) { + for(int z = -3; z <= 3; z++) { + worldObj.setBlock(xCoord + x, yCoord + y, zCoord + z, Blocks.air); + } + } + } + this.disassemble(); + + ChunkRadiationManager.proxy.incrementRad(worldObj, xCoord, yCoord + 1, zCoord, 1_000F); + + worldObj.playSoundEffect(xCoord + 0.5, yCoord + 2, zCoord + 0.5, "hbm:block.rbmk_explosion", 50.0F, 1.0F); + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "rbmkmush"); + data.setFloat("scale", 5); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, xCoord + 0.5, yCoord + 2, zCoord + 0.5), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 250)); + MainRegistry.proxy.effectNT(data); + + return; + } } } @@ -137,7 +169,7 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand public void updateCoolant(FluidTank[] tanks) { - double coolingFactor = 0.05D; //20% per tick, TEMP + double coolingFactor = 0.1D; //10% per tick, TEMP double heatToUse = this.heat * coolingFactor; FT_Heatable trait = tanks[0].getTankType().getTrait(FT_Heatable.class); @@ -215,17 +247,21 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand } + for(int i = 0; i < 24; i++) { + ItemStack stack = slots[i]; + + /* deplete */ + if(stack != null && stack.getItem() == ModItems.watz_pellet && ItemWatzPellet.getEnrichment(stack) <= 0) { + slots[i] = new ItemStack(ModItems.watz_pellet_depleted, 1, stack.getItemDamage()); + continue; // depleted pellets may persist for one tick + } + } + if(above != null) { for(int i = 0; i < 24; i++) { ItemStack stackBottom = slots[i]; ItemStack stackTop = above.slots[i]; - /* deplete */ - if(stackBottom != null && stackBottom.getItem() == ModItems.watz_pellet && ItemWatzPellet.getYield(stackBottom) <= 0) { - slots[i] = new ItemStack(ModItems.watz_pellet_depleted, 1, stackBottom.getItemDamage()); - continue; // depleted pellets may persist for one tick - } - /* items fall down if the bottom slot is empty */ if(stackBottom == null && stackTop != null) { slots[i] = stackTop.copy(); @@ -407,6 +443,73 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand return bb; } + private void disassemble() { + + int count = 20; + Random rand = worldObj.rand; + for(int i = 0; i < count * 5; i++) { + EntityShrapnel shrapnel = new EntityShrapnel(worldObj); + shrapnel.posX = xCoord + 0.5; + shrapnel.posY = yCoord + 3; + shrapnel.posZ = zCoord + 0.5; + shrapnel.motionY = ((rand.nextFloat() * 0.5) + 0.5) * (1 + (count / (15 + rand.nextInt(21)))) + (rand.nextFloat() / 50 * count); + shrapnel.motionX = rand.nextGaussian() * 1 * (1 + (count / 100)); + shrapnel.motionZ = rand.nextGaussian() * 1 * (1 + (count / 100)); + shrapnel.setWatz(true); + worldObj.spawnEntityInWorld(shrapnel); + } + + worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.mud_block); + worldObj.setBlock(xCoord, yCoord + 1, zCoord, ModBlocks.mud_block); + worldObj.setBlock(xCoord, yCoord + 2, zCoord, ModBlocks.mud_block); + + setBrokenColumn(0, ModBlocks.watz_element, 0, 1, 0); + setBrokenColumn(0, ModBlocks.watz_element, 0, 2, 0); + setBrokenColumn(0, ModBlocks.watz_element, 0, 0, 1); + setBrokenColumn(0, ModBlocks.watz_element, 0, 0, 2); + setBrokenColumn(0, ModBlocks.watz_element, 0, -1, 0); + setBrokenColumn(0, ModBlocks.watz_element, 0, -2, 0); + setBrokenColumn(0, ModBlocks.watz_element, 0, 0, -1); + setBrokenColumn(0, ModBlocks.watz_element, 0, 0, -2); + setBrokenColumn(0, ModBlocks.watz_element, 0, 1, 1); + setBrokenColumn(0, ModBlocks.watz_element, 0, 1, -1); + setBrokenColumn(0, ModBlocks.watz_element, 0, -1, 1); + setBrokenColumn(0, ModBlocks.watz_element, 0, -1, -1); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, 2, 1); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, 2, -1); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, 1, 2); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, -1, 2); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, -2, 1); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, -2, -1); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, 1, -2); + setBrokenColumn(0, ModBlocks.watz_cooler, 0, -1, -2); + + for(int j = -1; j < 2; j++) { + setBrokenColumn(1, ModBlocks.watz_end, 1, 3, j); + setBrokenColumn(1, ModBlocks.watz_end, 1, j, 3); + setBrokenColumn(1, ModBlocks.watz_end, 1, -3, j); + setBrokenColumn(1, ModBlocks.watz_end, 1, j, -3); + } + setBrokenColumn(1, ModBlocks.watz_end, 1, 2, 2); + setBrokenColumn(1, ModBlocks.watz_end, 1, 2, -2); + setBrokenColumn(1, ModBlocks.watz_end, 1, -2, 2); + setBrokenColumn(1, ModBlocks.watz_end, 1, -2, -2); + } + + private void setBrokenColumn(int minHeight, Block b, int meta, int x, int z) { + + int height = minHeight + worldObj.rand.nextInt(3 - minHeight); + + for(int i = 0; i < 3; i++) { + + if(i <= height) { + worldObj.setBlock(xCoord + x, yCoord + i, zCoord + z, b, meta, 3); + } else { + worldObj.setBlock(xCoord + x, yCoord + i, zCoord + z, ModBlocks.mud_block); + } + } + } + @Override @SideOnly(Side.CLIENT) public double getMaxRenderDistanceSquared() { diff --git a/src/main/java/com/hbm/util/function/Function.java b/src/main/java/com/hbm/util/function/Function.java index 6f50ee651..544328e5c 100644 --- a/src/main/java/com/hbm/util/function/Function.java +++ b/src/main/java/com/hbm/util/function/Function.java @@ -64,6 +64,13 @@ public abstract class Function { @Override public String getDangerFromFuel() { return EnumChatFormatting.YELLOW + "MEDIUM / SQUARE ROOT"; } } + public static class FunctionSqrtFalling extends FunctionSqrt { + public FunctionSqrtFalling(double fallFactor) { + super(1D / fallFactor); + this.withOff(fallFactor * fallFactor); + } + } + public static class FunctionLinear extends FunctionSingleArg { public FunctionLinear(double level) { super(level); } @Override public double effonix(double x) { return getX(x) * this.level; } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index bb2d077b3..eb0dbc7e7 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -416,6 +416,7 @@ container.zirnox=ZIRNOX Atomreaktor crucible.aa=Herstellung - Fortgeschrittene Legierung crucible.cdalloy=Herstellung Cadmiumstahl +crucible.cmb=Herstellung CMB-Stahl crucible.ferro=Herstellung - Ferrouran crucible.hematite=Herstellung - Eisen aus Hämatit crucible.hss=Herstellung - Schnellarbeitsstahl @@ -781,6 +782,7 @@ hbmmat.uranium=Uran hbmmat.uranium233=Uran-233 hbmmat.uranium235=Uran-235 hbmmat.uranium238=Uran-238 +hbmmat.watzmud=Giftiger Schlamm hbmmat.whitephosphorus=Weißer Phosphor hbmmat.workersalloy=Desh hbmmat.wroughtiron=Schmiedeeisen @@ -2014,6 +2016,7 @@ item.ingot_magnetized_tungsten.name=Magnetisierter Wolframbarren item.ingot_meteorite.name=Meteoritenbarren item.ingot_meteorite_forged.name=Geschmiedeter Meteoritenbarren item.ingot_mox_fuel.name=MOX-Kernbrennstoffbarren +item.ingot_mud.name=Fester Schlammziegel item.ingot_neptunium.name=Neptuniumbarren item.ingot_neptunium_fuel.name=Neptuniumkernbrennstoffbarren item.ingot_niobium.name=Niobbarren @@ -4277,6 +4280,7 @@ tile.waste_mycelium.name=Leuchtende Myzel tile.waste_planks.name=Verkohlte Holzbretter tile.waste_trinitite.name=Trinititerz tile.waste_trinitite_red.name=Rotes Trinititerz +tile.watz.name=Watzkraftwerk tile.watz_conductor.name=Watz-Stromanschluss tile.watz_control.name=Verstärkte Steuerstäbe tile.watz_cooler.name=Watz-Superkühler @@ -4285,6 +4289,7 @@ tile.watz_element.name=Watzreaktionskammer tile.watz_end.name=Watz-Stabilitätselement tile.watz_end_bolted.name=Watz-Stabilitätselement (Genietet) tile.watz_hatch.name=Watzreaktorzugriffsluke +tile.watz_pump.name=Watz-Druckpumpe tile.yellow_barrel.name=Radioaktives Fass tile.zirnox_destroyed.name=Zerstörter ZINOX diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 1585d0491..97050a4fb 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -709,6 +709,7 @@ container.zirnox=ZIRNOX Nuclear Reactor crucible.aa=Advanced Alloy Production crucible.cdalloy=Cadmium Steel Production +crucible.cmb=CMB Steel Production crucible.ferro=Ferrouranium Production crucible.hematite=Iron Production from Hematite crucible.hss=High-Speed Steel Production @@ -1358,6 +1359,7 @@ hbmmat.uranium=Uranium hbmmat.uranium233=Uranium-233 hbmmat.uranium235=Uranium-235 hbmmat.uranium238=Uranium-238 +hbmmat.watzmud=Poisonous Mud hbmmat.whitephosphorus=White Phosphorus hbmmat.workersalloy=Desh hbmmat.wroughtiron=Wroght Iron @@ -2663,6 +2665,7 @@ item.ingot_magnetized_tungsten.name=Magnetized Tungsten Ingot item.ingot_meteorite.name=Meteorite Ingot item.ingot_meteorite_forged.name=Forged Meteorite Ingot item.ingot_mox_fuel.name=Ingot of MOX Fuel +item.ingot_mud.name=Solid Mud Brick item.ingot_neptunium.name=Neptunium Ingot item.ingot_neptunium.desc=That one's my favourite! item.ingot_neptunium.desc.P11=Woo, scary! @@ -5095,6 +5098,7 @@ tile.waste_mycelium.name=Glowing Mycelium tile.waste_planks.name=Charred Wooden Planks tile.waste_trinitite.name=Trinitite Ore tile.waste_trinitite_red.name=Red Trinitite Ore +tile.watz.name=Watz Powerplant tile.watz_conductor.name=Watz Electricity Port tile.watz_control.name=Reinforced Control Rods tile.watz_cooler.name=Watz Reactor Supercooler @@ -5103,6 +5107,7 @@ tile.watz_element.name=Watz Reaction Chamber tile.watz_end.name=Watz Reactor Stability Element tile.watz_end_bolted.name=Watz Reactor Stability Element (Riveted) tile.watz_hatch.name=Watz Reactor Access Hatch +tile.watz_pump.name=Watz Pressure Pump tile.yellow_barrel.name=Radioactive Barrel tile.zirnox_destroyed.name=Destroyed ZINROX diff --git a/src/main/resources/assets/hbm/textures/items/ingot_mud.png b/src/main/resources/assets/hbm/textures/items/ingot_mud.png new file mode 100644 index 000000000..e18313181 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ingot_mud.png differ