diff --git a/changelog b/changelog index f25cb1cf0..e45b07ed7 100644 --- a/changelog +++ b/changelog @@ -1,15 +1,23 @@ ## Added * Pigeons + * Spawn on plains in large flocks + * Will alternate between walking on the ground and flying around aimlessly + * When on the ground, they can eat dropped bread (the item has a 33% of being used up) + * Fat pigeons will spawn droppings when flying, these droppings will fertilize the ground below them + * When hit with damage equivalent to twice their health or higher, pigeons will explode, dropping 10 feathers + * when killed otherwise, they only drop a few feathers and sometimes raw chicken * Wood burner * Replaces the old combustion generator * A larger machine, has higher efficiency when burning logs or planks * Collects ashes at the same rate as ashpits * Also has an option to burn flammable liquids at 50% efficiency + * Will automatically shut off if the energy buffer is full * `/ntmrad` * `set` operator can change the radiation amount in the current chunk * `clear` operator will remove the radiation data from all loaded chunks * Dense wires * Can be made in a crucible + * Alloy and gold ones can also be made using the arc welder * Material cost is equivalent to 1 ingot * For ease of mass-production, 9-fold molds are also available * Used to craft hadron magnets, reducing crafting complexity be removing annoying upgrade recipes which make automation more complicated and needlessly inflate the amount of materials required for a magnet tier that isn't even the one that's being made @@ -23,11 +31,16 @@ * Doubled coal bedrock ore's coal output to 8 coal * A new config option now replaces the iron and copper bedrock ores in 528 mode with hematite and malachite * the industrial generator now has three additional ports on its underside, meaning it is now a lot easier to properly automate all necessary IO -* Neodymium is now a valid crucible material +* Neodymium and DNT are now valid crucible materials * Particle accelerators will now evenly distribute items using IO if both inputs are equal, making the antischrabidium recipe a lot easier to automate * Due to multiple complaints regarding the plastic bag's ability to contain radiation, plastic bags now *double* the radiation of the item they contain * The post impact spawning restrictions have changed, meaning that spawning things with spawn eggs is no longer broken. Due to technical limitations, this means that post impact, no mobs will spawn as part of world gen, only via random spawns. * All energy storage blocks now have a fixed transfer limit of 5% of their capacity per tick, reducing the impact of ping-ponging considerably +* Trenchmaster armor no longer takes damage from self-inflicted explosions, knockback is still applied though +* The combination oven no longer needs blaze powder to be made, instead it uses welded copper plates. Welded copper needs 1kHE/t to make, twice as much as welded steel. +* The steam engine now only needs 4 copper coils instead of 8 ## Fixed * Pipe and power networks now force the chunk to be saved on transfer, ensuring that rapid changes in the fluid/energy level aren't lost when the tile entity is unloaded +* Fixed Fwatz access hatch not visually connecting to cables +* Fixed most projectiles creating explosions with the projectile itself as the attacker instead of the player that fired that projectile diff --git a/gradle.properties b/gradle.properties index 1b073093f..243fd6690 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=4760 +mod_build_number=4774 credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\ \ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\ diff --git a/src/main/java/com/hbm/blocks/machine/FWatzHatch.java b/src/main/java/com/hbm/blocks/machine/FWatzHatch.java index 5b3df59dd..69a7e5871 100644 --- a/src/main/java/com/hbm/blocks/machine/FWatzHatch.java +++ b/src/main/java/com/hbm/blocks/machine/FWatzHatch.java @@ -8,6 +8,7 @@ import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.tileentity.machine.TileEntityFWatzCore; +import api.hbm.energy.IEnergyConnectorBlock; import api.hbm.fluid.IFluidConnectorBlock; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; @@ -26,7 +27,7 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class FWatzHatch extends Block implements IFluidConnectorBlock { +public class FWatzHatch extends Block implements IEnergyConnectorBlock, IFluidConnectorBlock { @SideOnly(Side.CLIENT) private IIcon iconFront; @@ -158,4 +159,9 @@ public class FWatzHatch extends Block implements IFluidConnectorBlock { public boolean canConnect(FluidType type, IBlockAccess world, int x, int y, int z, ForgeDirection dir) { return type == Fluids.AMAT || type == Fluids.ASCHRAB; } + + @Override + public boolean canConnect(IBlockAccess world, int x, int y, int z, ForgeDirection dir) { + return true; + } } diff --git a/src/main/java/com/hbm/commands/CommandRadiation.java b/src/main/java/com/hbm/commands/CommandRadiation.java index 436d7bcc4..90b4476d3 100644 --- a/src/main/java/com/hbm/commands/CommandRadiation.java +++ b/src/main/java/com/hbm/commands/CommandRadiation.java @@ -4,6 +4,8 @@ import com.hbm.handler.radiation.ChunkRadiationManager; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; public class CommandRadiation extends CommandBase { @@ -22,12 +24,18 @@ public class CommandRadiation extends CommandBase { if(args.length == 1 && "clear".equals(args[0])) { ChunkRadiationManager.proxy.clearSystem(sender.getEntityWorld()); + sender.addChatMessage(new ChatComponentText("Cleared radiation data!")); + return; } if(args.length == 2 && "set".equals(args[0])) { float amount = (float) this.parseDoubleBounded(sender, args[1], 0D, 100_000D); ChunkRadiationManager.proxy.setRadiation(sender.getEntityWorld(), sender.getPlayerCoordinates().posX, sender.getPlayerCoordinates().posY, sender.getPlayerCoordinates().posZ, amount); + sender.addChatMessage(new ChatComponentText("Radiation set.")); + return; } + + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + getCommandUsage(sender))); } } diff --git a/src/main/java/com/hbm/entity/EntityMappings.java b/src/main/java/com/hbm/entity/EntityMappings.java index 2323d4dd6..c0e61d016 100644 --- a/src/main/java/com/hbm/entity/EntityMappings.java +++ b/src/main/java/com/hbm/entity/EntityMappings.java @@ -261,6 +261,7 @@ public class EntityMappings { addSpawn(EntityCreeperVolatile.class, 10, 1, 1, EnumCreatureType.monster, BiomeGenBase.getBiomeGenArray()); addSpawn(EntityCreeperGold.class, 1, 1, 1, EnumCreatureType.monster, BiomeGenBase.getBiomeGenArray()); addSpawn(EntityPlasticBag.class, 1, 1, 3, EnumCreatureType.waterCreature, BiomeDictionary.getBiomesForType(Type.OCEAN)); + addSpawn(EntityPigeon.class, 1, 5, 10, EnumCreatureType.creature, BiomeDictionary.getBiomesForType(Type.PLAINS)); int id = 0; for(Quartet, String, Integer, Boolean> entry : entityMappings) { diff --git a/src/main/java/com/hbm/entity/mob/EntityPigeon.java b/src/main/java/com/hbm/entity/mob/EntityPigeon.java index ec93d403c..ad6d203fc 100644 --- a/src/main/java/com/hbm/entity/mob/EntityPigeon.java +++ b/src/main/java/com/hbm/entity/mob/EntityPigeon.java @@ -7,7 +7,11 @@ import com.hbm.entity.mob.ai.EntityAIStartFlying; import com.hbm.entity.mob.ai.EntityAIStopFlying; import com.hbm.entity.mob.ai.EntityAISwimmingConditional; import com.hbm.entity.mob.ai.EntityAIWanderConditional; +import com.hbm.items.tool.ItemFertilizer; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.PacketDispatcher; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.block.Block; import net.minecraft.entity.EntityCreature; import net.minecraft.entity.ai.EntityAILookIdle; @@ -15,12 +19,16 @@ import net.minecraft.entity.ai.EntityAIWatchClosest; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.passive.IAnimals; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; import net.minecraft.util.Vec3; import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.util.FakePlayerFactory; public class EntityPigeon extends EntityCreature implements IFlyingCreature, IAnimals { @@ -149,6 +157,34 @@ public class EntityPigeon extends EntityCreature implements IFlyingCreature, IAn this.moveForward = 1.5F; if(this.getRNG().nextInt(20) == 0) this.rotationYaw += this.getRNG().nextGaussian() * 30; + + if(this.isFat() && this.getRNG().nextInt(50) == 0) { + + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("type", "sweat"); + nbt.setInteger("count", 3); + nbt.setInteger("block", Block.getIdFromBlock(Blocks.wool)); + nbt.setInteger("entity", getEntityId()); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(nbt, 0, 0, 0), new TargetPoint(dimension, posX, posY, posZ, 50)); + + int x = (int) Math.floor(posX); + int y = (int) Math.floor(posY) - 1; + int z = (int) Math.floor(posZ); + EntityPlayer player = FakePlayerFactory.getMinecraft((WorldServer)worldObj); + + for(int i = 0; i < 25; i++) { + + if(ItemFertilizer.fertilize(worldObj, x, y - i, z, player, true)) { + worldObj.playAuxSFX(2005, x, y - i, z, 0); + break; + } + } + + if(this.getRNG().nextInt(10) == 0) { + this.setFat(false); + } + } + } else if(!this.onGround && this.motionY < 0.0D) { this.motionY *= 0.8D; } diff --git a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java index 1a34a8823..d8ee0f4f3 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java @@ -13,6 +13,14 @@ import com.hbm.entity.logic.EntityNukeExplosionMK5; import com.hbm.explosion.ExplosionChaos; import com.hbm.explosion.ExplosionLarge; import com.hbm.explosion.ExplosionNukeGeneric; +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard; +import com.hbm.explosion.vanillant.standard.BlockMutatorFire; +import com.hbm.explosion.vanillant.standard.BlockProcessorNoDamage; +import com.hbm.explosion.vanillant.standard.BlockProcessorStandard; +import com.hbm.explosion.vanillant.standard.EntityProcessorStandard; +import com.hbm.explosion.vanillant.standard.ExplosionEffectStandard; +import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; @@ -414,8 +422,17 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet if(config.jolt > 0 && !worldObj.isRemote) ExplosionLarge.jolt(worldObj, posX, posY, posZ, config.jolt, 150, 0.25); - if(config.explosive > 0 && !worldObj.isRemote) - worldObj.newExplosion(this, posX, posY, posZ, config.explosive, config.incendiary > 0, config.blockDamage); + if(config.explosive > 0 && !worldObj.isRemote) { + //worldObj.newExplosion(this.thrower, posX, posY, posZ, config.explosive, config.incendiary > 0, config.blockDamage); + ExplosionVNT vnt = new ExplosionVNT(worldObj, posX, posY, posZ, config.explosive, this.thrower); + vnt.setBlockAllocator(new BlockAllocatorStandard()); + if(config.blockDamage) vnt.setBlockProcessor(new BlockProcessorStandard().withBlockEffect(config.incendiary > 0 ? new BlockMutatorFire() : null)); + else vnt.setBlockProcessor(new BlockProcessorNoDamage().withBlockEffect(config.incendiary > 0 ? new BlockMutatorFire() : null)); + vnt.setEntityProcessor(new EntityProcessorStandard().allowSelfDamage()); + vnt.setPlayerProcessor(new PlayerProcessorStandard()); + vnt.setSFX(new ExplosionEffectStandard()); + vnt.explode(); + } if(config.shrapnel > 0 && !worldObj.isRemote) ExplosionLarge.spawnShrapnels(worldObj, posX, posY, posZ, config.shrapnel); diff --git a/src/main/java/com/hbm/explosion/vanillant/standard/BlockMutatorFire.java b/src/main/java/com/hbm/explosion/vanillant/standard/BlockMutatorFire.java new file mode 100644 index 000000000..8cc03caa9 --- /dev/null +++ b/src/main/java/com/hbm/explosion/vanillant/standard/BlockMutatorFire.java @@ -0,0 +1,23 @@ +package com.hbm.explosion.vanillant.standard; + +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.explosion.vanillant.interfaces.IBlockMutator; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; + +public class BlockMutatorFire implements IBlockMutator { + + @Override public void mutatePre(ExplosionVNT explosion, Block block, int meta, int x, int y, int z) { } + + @Override + public void mutatePost(ExplosionVNT explosion, int x, int y, int z) { + + Block block = explosion.world.getBlock(x, y, z); + Block block1 = explosion.world.getBlock(x, y - 1, z); + if(block.getMaterial() == Material.air && block1.func_149730_j() && explosion.world.rand.nextInt(3) == 0) { + explosion.world.setBlock(x, y, z, Blocks.fire); + } + } +} diff --git a/src/main/java/com/hbm/explosion/vanillant/standard/BlockProcessorNoDamage.java b/src/main/java/com/hbm/explosion/vanillant/standard/BlockProcessorNoDamage.java new file mode 100644 index 000000000..40332a9d8 --- /dev/null +++ b/src/main/java/com/hbm/explosion/vanillant/standard/BlockProcessorNoDamage.java @@ -0,0 +1,62 @@ +package com.hbm.explosion.vanillant.standard; + +import java.util.HashSet; +import java.util.Iterator; + +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.explosion.vanillant.interfaces.IBlockMutator; +import com.hbm.explosion.vanillant.interfaces.IBlockProcessor; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.world.ChunkPosition; +import net.minecraft.world.World; + +public class BlockProcessorNoDamage implements IBlockProcessor { + + protected IBlockMutator convert; + + public BlockProcessorNoDamage() { } + + public BlockProcessorNoDamage withBlockEffect(IBlockMutator convert) { + this.convert = convert; + return this; + } + + @Override + public void process(ExplosionVNT explosion, World world, double x, double y, double z, HashSet affectedBlocks) { + + Iterator iterator = affectedBlocks.iterator(); + + while(iterator.hasNext()) { + ChunkPosition chunkposition = (ChunkPosition) iterator.next(); + int blockX = chunkposition.chunkPosX; + int blockY = chunkposition.chunkPosY; + int blockZ = chunkposition.chunkPosZ; + Block block = world.getBlock(blockX, blockY, blockZ); + + if(block.getMaterial() != Material.air) { + if(this.convert != null) this.convert.mutatePre(explosion, block, world.getBlockMetadata(blockX, blockY, blockZ), blockX, blockY, blockZ); + } + } + + + if(this.convert != null) { + iterator = affectedBlocks.iterator(); + + while(iterator.hasNext()) { + ChunkPosition chunkposition = (ChunkPosition) iterator.next(); + int blockX = chunkposition.chunkPosX; + int blockY = chunkposition.chunkPosY; + int blockZ = chunkposition.chunkPosZ; + Block block = world.getBlock(blockX, blockY, blockZ); + + if(block.getMaterial() == Material.air) { + this.convert.mutatePost(explosion, blockX, blockY, blockZ); + } + } + } + + affectedBlocks.clear(); //tricks the standard SFX to not do the block damage particles + } +} diff --git a/src/main/java/com/hbm/explosion/vanillant/standard/EntityProcessorStandard.java b/src/main/java/com/hbm/explosion/vanillant/standard/EntityProcessorStandard.java index 626887245..ba9a66cad 100644 --- a/src/main/java/com/hbm/explosion/vanillant/standard/EntityProcessorStandard.java +++ b/src/main/java/com/hbm/explosion/vanillant/standard/EntityProcessorStandard.java @@ -21,6 +21,7 @@ public class EntityProcessorStandard implements IEntityProcessor { protected IEntityRangeMutator range; protected ICustomDamageHandler damage; + protected boolean allowSelfDamage = false; @Override public HashMap process(ExplosionVNT explosion, World world, double x, double y, double z, float size) { @@ -40,7 +41,7 @@ public class EntityProcessorStandard implements IEntityProcessor { double minZ = z - (double) size - 1.0D; double maxZ = z + (double) size + 1.0D; - List list = world.getEntitiesWithinAABBExcludingEntity(explosion.exploder, AxisAlignedBB.getBoundingBox(minX, minY, minZ, maxX, maxY, maxZ)); + List list = world.getEntitiesWithinAABBExcludingEntity(allowSelfDamage ? null : explosion.exploder, AxisAlignedBB.getBoundingBox(minX, minY, minZ, maxX, maxY, maxZ)); ForgeEventFactory.onExplosionDetonate(world, explosion.compat, list, size); Vec3 vec3 = Vec3.createVectorHelper(x, y, z); @@ -101,4 +102,9 @@ public class EntityProcessorStandard implements IEntityProcessor { this.damage = damage; return this; } + + public EntityProcessorStandard allowSelfDamage() { + this.allowSelfDamage = true; + return this; + } } diff --git a/src/main/java/com/hbm/explosion/vanillant/standard/ExplosionEffectStandard.java b/src/main/java/com/hbm/explosion/vanillant/standard/ExplosionEffectStandard.java index 1ffb85b24..79b5b6966 100644 --- a/src/main/java/com/hbm/explosion/vanillant/standard/ExplosionEffectStandard.java +++ b/src/main/java/com/hbm/explosion/vanillant/standard/ExplosionEffectStandard.java @@ -30,7 +30,7 @@ public class ExplosionEffectStandard implements IExplosionSFX { if(size >= 2.0F) { world.spawnParticle("hugeexplosion", x, y, z, 1.0D, 0.0D, 0.0D); } else { - world.spawnParticle("largeexplode", x, z, z, 1.0D, 0.0D, 0.0D); + world.spawnParticle("largeexplode", x, y, z, 1.0D, 0.0D, 0.0D); } int count = affectedBlocks.size(); diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 4bf6ef68c..4ac445aa0 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -580,6 +580,7 @@ public class OreDictManager { OreDictionary.registerOre("dyeGray", fromOne(powder_ash, EnumAshType.MISC)); OreDictionary.registerOre("dyeBrown", fromOne(powder_ash, EnumAshType.FLY)); OreDictionary.registerOre("dyeBlack", fromOne(powder_ash, EnumAshType.SOOT)); + OreDictionary.registerOre("dyeMagenta", fromOne(powder_ash, EnumAshType.FULLERENE)); OreDictionary.registerOre("dye", new ItemStack(powder_ash, 1, OreDictionary.WILDCARD_VALUE)); OreDictionary.registerOre("blockGlass", glass_boron); diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index d3613fac6..9526c475f 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -95,7 +95,7 @@ public class Mats { //Base metals public static final NTMMaterial MAT_TITANIUM = makeSmeltable(2200, TI, 0xF7F3F2, 0x4F4C4B, 0xA99E79).setShapes(INGOT, DUST, PLATE, CASTPLATE, WELDEDPLATE, BLOCK, HEAVY_COMPONENT); - public static final NTMMaterial MAT_COPPER = makeSmeltable(2900, CU, 0xFDCA88, 0x601E0D, 0xC18336).setShapes(WIRE, INGOT, DUST, PLATE, CASTPLATE, BLOCK, HEAVY_COMPONENT); + public static final NTMMaterial MAT_COPPER = makeSmeltable(2900, CU, 0xFDCA88, 0x601E0D, 0xC18336).setShapes(WIRE, INGOT, DUST, PLATE, CASTPLATE, WELDEDPLATE, BLOCK, HEAVY_COMPONENT); public static final NTMMaterial MAT_TUNGSTEN = makeSmeltable(7400, W, 0x868686, 0x000000, 0x977474).setShapes(WIRE, INGOT, DUST, DENSEWIRE, CASTPLATE, WELDEDPLATE, BLOCK, HEAVY_COMPONENT); public static final NTMMaterial MAT_ALUMINIUM = makeSmeltable(1300, AL, 0xFFFFFF, 0x344550, 0xD0B8EB).setShapes(WIRE, INGOT, DUST, PLATE, CASTPLATE, BLOCK, HEAVY_COMPONENT); public static final NTMMaterial MAT_LEAD = makeSmeltable(8200, PB, 0xA6A6B2, 0x03030F, 0x646470).setShapes(NUGGET, INGOT, DUST, PLATE, CASTPLATE, BLOCK, HEAVY_COMPONENT); diff --git a/src/main/java/com/hbm/inventory/recipes/ArcWelderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ArcWelderRecipes.java index 5aea7661e..d8214f5e3 100644 --- a/src/main/java/com/hbm/inventory/recipes/ArcWelderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ArcWelderRecipes.java @@ -35,6 +35,11 @@ public class ArcWelderRecipes extends SerializableRecipe { recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.motor, 2), 100, 400L, new OreDictStack(STEEL.plate(), 1), new ComparableStack(ModItems.coil_copper), new ComparableStack(ModItems.coil_copper_torus))); + recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.wire_dense, 1, Mats.MAT_ALLOY.id), 100, 10_000L, + new ComparableStack(ModItems.wire_advanced_alloy, 8))); + recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.wire_dense, 1, Mats.MAT_GOLD.id), 100, 10_000L, + new ComparableStack(ModItems.wire_gold, 8))); + recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.circuit_copper), 100, 1_000L, new FluidStack(Fluids.GAS, 250), new ComparableStack(ModItems.circuit_aluminium, 1), new OreDictStack(NETHERQUARTZ.dust()), new ComparableStack(ModItems.wire_copper, 8))); recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.circuit_red_copper), 100, 2_500L, new FluidStack(Fluids.PETROLEUM, 250), @@ -50,6 +55,9 @@ public class ArcWelderRecipes extends SerializableRecipe { //high-demand mid-game parts recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.plate_welded, 1, Mats.MAT_STEEL.id), 100, 500L, new OreDictStack(STEEL.plateCast(), 2))); + //literally just the combination oven + recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.plate_welded, 1, Mats.MAT_COPPER.id), 200, 1_000L, + new OreDictStack(CU.plateCast(), 2))); //mid-game, single combustion engine running on LPG recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.plate_welded, 1, Mats.MAT_TITANIUM.id), 600, 50_000L, new OreDictStack(TI.plateCast(), 2))); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 18fc47acd..b76505159 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -227,7 +227,7 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModItems.pellet_cluster, 1), new AStack[] {new OreDictStack(STEEL.plate(), 4), new ComparableStack(Blocks.tnt, 1), }, 50); makeRecipe(new ComparableStack(ModItems.pellet_buckshot, 1), new AStack[] {new OreDictStack(PB.nugget(), 6), }, 50); makeRecipe(new ComparableStack(ModItems.australium_iii, 1), new AStack[] {new ComparableStack(ModItems.nugget_australium, 6), new OreDictStack(STEEL.ingot(), 1), new OreDictStack(STEEL.plate(), 6), new OreDictStack(CU.plate(), 2), new ComparableStack(ModItems.wire_copper, 6), },150); - makeRecipe(new ComparableStack(ModItems.magnetron, 1), new AStack[] {new OreDictStack(ALLOY.ingot(), 1), new OreDictStack(ALLOY.plate(), 2), new ComparableStack(ModItems.wire_tungsten, 1), new ComparableStack(ModItems.coil_tungsten, 1), },100); + makeRecipe(new ComparableStack(ModItems.magnetron, 1), new AStack[] {new OreDictStack(ALLOY.plate(), 3), new ComparableStack(ModItems.wire_tungsten, 1), new ComparableStack(ModItems.coil_tungsten, 1), },100); makeRecipe(new ComparableStack(ModItems.pellet_schrabidium, 1), new AStack[] {new OreDictStack(SA326.ingot(), 5), new OreDictStack(IRON.plate(), 2), }, 200); makeRecipe(new ComparableStack(ModItems.pellet_hes, 1), new AStack[] {new ComparableStack(ModItems.ingot_hes, 5), new OreDictStack(IRON.plate(), 2), }, 200); makeRecipe(new ComparableStack(ModItems.pellet_mes, 1), new AStack[] {new ComparableStack(ModItems.ingot_schrabidium_fuel, 5), new OreDictStack(IRON.plate(), 2), }, 200); diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index 778b17be4..18e76b6a0 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -311,9 +311,8 @@ public class AnvilRecipes { new AStack[] { new ComparableStack(Blocks.stonebrick, 8), new OreDictStack(KEY_LOG, 16), - new OreDictStack(CU.ingot(), 8), - new OreDictStack(KEY_BRICK, 16), - new ComparableStack(Items.blaze_powder, 4) + new OreDictStack(CU.plateWelded(), 2), + new OreDictStack(KEY_BRICK, 16) }, new AnvilOutput(new ItemStack(ModBlocks.furnace_combination))).setTier(2)); constructionRecipes.add(new AnvilConstructionRecipe( @@ -339,7 +338,7 @@ public class AnvilRecipes { new ComparableStack(ModBlocks.reinforced_stone, 16), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModItems.hull_small_steel, 2), - new ComparableStack(ModItems.coil_copper, 8), + new ComparableStack(ModItems.coil_copper, 4), new ComparableStack(ModItems.gear_large, 1) }, new AnvilOutput(new ItemStack(ModBlocks.machine_steam_engine))).setTier(2)); diff --git a/src/main/java/com/hbm/items/armor/ArmorTrenchmaster.java b/src/main/java/com/hbm/items/armor/ArmorTrenchmaster.java index ec497410c..582b44179 100644 --- a/src/main/java/com/hbm/items/armor/ArmorTrenchmaster.java +++ b/src/main/java/com/hbm/items/armor/ArmorTrenchmaster.java @@ -14,6 +14,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.event.entity.living.LivingAttackEvent; +import net.minecraftforge.event.entity.living.LivingHurtEvent; public class ArmorTrenchmaster extends ArmorFSB { @@ -45,6 +46,24 @@ public class ArmorTrenchmaster extends ArmorFSB { list.add(EnumChatFormatting.RED + " " + I18nUtil.resolveKey("armor.fasterReload")); list.add(EnumChatFormatting.RED + " " + I18nUtil.resolveKey("armor.moreAmmo")); } + + @Override + public void handleHurt(LivingHurtEvent event) { + + EntityLivingBase e = event.entityLiving; + + if(e instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) e; + + if(ArmorFSB.hasFSBArmor(player)) { + + if(event.source.isExplosion() && event.source.getSourceOfDamage() == player) { + event.ammount = 0; + return; + } + } + } + } @Override public void handleAttack(LivingAttackEvent event) { diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 417c9681b..7b15658d8 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 (4760)"; + public static final String VERSION = "1.0.27 BETA (4774)"; //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 e7ee854ca..d54d2267f 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -293,7 +293,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.capacitor_tantalium, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', ANY_RESISTANTALLOY.ingot(), 'C', TA.block(), 'W', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.capacitor_schrabidate, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', ANY_RESISTANTALLOY.ingot(), 'C', SBD.block(), 'W', STEEL.ingot() }); //addRecipeAuto(new ItemStack(ModBlocks.machine_coal_off, 1), new Object[] { "STS", "SCS", "SFS", 'S', STEEL.ingot(), 'T', ModItems.tank_steel, 'C', MINGRADE.ingot(), 'F', Blocks.furnace }); - addRecipeAuto(new ItemStack(ModBlocks.machine_wood_burner, 1), new Object[] { "PPP", "CSC", "IFI" , 'P', STEEL.plate528(), 'C', ModItems.coil_copper, 'S', ModItems.hull_small_steel, 'I', IRON.ingot(), 'F', Blocks.furnace}); + addRecipeAuto(new ItemStack(ModBlocks.machine_wood_burner, 1), new Object[] { "PPP", "CFC", "I I" , 'P', STEEL.plate528(), 'C', ModItems.coil_copper, 'I', IRON.ingot(), 'F', Blocks.furnace}); addRecipeAuto(new ItemStack(ModBlocks.machine_boiler_off, 1), new Object[] { "SPS", "TFT", "SPS", 'S', STEEL.ingot(), 'P', ModItems.board_copper, 'T', ModItems.tank_steel, 'F', Blocks.furnace }); addRecipeAuto(new ItemStack(ModBlocks.machine_boiler_electric_off, 1), new Object[] { "SPS", "TFT", "SPS", 'S', DESH.ingot(), 'P', ModItems.board_copper, 'T', ModItems.tank_steel, 'F', ModBlocks.machine_electric_furnace_off }); addRecipeAuto(new ItemStack(ModBlocks.machine_turbine, 1), new Object[] { "SMS", "PTP", "SMS", 'S', STEEL.ingot(), 'T', ModItems.turbine_titanium, 'M', ModItems.coil_copper, 'P', ANY_PLASTIC.ingot() }); @@ -825,11 +825,6 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.mech_key, 1), new Object[] { "MCM", "MKM", "MMM", 'M', ModItems.ingot_meteorite_forged, 'C', ModItems.coin_maskman, 'K', ModItems.key }); addRecipeAuto(new ItemStack(ModItems.spawn_ufo, 1), new Object[] { "MMM", "DCD", "MMM", 'M', ModItems.ingot_meteorite, 'D', DNT.ingot(), 'C', ModItems.coin_worm }); - - addRecipeAuto(new ItemStack(ModItems.wire_dense, 1, Mats.MAT_ALLOY.id), new Object[] { "WWW", "W W", "WWW", 'W', ModItems.wire_advanced_alloy }); - addRecipeAuto(new ItemStack(ModItems.wire_dense, 1, Mats.MAT_GOLD.id), new Object[] { "WWW", "W W", "WWW", 'W', ModItems.wire_gold }); - addRecipeAuto(new ItemStack(ModItems.wire_dense, 1, Mats.MAT_TUNGSTEN.id), new Object[] { "WWW", "W W", "WWW", 'W', ModItems.wire_tungsten }); - addRecipeAuto(new ItemStack(ModItems.wire_dense, 1, Mats.MAT_MAGTUNG.id), new Object[] { "WWW", "W W", "WWW", 'W', ModItems.wire_magnetized_tungsten }); addRecipeAuto(new ItemStack(ModBlocks.hadron_coil_alloy, 1), new Object[] { "WWW", "WCW", "WWW", 'W', ModItems.wire_advanced_alloy, 'C', ModBlocks.fusion_conductor }); addRecipeAuto(new ItemStack(ModBlocks.hadron_coil_alloy, 1), new Object[] { "WW", "WW", 'W', ALLOY.wireDense() }); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java index 287c0c592..202dbe5ba 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java @@ -178,6 +178,7 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement @Override public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); nbt.setLong("power", power); nbt.setInteger("burnTime", burnTime); nbt.setInteger("maxBurnTime", maxBurnTime); diff --git a/src/main/resources/assets/hbm/textures/items/coil_advanced_alloy.png b/src/main/resources/assets/hbm/textures/items/coil_advanced_alloy.png index 291ff9f9f..aa44989b0 100644 Binary files a/src/main/resources/assets/hbm/textures/items/coil_advanced_alloy.png and b/src/main/resources/assets/hbm/textures/items/coil_advanced_alloy.png differ diff --git a/src/main/resources/assets/hbm/textures/items/coil_copper.png b/src/main/resources/assets/hbm/textures/items/coil_copper.png index a31ac7dc5..332bb627b 100644 Binary files a/src/main/resources/assets/hbm/textures/items/coil_copper.png and b/src/main/resources/assets/hbm/textures/items/coil_copper.png differ diff --git a/src/main/resources/assets/hbm/textures/items/coil_gold.png b/src/main/resources/assets/hbm/textures/items/coil_gold.png index 6d22668a3..849d394ac 100644 Binary files a/src/main/resources/assets/hbm/textures/items/coil_gold.png and b/src/main/resources/assets/hbm/textures/items/coil_gold.png differ diff --git a/src/main/resources/assets/hbm/textures/items/coil_magnetized_tungsten.png b/src/main/resources/assets/hbm/textures/items/coil_magnetized_tungsten.png index 149d1c432..2118d79ff 100644 Binary files a/src/main/resources/assets/hbm/textures/items/coil_magnetized_tungsten.png and b/src/main/resources/assets/hbm/textures/items/coil_magnetized_tungsten.png differ diff --git a/src/main/resources/assets/hbm/textures/items/swordTemplate.png b/src/main/resources/assets/hbm/textures/items/swordTemplate.png deleted file mode 100644 index cda8f964c..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/swordTemplate.png and /dev/null differ