birb
15
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
|
||||
|
||||
@ -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,\
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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<Class<? extends Entity>, String, Integer, Boolean> entry : entityMappings) {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -21,6 +21,7 @@ public class EntityProcessorStandard implements IEntityProcessor {
|
||||
|
||||
protected IEntityRangeMutator range;
|
||||
protected ICustomDamageHandler damage;
|
||||
protected boolean allowSelfDamage = false;
|
||||
|
||||
@Override
|
||||
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 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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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)));
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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));
|
||||
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -46,6 +47,24 @@ public class ArmorTrenchmaster extends ArmorFSB {
|
||||
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) {
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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() });
|
||||
@ -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.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() });
|
||||
addRecipeAuto(new ItemStack(ModBlocks.hadron_coil_gold, 1), new Object[] { "PGP", "PCP", "PGP", 'G', GOLD.dust(), 'C', ModBlocks.hadron_coil_alloy, 'P', IRON.plate() });
|
||||
|
||||
@ -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);
|
||||
|
||||
|
Before Width: | Height: | Size: 297 B After Width: | Height: | Size: 286 B |
|
Before Width: | Height: | Size: 310 B After Width: | Height: | Size: 288 B |
|
Before Width: | Height: | Size: 278 B After Width: | Height: | Size: 272 B |
|
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 255 B |
|
Before Width: | Height: | Size: 270 B |