This commit is contained in:
Bob 2023-11-05 22:07:07 +01:00
parent ca9d8e74e0
commit 98b05b1c70
25 changed files with 215 additions and 20 deletions

View File

@ -1,15 +1,23 @@
## Added ## Added
* Pigeons * 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 * Wood burner
* Replaces the old combustion generator * Replaces the old combustion generator
* A larger machine, has higher efficiency when burning logs or planks * A larger machine, has higher efficiency when burning logs or planks
* Collects ashes at the same rate as ashpits * Collects ashes at the same rate as ashpits
* Also has an option to burn flammable liquids at 50% efficiency * Also has an option to burn flammable liquids at 50% efficiency
* Will automatically shut off if the energy buffer is full
* `/ntmrad` * `/ntmrad`
* `set` operator can change the radiation amount in the current chunk * `set` operator can change the radiation amount in the current chunk
* `clear` operator will remove the radiation data from all loaded chunks * `clear` operator will remove the radiation data from all loaded chunks
* Dense wires * Dense wires
* Can be made in a crucible * 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 * Material cost is equivalent to 1 ingot
* For ease of mass-production, 9-fold molds are also available * 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 * 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 * 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 * 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 * 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 * 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 * 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. * 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 * 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 ## 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 * 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

View File

@ -1,6 +1,6 @@
mod_version=1.0.27 mod_version=1.0.27
# Empty build number makes a release type # Empty build number makes a release type
mod_build_number=4760 mod_build_number=4774
credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\ credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\
\ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\ \ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\

View File

@ -8,6 +8,7 @@ import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.TileEntityFWatzCore; import com.hbm.tileentity.machine.TileEntityFWatzCore;
import api.hbm.energy.IEnergyConnectorBlock;
import api.hbm.fluid.IFluidConnectorBlock; import api.hbm.fluid.IFluidConnectorBlock;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
@ -26,7 +27,7 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
public class FWatzHatch extends Block implements IFluidConnectorBlock { public class FWatzHatch extends Block implements IEnergyConnectorBlock, IFluidConnectorBlock {
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
private IIcon iconFront; 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) { public boolean canConnect(FluidType type, IBlockAccess world, int x, int y, int z, ForgeDirection dir) {
return type == Fluids.AMAT || type == Fluids.ASCHRAB; return type == Fluids.AMAT || type == Fluids.ASCHRAB;
} }
@Override
public boolean canConnect(IBlockAccess world, int x, int y, int z, ForgeDirection dir) {
return true;
}
} }

View File

@ -4,6 +4,8 @@ import com.hbm.handler.radiation.ChunkRadiationManager;
import net.minecraft.command.CommandBase; import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender; import net.minecraft.command.ICommandSender;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
public class CommandRadiation extends CommandBase { public class CommandRadiation extends CommandBase {
@ -22,12 +24,18 @@ public class CommandRadiation extends CommandBase {
if(args.length == 1 && "clear".equals(args[0])) { if(args.length == 1 && "clear".equals(args[0])) {
ChunkRadiationManager.proxy.clearSystem(sender.getEntityWorld()); ChunkRadiationManager.proxy.clearSystem(sender.getEntityWorld());
sender.addChatMessage(new ChatComponentText("Cleared radiation data!"));
return;
} }
if(args.length == 2 && "set".equals(args[0])) { if(args.length == 2 && "set".equals(args[0])) {
float amount = (float) this.parseDoubleBounded(sender, args[1], 0D, 100_000D); 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); 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)));
} }
} }

View File

@ -261,6 +261,7 @@ public class EntityMappings {
addSpawn(EntityCreeperVolatile.class, 10, 1, 1, EnumCreatureType.monster, BiomeGenBase.getBiomeGenArray()); addSpawn(EntityCreeperVolatile.class, 10, 1, 1, EnumCreatureType.monster, BiomeGenBase.getBiomeGenArray());
addSpawn(EntityCreeperGold.class, 1, 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(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; int id = 0;
for(Quartet<Class<? extends Entity>, String, Integer, Boolean> entry : entityMappings) { for(Quartet<Class<? extends Entity>, String, Integer, Boolean> entry : entityMappings) {

View File

@ -7,7 +7,11 @@ import com.hbm.entity.mob.ai.EntityAIStartFlying;
import com.hbm.entity.mob.ai.EntityAIStopFlying; import com.hbm.entity.mob.ai.EntityAIStopFlying;
import com.hbm.entity.mob.ai.EntityAISwimmingConditional; import com.hbm.entity.mob.ai.EntityAISwimmingConditional;
import com.hbm.entity.mob.ai.EntityAIWanderConditional; 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.block.Block;
import net.minecraft.entity.EntityCreature; import net.minecraft.entity.EntityCreature;
import net.minecraft.entity.ai.EntityAILookIdle; 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.item.EntityItem;
import net.minecraft.entity.passive.IAnimals; import net.minecraft.entity.passive.IAnimals;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items; import net.minecraft.init.Items;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource; import net.minecraft.util.DamageSource;
import net.minecraft.util.Vec3; import net.minecraft.util.Vec3;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import net.minecraftforge.common.util.FakePlayerFactory;
public class EntityPigeon extends EntityCreature implements IFlyingCreature, IAnimals { public class EntityPigeon extends EntityCreature implements IFlyingCreature, IAnimals {
@ -149,6 +157,34 @@ public class EntityPigeon extends EntityCreature implements IFlyingCreature, IAn
this.moveForward = 1.5F; this.moveForward = 1.5F;
if(this.getRNG().nextInt(20) == 0) this.rotationYaw += this.getRNG().nextGaussian() * 30; 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) { } else if(!this.onGround && this.motionY < 0.0D) {
this.motionY *= 0.8D; this.motionY *= 0.8D;
} }

View File

@ -13,6 +13,14 @@ import com.hbm.entity.logic.EntityNukeExplosionMK5;
import com.hbm.explosion.ExplosionChaos; import com.hbm.explosion.ExplosionChaos;
import com.hbm.explosion.ExplosionLarge; import com.hbm.explosion.ExplosionLarge;
import com.hbm.explosion.ExplosionNukeGeneric; 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.BulletConfigSyncingUtil;
import com.hbm.handler.BulletConfiguration; import com.hbm.handler.BulletConfiguration;
import com.hbm.handler.GunConfiguration; import com.hbm.handler.GunConfiguration;
@ -414,8 +422,17 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet
if(config.jolt > 0 && !worldObj.isRemote) if(config.jolt > 0 && !worldObj.isRemote)
ExplosionLarge.jolt(worldObj, posX, posY, posZ, config.jolt, 150, 0.25); ExplosionLarge.jolt(worldObj, posX, posY, posZ, config.jolt, 150, 0.25);
if(config.explosive > 0 && !worldObj.isRemote) if(config.explosive > 0 && !worldObj.isRemote) {
worldObj.newExplosion(this, posX, posY, posZ, config.explosive, config.incendiary > 0, config.blockDamage); //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) if(config.shrapnel > 0 && !worldObj.isRemote)
ExplosionLarge.spawnShrapnels(worldObj, posX, posY, posZ, config.shrapnel); ExplosionLarge.spawnShrapnels(worldObj, posX, posY, posZ, config.shrapnel);

View File

@ -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);
}
}
}

View File

@ -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<ChunkPosition> 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
}
}

View File

@ -21,6 +21,7 @@ public class EntityProcessorStandard implements IEntityProcessor {
protected IEntityRangeMutator range; protected IEntityRangeMutator range;
protected ICustomDamageHandler damage; protected ICustomDamageHandler damage;
protected boolean allowSelfDamage = false;
@Override @Override
public HashMap<EntityPlayer, Vec3> process(ExplosionVNT explosion, World world, double x, double y, double z, float size) { public HashMap<EntityPlayer, Vec3> 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 minZ = z - (double) size - 1.0D;
double maxZ = 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); ForgeEventFactory.onExplosionDetonate(world, explosion.compat, list, size);
Vec3 vec3 = Vec3.createVectorHelper(x, y, z); Vec3 vec3 = Vec3.createVectorHelper(x, y, z);
@ -101,4 +102,9 @@ public class EntityProcessorStandard implements IEntityProcessor {
this.damage = damage; this.damage = damage;
return this; return this;
} }
public EntityProcessorStandard allowSelfDamage() {
this.allowSelfDamage = true;
return this;
}
} }

View File

@ -30,7 +30,7 @@ public class ExplosionEffectStandard implements IExplosionSFX {
if(size >= 2.0F) { if(size >= 2.0F) {
world.spawnParticle("hugeexplosion", x, y, z, 1.0D, 0.0D, 0.0D); world.spawnParticle("hugeexplosion", x, y, z, 1.0D, 0.0D, 0.0D);
} else { } 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(); int count = affectedBlocks.size();

View File

@ -580,6 +580,7 @@ public class OreDictManager {
OreDictionary.registerOre("dyeGray", fromOne(powder_ash, EnumAshType.MISC)); OreDictionary.registerOre("dyeGray", fromOne(powder_ash, EnumAshType.MISC));
OreDictionary.registerOre("dyeBrown", fromOne(powder_ash, EnumAshType.FLY)); OreDictionary.registerOre("dyeBrown", fromOne(powder_ash, EnumAshType.FLY));
OreDictionary.registerOre("dyeBlack", fromOne(powder_ash, EnumAshType.SOOT)); 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("dye", new ItemStack(powder_ash, 1, OreDictionary.WILDCARD_VALUE));
OreDictionary.registerOre("blockGlass", glass_boron); OreDictionary.registerOre("blockGlass", glass_boron);

View File

@ -95,7 +95,7 @@ public class Mats {
//Base metals //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_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_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_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); public static final NTMMaterial MAT_LEAD = makeSmeltable(8200, PB, 0xA6A6B2, 0x03030F, 0x646470).setShapes(NUGGET, INGOT, DUST, PLATE, CASTPLATE, BLOCK, HEAVY_COMPONENT);

View File

@ -35,6 +35,11 @@ public class ArcWelderRecipes extends SerializableRecipe {
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.motor, 2), 100, 400L, 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))); 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), 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))); 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), 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 //high-demand mid-game parts
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.plate_welded, 1, Mats.MAT_STEEL.id), 100, 500L, recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.plate_welded, 1, Mats.MAT_STEEL.id), 100, 500L,
new OreDictStack(STEEL.plateCast(), 2))); 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 //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, recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.plate_welded, 1, Mats.MAT_TITANIUM.id), 600, 50_000L,
new OreDictStack(TI.plateCast(), 2))); new OreDictStack(TI.plateCast(), 2)));

View File

@ -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_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.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.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_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_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); makeRecipe(new ComparableStack(ModItems.pellet_mes, 1), new AStack[] {new ComparableStack(ModItems.ingot_schrabidium_fuel, 5), new OreDictStack(IRON.plate(), 2), }, 200);

View File

@ -311,9 +311,8 @@ public class AnvilRecipes {
new AStack[] { new AStack[] {
new ComparableStack(Blocks.stonebrick, 8), new ComparableStack(Blocks.stonebrick, 8),
new OreDictStack(KEY_LOG, 16), new OreDictStack(KEY_LOG, 16),
new OreDictStack(CU.ingot(), 8), new OreDictStack(CU.plateWelded(), 2),
new OreDictStack(KEY_BRICK, 16), new OreDictStack(KEY_BRICK, 16)
new ComparableStack(Items.blaze_powder, 4)
}, new AnvilOutput(new ItemStack(ModBlocks.furnace_combination))).setTier(2)); }, new AnvilOutput(new ItemStack(ModBlocks.furnace_combination))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe( constructionRecipes.add(new AnvilConstructionRecipe(
@ -339,7 +338,7 @@ public class AnvilRecipes {
new ComparableStack(ModBlocks.reinforced_stone, 16), new ComparableStack(ModBlocks.reinforced_stone, 16),
new OreDictStack(STEEL.plate(), 12), new OreDictStack(STEEL.plate(), 12),
new ComparableStack(ModItems.hull_small_steel, 2), 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 ComparableStack(ModItems.gear_large, 1)
}, new AnvilOutput(new ItemStack(ModBlocks.machine_steam_engine))).setTier(2)); }, new AnvilOutput(new ItemStack(ModBlocks.machine_steam_engine))).setTier(2));

View File

@ -14,6 +14,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
public class ArmorTrenchmaster extends ArmorFSB { public class ArmorTrenchmaster extends ArmorFSB {
@ -46,6 +47,24 @@ public class ArmorTrenchmaster extends ArmorFSB {
list.add(EnumChatFormatting.RED + " " + I18nUtil.resolveKey("armor.moreAmmo")); 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 @Override
public void handleAttack(LivingAttackEvent event) { public void handleAttack(LivingAttackEvent event) {

View File

@ -3,7 +3,7 @@ package com.hbm.lib;
public class RefStrings { public class RefStrings {
public static final String MODID = "hbm"; public static final String MODID = "hbm";
public static final String NAME = "Hbm's Nuclear Tech Mod"; 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: //HBM's Beta Naming Convention:
//V T (X) //V T (X)
//V -> next release version //V -> next release version

View File

@ -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_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.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_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_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_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() }); 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() });
@ -826,11 +826,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.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.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[] { "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() }); addRecipeAuto(new ItemStack(ModBlocks.hadron_coil_alloy, 1), new Object[] { "WW", "WW", 'W', ALLOY.wireDense() });
addRecipeAuto(new ItemStack(ModBlocks.hadron_coil_gold, 1), new Object[] { "PGP", "PCP", "PGP", 'G', GOLD.dust(), 'C', ModBlocks.hadron_coil_alloy, 'P', IRON.plate() }); addRecipeAuto(new ItemStack(ModBlocks.hadron_coil_gold, 1), new Object[] { "PGP", "PCP", "PGP", 'G', GOLD.dust(), 'C', ModBlocks.hadron_coil_alloy, 'P', IRON.plate() });

View File

@ -178,6 +178,7 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement
@Override @Override
public void writeToNBT(NBTTagCompound nbt) { public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setLong("power", power); nbt.setLong("power", power);
nbt.setInteger("burnTime", burnTime); nbt.setInteger("burnTime", burnTime);
nbt.setInteger("maxBurnTime", maxBurnTime); nbt.setInteger("maxBurnTime", maxBurnTime);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 297 B

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 310 B

After

Width:  |  Height:  |  Size: 288 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 278 B

After

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 B