diff --git a/changelog b/changelog index 956aaaae1..009a14945 100644 --- a/changelog +++ b/changelog @@ -2,14 +2,17 @@ * Glpyhids * Hives will spawn randomly in the world * Hives will constantly spawn new glyphids - * If explosed to soot, hives will create glyphid scouts, which when far enough from another hive will explode and generate a new hive + * If exposed to soot, hives will create glyphid scouts, which when far enough from another hive will explode and generate a new hive * Higher soot levels create stronger glyphids - * Glyphids possess armor which has a chance of breaking off and fully abrosrbing damage + * Glyphids possess armor which has a chance of breaking off and fully absorbing damage * Each glyphid has five armor plates * Glyphid types include multiple tiers of melee glyphids as well as a few ranged ones, the scout, and a nuclear variant * Compressor * Can compress fluids, turning them into higher pressure variants + * Higher pressure fluid can use the same ducts as regular fluids, connections work the same so long as the input tank can accept the higher pressure type * Can also turn steam into higher pressure types + * Vacuum refining now requires oil at 2 PU + * Some chemical plant recipes also require compressed fluid, TATB requires sour gas at 1 PU and osmiridic solution requires hydrogen peroxide at 5 PU * A new rocket artillery ammo type that creates volcanic lava on impact * BDCL * A type of lubricant that is easy to make and can be used in hydraulic piston and electric press recipes instead of regular lubricant @@ -28,20 +31,28 @@ * The pollution detector now displays rounded values * More machines and especially destroyed ones now release soot * The iGen has been rebalanced again, delete your machine config file for the changes to take effect - * The lubrican power multiplier has been increased from 1.1 to 1.5 + * The lubricant power multiplier has been increased from 1.1 to 1.5 * The fluid divisor has been lowered from 5,000 to 1,000, meaning the iGen now burns flammable liquids at full efficiency * Removed the config for having an additional keybind for dashing, the keybind is now always active since it no longer conflicts with crouching * Crucible recipes no longer use foundry scraps to visualize the recipes, instead they use a lava-like texture -* Fusion reactors are now made from welded magnets which are created by weling a cast steel plate onto a magnet +* Fusion reactors are now made from welded magnets which are created by welding a cast steel plate onto a magnet * Due to the cost of the cast plates, fusion reactor magnets are now cheaper to compensate * Consequently, particle accelerators are now also cheaper due to being made from mostly fusion reactor magnets * The blowtorch now consumes only 250mB per operation, allowing for up to 16 things to be welded with a single fill * The page and notebook items have been replaced with more dynamic book items that get their data from NBT * C4 can now be made by irradiating PVC * Play stupid games, win stupid prizes +* Gas grenades now use the new gas system which should be a lot more pleasant to look at and less heavy on the TPS +* Leaded fuels now release heavy metal into the air, heavy metal can cause lead poisoning + * Lower heavy metal concentrations can also cause heavy metal poisoning when breaking blocks +* Gas artillery shell now create heavy metal and poisonous pollution +* FBI agents will now target the player from a much larger distance ## Fixed * Fixed potential crash or logspam regarding the pollution handler * Fixed missiles leaving behind a 3x3 grid of loaded chunks after being destroyed * Fixed coal ore yielding coal in the crucible instead of making carbon -* Fixed a potential issue where BuildCraft generators can't supply the RF to HE converter \ No newline at end of file +* Fixed a potential issue where BuildCraft generators can't supply the RF to HE converter +* Fixed combustion engine sound sometimes continue playing even when turned off +* Fixed large mining drill not properly performing a block check and potentially deleting blocks when placed +* Fixed calcium solution not having a fluid texture \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 2f43c1817..fa397e559 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=4627 +mod_build_number=4641 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/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 7503514c5..afae76999 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -2165,7 +2165,7 @@ public class ModBlocks { rail_large_straight = new RailStandardStraight().setBlockName("rail_large_straight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); rail_large_curve = new RailStandardCurve().setBlockName("rail_large_curve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); rail_large_ramp = new RailStandardRamp().setBlockName("rail_large_ramp").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight"); - rail_large_buffer = new RailStandardBuffer().setBlockName("rail_large_buffer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel"); + rail_large_buffer = new RailStandardBuffer().setBlockName("rail_large_buffer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_buffer"); crate = new BlockCrate(Material.wood).setBlockName("crate").setStepSound(Block.soundTypeWood).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.consumableTab).setBlockTextureName(RefStrings.MODID + ":crate"); crate_weapon = new BlockCrate(Material.wood).setBlockName("crate_weapon").setStepSound(Block.soundTypeWood).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.consumableTab).setBlockTextureName(RefStrings.MODID + ":crate_weapon"); diff --git a/src/main/java/com/hbm/blocks/generic/BlockGlyphidSpawner.java b/src/main/java/com/hbm/blocks/generic/BlockGlyphidSpawner.java index a489018f1..8de0979ae 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockGlyphidSpawner.java +++ b/src/main/java/com/hbm/blocks/generic/BlockGlyphidSpawner.java @@ -3,10 +3,14 @@ package com.hbm.blocks.generic; import java.util.List; import java.util.Random; +import com.hbm.config.MobConfig; import com.hbm.entity.mob.EntityGlyphid; +import com.hbm.entity.mob.EntityGlyphidBehemoth; import com.hbm.entity.mob.EntityGlyphidBlaster; import com.hbm.entity.mob.EntityGlyphidBombardier; import com.hbm.entity.mob.EntityGlyphidBrawler; +import com.hbm.entity.mob.EntityGlyphidBrenda; +import com.hbm.entity.mob.EntityGlyphidNuclear; import com.hbm.entity.mob.EntityGlyphidScout; import com.hbm.handler.pollution.PollutionHandler; import com.hbm.handler.pollution.PollutionHandler.PollutionType; @@ -46,7 +50,7 @@ public class BlockGlyphidSpawner extends BlockContainer { this.worldObj.spawnEntityInWorld(glyphid); } - if(worldObj.rand.nextInt(20) == 0 && soot > 0) { + if(worldObj.rand.nextInt(20) == 0 && soot >= MobConfig.scoutThreshold) { EntityGlyphidScout scout = new EntityGlyphidScout(worldObj); scout.setLocationAndAngles(xCoord + 0.5, yCoord + 1, zCoord + 0.5, worldObj.rand.nextFloat() * 360.0F, 0.0F); this.worldObj.spawnEntityInWorld(scout); @@ -56,12 +60,13 @@ public class BlockGlyphidSpawner extends BlockContainer { public EntityGlyphid createGlyphid(float soot) { Random rand = new Random(); + + if(soot < MobConfig.tier2Threshold) return rand.nextInt(5) == 0 ? new EntityGlyphidBombardier(worldObj) : new EntityGlyphid(worldObj); + if(soot < MobConfig.tier3Threshold) return rand.nextInt(5) == 0 ? new EntityGlyphidBombardier(worldObj) : new EntityGlyphidBrawler(worldObj); + if(soot < MobConfig.tier4Threshold) return rand.nextInt(5) == 0 ? new EntityGlyphidBlaster(worldObj) : new EntityGlyphidBehemoth(worldObj); + if(soot < MobConfig.tier5Threshold) return rand.nextInt(5) == 0 ? new EntityGlyphidBlaster(worldObj) : new EntityGlyphidBrenda(worldObj); - if(soot < 1) { - return rand.nextInt(5) == 0 ? new EntityGlyphidBombardier(worldObj) : new EntityGlyphid(worldObj); - } - - return rand.nextInt(5) == 0 ? new EntityGlyphidBlaster(worldObj) : new EntityGlyphidBrawler(worldObj); + return rand.nextInt(3) == 0 ? new EntityGlyphidBlaster(worldObj) : new EntityGlyphidNuclear(worldObj); } } } diff --git a/src/main/java/com/hbm/blocks/machine/MachineExcavator.java b/src/main/java/com/hbm/blocks/machine/MachineExcavator.java index 0d27866a6..c91d6bb16 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineExcavator.java +++ b/src/main/java/com/hbm/blocks/machine/MachineExcavator.java @@ -51,7 +51,10 @@ public class MachineExcavator extends BlockDummyable { y += dir.offsetY * o; z += dir.offsetZ * o; - return MultiblockHandlerXR.checkSpace(world, x, y, z, getDimensions(), x, y, z, dir); + return MultiblockHandlerXR.checkSpace(world, x, y, z, getDimensions(), x, y, z, dir) && + MultiblockHandlerXR.checkSpace(world, x, y, z, new int[] {-1, 3, 3, -2, 3, -2}, x, y, z, dir) && + MultiblockHandlerXR.checkSpace(world, x, y, z, new int[] {-1, 3, 3, -2, -2, 3}, x, y, z, dir) && + MultiblockHandlerXR.checkSpace(world, x, y, z, new int[] {-1, 3, -2, 3, 3, 3}, x, y, z, dir); } @Override diff --git a/src/main/java/com/hbm/blocks/rail/IRailNTM.java b/src/main/java/com/hbm/blocks/rail/IRailNTM.java index 782dc15e6..120c3b586 100644 --- a/src/main/java/com/hbm/blocks/rail/IRailNTM.java +++ b/src/main/java/com/hbm/blocks/rail/IRailNTM.java @@ -45,11 +45,13 @@ public interface IRailNTM { /** A wrapper for additional information like stopping on rails and what type of check we're doing */ public static class MoveContext { public RailCheckType type; + public double collisionBogieDistance; public boolean collision = false; //if a buffer stop or similar applies - public double overshoot; //how much of the travel distance was cut shor + public double overshoot; //how much of the travel distance was cut short - public MoveContext(RailCheckType type) { + public MoveContext(RailCheckType type, double collisionBogieDistance) { this.type = type; + this.collisionBogieDistance = collisionBogieDistance; } } diff --git a/src/main/java/com/hbm/blocks/rail/RailStandardBuffer.java b/src/main/java/com/hbm/blocks/rail/RailStandardBuffer.java index 52bee4310..bb503060a 100644 --- a/src/main/java/com/hbm/blocks/rail/RailStandardBuffer.java +++ b/src/main/java/com/hbm/blocks/rail/RailStandardBuffer.java @@ -1,12 +1,17 @@ package com.hbm.blocks.rail; import com.hbm.blocks.BlockDummyable; +import com.hbm.lib.Library; +import com.hbm.util.fauxpointtwelve.BlockPos; +import cpw.mods.fml.client.registry.RenderingRegistry; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class RailStandardBuffer extends BlockDummyable implements IRailNTM { @@ -19,9 +24,11 @@ public class RailStandardBuffer extends BlockDummyable implements IRailNTM { return null; } + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + @Override public int getRenderType() { - return 0; + return renderID; } @Override @@ -38,16 +45,89 @@ public class RailStandardBuffer extends BlockDummyable implements IRailNTM { public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { this.setBlockBounds(0F, 0F, 0F, 1F, 0.125F, 1F); } - - // TBI + @Override public Vec3 getSnappingPos(World world, int x, int y, int z, double trainX, double trainY, double trainZ) { - return null; + return snapAndMove(world, x, y, z, trainX, trainY, trainZ, 0, 0, 0, 0, new RailContext(), new MoveContext(RailCheckType.OTHER, 0)); } @Override public Vec3 getTravelLocation(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info, MoveContext context) { - return null; + return snapAndMove(world, x, y, z, trainX, trainY, trainZ, motionX, motionY, motionZ, speed, info, context); + } + + /* Very simple function determining the snapping position and adding the motion value to it, if desired. */ + public Vec3 snapAndMove(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info, MoveContext context) { + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return Vec3.createVectorHelper(trainX, trainY, trainZ); + int cX = pos[0]; + int cY = pos[1]; + int cZ = pos[2]; + int meta = world.getBlockMetadata(cX, cY, cZ) - this.offset; + ForgeDirection dir = ForgeDirection.getOrientation(meta); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + Vec3 vec = Vec3.createVectorHelper(trainX, trainY, trainZ); + + if(speed == 0) { + //return vec; + } + + if(dir == Library.POS_X || dir == Library.NEG_X) { + double targetX = trainX; + if(motionX > 0) { + targetX += speed; + info.yaw(-90F); + } else { + targetX -= speed; + info.yaw(90F); + } + vec.xCoord = MathHelper.clamp_double(targetX, cX - 2, cX + 3); + vec.yCoord = y + 0.1875; + vec.zCoord = cZ + 0.5 + rot.offsetZ * 0.5; + + double nX = (dir == Library.POS_X ? -1 - context.collisionBogieDistance : 2); + double pX = (dir == Library.NEG_X ? 0 - context.collisionBogieDistance : 3); + double buffer = MathHelper.clamp_double(targetX, cX - nX, cX + pX); + + if(buffer != vec.xCoord) { + context.collision = true; + context.overshoot = Math.abs(buffer - vec.xCoord); + vec.xCoord = buffer; + return vec; + } + + info.dist(Math.abs(targetX - vec.xCoord) * Math.signum(speed)); + info.pos(new BlockPos(cX + (motionX * speed > 0 ? 3 : -3), y, cZ)); + } else { + double targetZ = trainZ; + if(motionZ > 0) { + targetZ += speed; + info.yaw(0F); + } else { + targetZ -= speed; + info.yaw(180F); + } + vec.xCoord = cX + 0.5 + rot.offsetX * 0.5; + vec.yCoord = y + 0.1875; + vec.zCoord = MathHelper.clamp_double(targetZ, cZ - 2,cZ + 3); + + double nZ = (dir == Library.POS_Z ? -1 - context.collisionBogieDistance : 2); + double pZ = (dir == Library.NEG_Z ? 0 - context.collisionBogieDistance : 3); + double buffer = MathHelper.clamp_double(targetZ, cZ - nZ, cZ + pZ); + + if(buffer != vec.xCoord) { + context.collision = true; + context.overshoot = Math.abs(buffer - vec.zCoord); + vec.zCoord = buffer; + return vec; + } + + info.dist(Math.abs(targetZ - vec.zCoord) * Math.signum(speed)); + info.pos(new BlockPos(cX, y, cZ + (motionZ * speed > 0 ? 3 : -3))); + } + + return vec; } @Override diff --git a/src/main/java/com/hbm/config/MobConfig.java b/src/main/java/com/hbm/config/MobConfig.java index 5232b8351..1fce6249f 100644 --- a/src/main/java/com/hbm/config/MobConfig.java +++ b/src/main/java/com/hbm/config/MobConfig.java @@ -28,6 +28,15 @@ public class MobConfig { public static boolean enableDucks = true; public static boolean enableMobGear = true; + public static boolean enableHives = true; + public static int hiveSpawn = 128; + public static double scoutThreshold = 0.1; + public static double tier2Threshold = 1; + public static double tier3Threshold = 10; + public static double tier4Threshold = 50; + public static double tier5Threshold = 100; + + public static void loadFromConfig(Configuration config) { final String CATEGORY = CommonConfig.CATEGORY_MOBS; @@ -55,5 +64,13 @@ public class MobConfig { enableDucks = CommonConfig.createConfigBool(config, CATEGORY, "12.D00_enableDucks", "Whether pressing O should allow the player to duck", true); enableMobGear = CommonConfig.createConfigBool(config, CATEGORY, "12.D01_enableMobGear", "Whether zombies and skeletons should have additional gear when spawning", true); + + enableHives = CommonConfig.createConfigBool(config, CATEGORY, "12.G00_enableHives", "Whether glyphid hives should spawn", true); + hiveSpawn = CommonConfig.createConfigInt(config, CATEGORY, "12.G01_hiveSpawn", "The average amount of chunks per hive", 128); + scoutThreshold = CommonConfig.createConfigDouble(config, CATEGORY, "12.G02_scoutThreshold", "Minimum amount of soot for scouts to spawn", 0.1); + tier2Threshold = CommonConfig.createConfigDouble(config, CATEGORY, "12.G03_tier2Threshold", "Minimum amount of soot for tier 2 glyphids to spawn", 1); + tier3Threshold = CommonConfig.createConfigDouble(config, CATEGORY, "12.G04_tier3Threshold", "Minimum amount of soot for tier 3 glyphids to spawn", 10); + tier4Threshold = CommonConfig.createConfigDouble(config, CATEGORY, "12.G05_tier4Threshold", "Minimum amount of soot for tier 4 glyphids to spawn", 50); + tier5Threshold = CommonConfig.createConfigDouble(config, CATEGORY, "12.G06_tier5Threshold", "Minimum amount of soot for tier 5 glyphids to spawn", 100); } } diff --git a/src/main/java/com/hbm/entity/grenade/EntityGrenadeGas.java b/src/main/java/com/hbm/entity/grenade/EntityGrenadeGas.java index 5526b87a0..51d813653 100644 --- a/src/main/java/com/hbm/entity/grenade/EntityGrenadeGas.java +++ b/src/main/java/com/hbm/entity/grenade/EntityGrenadeGas.java @@ -5,7 +5,9 @@ import net.minecraft.world.World; import java.util.Random; +import com.hbm.entity.effect.EntityMist; import com.hbm.explosion.ExplosionChaos; +import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; import com.hbm.items.weapon.ItemGrenade; @@ -30,21 +32,12 @@ public class EntityGrenadeGas extends EntityGrenadeBouncyBase { if (!this.worldObj.isRemote) { this.setDead(); this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 0.0F, true); - // ExplosionChaos.poison(this.worldObj, (int)this.posX, - // (int)this.posY, (int)this.posZ, 5); - // for(int i = 0; 0 < 15; i++) { - - /* - * ExplosionLarge.spawnParticlesRadial(worldObj, posX, posY, posZ, - * 50); ExplosionLarge.spawnParticlesRadial(worldObj, posX, posY, - * posZ, 50); ExplosionLarge.spawnParticlesRadial(worldObj, posX, - * posY, posZ, 50); ExplosionLarge.spawnParticlesRadial(worldObj, - * posX, posY, posZ, 50); - */ - - ExplosionChaos.spawnChlorine(worldObj, posX, posY, posZ, 50, 1.25, 0); - - // } + + EntityMist mist = new EntityMist(worldObj); + mist.setType(Fluids.CHLORINE); + mist.setPosition(posX, posY - 5, posZ); + mist.setArea(15, 10); + worldObj.spawnEntityInWorld(mist); } } diff --git a/src/main/java/com/hbm/entity/mob/EntityFBI.java b/src/main/java/com/hbm/entity/mob/EntityFBI.java index df1ed0755..ce51f5d25 100644 --- a/src/main/java/com/hbm/entity/mob/EntityFBI.java +++ b/src/main/java/com/hbm/entity/mob/EntityFBI.java @@ -8,6 +8,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.config.MobConfig; import com.hbm.entity.mob.ai.EntityAIBreaking; import com.hbm.entity.mob.ai.EntityAI_MLPF; +import com.hbm.entity.pathfinder.PathFinderUtils; import com.hbm.entity.projectile.EntityBullet; import com.hbm.items.ModItems; @@ -50,7 +51,7 @@ public class EntityFBI extends EntityMob implements IRangedAttackMob { this.tasks.addTask(2, new EntityAIArrowAttack(this, 1D, 20, 25, 15.0F)); this.tasks.addTask(3, new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.0D, true)); this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1.0D)); - this.tasks.addTask(6, new EntityAI_MLPF(this, EntityPlayer.class, 100, 1D, 16)); + //this.tasks.addTask(6, new EntityAI_MLPF(this, EntityPlayer.class, 100, 1D, 16)); this.tasks.addTask(7, new EntityAIWander(this, 1.0D)); this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); this.tasks.addTask(8, new EntityAILookIdle(this)); @@ -119,6 +120,20 @@ public class EntityFBI extends EntityMob implements IRangedAttackMob { protected boolean isAIEnabled() { return true; } + + @Override + protected void updateAITasks() { + super.updateAITasks(); + + if(this.getAttackTarget() == null) { + this.setAttackTarget(this.worldObj.getClosestVulnerablePlayerToEntity(this, 128.0D)); + } + + // hell yeah!! + if(this.getAttackTarget() != null) { + this.getNavigator().setPath(PathFinderUtils.getPathEntityToEntityPartial(worldObj, this, this.getAttackTarget(), 16F, true, false, false, true), 1); + } + } //combat vest = full diamond set public int getTotalArmorValue() { diff --git a/src/main/java/com/hbm/entity/mob/EntityFBIDrone.java b/src/main/java/com/hbm/entity/mob/EntityFBIDrone.java index b773cd3ff..97110b54f 100644 --- a/src/main/java/com/hbm/entity/mob/EntityFBIDrone.java +++ b/src/main/java/com/hbm/entity/mob/EntityFBIDrone.java @@ -1,6 +1,6 @@ package com.hbm.entity.mob; -import com.hbm.entity.grenade.EntityGrenadeGeneric; +import com.hbm.entity.grenade.EntityGrenadeStrong; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.util.Vec3; @@ -29,7 +29,7 @@ public class EntityFBIDrone extends EntityUFOBase { Vec3 vec = Vec3.createVectorHelper(posX - target.posX, posY - target.posY, posZ - target.posZ); if(Math.abs(vec.xCoord) < 5 && Math.abs(vec.zCoord) < 5 && vec.yCoord > 3) { attackCooldown = 60; - EntityGrenadeGeneric grenade = new EntityGrenadeGeneric(worldObj); + EntityGrenadeStrong grenade = new EntityGrenadeStrong(worldObj); grenade.setPosition(posX, posY, posZ); worldObj.spawnEntityInWorld(grenade); } diff --git a/src/main/java/com/hbm/entity/train/EntityRailCarBase.java b/src/main/java/com/hbm/entity/train/EntityRailCarBase.java index 37f77f79f..f4a301914 100644 --- a/src/main/java/com/hbm/entity/train/EntityRailCarBase.java +++ b/src/main/java/com/hbm/entity/train/EntityRailCarBase.java @@ -14,8 +14,7 @@ import com.hbm.blocks.rail.IRailNTM.TrackGauge; import com.hbm.items.ModItems; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.PlayerInformPacket; -import com.hbm.util.ChatBuilder; +import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -27,7 +26,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChatComponentText; import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -166,8 +164,8 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { } BlockPos anchor = this.getCurrentAnchorPos(); - Vec3 frontPos = getRelPosAlongRail(anchor, this.getLengthSpan(), new MoveContext(RailCheckType.FRONT)); - Vec3 backPos = getRelPosAlongRail(anchor, -this.getLengthSpan(), new MoveContext(RailCheckType.BACK)); + Vec3 frontPos = getRelPosAlongRail(anchor, this.getLengthSpan(), new MoveContext(RailCheckType.FRONT, this.getCollisionSpan() - this.getLengthSpan())); + Vec3 backPos = getRelPosAlongRail(anchor, -this.getLengthSpan(), new MoveContext(RailCheckType.BACK, this.getCollisionSpan() - this.getLengthSpan())); this.lastRenderX = this.renderX; this.lastRenderY = this.renderY; @@ -325,7 +323,7 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { EntityRailCarBase train = ltu.trains[0]; BlockPos anchor = new BlockPos(train.posX, train.posY, train.posZ); - Vec3 newPos = train.getRelPosAlongRail(anchor, speed, new MoveContext(RailCheckType.CORE)); + Vec3 newPos = train.getRelPosAlongRail(anchor, speed, new MoveContext(RailCheckType.CORE, 0)); if(newPos == null) { train.derail(); ltu.dissolveTrain(); @@ -333,8 +331,8 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { } train.setPosition(newPos.xCoord, newPos.yCoord, newPos.zCoord); anchor = train.getCurrentAnchorPos(); - Vec3 frontPos = train.getRelPosAlongRail(anchor, train.getLengthSpan(), new MoveContext(RailCheckType.FRONT)); - Vec3 backPos = train.getRelPosAlongRail(anchor, -train.getLengthSpan(), new MoveContext(RailCheckType.BACK)); + Vec3 frontPos = train.getRelPosAlongRail(anchor, train.getLengthSpan(), new MoveContext(RailCheckType.FRONT, train.getCollisionSpan() - train.getLengthSpan())); + Vec3 backPos = train.getRelPosAlongRail(anchor, -train.getLengthSpan(), new MoveContext(RailCheckType.BACK, train.getCollisionSpan() - train.getLengthSpan())); if(frontPos == null || backPos == null) { train.derail(); @@ -634,11 +632,11 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { BlockPos anchor = new BlockPos(moving.posX, moving.posY, moving.posZ); Vec3 trainPos = Vec3.createVectorHelper(moving.posX, moving.posY, moving.posZ); float yaw = EntityRailCarBase.generateYaw(prevLoc, nextLoc); - Vec3 newPos = EntityRailCarBase.getRelPosAlongRail(anchor, len, moving.getGauge(), moving.worldObj, trainPos, yaw, new MoveContext(RailCheckType.CORE)); + Vec3 newPos = EntityRailCarBase.getRelPosAlongRail(anchor, len, moving.getGauge(), moving.worldObj, trainPos, yaw, new MoveContext(RailCheckType.CORE, 0)); moving.setPosition(newPos.xCoord, newPos.yCoord, newPos.zCoord); anchor = moving.getCurrentAnchorPos(); //reset origin to new position - Vec3 frontPos = moving.getRelPosAlongRail(anchor, moving.getLengthSpan(), new MoveContext(RailCheckType.FRONT)); - Vec3 backPos = moving.getRelPosAlongRail(anchor, -moving.getLengthSpan(), new MoveContext(RailCheckType.BACK)); + Vec3 frontPos = moving.getRelPosAlongRail(anchor, moving.getLengthSpan(), new MoveContext(RailCheckType.FRONT, moving.getCollisionSpan() - moving.getLengthSpan())); + Vec3 backPos = moving.getRelPosAlongRail(anchor, -moving.getLengthSpan(), new MoveContext(RailCheckType.BACK, moving.getCollisionSpan() - moving.getLengthSpan())); if(frontPos == null || backPos == null) { moving.derail(); @@ -679,7 +677,7 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { for(EntityRailCarBase train : this.trains) { BlockPos anchor = train.getCurrentAnchorPos(); - Vec3 corePos = train.getRelPosAlongRail(anchor, totalSpeed, new MoveContext(RailCheckType.CORE)); + Vec3 corePos = train.getRelPosAlongRail(anchor, totalSpeed, new MoveContext(RailCheckType.CORE, 0)); if(corePos == null) { train.derail(); @@ -688,8 +686,8 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { } else { train.setPosition(corePos.xCoord, corePos.yCoord, corePos.zCoord); anchor = train.getCurrentAnchorPos(); //reset origin to new position - Vec3 frontPos = train.getRelPosAlongRail(anchor, train.getLengthSpan(), new MoveContext(RailCheckType.FRONT)); - Vec3 backPos = train.getRelPosAlongRail(anchor, -train.getLengthSpan(), new MoveContext(RailCheckType.BACK)); + Vec3 frontPos = train.getRelPosAlongRail(anchor, train.getLengthSpan(), new MoveContext(RailCheckType.FRONT, 0)); + Vec3 backPos = train.getRelPosAlongRail(anchor, -train.getLengthSpan(), new MoveContext(RailCheckType.BACK, 0)); if(frontPos == null || backPos == null) { train.derail(); @@ -763,16 +761,17 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { boolean inReverse = first.getCouplingFrom(null) == current.getCouplingFrom(null); int sigNum = inReverse ? 1 : -1; BlockPos anchor = current.getCurrentAnchorPos(); - Vec3 corePos = current.getRelPosAlongRail(anchor, speed * sigNum, new MoveContext(RailCheckType.CORE)); - if(corePos == null) { + /*Vec3 frontPos = current.getRelPosAlongRail(anchor, current.getLengthSpan(), new MoveContext(RailCheckType.FRONT)); + + if(frontPos == null) { current.derail(); this.dissolveTrain(); return; } else { - current.setPosition(corePos.xCoord, corePos.yCoord, corePos.zCoord); anchor = current.getCurrentAnchorPos(); //reset origin to new position - Vec3 frontPos = current.getRelPosAlongRail(anchor, current.getLengthSpan(), new MoveContext(RailCheckType.FRONT)); + Vec3 corePos = current.getRelPosAlongRail(anchor, speed * sigNum, new MoveContext(RailCheckType.CORE)); + current.setPosition(corePos.xCoord, corePos.yCoord, corePos.zCoord); Vec3 backPos = current.getRelPosAlongRail(anchor, -current.getLengthSpan(), new MoveContext(RailCheckType.BACK)); if(frontPos == null || backPos == null) { @@ -782,6 +781,33 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { } else { setRenderPos(current, frontPos, backPos); } + }*/ + + Pair[] checks; + double dist = speed * sigNum; + + if(forward) { + checks = new Pair[] { + new Pair(dist + current.getLengthSpan(), RailCheckType.FRONT), + new Pair(dist, RailCheckType.CORE), + new Pair(dist - current.getLengthSpan(), RailCheckType.BACK) + }; + } else { + checks = new Pair[] { + new Pair(dist - current.getLengthSpan(), RailCheckType.BACK), + new Pair(dist, RailCheckType.CORE), + new Pair(dist + current.getLengthSpan(), RailCheckType.FRONT) + }; + } + + double brake = 0; + + for(Pair check : checks) { + MoveContext ctx = new MoveContext(check.getValue(), current.getCollisionSpan() - current.getLengthSpan()); + current.getRelPosAlongRail(anchor, check.getKey() - (brake * Math.signum(check.getKey())), ctx); + if(ctx.collision) { + brake += ctx.overshoot; + } } } else { diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index d3d177c43..1bcec5d0e 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -12,6 +12,8 @@ import com.hbm.extprop.HbmLivingProps; import com.hbm.extprop.HbmPlayerProps; import com.hbm.extprop.HbmLivingProps.ContaminationEffect; import com.hbm.handler.HbmKeybinds.EnumKeybind; +import com.hbm.handler.pollution.PollutionHandler; +import com.hbm.handler.pollution.PollutionHandler.PollutionType; import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.interfaces.IArmorModDash; import com.hbm.items.armor.ArmorFSB; @@ -19,6 +21,7 @@ import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.potion.HbmPotion; import com.hbm.packet.ExtPropPacket; import com.hbm.saveddata.AuxSavedData; import com.hbm.util.ArmorRegistry; @@ -48,42 +51,40 @@ import net.minecraft.world.World; public class EntityEffectHandler { public static void onUpdate(EntityLivingBase entity) { - + + if(entity.ticksExisted % 20 == 0) { + HbmLivingProps.setRadBuf(entity, HbmLivingProps.getRadEnv(entity)); + HbmLivingProps.setRadEnv(entity, 0); + } + + if(entity instanceof EntityPlayerMP) { + HbmLivingProps props = HbmLivingProps.getData(entity); + HbmPlayerProps pprps = HbmPlayerProps.getData((EntityPlayerMP) entity); + NBTTagCompound data = new NBTTagCompound(); + + if(pprps.shield < pprps.maxShield && entity.ticksExisted > pprps.lastDamage + 60) { + int tsd = entity.ticksExisted - (pprps.lastDamage + 60); + pprps.shield += Math.min(pprps.maxShield - pprps.shield, 0.005F * tsd); + } + + if(pprps.shield > pprps.maxShield) + pprps.shield = pprps.maxShield; + + props.saveNBTData(data); + pprps.saveNBTData(data); + PacketDispatcher.wrapper.sendTo(new ExtPropPacket(data), (EntityPlayerMP) entity); + } + if(!entity.worldObj.isRemote) { - - if(entity.ticksExisted % 20 == 0) { - HbmLivingProps.setRadBuf(entity, HbmLivingProps.getRadEnv(entity)); - HbmLivingProps.setRadEnv(entity, 0); - } - - - if(entity instanceof EntityPlayerMP) { - HbmLivingProps props = HbmLivingProps.getData(entity); - HbmPlayerProps pprps = HbmPlayerProps.getData((EntityPlayerMP) entity); - NBTTagCompound data = new NBTTagCompound(); - - if(pprps.shield < pprps.maxShield && entity.ticksExisted > pprps.lastDamage + 60) { - int tsd = entity.ticksExisted - (pprps.lastDamage + 60); - pprps.shield += Math.min(pprps.maxShield - pprps.shield, 0.005F * tsd); - } - - if(pprps.shield > pprps.maxShield) - pprps.shield = pprps.maxShield; - - props.saveNBTData(data); - pprps.saveNBTData(data); - PacketDispatcher.wrapper.sendTo(new ExtPropPacket(data), (EntityPlayerMP) entity); - } - int timer = HbmLivingProps.getTimer(entity); if(timer > 0) { HbmLivingProps.setTimer(entity, timer - 1); - + if(timer == 1) { ExplosionNukeSmall.explode(entity.worldObj, entity.posX, entity.posY, entity.posZ, ExplosionNukeSmall.PARAMS_MEDIUM); } } - + if(GeneralConfig.enable528 && entity instanceof EntityLivingBase && !entity.isImmuneToFire() && entity.worldObj.provider.isHellWorld) { entity.setFire(5); } @@ -95,6 +96,7 @@ public class EntityEffectHandler { handleDigamma(entity); handleLungDisease(entity); handleOil(entity); + handlePollution(entity); handleDashing(entity); handlePlinking(entity); @@ -365,8 +367,11 @@ public class EntityEffectHandler { double blacklung = Math.min(HbmLivingProps.getBlackLung(entity), HbmLivingProps.maxBlacklung); double asbestos = Math.min(HbmLivingProps.getAsbestos(entity), HbmLivingProps.maxAsbestos); + double soot = PollutionHandler.getPollution(entity.worldObj, (int) Math.floor(entity.posX), (int) Math.floor(entity.posY + entity.getEyeHeight()), (int) Math.floor(entity.posZ), PollutionType.SOOT); - boolean coughs = blacklung / HbmLivingProps.maxBlacklung > 0.25D || asbestos / HbmLivingProps.maxAsbestos > 0.25D; + if(ArmorRegistry.hasProtection(entity, 3, HazardClass.PARTICLE_COARSE)) soot = 0; + + boolean coughs = blacklung / HbmLivingProps.maxBlacklung > 0.25D || asbestos / HbmLivingProps.maxAsbestos > 0.25D || soot > 30; if(!coughs) return; @@ -377,11 +382,10 @@ public class EntityEffectHandler { double blacklungDelta = 1D - (blacklung / (double)HbmLivingProps.maxBlacklung); double asbestosDelta = 1D - (asbestos / (double)HbmLivingProps.maxAsbestos); + double sootDelta = 1D - Math.min(soot / 100, 1D); double total = 1 - (blacklungDelta * asbestosDelta); - int freq = Math.max((int) (1000 - 950 * total), 20); - World world = entity.worldObj; if(total > 0.75D) { @@ -392,6 +396,9 @@ public class EntityEffectHandler { entity.addPotionEffect(new PotionEffect(Potion.confusion.id, 100, 0)); } + total = 1 - (blacklungDelta * asbestosDelta * sootDelta); + int freq = Math.max((int) (1000 - 950 * total), 20); + if(world.getTotalWorldTime() % freq == entity.getEntityId() % freq) { world.playSoundEffect(entity.posX, entity.posY, entity.posZ, "hbm:player.cough", 1.0F, 1.0F); @@ -442,6 +449,41 @@ public class EntityEffectHandler { } } + private static void handlePollution(EntityLivingBase entity) { + + if(!ArmorRegistry.hasProtection(entity, 3, HazardClass.GAS_CORROSIVE) && entity.ticksExisted % 60 == 0) { + + float poison = PollutionHandler.getPollution(entity.worldObj, (int) Math.floor(entity.posX), (int) Math.floor(entity.posY + entity.getEyeHeight()), (int) Math.floor(entity.posZ), PollutionType.POISON); + + if(poison > 10) { + + if(poison < 25) { + entity.addPotionEffect(new PotionEffect(Potion.poison.id, 100, 0)); + } else if(poison < 50) { + entity.addPotionEffect(new PotionEffect(Potion.poison.id, 100, 2)); + } else { + entity.addPotionEffect(new PotionEffect(Potion.wither.id, 100, 2)); + } + } + } + + if(!ArmorRegistry.hasProtection(entity, 3, HazardClass.PARTICLE_FINE) && entity.ticksExisted % 60 == 0) { + + float poison = PollutionHandler.getPollution(entity.worldObj, (int) Math.floor(entity.posX), (int) Math.floor(entity.posY + entity.getEyeHeight()), (int) Math.floor(entity.posZ), PollutionType.HEAVYMETAL); + + if(poison > 25) { + + if(poison < 50) { + entity.addPotionEffect(new PotionEffect(HbmPotion.lead.id, 100, 0)); + } else if(poison < 75) { + entity.addPotionEffect(new PotionEffect(HbmPotion.lead.id, 100, 2)); + } else { + entity.addPotionEffect(new PotionEffect(HbmPotion.lead.id, 100, 2)); + } + } + } + } + private static void handleDashing(Entity entity) { //AAAAAAAAAAAAAAAAAAAAEEEEEEEEEEEEEEEEEEEE diff --git a/src/main/java/com/hbm/handler/nei/ChemplantRecipeHandler.java b/src/main/java/com/hbm/handler/nei/ChemplantRecipeHandler.java index 0beaff581..9ef27b9a9 100644 --- a/src/main/java/com/hbm/handler/nei/ChemplantRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/ChemplantRecipeHandler.java @@ -45,7 +45,7 @@ public class ChemplantRecipeHandler extends TemplateRecipeHandler { for(int i = 0; i < recipe.inputFluids.length; i++) { FluidStack in = recipe.inputFluids[i]; if(in == null) continue; - ItemStack drop = ItemFluidIcon.make(in.type, in.fill); + ItemStack drop = ItemFluidIcon.make(in); this.fluidIn[i] = new PositionedStack(drop, 30 + (i % 2) * 18, 6); } @@ -58,7 +58,7 @@ public class ChemplantRecipeHandler extends TemplateRecipeHandler { for(int i = 0; i < recipe.outputFluids.length; i++) { FluidStack out = recipe.outputFluids[i]; if(out == null) continue; - ItemStack drop = ItemFluidIcon.make(out.type, out.fill); + ItemStack drop = ItemFluidIcon.make(out); this.fluidOut[i] = new PositionedStack(drop, 120 + (i % 2) * 18, 6); } diff --git a/src/main/java/com/hbm/handler/pollution/PollutionHandler.java b/src/main/java/com/hbm/handler/pollution/PollutionHandler.java index d62fd28e6..ebf943f95 100644 --- a/src/main/java/com/hbm/handler/pollution/PollutionHandler.java +++ b/src/main/java/com/hbm/handler/pollution/PollutionHandler.java @@ -169,6 +169,7 @@ public class PollutionHandler { float[] pollutionForNeightbors = new float[PollutionType.values().length]; int S = PollutionType.SOOT.ordinal(); int H = PollutionType.HEAVYMETAL.ordinal(); + int P = PollutionType.POISON.ordinal(); /* CALCULATION */ if(data.pollution[S] > 15) { @@ -178,7 +179,14 @@ public class PollutionHandler { data.pollution[S] *= 0.99F; } - data.pollution[H] *= 0.999F; + data.pollution[H] *= 0.9995F; + + if(data.pollution[P] > 10) { + pollutionForNeightbors[P] = data.pollution[P] * 0.025F; + data.pollution[P] *= 0.9F; + } else { + data.pollution[P] *= 0.995F; + } /* SPREADING */ //apply new data to self diff --git a/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java b/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java index c9e94b9ee..bd1561bc3 100644 --- a/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java +++ b/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java @@ -241,7 +241,7 @@ public class FluidTank { list.add(fluid + "/" + maxFluid + "mB"); if(this.pressure != 0) { - list.add(EnumChatFormatting.RED + "" + this.pressure + " PU"); + list.add(EnumChatFormatting.RED + "Pressure: " + this.pressure + " PU"); } type.addInfo(list); diff --git a/src/main/java/com/hbm/inventory/gui/GUICompressor.java b/src/main/java/com/hbm/inventory/gui/GUICompressor.java index 69c8dc0ac..66e72609b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICompressor.java +++ b/src/main/java/com/hbm/inventory/gui/GUICompressor.java @@ -35,6 +35,8 @@ public class GUICompressor extends GuiInfoContainer { compressor.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 17, guiTop + 18, 16, 52); compressor.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 107, guiTop + 18, 16, 52); this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 52, compressor.power, compressor.maxPower); + + for(int j = 0; j < 5; j++) drawCustomInfoStat(mouseX, mouseY, guiLeft + 43 + j * 11, guiTop + 46, 8, 14, mouseX, mouseY, j + " PU -> " + (j + 1) + " PU"); } @Override diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index e83d06104..fcbbf0b45 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -866,6 +866,14 @@ public class AssemblerRecipes { new OreDictStack(OreDictManager.getReflector(), 12), new ComparableStack(ModItems.circuit_copper, 12) }, 100); + makeRecipe(new ComparableStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL_LAVA), new AStack[] { + new OreDictStack(STEEL.plate(), 24), + new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), + new ComparableStack(ModItems.rocket_fuel, 32), + new ComparableStack(ModItems.ball_tatb, 4), + new OreDictStack(VOLCANIC.gem(), 1), + new ComparableStack(ModItems.circuit_copper, 6) + }, 100); makeRecipe(new ComparableStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.LARGE), new AStack[] { new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), @@ -985,6 +993,14 @@ public class AssemblerRecipes { new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit_red_copper, 3) }, 200); + + makeRecipe(new ComparableStack(ModBlocks.machine_compressor, 1), new AStack[] { + new OreDictStack(STEEL.plateCast(), 8), + new OreDictStack(CU.plate528(), 4), + new ComparableStack(ModItems.hull_big_steel, 2), + new ComparableStack(ModItems.motor, 3), + new ComparableStack(ModItems.circuit_red_copper, 1) + }, 200); makeRecipe(new ComparableStack(ModItems.euphemium_capacitor, 1), new AStack[] { diff --git a/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java index 248073743..62ba87dfa 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java @@ -91,22 +91,22 @@ public class ChemplantRecipes extends SerializableRecipe { new ComparableStack(ModItems.wire_schrabidium, 4), new OreDictStack(DIAMOND.dust()), new OreDictStack(DESH.ingot())) - .inputFluids(new FluidStack(Fluids.ACID, 800), new FluidStack(Fluids.MERCURY, 200)) + .inputFluids(new FluidStack(Fluids.ACID, 800, GeneralConfig.enable528 ? 1 : 0), new FluidStack(Fluids.MERCURY, 200)) .outputItems(new ItemStack(ModItems.circuit_schrabidium))); recipes.add(new ChemRecipe(43, "POLYMER", 100) .inputItems( new OreDictStack(COAL.dust(), 2), new OreDictStack(F.dust())) - .inputFluids(new FluidStack(Fluids.PETROLEUM, 500)) + .inputFluids(new FluidStack(Fluids.PETROLEUM, 500, GeneralConfig.enable528 ? 1 : 0)) .outputItems(new ItemStack(ModItems.ingot_polymer))); recipes.add(new ChemRecipe(81, "BAKELITE", 100) .inputFluids( - new FluidStack(Fluids.AROMATICS, 500), - new FluidStack(Fluids.PETROLEUM, 500)) + new FluidStack(Fluids.AROMATICS, 500, GeneralConfig.enable528 ? 1 : 0), + new FluidStack(Fluids.PETROLEUM, 500, GeneralConfig.enable528 ? 1 : 0)) .outputItems(new ItemStack(ModItems.ingot_bakelite))); recipes.add(new ChemRecipe(82, "RUBBER", 100) .inputItems(new OreDictStack(S.dust())) - .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 500)) + .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 500, GeneralConfig.enable528 ? 2 : 0)) .outputItems(new ItemStack(ModItems.ingot_rubber))); /*recipes.add(new ChemRecipe(94, "PET", 100) .inputItems(new OreDictStack(AL.dust())) @@ -126,14 +126,14 @@ public class ChemplantRecipes extends SerializableRecipe { .outputItems(new ItemStack(com.hbm.blocks.ModBlocks.reinforced_laminate))); recipes.add(new ChemRecipe(94, "PC", 100) .inputFluids( - new FluidStack(Fluids.XYLENE, 500), - new FluidStack(Fluids.PHOSGENE, 500)) + new FluidStack(Fluids.XYLENE, 500, GeneralConfig.enable528 ? 2 : 0), + new FluidStack(Fluids.PHOSGENE, 500, GeneralConfig.enable528 ? 2 : 0)) .outputItems(new ItemStack(ModItems.ingot_pc))); recipes.add(new ChemRecipe(96, "PVC", 100) .inputItems(new OreDictStack(CD.dust())) .inputFluids( - new FluidStack(Fluids.UNSATURATEDS, 250), - new FluidStack(Fluids.CHLORINE, 250)) + new FluidStack(Fluids.UNSATURATEDS, 250, GeneralConfig.enable528 ? 2 : 0), + new FluidStack(Fluids.CHLORINE, 250, GeneralConfig.enable528 ? 2 : 0)) .outputItems(new ItemStack(ModItems.ingot_pvc, 2))); recipes.add(new ChemRecipe(89, "DYNAMITE", 50) .inputItems( @@ -143,15 +143,15 @@ public class ChemplantRecipes extends SerializableRecipe { .outputItems(new ItemStack(ModItems.ball_dynamite, 2))); recipes.add(new ChemRecipe(83, "TNT", 150) .inputItems(new OreDictStack(KNO.dust())) - .inputFluids(new FluidStack(Fluids.AROMATICS, 500)) + .inputFluids(new FluidStack(Fluids.AROMATICS, 500, GeneralConfig.enable528 ? 1 : 0)) .outputItems(new ItemStack(ModItems.ball_tnt, 4))); recipes.add(new ChemRecipe(95, "TATB", 50) .inputItems(new ComparableStack(ModItems.ball_tnt)) - .inputFluids(new FluidStack(Fluids.SOURGAS, 200), new FluidStack(Fluids.NITRIC_ACID, 10)) + .inputFluids(new FluidStack(Fluids.SOURGAS, 200, 1), new FluidStack(Fluids.NITRIC_ACID, 10)) .outputItems(new ItemStack(ModItems.ball_tatb))); recipes.add(new ChemRecipe(84, "C4", 150) .inputItems(new OreDictStack(KNO.dust())) - .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 500)) + .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 500, GeneralConfig.enable528 ? 1 : 0)) .outputItems(new ItemStack(ModItems.ingot_c4, 4))); //44, formerly deuterium //45, formerly steam @@ -224,7 +224,7 @@ public class ChemplantRecipes extends SerializableRecipe { new ComparableStack(ModItems.solid_fuel, 2), new OreDictStack(KNO.dust()), new OreDictStack(REDSTONE.dust())) - .inputFluids(new FluidStack(Fluids.PETROLEUM, 200)) + .inputFluids(new FluidStack(Fluids.PETROLEUM, 200, GeneralConfig.enable528 ? 1 : 0)) .outputItems(new ItemStack(ModItems.rocket_fuel, 4))); recipes.add(new ChemRecipe(58, "ELECTROLYSIS", 150) .inputFluids(new FluidStack(Fluids.WATER, 8000)) @@ -352,8 +352,8 @@ public class ChemplantRecipes extends SerializableRecipe { new ComparableStack(ModItems.powder_paleogenite), new OreDictStack(F.dust(), 8), new ComparableStack(ModItems.nugget_bismuth, 4)) - .inputFluids(new FluidStack(Fluids.ACID, 1000)) - .outputFluids(new FluidStack(Fluids.DEATH, 1000))); + .inputFluids(new FluidStack(Fluids.ACID, 1000, 5)) + .outputFluids(new FluidStack(Fluids.DEATH, 1000, GeneralConfig.enable528 ? 5 : 0))); //one bucket of ethanol equals 275_000 TU using the diesel baseline0 //the coal baseline is 400_000 per piece //if we assume a burntime of 1.5 ops (300 ticks) for sugar at 100 TU/t that would equal a total of 30_000 TU diff --git a/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java b/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java index 314e50d56..427f4a329 100644 --- a/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java @@ -58,7 +58,7 @@ public class RefineryRecipes { public static HashMap getVacuumRecipe() { HashMap recipes = new HashMap(); - recipes.put(ItemFluidIcon.make(Fluids.OIL, 1000), + recipes.put(ItemFluidIcon.make(Fluids.OIL, 1000, 2), new ItemStack[] { ItemFluidIcon.make(Fluids.HEAVYOIL_VACUUM, vac_frac_heavy * 10), ItemFluidIcon.make(Fluids.REFORMATE, vac_frac_reform * 10), diff --git a/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java b/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java index 12ad0569e..432141d9d 100644 --- a/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java +++ b/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java @@ -75,7 +75,8 @@ public class ItemChemistryTemplate extends Item { for(int i = 0; i < 2; i++) { if(recipe.outputFluids[i] != null) { - list.add(recipe.outputFluids[i].fill + "mB " + I18n.format(recipe.outputFluids[i].type.getUnlocalizedName())); + int p = recipe.outputFluids[i].pressure; + list.add(recipe.outputFluids[i].fill + "mB " + I18n.format(recipe.outputFluids[i].type.getUnlocalizedName()) + (p != 0 ? (" at " + p + "PU") : "")); } } @@ -89,7 +90,8 @@ public class ItemChemistryTemplate extends Item { for(int i = 0; i < 2; i++) { if(recipe.inputFluids[i] != null) { - list.add(recipe.inputFluids[i].fill + "mB " + I18n.format(recipe.inputFluids[i].type.getUnlocalizedName())); + int p = recipe.inputFluids[i].pressure; + list.add(recipe.inputFluids[i].fill + "mB " + I18n.format(recipe.inputFluids[i].type.getUnlocalizedName()) + (p != 0 ? (" at " + p + "PU") : "")); } } diff --git a/src/main/java/com/hbm/items/machine/ItemFluidIcon.java b/src/main/java/com/hbm/items/machine/ItemFluidIcon.java index f15d2ad05..1e121dd96 100644 --- a/src/main/java/com/hbm/items/machine/ItemFluidIcon.java +++ b/src/main/java/com/hbm/items/machine/ItemFluidIcon.java @@ -14,6 +14,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector; @@ -38,39 +39,47 @@ public class ItemFluidIcon extends Item { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { if(stack.hasTagCompound()) { - if(stack.getTagCompound().getInteger("fill") > 0) - list.add(stack.getTagCompound().getInteger("fill") + "mB"); + if(getQuantity(stack) > 0) list.add(getQuantity(stack) + "mB"); + if(getPressure(stack) > 0) list.add(EnumChatFormatting.RED + "" + getPressure(stack) + "PU"); } Fluids.fromID(stack.getItemDamage()).addInfo(list); } public static ItemStack addQuantity(ItemStack stack, int i) { - - if(!stack.hasTagCompound()) - stack.stackTagCompound = new NBTTagCompound(); - + if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setInteger("fill", i); + return stack; + } + public static ItemStack addPressure(ItemStack stack, int i) { + if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); + stack.getTagCompound().setInteger("pressure", i); return stack; } public static ItemStack make(FluidStack stack) { - return make(stack.type, stack.fill); + return make(stack.type, stack.fill, stack.pressure); } public static ItemStack make(FluidType fluid, int i) { - return addQuantity(new ItemStack(ModItems.fluid_icon, 1, fluid.ordinal()), i); + return make(fluid, i, 0); + } + + public static ItemStack make(FluidType fluid, int i, int pressure) { + return addPressure(addQuantity(new ItemStack(ModItems.fluid_icon, 1, fluid.ordinal()), i), pressure); } public static int getQuantity(ItemStack stack) { - - if(!stack.hasTagCompound()) - return 0; - + if(!stack.hasTagCompound()) return 0; return stack.getTagCompound().getInteger("fill"); } + public static int getPressure(ItemStack stack) { + if(!stack.hasTagCompound()) return 0; + return stack.getTagCompound().getInteger("pressure"); + } + @Override public String getItemStackDisplayName(ItemStack stack) { String s = (StatCollector.translateToLocal(Fluids.fromID(stack.getItemDamage()).getUnlocalizedName())).trim(); diff --git a/src/main/java/com/hbm/items/special/ItemTeleLink.java b/src/main/java/com/hbm/items/special/ItemTeleLink.java index baf9880ce..6ed12b051 100644 --- a/src/main/java/com/hbm/items/special/ItemTeleLink.java +++ b/src/main/java/com/hbm/items/special/ItemTeleLink.java @@ -42,7 +42,7 @@ public class ItemTeleLink extends Item { if(!stack.hasTagCompound()) { world.playSoundAtEntity(player, "hbm:item.techBoop", 1.0F, 1.0F); - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "[TeleLink] No destiation set!")); + player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "[TeleLink] No destination set!")); return false; } diff --git a/src/main/java/com/hbm/items/special/ItemTrain.java b/src/main/java/com/hbm/items/special/ItemTrain.java index 25dc46ccf..a99df9079 100644 --- a/src/main/java/com/hbm/items/special/ItemTrain.java +++ b/src/main/java/com/hbm/items/special/ItemTrain.java @@ -80,10 +80,10 @@ public class ItemTrain extends ItemEnumMulti { train.setPosition(x + fx, y + fy, z + fz); BlockPos anchor = train.getCurrentAnchorPos(); train.rotationYaw = entity.rotationYaw; - Vec3 corePos = train.getRelPosAlongRail(anchor, 0, new MoveContext(RailCheckType.CORE)); + Vec3 corePos = train.getRelPosAlongRail(anchor, 0, new MoveContext(RailCheckType.CORE, 0)); train.setPosition(corePos.xCoord, corePos.yCoord, corePos.zCoord); - Vec3 frontPos = train.getRelPosAlongRail(anchor, train.getLengthSpan(), new MoveContext(RailCheckType.FRONT)); - Vec3 backPos = train.getRelPosAlongRail(anchor, -train.getLengthSpan(), new MoveContext(RailCheckType.BACK)); + Vec3 frontPos = train.getRelPosAlongRail(anchor, train.getLengthSpan(), new MoveContext(RailCheckType.FRONT, train.getCollisionSpan() - train.getLengthSpan())); + Vec3 backPos = train.getRelPosAlongRail(anchor, -train.getLengthSpan(), new MoveContext(RailCheckType.BACK, train.getCollisionSpan() - train.getLengthSpan())); train.rotationYaw = train.generateYaw(frontPos, backPos); world.spawnEntityInWorld(train); } diff --git a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java index 40efef4ce..d4d263fa5 100644 --- a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java +++ b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java @@ -19,6 +19,8 @@ import com.hbm.explosion.vanillant.standard.BlockProcessorStandard; import com.hbm.explosion.vanillant.standard.EntityProcessorCross; import com.hbm.explosion.vanillant.standard.ExplosionEffectStandard; import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; +import com.hbm.handler.pollution.PollutionHandler; +import com.hbm.handler.pollution.PollutionHandler.PollutionType; import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; @@ -318,6 +320,7 @@ public class ItemAmmoArty extends Item { mist.setPosition(mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord - 3, mop.hitVec.zCoord - vec.zCoord); mist.setArea(15, 7.5F); shell.worldObj.spawnEntityInWorld(mist); + PollutionHandler.incrementPollution(shell.worldObj, mop.blockX, mop.blockY, mop.blockZ, PollutionType.HEAVYMETAL, 5F); } }; this.itemTypes[PHOSGENE] = new ArtilleryShell("ammo_arty_phosgene", SpentCasing.COLOR_CASE_16INCH_NUKE) { @@ -326,18 +329,20 @@ public class ItemAmmoArty extends Item { Vec3 vec = Vec3.createVectorHelper(shell.motionX, shell.motionY, shell.motionZ).normalize(); shell.worldObj.createExplosion(shell, mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord, mop.hitVec.zCoord - vec.zCoord, 5F, false); for(int i = 0; i < 3; i++) { - EntityMist mist = new EntityMist(shell.worldObj); - mist.setType(Fluids.PHOSGENE); - double x = mop.hitVec.xCoord - vec.xCoord; - double z = mop.hitVec.zCoord - vec.zCoord; - if(i > 0) { - x += rand.nextGaussian() * 15; - z += rand.nextGaussian() * 15; + EntityMist mist = new EntityMist(shell.worldObj); + mist.setType(Fluids.PHOSGENE); + double x = mop.hitVec.xCoord - vec.xCoord; + double z = mop.hitVec.zCoord - vec.zCoord; + if(i > 0) { + x += rand.nextGaussian() * 15; + z += rand.nextGaussian() * 15; + } + mist.setPosition(x, mop.hitVec.yCoord - vec.yCoord - 5, z); + mist.setArea(15, 10); + shell.worldObj.spawnEntityInWorld(mist); } - mist.setPosition(x, mop.hitVec.yCoord - vec.yCoord - 5, z); - mist.setArea(15, 10); - shell.worldObj.spawnEntityInWorld(mist); - } + PollutionHandler.incrementPollution(shell.worldObj, mop.blockX, mop.blockY, mop.blockZ, PollutionType.HEAVYMETAL, 10F); + PollutionHandler.incrementPollution(shell.worldObj, mop.blockX, mop.blockY, mop.blockZ, PollutionType.POISON, 15F); } }; this.itemTypes[MUSTARD] = new ArtilleryShell("ammo_arty_mustard_gas", SpentCasing.COLOR_CASE_16INCH_NUKE) { @@ -358,6 +363,8 @@ public class ItemAmmoArty extends Item { mist.setArea(20, 10); shell.worldObj.spawnEntityInWorld(mist); } + PollutionHandler.incrementPollution(shell.worldObj, mop.blockX, mop.blockY, mop.blockZ, PollutionType.HEAVYMETAL, 15F); + PollutionHandler.incrementPollution(shell.worldObj, mop.blockX, mop.blockY, mop.blockZ, PollutionType.POISON, 30F); } }; diff --git a/src/main/java/com/hbm/lib/HbmChestContents.java b/src/main/java/com/hbm/lib/HbmChestContents.java index 7dc26a319..cdd0a61cd 100644 --- a/src/main/java/com/hbm/lib/HbmChestContents.java +++ b/src/main/java/com/hbm/lib/HbmChestContents.java @@ -415,7 +415,7 @@ public class HbmChestContents { public static ItemStack generateOfficeBook(Random rand) { //TODO rework this lore in general String key; int pages; - switch(rand.nextInt(5)) { + switch(rand.nextInt(10)) { case 0: key = "resignation_note"; pages = 3; break; case 1: @@ -426,6 +426,16 @@ public class HbmChestContents { key = "memo_schrab_rd"; pages = 4; break; case 4: key = "memo_schrab_nuke"; pages = 3; break; + case 5: + key = "bf_bomb_1"; pages = 4; break; + case 6: + key = "bf_bomb_2"; pages = 6; break; + case 7: + key = "bf_bomb_3"; pages = 6; break; + case 8: + key = "bf_bomb_4"; pages = 5; break; + case 9: + key = "bf_bomb_5"; pages = 9; break; default: return null; } diff --git a/src/main/java/com/hbm/lib/HbmWorldGen.java b/src/main/java/com/hbm/lib/HbmWorldGen.java index 04c41da43..6d2af30ab 100644 --- a/src/main/java/com/hbm/lib/HbmWorldGen.java +++ b/src/main/java/com/hbm/lib/HbmWorldGen.java @@ -7,6 +7,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockMotherOfAllOres; import com.hbm.blocks.generic.BlockNTMFlower.EnumFlowerType; import com.hbm.config.GeneralConfig; +import com.hbm.config.MobConfig; import com.hbm.config.WorldConfig; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; @@ -218,11 +219,11 @@ public class HbmWorldGen implements IWorldGenerator { if(GeneralConfig.enableDungeons && world.provider.isSurfaceWorld()) { - if(rand.nextInt(1000) == 0) { + if(MobConfig.enableHives && rand.nextInt(MobConfig.hiveSpawn) == 0) { int x = i + rand.nextInt(16) + 8; int z = j + rand.nextInt(16) + 8; int y = world.getHeightValue(x, z); - GlyphidHive.generate(world, x, y, z, rand); + if(world.getBlock(x, y - 1, z).isNormalCube()) GlyphidHive.generate(world, x, y, z, rand); } if(biome == BiomeGenBase.plains || biome == BiomeGenBase.desert) { diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 4e3d4bdfc..bfb6dcb7a 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 (4627)"; + public static final String VERSION = "1.0.27 BETA (4641)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 268283654..1e65c24be 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -802,6 +802,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderStandardStraightRail()); RenderingRegistry.registerBlockHandler(new RenderStandardCurveRail()); RenderingRegistry.registerBlockHandler(new RenderStandardRampRail()); + RenderingRegistry.registerBlockHandler(new RenderStandardBufferRail()); RenderingRegistry.registerBlockHandler(new RenderBlockRotated(ModBlocks.charge_dynamite.getRenderType(), ResourceManager.charge_dynamite)); RenderingRegistry.registerBlockHandler(new RenderBlockRotated(ModBlocks.charge_c4.getRenderType(), ResourceManager.charge_c4)); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index c16fded4e..46ea60e88 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -996,6 +996,8 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.upgrade_5g), new Object[] { ModItems.upgrade_template, ModItems.gem_alexandrite }); + addShapelessAuto(new ItemStack(ModItems.bdcl), new Object[] { ANY_TAR.any(), Fluids.WATER.getDict(1_000), KEY_WHITE }); + if(GeneralConfig.enableLBSM && GeneralConfig.enableLBSMSimpleCrafting) { addShapelessAuto(new ItemStack(ModItems.cordite, 3), new Object[] { ModItems.ballistite, Items.gunpowder, new ItemStack(Blocks.wool, 1, OreDictionary.WILDCARD_VALUE) }); addShapelessAuto(new ItemStack(ModItems.ingot_semtex, 3), new Object[] { Items.slime_ball, Blocks.tnt, KNO.dust() }); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 69a28216f..800a62fbb 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -41,6 +41,8 @@ import com.hbm.hazard.HazardSystem; import com.hbm.interfaces.IBomb; import com.hbm.handler.HTTPHandler; import com.hbm.handler.HbmKeybinds.EnumKeybind; +import com.hbm.handler.pollution.PollutionHandler; +import com.hbm.handler.pollution.PollutionHandler.PollutionType; import com.hbm.handler.SiegeOrchestrator; import com.hbm.items.IEquipReceiver; import com.hbm.items.ModItems; @@ -65,12 +67,14 @@ import com.hbm.potion.HbmPotion; import com.hbm.saveddata.AuxSavedData; import com.hbm.tileentity.network.RTTYSystem; import com.hbm.util.AchievementHandler; +import com.hbm.util.ArmorRegistry; import com.hbm.util.ArmorUtil; import com.hbm.util.ContaminationUtil; import com.hbm.util.EnchantmentUtil; import com.hbm.util.EntityDamageUtil; import com.hbm.util.EnumUtil; import com.hbm.util.InventoryUtil; +import com.hbm.util.ArmorRegistry.HazardClass; import com.hbm.world.generator.TimedGenerator; import cpw.mods.fml.common.eventhandler.EventPriority; @@ -1149,10 +1153,12 @@ public class ModEventHandler { @SubscribeEvent public void onBlockBreak(BreakEvent event) { - if(!(event.getPlayer() instanceof EntityPlayerMP)) + EntityPlayer player = event.getPlayer(); + + if(!(player instanceof EntityPlayerMP)) return; - if(event.block == ModBlocks.stone_gneiss && !((EntityPlayerMP) event.getPlayer()).func_147099_x().hasAchievementUnlocked(MainRegistry.achStratum)) { + if(event.block == ModBlocks.stone_gneiss && !((EntityPlayerMP) player).func_147099_x().hasAchievementUnlocked(MainRegistry.achStratum)) { event.getPlayer().triggerAchievement(MainRegistry.achStratum); event.setExpToDrop(500); } @@ -1169,6 +1175,21 @@ public class ModEventHandler { event.world.setBlock(x, y, z, ModBlocks.gas_coal); } } + + if(!ArmorRegistry.hasProtection(player, 3, HazardClass.PARTICLE_FINE)) { + + float metal = PollutionHandler.getPollution(player.worldObj, event.x, event.y, event.z, PollutionType.HEAVYMETAL); + + if(metal < 5) return; + + if(metal < 10) { + player.addPotionEffect(new PotionEffect(HbmPotion.lead.id, 100, 0)); + } else if(metal < 25) { + player.addPotionEffect(new PotionEffect(HbmPotion.lead.id, 100, 1)); + } else { + player.addPotionEffect(new PotionEffect(HbmPotion.lead.id, 100, 2)); + } + } } private static final String hash = "41eb77f138ce350932e33b6b26b233df9aad0c0c80c6a49cb9a54ddd8fae3f83"; diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 3a7624b0b..9e3463f96 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -13,6 +13,10 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockAshes; +import com.hbm.blocks.rail.IRailNTM; +import com.hbm.blocks.rail.IRailNTM.MoveContext; +import com.hbm.blocks.rail.IRailNTM.RailCheckType; +import com.hbm.blocks.rail.IRailNTM.RailContext; import com.hbm.config.GeneralConfig; import com.hbm.entity.effect.EntityNukeTorex; import com.hbm.entity.mob.EntityHunterChopper; @@ -66,6 +70,7 @@ import com.hbm.tileentity.machine.TileEntityNukeFurnace; import com.hbm.util.I18nUtil; import com.hbm.util.ItemStackUtil; import com.hbm.util.LoggingUtil; +import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.wiaj.GuiWorldInAJar; import com.hbm.wiaj.cannery.CanneryBase; import com.hbm.wiaj.cannery.Jars; @@ -259,12 +264,12 @@ public class ModEventHandlerClient { boolean flip = distanceToCover < 0; if(it == 1) { - Vec3 snap = next = rail.getTravelLocation(world, x, y, z, next.xCoord, next.yCoord, next.zCoord, rot.xCoord, rot.yCoord, rot.zCoord, 0, info, new MoveContext(RailCheckType.CORE)); + Vec3 snap = next = rail.getTravelLocation(world, x, y, z, next.xCoord, next.yCoord, next.zCoord, rot.xCoord, rot.yCoord, rot.zCoord, 0, info, new MoveContext(RailCheckType.CORE, 0)); if(i == 0) world.spawnParticle("reddust", snap.xCoord, snap.yCoord + 0.25, snap.zCoord, 0.1, 1, 0.1); } Vec3 prev = next; - next = rail.getTravelLocation(world, x, y, z, prev.xCoord, prev.yCoord, prev.zCoord, rot.xCoord, rot.yCoord, rot.zCoord, distanceToCover, info, new MoveContext(i == 0 ? RailCheckType.FRONT : RailCheckType.BACK)); + next = rail.getTravelLocation(world, x, y, z, prev.xCoord, prev.yCoord, prev.zCoord, rot.xCoord, rot.yCoord, rot.zCoord, distanceToCover, info, new MoveContext(i == 0 ? RailCheckType.FRONT : RailCheckType.BACK, 0)); distanceToCover = info.overshoot; anchor = info.pos; if(i == 0) world.spawnParticle("reddust", next.xCoord, next.yCoord + 0.25, next.zCoord, 0, distanceToCover != 0 ? 0.5 : 0, 0); @@ -1256,7 +1261,7 @@ public class ModEventHandlerClient { switch(rand) { case 0: main.splashText = "Floppenheimer!"; break; - case 1: main.splashText = "i should dip my balls in sulfuic acid"; break; + case 1: main.splashText = "i should dip my balls in sulfuric acid"; break; case 2: main.splashText = "All answers are popbob!"; break; case 3: main.splashText = "None shall enter The Orb!"; break; case 4: main.splashText = "Wacarb was here"; break; diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 2e1d209ff..3e7974504 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1352,6 +1352,7 @@ public class ResourceManager { public static final IModelCustom rail_standard_straight = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard.obj")); public static final IModelCustom rail_standard_curve = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_bend.obj")); public static final IModelCustom rail_standard_ramp = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_ramp.obj")); + public static final IModelCustom rail_standard_buffer = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_buffer.obj")); public static final IModelCustom capacitor = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/capacitor.obj")); public static final IModelCustom charge_dynamite = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/charge_dynamite.obj")); diff --git a/src/main/java/com/hbm/render/block/RenderStandardBufferRail.java b/src/main/java/com/hbm/render/block/RenderStandardBufferRail.java new file mode 100644 index 000000000..5cf6381e1 --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderStandardBufferRail.java @@ -0,0 +1,77 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.rail.RailStandardBuffer; +import com.hbm.main.ResourceManager; +import com.hbm.render.util.ObjUtil; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.client.model.obj.WavefrontObject; + +public class RenderStandardBufferRail implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + GL11.glPushMatrix(); + Tessellator tessellator = Tessellator.instance; + + GL11.glTranslated(0, -0.0625, 0); + GL11.glRotated(90, 0, 1, 0); + GL11.glScaled(0.3, 0.3, 0.3); + tessellator.startDrawingQuads(); + ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_buffer, block.getIcon(1, 0), tessellator, 0, false); + tessellator.draw(); + + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + + int meta = world.getBlockMetadata(x, y, z); + if(meta < 12) return true; + + Tessellator tessellator = Tessellator.instance; + + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + tessellator.setColorOpaque_F(1, 1, 1); + + float rotation = 0; + + if(meta == 12) rotation = (float) Math.PI; + if(meta == 14) rotation = 270F / 180F * (float) Math.PI; + if(meta == 15) rotation = 90F / 180F * (float) Math.PI; + + if(meta == 12) tessellator.addTranslation(0.5F, 0F, 0F); + if(meta == 13) tessellator.addTranslation(-0.5F, 0F, 0F); + if(meta == 14) tessellator.addTranslation(0F, 0F, -0.5F); + if(meta == 15) tessellator.addTranslation(0F, 0F, 0.5F); + + tessellator.addTranslation(x + 0.5F, y, z + 0.5F); + ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_buffer, block.getIcon(1, 0), tessellator, rotation, true); + tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F); + + if(meta == 12) tessellator.addTranslation(-0.5F, 0F, 0F); + if(meta == 13) tessellator.addTranslation(0.5F, 0F, 0F); + if(meta == 14) tessellator.addTranslation(0F, 0F, 0.5F); + if(meta == 15) tessellator.addTranslation(0F, 0F, -0.5F); + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return RailStandardBuffer.renderID; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java index 9aea57727..8055c8d11 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java @@ -266,10 +266,10 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements } private void setupTanks(ChemRecipe recipe) { - if(recipe.inputFluids[0] != null) tanks[0].setTankType(recipe.inputFluids[0].type); else tanks[0].setTankType(Fluids.NONE); - if(recipe.inputFluids[1] != null) tanks[1].setTankType(recipe.inputFluids[1].type); else tanks[1].setTankType(Fluids.NONE); - if(recipe.outputFluids[0] != null) tanks[2].setTankType(recipe.outputFluids[0].type); else tanks[2].setTankType(Fluids.NONE); - if(recipe.outputFluids[1] != null) tanks[3].setTankType(recipe.outputFluids[1].type); else tanks[3].setTankType(Fluids.NONE); + if(recipe.inputFluids[0] != null) tanks[0].withPressure(recipe.inputFluids[0].pressure).setTankType(recipe.inputFluids[0].type); else tanks[0].setTankType(Fluids.NONE); + if(recipe.inputFluids[1] != null) tanks[1].withPressure(recipe.inputFluids[1].pressure).setTankType(recipe.inputFluids[1].type); else tanks[1].setTankType(Fluids.NONE); + if(recipe.outputFluids[0] != null) tanks[2].withPressure(recipe.outputFluids[0].pressure).setTankType(recipe.outputFluids[0].type); else tanks[2].setTankType(Fluids.NONE); + if(recipe.outputFluids[1] != null) tanks[3].withPressure(recipe.outputFluids[1].pressure).setTankType(recipe.outputFluids[1].type); else tanks[3].setTankType(Fluids.NONE); } private boolean hasRequiredFluids(ChemRecipe recipe) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java index 6d2501a7e..6d6caf6e2 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplantBase.java @@ -109,10 +109,10 @@ public abstract class TileEntityMachineChemplantBase extends TileEntityMachineBa } private void setupTanks(ChemRecipe recipe, int index) { - if(recipe.inputFluids[0] != null) tanks[index * 4].setTankType(recipe.inputFluids[0].type); - if(recipe.inputFluids[1] != null) tanks[index * 4 + 1].setTankType(recipe.inputFluids[1].type); - if(recipe.outputFluids[0] != null) tanks[index * 4 + 2].setTankType(recipe.outputFluids[0].type); - if(recipe.outputFluids[1] != null) tanks[index * 4 + 3].setTankType(recipe.outputFluids[1].type); + if(recipe.inputFluids[0] != null) tanks[index * 4].withPressure(recipe.inputFluids[0].pressure).setTankType(recipe.inputFluids[0].type); else tanks[index * 4].setTankType(Fluids.NONE); + if(recipe.inputFluids[1] != null) tanks[index * 4 + 1].withPressure(recipe.inputFluids[1].pressure).setTankType(recipe.inputFluids[1].type); else tanks[index * 4 + 1].setTankType(Fluids.NONE); + if(recipe.outputFluids[0] != null) tanks[index * 4 + 2].withPressure(recipe.outputFluids[0].pressure).setTankType(recipe.outputFluids[0].type); else tanks[index * 4 + 2].setTankType(Fluids.NONE); + if(recipe.outputFluids[1] != null) tanks[index * 4 + 3].withPressure(recipe.outputFluids[1].pressure).setTankType(recipe.outputFluids[1].type); else tanks[index * 4 + 3].setTankType(Fluids.NONE); } private boolean hasRequiredFluids(ChemRecipe recipe, int index) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java index a01fd1347..1527a9e17 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java @@ -142,6 +142,8 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachineBase imp audio = rebootAudio(audio); } + audio.keepAlive(); + } else { if(audio != null) { @@ -165,7 +167,7 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachineBase imp } public AudioWrapper createAudioLoop() { - return MainRegistry.proxy.getLoopedSound("hbm:block.igeneratorOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F); + return MainRegistry.proxy.getLoopedSound("hbm:block.igeneratorOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F, 20); } @Override diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index c9a2b3a46..34aa19f02 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -332,6 +332,7 @@ container.machineBoiler=Ölwärmer container.machineCMB=CMB-Stahl Hochofen container.machineCoal=Verbrennungsgenerator container.machineCoker=Koker-Anlage +container.machineCompressor=Kompressor container.machineCrucible=Schmelztiegel container.machineDiesel=Dieselgenerator container.machineElectricBoiler=Elektrischer Ölwärmer @@ -999,6 +1000,7 @@ item.ammo_grenade_toxic.name=40mm Granate (Chemisch) item.ammo_grenade_tracer.name=40mm Übungsgranate item.ammo_himars_standard.name=227mm gelenkte Artillerierakete item.ammo_himars_standard_he.name=227mm Artillerielenkrakete (HE) +item.ammo_himars_standard_lava.name=227mm Artillerielenkrakete (Lava) item.ammo_himars_standard_mini_nuke.name=227mm Artillerielenkrakete (Miniatombombe) item.ammo_himars_standard_tb.name=227mm Artillerielenkrakete (Thermobarisch) item.ammo_himars_standard_wp.name=227mm Artillerielenkrakete (WP) @@ -3941,6 +3943,7 @@ tile.machine_coker.name=Koker-Anlage tile.machine_coker.desc=Verkokt Öl, erzeugt fluides Nebenprodukt.$Benötigt externe Hitzequelle.$Wärmestransferrate: ΔT*0.025 TU/t tile.machine_combine_factory.name=CMB-Stahl Hochofen tile.machine_combustion_engine.name=Industrieller Verbrennungsmotor +tile.machine_compressor.name=Kompressor tile.machine_condenser.name=Dampfkondensierer tile.machine_controller.name=Reaktorfernsteuerung tile.machine_converter_he_rf.name=HE zu RF Konverter diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 9c8cf7515..592971979 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -386,6 +386,51 @@ book_lore.memo_schrab_nuke.page.0=Our most recent investigation led us to the ef book_lore.memo_schrab_nuke.page.1=Only our cyclotron has actually created saralloy previously. However, at our underground shot at Everwerpen, miniscule traces of saralloy were found in uranium ore at the site. All pure, metallic uranium nearby had fissioned. book_lore.memo_schrab_nuke.page.2=As such, given enough uranium ore concentrated around an explosive, or perhaps even a dirty bomb rich in waste containing fissionable material, one could hypothetically create enough saralloy to collect manually. +book_lore.bf_bomb_1.name=Private Notes +book_lore.bf_bomb_1.author=M. Porter +book_lore.bf_bomb_1.page.0=Took long enough, but my transfer was accepted. Those new grads were already hard to handle, let alone all the unprofessionalism of the lead. $ Not all good news - this lab was withholding further detail, and I didn't need more chaos over another magic new discovery. +book_lore.bf_bomb_1.page.1=Of course that was the case. The alumni had their doubts (surprising, considering how bright-eyed they were), but my only... competent? colleague actually got his hands on the primer hand-out. Must have more connections than I thought. His memo is discouraging: +book_lore.bf_bomb_1.page.2=apparently, there's yet ANOTHER miracle material that they prodded out of some concoction of antimatter and a fringe isotope. The brochure calls it "SWIRLMAT" - hell if I know - and that's it. No wonder they wanted a theoretical physicist, +book_lore.bf_bomb_1.page.3=they don't even know what it is yet. Either way, practically any job would be better than my old position, so I can't complain much about sketchiness. + +book_lore.bf_bomb_2.name=Private Notes +book_lore.bf_bomb_2.author=M. Porter +book_lore.bf_bomb_2.page.0=Despite the absence of information in that primer, I still had some hope they knew a bit more. Not at all. Every other senior researcher has a blind faith in this material; their propositions were practically biblical. I was near speechless. +book_lore.bf_bomb_2.page.1=And yet I can't even blame them. Swirlmat makes no goddamn sense - it is completely unlike any other substance I've seen before. Its appearance was near frightening, a literal mass of swirling colors, with darker lines permeating through the neon green surface. +book_lore.bf_bomb_2.page.2=Even worse, this thing is an energy source. The existence of our sample is a violation of ALARA: the lab was vacated when it arrived, and the only person brave enough (one Dr. Melfyn) donned a level A hazmat just to carry it 20 meters. +book_lore.bf_bomb_2.page.3=The empirical data isn't better, as we're breaking the first law of thermodynamics with how much energy it radiates. Being anywhere near that thing - even behind a meter of lead - was terrifying. We sprinted out of the chamber upon conclusion of the spectroscopy +book_lore.bf_bomb_2.page.4=and we got nothing new out of it. Those idiots in the science team, god, did not even waver after all that. Sitting through those "discussions" was horrible; that quack of a head researcher even rumored that the test ban would be lifted, that we could be +book_lore.bf_bomb_2.page.5=building bombs out of the shit in the coming weeks, who in their right mind would work on that? Hell, the one sane assistant (an Andrew) nicknamed it "balefire" - because burning to death on a funeral pyre would be painless by comparison. + +book_lore.bf_bomb_3.name=Private Notes +book_lore.bf_bomb_3.author=M. Porter +book_lore.bf_bomb_3.page.0=The team and I have made some breakthroughs. Emphasis on the separation - isolating myself from the more devout has made working there so much more bearable. While we still have no idea about the actual properties of balefire (it's difficult to analyze +book_lore.bf_bomb_3.page.1=a sample that fries your equipment) its interactions with other matter has proved fruitful. Notably, they synthesized a "gaseous" form: Andrew, of all people, informed me that it was really a colloid consisting of microscopic balefire particles, suspended in some +book_lore.bf_bomb_3.page.2=noble gas. Each particle is enveloped by a positively-charged 'bubble' of ionized gas, preventing it from settling. Who could've guessed that fatal gamma radiation had a benefit? Not me. $ I'm choosing not to think about how they transformed the sample into +book_lore.bf_bomb_3.page.3=particulate, but I can't understate the utility of this gaseous balefire - it's made it much safer to experiment on. $ Speaking of safety, the head researcher (in an act of callous disregard) made a discovery that also nearly took his head off. +book_lore.bf_bomb_3.page.4=He decided to get "dirty" by letting a cell of our new colloid interact directly with some very expensive antimatter: the resulting explosion turned the table it was on into a piece of radiation-bleached slag, carved a near-perfect hemisphere through +book_lore.bf_bomb_3.page.5=the top, and gave the head a healthy dose of ARS. I guess we know how to make it explode now, but god, some people... + +book_lore.bf_bomb_4.name=Private Notes +book_lore.bf_bomb_4.author=M. Porter +book_lore.bf_bomb_4.page.0=I just can't escape my old work. They're the only place that's hiring despite all this godforsaken turmoil, but I'm not going back into that hole. $ They only tempted me because I need out, fast. Remember that atmospheric testing treaty we withdrew from a week ago? +book_lore.bf_bomb_4.page.1=Well, the dipshit in charge of our lab got something right for once. The denunciation came with a flurry of new "scientists" joining, just so we could weaponize balefire. The lack of critical thought here is honestly baffling - bless him, Andrew even jumped ship the +book_lore.bf_bomb_4.page.2=second the first fucking BOMB DESIGN was drafted. That ass Melfyn looked so happy with his little mechanism - perhaps he got brainworms from carrying that sample? - which involved some stupid shit using the solidified, base balefire and an HV +book_lore.bf_bomb_4.page.3=battery. $ Apparently, the form matters for energy output and activation method or whatever, kind of like uranium versus plutonium in regular nukes, but the end result is an initial shock starting the explosion. I find it funny, hilarious even. +book_lore.bf_bomb_4.page.4=All of them place such emphasis on the activation; they ignore the actual mechanism of it all because they don't have a single clue how it works! It may as well be magic at this point, and yet they're still trying to twist and bend it - just for more weapons of war. + +book_lore.bf_bomb_5.name=Private Notes +book_lore.bf_bomb_5.author=M. Porter +book_lore.bf_bomb_5.page.0=I just... can't come to grips with it, even days after. It was a foregone conclusion, really, with how flippant the science team was with safety. $ $ Doctor Melfyn, M.S., is gone. Dead, maybe. I saw it happen before my own eyes, in their test chamber. +book_lore.bf_bomb_5.page.1=We had just gotten another batch of pure balefire, and he had recovered electrical equipment and an energy source to test his proposal. I don't know what caused it (was the power on? had he begun too soon?), but it seemingly progressed in agonizingly slow motion, +book_lore.bf_bomb_5.page.2=as the green-tinted light consumed the table, the battery, and Dr. Melfyn standing only a meter away. Even when the table had degraded into a pool of broiling metal on the floor, he did not burn. I don't know what I saw in his eyes... $ $ Terror, or awe +book_lore.bf_bomb_5.page.3=over his continued survival, maybe? Whatever our "miracle" material was, it didn't care. With a bright blaze of light, he disappeared in the next moment. Was he evaporated? incinerated? annihilated? sent to fucking hell itself, I don't know anymore! +book_lore.bf_bomb_5.page.4=The head researcher sickens me. Said we could be more careful, keep trucking, whatever other morale-improving filth he spewed. That dipshit won't ever figure out that playing with fire will get you burned. $ I didn't bother +book_lore.bf_bomb_5.page.5=resigning, I just grabbed my shit and ran for the hills. Not like it matters, anyway; considering the lack of calls, and the mushroom cloud that rose over my (now former) workplace, they've either blown everything up or entered full-on military jurisdiction. +book_lore.bf_bomb_5.page.6=There's a vital distinction to be made between dissection and VIVISECTION, one which was clearly lost on them. They can dissect metal or atoms as much as they like, but tearing into, vivisecting reality itself is only going to end in more Dr. Melfyns. Who knows! +book_lore.bf_bomb_5.page.7=The government wants to put this shit into bombs after all, maybe we'll see a couple more wars, couple more million resigned to a fate worse than death. They can't hide this forever. $ $ I don't care. Not anymore. Please, god, let me go back +book_lore.bf_bomb_5.page.8=to actual science. $ $ Goddamnit, Mae, get ahold of yourself... + cannery.f1=[ Press F1 for help ] cannery.centrifuge=Gas Centrifuge @@ -624,6 +669,7 @@ container.machineBoiler=Oil Heater container.machineCMB=CMB Steel Furnace container.machineCoal=Combustion Generator container.machineCoker=Coker Unit +container.machineCompressor=Compressor container.machineCrucible=Crucible container.machineDiesel=Diesel Generator container.machineElectricBoiler=Electric Oil Heater @@ -1579,6 +1625,7 @@ item.ammo_grenade_toxic.name=40mm Grenade (Chemical) item.ammo_grenade_tracer.name=40mm Training Grenade item.ammo_himars_standard.name=227mm Guided Artillery Rocket Pod item.ammo_himars_standard_he.name=227mm Guided Artillery Rocket Pod (HE) +item.ammo_himars_standard_lava.name=227mm Guided Artillery Rocket Pod (Lava) item.ammo_himars_standard_mini_nuke.name=227mm Guided Artillery Rocket Pod (Mini Nuke) item.ammo_himars_standard_tb.name=227mm Guided Artillery Rocket Pod (Thermobaric) item.ammo_himars_standard_wp.name=227mm Guided Artillery Rocket Pod (WP) @@ -4771,6 +4818,7 @@ tile.machine_coker.name=Coker Unit tile.machine_coker.desc=Cokes oil, creating fluid byproducts.$Requires external heat source.$Heat transfer rate: ΔT*0.025 TU/t tile.machine_combine_factory.name=CMB Steel Furnace tile.machine_combustion_engine.name=Industrial Combustion Engine +tile.machine_compressor.name=Compressor tile.machine_condenser.name=Steam Condenser tile.machine_controller.name=Reactor Remote Control Block tile.machine_converter_he_rf.name=HE to RF Converter diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index b89294f73..623cca480 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -542,8 +542,8 @@ desc.gui.nukeGadget.desc=§1Требует:§r$ * 4 Набора взрывоо desc.gui.nukeMan.desc=§1Требует:§r$ * 4 Набора взрывоопасных линз$ Первого поколения$ * Плутониевое ядро$ * Воспламенитель desc.gui.nukeMike.desc=§1Требует:§r$ * 4 Набора взрывоопасных линз$ * Плутониевое ядро$ * Блок охлаждения дейтерия$ * Дейтериевый бак с урановым покрытием$ * Дейтериевый бак desc.gui.nukeTsar.desc=§1Требует:§r$ * 4 Набора взрывоопасных линз$ * Плутониевое ядро$§9Опционально:§r$ * Ядро Царь-бомбы -desc.item.zirnoxBreedingRod=§2[Стержень-размножитель Цирнокс]$§eРазмещать рядом с топливными стержнями$§eОсталось %d тиков -desc.item.zirnoxRod=§a[Топливный стержень Цирнокс]$§eГенерирует %1$d тепла на тик$§eОсталость %2$d тиков +desc.item.zirnoxBreedingRod=§2[Стержень-размножитель Цирнокс]$§eРазмещать рядом с топливными стержнями$§eВремя работы %d тиков +desc.item.zirnoxRod=§a[Топливный стержень Цирнокс]$§eГенерирует %1$d тепла на тик$§Время работы %2$d тиков desc.item.ammo.con_accuracy2=- Сильно сниженная точность desc.item.ammo.con_damage=- Сильно сниженный урон desc.item.ammo.con_heavy_wear=- Сильно увеличенный износ @@ -949,114 +949,114 @@ book.starter.page18=vær - просто парень, который слишк book.lore.office0.title=Заявление об увольнении book.lore.office0.author=Kosma -book.lore.office0.page1=Вчера руководство снова сократило наш отдел. Эти идиоты должны винить только самих себя, я не знаю, чего они ожидали после фиаско с Панаем. Кто, черт возьми, сливает такую информацию? Мы теряем миллионы, и -book.lore.office0.page2=это Я сейчас без работы. Это меня просят уйти в отставку. Я надеюсь, что вы, придурки, наконец-то извлекли урок из своего переизбытка ошибок и вытащили эту палку из своей задницы. -book.lore.office0.page3=Я не вернусь в пятницу. Просто пришлите чек на зарплату. +book.lore.office0.page0=Вчера руководство снова сократило наш отдел. Эти идиоты должны винить только самих себя, я не знаю, чего они ожидали после фиаско с Панаем. Кто, черт возьми, сливает такую информацию? Мы теряем миллионы, и +book.lore.office0.page1=это Я сейчас без работы. Это меня просят уйти в отставку. Я надеюсь, что вы, придурки, наконец-то извлекли урок из своего переизбытка ошибок и вытащили эту палку из своей задницы. +book.lore.office0.page2=Я не вернусь в пятницу. Просто пришлите чек на зарплату. book.lore.office1.title=Заметка book.lore.office1.author=Jonas Quinn -book.lore.office1.page1= -book.lore.office2.page2= +book.lore.office1.page0= +book.lore.office2.page1= book_lore.author=By %s book_lore.book_iodine.name=Note book_lore.book_iodine.author=Dave -book_lore.book_iodine.page.1=alright you will not believe this, but old man weathervane finally managed to show up again since he left two weeks ago and what's more surprising is the fact that he actually decided to spill the beans on what they were doing in the canyon: -book_lore.book_iodine.page.2=apparently the morons from R&D discovered a compound that is mostly inorganic, pretty much like a toxin in nature, but get this: the dying cells will reproduce said toxin and excrete it through the skin, creating an aerosol that is highly contagious. -book_lore.book_iodine.page.3=it's just like a virus, but not a virus. the composition is weird, you can mix it in any household bottle but you do have to get the order right. the doc told me that the first ingredient which is just powdered iodine crystals goes into slot %d +book_lore.book_iodine.page.0=alright you will not believe this, but old man weathervane finally managed to show up again since he left two weeks ago and what's more surprising is the fact that he actually decided to spill the beans on what they were doing in the canyon: +book_lore.book_iodine.page.1=apparently the morons from R&D discovered a compound that is mostly inorganic, pretty much like a toxin in nature, but get this: the dying cells will reproduce said toxin and excrete it through the skin, creating an aerosol that is highly contagious. +book_lore.book_iodine.page.2=it's just like a virus, but not a virus. the composition is weird, you can mix it in any household bottle but you do have to get the order right. the doc told me that the first ingredient which is just powdered iodine crystals goes into slot %d book_lore.book_phosphorous.name=Note book_lore.book_phosphorous.author=Dave -book_lore.book_phosphorous.page.1=heyo, it's me again. i assume you got my last memo, the doc wasn't too happy about it. i'll have to do this quick, the dunderheads from R&D are currently moaning again, probably over money. again. anyway, doc weathervane found that the second -book_lore.book_phosphorous.page.2=ingredient is red phosphorous, whihc has to be mixed into slot %d +book_lore.book_phosphorous.page.0=heyo, it's me again. i assume you got my last memo, the doc wasn't too happy about it. i'll have to do this quick, the dunderheads from R&D are currently moaning again, probably over money. again. anyway, doc weathervane found that the second +book_lore.book_phosphorous.page.1=ingredient is red phosphorous, whihc has to be mixed into slot %d book_lore.book_dust.name=Note book_lore.book_dust.author=Dave -book_lore.book_dust.page.1=the doc was furious when he found out that the R&D dorks kept the one remaining sample, ranting about gross negligence this and a doomsday scenario that. i told him to chill for a minute, getting all worked up isn't good for his blood pressure, not -book_lore.book_dust.page.2=that he has much blood left to begin with. one of the R&D morons slipped some more info into last week's circular, they call their little concoction \"MKU\" whatever that means, and that it contains actual household lint. can you believe that? one of the most -book_lore.book_dust.page.3=dangerous inventions of theirs and it contains dust. strangely they also mentioned that it goes into slot %d +book_lore.book_dust.page.0=the doc was furious when he found out that the R&D dorks kept the one remaining sample, ranting about gross negligence this and a doomsday scenario that. i told him to chill for a minute, getting all worked up isn't good for his blood pressure, not +book_lore.book_dust.page.1=that he has much blood left to begin with. one of the R&D morons slipped some more info into last week's circular, they call their little concoction \"MKU\" whatever that means, and that it contains actual household lint. can you believe that? one of the most +book_lore.book_dust.page.2=dangerous inventions of theirs and it contains dust. strangely they also mentioned that it goes into slot %d book_lore.book_mercury.name=Note book_lore.book_mercury.author=Dave -book_lore.book_mercury.page.1=well that settles that. not counting the vomitting blood part, the toxicological report mostly resembles that of mercury poisoning. why? because our little mix also contains mercury! i just wonder where all that stuff comes from when being -book_lore.book_mercury.page.2=replicated by the body? whatever, the mercury goes into slot %d +book_lore.book_mercury.page.0=well that settles that. not counting the vomitting blood part, the toxicological report mostly resembles that of mercury poisoning. why? because our little mix also contains mercury! i just wonder where all that stuff comes from when being +book_lore.book_mercury.page.1=replicated by the body? whatever, the mercury goes into slot %d book_lore.book_flower.name=Note book_lore.book_flower.author=Dave -book_lore.book_flower.page.1=remember when i mentioned in my first memo that the compound is mostly anorganic? well guess what, the old man shared the fourth ingredient: ipomoea nil, a genus of flower. morning glory! it might be due to its low sulfur content, whatever might be the case, -book_lore.book_flower.page.2=it does not work with other flowers. the morning glory goes into slot %d +book_lore.book_flower.page.0=remember when i mentioned in my first memo that the compound is mostly anorganic? well guess what, the old man shared the fourth ingredient: ipomoea nil, a genus of flower. morning glory! it might be due to its low sulfur content, whatever might be the case, +book_lore.book_flower.page.1=it does not work with other flowers. the morning glory goes into slot %d book_lore.book_syringe.name=Note book_lore.book_syringe.author=Dave -book_lore.book_syringe.page.1=a little addendum to my fifth message, obviously you have to store this MKU stuff in a container. the R&D nuts used regular metal syringes that they got from medical. surplus ware i presume, they got thousands of needles just lying around. the metal -book_lore.book_syringe.page.2=syringe goes into slot %d +book_lore.book_syringe.page.0=a little addendum to my fifth message, obviously you have to store this MKU stuff in a container. the R&D nuts used regular metal syringes that they got from medical. surplus ware i presume, they got thousands of needles just lying around. the metal +book_lore.book_syringe.page.1=syringe goes into slot %d book_lore.resignation_note.name=Letter of Resignation book_lore.resignation_note.author=Kosma -book_lore.resignation_note.page.1=Management downsized our department again yesterday. Those idiots only have themselves to blame, I don't know what they were expecting after that fiasco. Who the hell leaks that sort of information? We're losing millions and -book_lore.resignation_note.page.2=it's ME who's the one out of a job now. I'M the one being asked to resign. I hope you asshats finally learn from your overabundance of mistakes and take that stick out of your ass. -book_lore.resignation_note.page.3=I'm not coming back on Friday. Just send the paycheck. +book_lore.resignation_note.page.0=Management downsized our department again yesterday. Those idiots only have themselves to blame, I don't know what they were expecting after that fiasco. Who the hell leaks that sort of information? We're losing millions and +book_lore.resignation_note.page.1=it's ME who's the one out of a job now. I'M the one being asked to resign. I hope you asshats finally learn from your overabundance of mistakes and take that stick out of your ass. +book_lore.resignation_note.page.2=I'm not coming back on Friday. Just send the paycheck. book_lore.memo_stocks.name=Intracorporate Memorandum -book_lore.memo_stocks.page.1=Investor Relations - $ $ There's been some glaring discrepancies in the figures provided for the latest quarterly report. It would be prudent for the financial department to make some adjustments, so there won't be any concern. +book_lore.memo_stocks.page.0=Investor Relations - $ $ There's been some glaring discrepancies in the figures provided for the latest quarterly report. It would be prudent for the financial department to make some adjustments, so there won't be any concern. book_lore.memo_schrab_gsa.name=Internal Memorandum -book_lore.memo_schrab_gsa.page.1=Contract Management - $ $ Legal has made a breakthrough with the DLA. They've awarded us with a 45 BILLION GSA Schedule for further procurement and research of saralloy. At current estimates, that would be at minimum -book_lore.memo_schrab_gsa.page.2=a 40%% profit on related operations, let alone the possibility of future contracts. Due to the confidential nature, all fiscal evidence is to remain private. +book_lore.memo_schrab_gsa.page.0=Contract Management - $ $ Legal has made a breakthrough with the DLA. They've awarded us with a 45 BILLION GSA Schedule for further procurement and research of saralloy. At current estimates, that would be at minimum +book_lore.memo_schrab_gsa.page.1=a 40%% profit on related operations, let alone the possibility of future contracts. Due to the confidential nature, all fiscal evidence is to remain private. book_lore.memo_schrab_rd.name=Internal Memorandum -book_lore.memo_schrab_rd.page.1=Research & Development - $ $ Our main production method of saralloy has been through the new particle accelerator. However, the energy costs are exorbitantly high compared to the amount of output. -book_lore.memo_schrab_rd.page.2=Doctor Schrabauer, however, has discovered a new interaction - called "Strange Lepton Oscillation" - that could significantly reduce costs. Through a not entirely understood process, supplied electrons are transmuted into extremely -book_lore.memo_schrab_rd.page.3=high-energy photons, through a strange charm. This is an extreme exception to many established particle conversion laws, but preliminary experiments have proved that these protons transmute into up and down quarks, eventually creating saralloy. -book_lore.memo_schrab_rd.page.4=Strangely, the prototype requires Tungsten alloyed with small amounts of saralloy. In addition, a special capacitor is required to negate the leftover positive charge. +book_lore.memo_schrab_rd.page.0=Research & Development - $ $ Our main production method of saralloy has been through the new particle accelerator. However, the energy costs are exorbitantly high compared to the amount of output. +book_lore.memo_schrab_rd.page.1=Doctor Schrabauer, however, has discovered a new interaction - called "Strange Lepton Oscillation" - that could significantly reduce costs. Through a not entirely understood process, supplied electrons are transmuted into extremely +book_lore.memo_schrab_rd.page.2=high-energy photons, through a strange charm. This is an extreme exception to many established particle conversion laws, but preliminary experiments have proved that these protons transmute into up and down quarks, eventually creating saralloy. +book_lore.memo_schrab_rd.page.3=Strangely, the prototype requires Tungsten alloyed with small amounts of saralloy. In addition, a special capacitor is required to negate the leftover positive charge. book_lore.memo_schrab_nuke.name=Research Report book_lore.memo_schrab_nuke.author=Doctor Schrabauer -book_lore.memo_schrab_nuke.page.1=Our most recent investigation led us to the effects of nuclear explosions on materials. Thanks to our grant money, we *accidentally* tested our theory on direct saralloy synthesis from uranium. -book_lore.memo_schrab_nuke.page.2=Only our cyclotron has actually created saralloy previously. However, at our underground shot at Everwerpen, miniscule traces of saralloy were found in uranium ore at the site. All pure, metallic uranium nearby had fissioned. -book_lore.memo_schrab_nuke.page.3=As such, given enough uranium ore concentrated around an explosive, or perhaps even a dirty bomb rich in waste containing fissionable material, one could hypothetically create enough saralloy to collect manually. +book_lore.memo_schrab_nuke.page.0=Our most recent investigation led us to the effects of nuclear explosions on materials. Thanks to our grant money, we *accidentally* tested our theory on direct saralloy synthesis from uranium. +book_lore.memo_schrab_nuke.page.1=Only our cyclotron has actually created saralloy previously. However, at our underground shot at Everwerpen, miniscule traces of saralloy were found in uranium ore at the site. All pure, metallic uranium nearby had fissioned. +book_lore.memo_schrab_nuke.page.2=As such, given enough uranium ore concentrated around an explosive, or perhaps even a dirty bomb rich in waste containing fissionable material, one could hypothetically create enough saralloy to collect manually. book_lore.insanity_1.name=Torn Page book_lore.insanity_1.author=D Ferguson -book_lore.insanity_1.page.1=August 6th $ $ Months, no, years worth of dicking about wrestling with investors and operating the greatest energy hog in the northern hemisphere has finally paid off. -book_lore.insanity_1.page.2=While we aren't entirely sure what exactly we found - given we ran gigavolt collisions on particles that were still poorly documented - the results couldn't have been more exciting. -book_lore.insanity_1.page.3=We haven't found a name for whatever it is we've found, nor are we sure if we're looking at a new type of particle, a wormhole leading into another dimension, or satan's anus, but I'm sure our PR people can come up with something. +book_lore.insanity_1.page.0=August 6th $ $ Months, no, years worth of dicking about wrestling with investors and operating the greatest energy hog in the northern hemisphere has finally paid off. +book_lore.insanity_1.page.1=While we aren't entirely sure what exactly we found - given we ran gigavolt collisions on particles that were still poorly documented - the results couldn't have been more exciting. +book_lore.insanity_1.page.2=We haven't found a name for whatever it is we've found, nor are we sure if we're looking at a new type of particle, a wormhole leading into another dimension, or satan's anus, but I'm sure our PR people can come up with something. book_lore.insanity_2.name=Torn Page book_lore.insanity_2.author=D Ferguson -book_lore.insanity_2.page.1=August 8th $ $ We've kept "The Thing" (yes that's what we call it for now) in magnetic isolation for the past days. Spectroscopy tests ended up breaking our spectrometer, but we managed to gain some useful data. -book_lore.insanity_2.page.2=For starters, this thing glows like a christmas tree, radiation photons of about every wavelength you could think of enveloped by a powerful infrared corona. The logical conclusion is that looking at it with your naked -book_lore.insanity_2.page.3=eye would most likely kill you. Now that begs the question: How can a particle this tiny radiate such immense energy? What are you hiding, little man? +book_lore.insanity_2.page.0=August 8th $ $ We've kept "The Thing" (yes that's what we call it for now) in magnetic isolation for the past days. Spectroscopy tests ended up breaking our spectrometer, but we managed to gain some useful data. +book_lore.insanity_2.page.1=For starters, this thing glows like a christmas tree, radiation photons of about every wavelength you could think of enveloped by a powerful infrared corona. The logical conclusion is that looking at it with your naked +book_lore.insanity_2.page.2=eye would most likely kill you. Now that begs the question: How can a particle this tiny radiate such immense energy? What are you hiding, little man? book_lore.insanity_3.name=Torn Page book_lore.insanity_3.author=D Ferguson -book_lore.insanity_3.page.1=August 22nd $ $ I haven't slept right in days. Doc said he couldn't find anything. Been on all sorts of medication now, but the headaches only get worse. Lab boys suspect it might be contamination from the incident two weeks ago. -book_lore.insanity_3.page.2=Doc said it's not that likely, ARS is different. I might need to take some time off if this continues. The Thing is still in containment, the lab boys speculate if the field goes down, the entire complex turns into a mushroom cloud. -book_lore.insanity_3.page.3=I'm not sure how administration can keep this calm, but i don't get paid enough to waste thoughts on that. +book_lore.insanity_3.page.0=August 22nd $ $ I haven't slept right in days. Doc said he couldn't find anything. Been on all sorts of medication now, but the headaches only get worse. Lab boys suspect it might be contamination from the incident two weeks ago. +book_lore.insanity_3.page.1=Doc said it's not that likely, ARS is different. I might need to take some time off if this continues. The Thing is still in containment, the lab boys speculate if the field goes down, the entire complex turns into a mushroom cloud. +book_lore.insanity_3.page.2=I'm not sure how administration can keep this calm, but i don't get paid enough to waste thoughts on that. book_lore.insanity_4.name=Torn Page book_lore.insanity_4.author=D Ferguson -book_lore.insanity_4.page.1=August 28th $ $ They denied my request for leave and I've been pushing through the past few days. Headaches are getting worse. I'm not the only one who's feeling it, either. Some of the lab boys are in a similar situation. -book_lore.insanity_4.page.2=All the while The Thing has left the complex - GOOD. Some suits came in yesterday and had it shipped off, god knows where. One of the lab boys, Zachary, said they're probably burying the containment vessel in the desert, slowly -book_lore.insanity_4.page.3=trying to "fizzle out" The Thing far off from civilization. I say let's shoot it into space. Needless to say, our investors cut all funding for the time being. I should start looking for another job. +book_lore.insanity_4.page.0=August 28th $ $ They denied my request for leave and I've been pushing through the past few days. Headaches are getting worse. I'm not the only one who's feeling it, either. Some of the lab boys are in a similar situation. +book_lore.insanity_4.page.1=All the while The Thing has left the complex - GOOD. Some suits came in yesterday and had it shipped off, god knows where. One of the lab boys, Zachary, said they're probably burying the containment vessel in the desert, slowly +book_lore.insanity_4.page.2=trying to "fizzle out" The Thing far off from civilization. I say let's shoot it into space. Needless to say, our investors cut all funding for the time being. I should start looking for another job. book_lore.insanity_5.name=Torn Page book_lore.insanity_5.author=D Ferguson -book_lore.insanity_5.page.1=September 11th $ $ I'm having this re-occurring nightmare. I'm walking around in an open space and there's these people everywhere, people in rubber suits and freakishly deformed faces. It's always the same nightmare, -book_lore.insanity_5.page.2=and one of the guys from the lab I've spoken with lately has had the same dream. Meanwhile my post has been rather boring, the accelerator has been shut down, all ongoing projects are on halt and our budget is slowly melting away. -book_lore.insanity_5.page.3=Something is telling me that The Thing is still out there somewhere. I can feel it. +book_lore.insanity_5.page.0=September 11th $ $ I'm having this re-occurring nightmare. I'm walking around in an open space and there's these people everywhere, people in rubber suits and freakishly deformed faces. It's always the same nightmare, +book_lore.insanity_5.page.1=and one of the guys from the lab I've spoken with lately has had the same dream. Meanwhile my post has been rather boring, the accelerator has been shut down, all ongoing projects are on halt and our budget is slowly melting away. +book_lore.insanity_5.page.2=Something is telling me that The Thing is still out there somewhere. I can feel it. book_lore.insanity_6.name=Torn Page book_lore.insanity_6.author=D Ferguson -book_lore.insanity_6.page.1=October 3rd $ $ Half the staff is dead, most of the rest is in the ICU. My condition hasn't changed in the past weeks, for better or worse. -book_lore.insanity_6.page.2=Reality is starting to feel less and less real however. Sometimes I look up into the sky at night and hallucinate that thing we discovered all those weeks ago. -book_lore.insanity_6.page.3=That same brilliant sheen of crimson that our spectrometer spat out. My doc says it's delirium and stress caused by the incident, and perhaps hes right, but the meds aren't working at all. +book_lore.insanity_6.page.0=October 3rd $ $ Half the staff is dead, most of the rest is in the ICU. My condition hasn't changed in the past weeks, for better or worse. +book_lore.insanity_6.page.1=Reality is starting to feel less and less real however. Sometimes I look up into the sky at night and hallucinate that thing we discovered all those weeks ago. +book_lore.insanity_6.page.2=That same brilliant sheen of crimson that our spectrometer spat out. My doc says it's delirium and stress caused by the incident, and perhaps hes right, but the meds aren't working at all. book_lore.insanity_7.name=Torn Page book_lore.insanity_7.author=D Ferguson -book_lore.insanity_7.page.1=December 12th $ $ I've been out of a job, but to be honest I'm somewhat thankful about it. My old workplace has gone up in flames - or so they say. -book_lore.insanity_7.page.2=The seismological observatory a couple miles south recorded constant earthquakes for days on end, not that anyone else would have noticed this deep in the desert. -book_lore.insanity_7.page.3=I have concluded that this place was cursed, making everyone sick and then descending into hell like some sort of Edgar Allan Poe story. Good riddance. +book_lore.insanity_7.page.0=December 12th $ $ I've been out of a job, but to be honest I'm somewhat thankful about it. My old workplace has gone up in flames - or so they say. +book_lore.insanity_7.page.1=The seismological observatory a couple miles south recorded constant earthquakes for days on end, not that anyone else would have noticed this deep in the desert. +book_lore.insanity_7.page.2=I have concluded that this place was cursed, making everyone sick and then descending into hell like some sort of Edgar Allan Poe story. Good riddance. hbmfluid.none=Ничего hbmfluid.water=Вода @@ -1506,6 +1506,7 @@ chem.TATB=Синтез TATB chem.CC_CENTRIFUGE=Отделение хлоркальцита chem.CC_ELECTROLYSIS=Электролиз хлорида кальция chem.PC_ELECTROLYSIS=Электролиз хлорида калия +chem.LAMINATE=Производство ламината item.record.lc.desc=Valve - Diabolic Adrenaline Guitar/Lambda Core item.record.ss.desc=Valve - Sector Sweep @@ -2065,6 +2066,7 @@ item.ammo_himars_standard_he.name=227-мм управляемый артилле item.ammo_himars_standard_mini_nuke.name=227-мм управляемый артиллерийский ракетный снаряд (Мини-ядерный) item.ammo_himars_standard_tb.name=227-мм управляемый артиллерийский ракетный снаряд (Термобарический) item.ammo_himars_standard_wp.name=227-мм управляемый артиллерийский ракетный снаряд (БФ) +item.ammo_himars_standard_lava.name=227-мм управляемый артиллерийский ракетный снаряд (Лава) item.ammo_himars_single.name=610-мм управляемый артиллерийский ракетный снаряд item.ammo_himars_single_tb.name=610-мм управляемый артиллерийский ракетный снаряд (Термобарический) tile.brick_asbestos_stairs.name=Ступени из асбестовых кирпичей @@ -2140,6 +2142,8 @@ tile.watz_pump.name=Нагнетающая помпа Ватцза tile.machine_coker.name=Коксовая установка tile.machine_coker.desc=Коксует жидкость, создавая жидкую побочку.$Требует внешний источник тепла.$Скорость передачи тепла: ΔT*0.025 TU/t container.machineCoker=Коксовая установка +container.machineCompressor=Компрессор +tile.machine_compressor.name=Компрессор container.hadron=Ускоритель частиц tile.hadron_access.name=Терминал доступа ускорителя частиц @@ -2263,6 +2267,7 @@ tile.machine_tower_large.name=Градирня tile.machine_tower_small.name=Вспомогательная градирня tile.fusion_conductor.name=Сверхпроводящий магнит +tile.fusion_conductor_welded.name=Сверхпроводящий магнит (Сваренный) tile.fusion_center.name=Центральный элемент магнита tile.fusion_motor.name=Элемент магнитного мотора tile.fusion_heater.name=Компонент нагревателя плазмы @@ -4482,6 +4487,14 @@ entity.entity_taint_crab.name=Заражённый порчей теслакра entity.entity_elder_one.name=Крякос Старший entity.entity_ntm_fbi.name=Агент ФБР entity.entity_ntm_radiation_blaze.name=Элементаль Расплавления +entity.entity_glyphid.name=Глифид +entity.entity_glyphid_behemoth.name=Глифид-страж +entity.entity_glyphid_brawler.name=Глифид-солдат +entity.entity_glyphid_brenda.name=Бренда +entity.entity_glyphid_nuclear.name=Чмяк +entity.entity_glyphid_scout.name=Глифид-паучок +entity.entity_glyphid_blaster.name=Глифид-стрелок +entity.entity_glyphid_bombardier.name=Глифид-бомбардир entity.hbm.entity_balls_o_tron.name=Баллс-О-Трон Прайм entity.hbm.entity_balls_o_tron_seg.name=Баллс-О-Трон Сегмент entity.hbm.entity_ntm_ufo.name=Марсианский корабль вторжения @@ -5083,6 +5096,8 @@ tile.meteor_brick_chiseled.name=Высеченные метеоритные ки tile.meteor_pillar.name=Метеоритный столб tile.meteor_spawner.name=Сборщик киберкрабов tile.meteor_battery.name=Генератор статического электричества из звездного металла +tile.glyphid_base.name=Блок улья глифидов +tile.glyphid_spawner.name=Спавнер улья глифидов tile.ore_tektite_osmiridium.name=Перемешанный с осмиридием Тектит tile.tektite.name=Тектит @@ -5243,6 +5258,7 @@ item.bottle2_fritz.name=Фрицз-Кола item.bottle2_korl_special.name=Первый Корл item.bottle2_fritz_special.name=Первая Фрицз-Кола item.bottle2_sunset.name=Сансет Сарсапарилла +item.bdcl.name=BDCL item.chocolate_milk.name=Молочный шоколад item.cap_nuka.name=Крышка item.cap_quantum.name=Крышка от Квантовой Ядер-колы @@ -5598,7 +5614,6 @@ item.crystal_energy.desc=Densely packed energy powder.$Not edible. item.custom_core.name=Nuclear Fission Core item.detonator_de.desc=Взрывается при падении! item.detonator_deadman.desc=Shift+ПКМ, чтобы задать позицию,$выбросите для детонации! -item.euphemium_capacitor.name=Redcoil Capacitor with Euphemium Positive Energy Negator item.eye.desc.11=§c"All humans, are afraid of monsters, the monsters they keep inside of them.$§cThey drove the species who are able to expose the monsters in them down the$§cpurgatory underground. There, in the purgatory deep inside the earth where$§cpeople are made, he was born. He hated, and loved, the monster that is$§cforming inside of him more than anyone else. Together with his second$§cmother, he climbed up to the world where the people who have driven him into$§cthe underground live. However, at that time, it was too late. This world$§cabove ground is waiting for its slow death, same as the people who are$§ccontinue to stay there. This world, this surface, is the realm of the dead.$§cAnd this species called humans, they have built for themselves a world of$§ctwilight. There, he met a ghost called 'father'. His second mother, who has$§ccome to this netherworld with him, remained there, while he returned to the$§cpurgatory where he was born. That place, the place where he lives, that$§cpurgatory. That should be the last world of humans."§r item.eye.desc=It's looking at me despite being closed,$or rather, through me...$into my soul.$It makes me uncomfortable item.eye.name=Eye? diff --git a/src/main/resources/assets/hbm/models/blocks/rail_standard_buffer.obj b/src/main/resources/assets/hbm/models/blocks/rail_standard_buffer.obj new file mode 100644 index 000000000..d56bd4b9b --- /dev/null +++ b/src/main/resources/assets/hbm/models/blocks/rail_standard_buffer.obj @@ -0,0 +1,1143 @@ +# Blender v2.79 (sub 0) OBJ File: 'rail_standard_stop.blend' +# www.blender.org +o Plane.001 +v 1.000000 0.062500 -0.187500 +v 1.000000 0.062500 0.187500 +v -1.000000 0.062500 0.187500 +v -1.000000 0.062500 -0.187500 +v -1.000000 0.000000 0.187500 +v 1.000000 0.000000 0.187500 +v -1.000000 0.000000 -0.187500 +v 1.000000 0.000000 -0.187500 +v -1.000000 0.000000 -0.812500 +v 1.000000 0.000000 -0.812500 +v -1.000000 0.000000 -1.187500 +v 1.000000 0.000000 -1.187500 +v -1.000000 0.000000 -1.812500 +v 1.000000 0.000000 -1.812500 +v -1.000000 0.000000 -2.187500 +v 1.000000 0.000000 -2.187500 +v -1.000000 0.000000 2.187500 +v 1.000000 0.000000 2.187500 +v -1.000000 0.000000 1.812500 +v 1.000000 0.000000 1.812500 +v -1.000000 0.000000 1.187500 +v 1.000000 0.000000 1.187500 +v -1.000000 0.000000 0.812500 +v 1.000000 0.000000 0.812500 +v -1.000000 0.062500 -1.187500 +v -1.000000 0.062500 -0.812500 +v 1.000000 0.062500 -0.812500 +v 1.000000 0.062500 -1.187500 +v -1.000000 0.062500 -2.187500 +v -1.000000 0.062500 -1.812500 +v 1.000000 0.062500 -1.812500 +v 1.000000 0.062500 -2.187500 +v -1.000000 0.062500 1.812500 +v -1.000000 0.062500 2.187500 +v 1.000000 0.062500 2.187500 +v 1.000000 0.062500 1.812500 +v -1.000000 0.062500 0.812500 +v -1.000000 0.062500 1.187500 +v 1.000000 0.062500 1.187500 +v 1.000000 0.062500 0.812500 +v -0.812500 0.062500 2.500000 +v 0.812500 0.062500 2.500000 +v -0.812500 0.062500 -2.500000 +v 0.812500 0.062500 -2.500000 +v -0.812500 0.187500 2.500000 +v 0.812500 0.187500 2.500000 +v -0.812500 0.187500 -2.500000 +v 0.812500 0.187500 -2.500000 +v 0.750000 0.062500 2.500000 +v 0.750000 0.062500 -2.500000 +v 0.750000 0.187500 2.500000 +v 0.750000 0.187500 -2.500000 +v -0.750000 0.062500 -2.500000 +v -0.750000 0.062500 2.500000 +v -0.750000 0.187500 -2.500000 +v -0.750000 0.187500 2.500000 +v 0.625000 0.062500 2.062500 +v 0.937500 0.062500 2.062500 +v 0.625000 0.062500 1.937500 +v 0.937500 0.062500 1.937500 +v 0.625000 0.125000 2.062500 +v 0.937500 0.125000 2.062500 +v 0.625000 0.125000 1.937500 +v 0.937500 0.125000 1.937500 +v -0.937500 0.062500 2.062500 +v -0.625000 0.062500 2.062500 +v -0.937500 0.062500 1.937500 +v -0.625000 0.062500 1.937500 +v -0.937500 0.125000 2.062500 +v -0.625000 0.125000 2.062500 +v -0.937500 0.125000 1.937500 +v -0.625000 0.125000 1.937500 +v 0.625000 0.062500 1.062500 +v 0.937500 0.062500 1.062500 +v 0.625000 0.062500 0.937500 +v 0.937500 0.062500 0.937500 +v 0.625000 0.125000 1.062500 +v 0.937500 0.125000 1.062500 +v 0.625000 0.125000 0.937500 +v 0.937500 0.125000 0.937500 +v -0.937500 0.062500 1.062500 +v -0.625000 0.062500 1.062500 +v -0.937500 0.062500 0.937500 +v -0.625000 0.062500 0.937500 +v -0.937500 0.125000 1.062500 +v -0.625000 0.125000 1.062500 +v -0.937500 0.125000 0.937500 +v -0.625000 0.125000 0.937500 +v 0.625000 0.062500 0.062500 +v 0.937500 0.062500 0.062500 +v 0.625000 0.062500 -0.062500 +v 0.937500 0.062500 -0.062500 +v 0.625000 0.125000 0.062500 +v 0.937500 0.125000 0.062500 +v 0.625000 0.125000 -0.062500 +v 0.937500 0.125000 -0.062500 +v -0.937500 0.062500 0.062500 +v -0.625000 0.062500 0.062500 +v -0.937500 0.062500 -0.062500 +v -0.625000 0.062500 -0.062500 +v -0.937500 0.125000 0.062500 +v -0.625000 0.125000 0.062500 +v -0.937500 0.125000 -0.062500 +v -0.625000 0.125000 -0.062500 +v 0.625000 0.062500 -0.937500 +v 0.937500 0.062500 -0.937500 +v 0.625000 0.062500 -1.062500 +v 0.937500 0.062500 -1.062500 +v 0.625000 0.125000 -0.937500 +v 0.937500 0.125000 -0.937500 +v 0.625000 0.125000 -1.062500 +v 0.937500 0.125000 -1.062500 +v -0.937500 0.062500 -0.937500 +v -0.625000 0.062500 -0.937500 +v -0.937500 0.062500 -1.062500 +v -0.625000 0.062500 -1.062500 +v -0.937500 0.125000 -0.937500 +v -0.625000 0.125000 -0.937500 +v -0.937500 0.125000 -1.062500 +v -0.625000 0.125000 -1.062500 +v 0.625000 0.062500 -1.937500 +v 0.937500 0.062500 -1.937500 +v 0.625000 0.062500 -2.062500 +v 0.937500 0.062500 -2.062500 +v 0.625000 0.125000 -1.937500 +v 0.937500 0.125000 -1.937500 +v 0.625000 0.125000 -2.062500 +v 0.937500 0.125000 -2.062500 +v -0.937500 0.062500 -1.937500 +v -0.625000 0.062500 -1.937500 +v -0.937500 0.062500 -2.062500 +v -0.625000 0.062500 -2.062500 +v -0.937500 0.125000 -1.937500 +v -0.625000 0.125000 -1.937500 +v -0.937500 0.125000 -2.062500 +v -0.625000 0.125000 -2.062500 +v -0.812500 0.062500 -1.500000 +v -0.812500 0.062500 -0.500000 +v -0.812500 0.062500 0.500000 +v -0.812500 0.062500 1.500000 +v 0.812500 0.062500 1.500000 +v 0.812500 0.062500 0.500000 +v 0.812500 0.062500 -0.500000 +v 0.812500 0.062500 -1.500000 +v -0.812500 0.187500 -1.500000 +v -0.812500 0.187500 -0.500000 +v -0.812500 0.187500 0.500000 +v -0.812500 0.187500 1.500000 +v 0.812500 0.187500 1.500000 +v 0.812500 0.187500 0.500000 +v 0.812500 0.187500 -0.500000 +v 0.812500 0.187500 -1.500000 +v 0.750000 0.062500 1.500000 +v 0.750000 0.062500 0.500000 +v 0.750000 0.062500 -0.500000 +v 0.750000 0.062500 -1.500000 +v 0.750000 0.187500 1.500000 +v 0.750000 0.187500 0.500000 +v 0.750000 0.187500 -0.500000 +v 0.750000 0.187500 -1.500000 +v -0.750000 0.062500 -1.500000 +v -0.750000 0.062500 -0.500000 +v -0.750000 0.062500 0.500000 +v -0.750000 0.062500 1.500000 +v -0.750000 0.187500 -1.500000 +v -0.750000 0.187500 -0.500000 +v -0.750000 0.187500 0.500000 +v -0.750000 0.187500 1.500000 +v -1.000000 1.500000 -1.000000 +v 1.000000 1.500000 -1.000000 +v -1.000000 1.500000 -1.375000 +v 1.000000 1.500000 -1.375000 +v -1.000000 0.875000 -1.375000 +v -1.000000 0.875000 -1.000000 +v 1.000000 0.875000 -1.000000 +v 1.000000 0.875000 -1.375000 +v 0.687500 1.062500 -1.000000 +v 0.937500 1.062500 -1.000000 +v 0.687500 1.312500 -1.000000 +v 0.937500 1.312500 -1.000000 +v 0.687500 1.312500 -0.625000 +v 0.687500 1.062500 -0.625000 +v 0.937500 1.062500 -0.625000 +v 0.937500 1.312500 -0.625000 +v 0.562500 1.312500 -0.625000 +v 0.687500 1.437500 -0.625000 +v 0.687500 0.937500 -0.625000 +v 0.562500 1.062500 -0.625000 +v 1.062500 1.062500 -0.625000 +v 0.937500 0.937500 -0.625000 +v 0.937500 1.437500 -0.625000 +v 1.062500 1.312500 -0.625000 +v 0.687500 1.437500 -0.500000 +v 0.562500 1.312500 -0.500000 +v 0.562500 1.062500 -0.500000 +v 0.687500 0.937500 -0.500000 +v 0.937500 0.937500 -0.500000 +v 1.062500 1.062500 -0.500000 +v 1.062500 1.312500 -0.500000 +v 0.937500 1.437500 -0.500000 +v 0.625000 0.875000 -1.062500 +v 0.875000 0.875000 -1.062500 +v 0.625000 0.875000 -1.312500 +v 0.875000 0.875000 -1.312500 +v 0.625000 0.000000 -1.312500 +v 0.625000 0.000000 -1.062500 +v 0.875000 0.000000 -1.062500 +v 0.875000 0.000000 -1.312500 +v -0.875000 0.875000 -1.062500 +v -0.625000 0.875000 -1.062500 +v -0.875000 0.875000 -1.312500 +v -0.625000 0.875000 -1.312500 +v -0.875000 0.000000 -1.312500 +v -0.875000 0.000000 -1.062500 +v -0.625000 0.000000 -1.062500 +v -0.625000 0.000000 -1.312500 +v 0.625000 0.000000 -2.687500 +v 0.625000 0.000000 -2.437500 +v 0.875000 0.000000 -2.437500 +v 0.875000 0.000000 -2.687500 +v -0.875000 0.000000 -2.687500 +v -0.875000 0.000000 -2.437500 +v -0.625000 0.000000 -2.437500 +v -0.625000 0.000000 -2.687500 +v 0.625000 1.062500 -1.375000 +v 0.875000 1.062500 -1.375000 +v -0.875000 1.062500 -1.375000 +v -0.625000 1.062500 -1.375000 +v 0.625000 1.312500 -1.375000 +v 0.875000 1.312500 -1.375000 +v -0.875000 1.312500 -1.375000 +v -0.625000 1.312500 -1.375000 +v -0.937500 1.062500 -1.000000 +v -0.687500 1.062500 -1.000000 +v -0.937500 1.312500 -1.000000 +v -0.687500 1.312500 -1.000000 +v -0.937500 1.312500 -0.625000 +v -0.937500 1.062500 -0.625000 +v -0.687500 1.062500 -0.625000 +v -0.687500 1.312500 -0.625000 +v -1.062500 1.312500 -0.625000 +v -0.937500 1.437500 -0.625000 +v -0.937500 0.937500 -0.625000 +v -1.062500 1.062500 -0.625000 +v -0.562500 1.062500 -0.625000 +v -0.687500 0.937500 -0.625000 +v -0.687500 1.437500 -0.625000 +v -0.562500 1.312500 -0.625000 +v -0.937500 1.437500 -0.500000 +v -1.062500 1.312500 -0.500000 +v -1.062500 1.062500 -0.500000 +v -0.937500 0.937500 -0.500000 +v -0.687500 0.937500 -0.500000 +v -0.562500 1.062500 -0.500000 +v -0.562500 1.312500 -0.500000 +v -0.687500 1.437500 -0.500000 +vt -0.000000 0.000000 +vt 0.093750 0.500000 +vt -0.000000 0.500000 +vt 0.109375 0.500000 +vt 0.203125 -0.000000 +vt 0.203125 0.500000 +vt 0.109375 0.500000 +vt 0.203125 -0.000000 +vt 0.203125 0.500000 +vt 0.109375 0.500000 +vt 0.203125 -0.000000 +vt 0.203125 0.500000 +vt 0.109375 0.500000 +vt 0.203125 -0.000000 +vt 0.203125 0.500000 +vt 0.109375 0.500000 +vt 0.203125 -0.000000 +vt 0.203125 0.500000 +vt -0.000000 0.000000 +vt 0.093750 0.500000 +vt -0.000000 0.500000 +vt -0.000000 0.000000 +vt 0.093750 0.500000 +vt -0.000000 0.500000 +vt -0.000000 0.000000 +vt 0.093750 0.500000 +vt -0.000000 0.500000 +vt -0.000000 0.000000 +vt 0.093750 0.500000 +vt -0.000000 0.500000 +vt 0.203125 0.015625 +vt 0.296875 0.000000 +vt 0.296875 0.015625 +vt 0.109375 0.500000 +vt 0.093750 0.000000 +vt 0.109375 0.000000 +vt 0.109375 0.500000 +vt 0.093750 0.000000 +vt 0.109375 0.000000 +vt 0.296875 0.000000 +vt 0.203125 0.015625 +vt 0.296875 0.000000 +vt 0.203125 0.015625 +vt 0.093750 0.000000 +vt 0.109375 0.000000 +vt 0.203125 0.015625 +vt 0.296875 0.000000 +vt 0.296875 0.015625 +vt 0.093750 0.000000 +vt 0.109375 0.000000 +vt 0.203125 0.015625 +vt 0.296875 0.000000 +vt 0.296875 0.015625 +vt 0.109375 0.500000 +vt 0.093750 0.000000 +vt 0.109375 0.000000 +vt 0.203125 0.015625 +vt 0.296875 0.000000 +vt 0.296875 0.015625 +vt 0.109375 0.500000 +vt 0.093750 0.000000 +vt 0.109375 0.000000 +vt 0.296875 0.000000 +vt 0.203125 0.015625 +vt 0.109375 0.500000 +vt 0.093750 0.000000 +vt 0.109375 0.000000 +vt 0.296875 0.000000 +vt 0.203125 0.015625 +vt 0.093750 0.000000 +vt 0.109375 0.000000 +vt 0.296875 0.000000 +vt 0.203125 0.015625 +vt 0.093750 0.000000 +vt 0.109375 0.000000 +vt 0.203125 0.015625 +vt 0.296875 0.000000 +vt 0.296875 0.015625 +vt 0.093750 0.000000 +vt 0.109375 0.000000 +vt 0.250000 0.078125 +vt 0.218750 0.328125 +vt 0.218750 0.078125 +vt 0.265625 0.328125 +vt 0.296875 0.078125 +vt 0.296875 0.328125 +vt 0.296875 0.328125 +vt 0.265625 0.078125 +vt 0.296875 0.078125 +vt 0.265625 0.359375 +vt 0.250000 0.328125 +vt 0.265625 0.328125 +vt 0.250000 0.078125 +vt 0.265625 0.328125 +vt 0.250000 0.328125 +vt 0.203125 0.078125 +vt 0.250000 0.328125 +vt 0.265625 0.359375 +vt 0.250000 0.359375 +vt 0.218750 0.078125 +vt 0.250000 0.328125 +vt 0.218750 0.328125 +vt 0.265625 0.328125 +vt 0.250000 0.078125 +vt 0.265625 0.078125 +vt 0.203125 0.078125 +vt 0.203125 0.328125 +vt 0.265625 0.359375 +vt 0.250000 0.328125 +vt 0.265625 0.328125 +vt 0.250000 0.328125 +vt 0.265625 0.359375 +vt 0.250000 0.359375 +vt 0.218750 0.031250 +vt 0.203125 0.062500 +vt 0.203125 0.031250 +vt 0.218750 0.062500 +vt 0.296875 0.078125 +vt 0.218750 0.078125 +vt 0.296875 0.031250 +vt 0.218750 0.015625 +vt 0.296875 0.015625 +vt 0.296875 0.062500 +vt 0.312500 0.031250 +vt 0.312500 0.062500 +vt 0.218750 0.031250 +vt 0.203125 0.062500 +vt 0.203125 0.031250 +vt 0.218750 0.062500 +vt 0.296875 0.078125 +vt 0.218750 0.078125 +vt 0.296875 0.031250 +vt 0.218750 0.015625 +vt 0.296875 0.015625 +vt 0.296875 0.062500 +vt 0.312500 0.031250 +vt 0.312500 0.062500 +vt 0.218750 0.031250 +vt 0.203125 0.062500 +vt 0.203125 0.031250 +vt 0.218750 0.062500 +vt 0.296875 0.078125 +vt 0.218750 0.078125 +vt 0.296875 0.031250 +vt 0.218750 0.015625 +vt 0.296875 0.015625 +vt 0.296875 0.062500 +vt 0.312500 0.031250 +vt 0.312500 0.062500 +vt 0.218750 0.031250 +vt 0.203125 0.062500 +vt 0.203125 0.031250 +vt 0.218750 0.062500 +vt 0.296875 0.078125 +vt 0.218750 0.078125 +vt 0.296875 0.031250 +vt 0.218750 0.015625 +vt 0.296875 0.015625 +vt 0.296875 0.062500 +vt 0.312500 0.031250 +vt 0.312500 0.062500 +vt 0.218750 0.031250 +vt 0.203125 0.062500 +vt 0.203125 0.031250 +vt 0.218750 0.062500 +vt 0.296875 0.078125 +vt 0.218750 0.078125 +vt 0.296875 0.031250 +vt 0.218750 0.015625 +vt 0.296875 0.015625 +vt 0.296875 0.062500 +vt 0.312500 0.031250 +vt 0.312500 0.062500 +vt 0.218750 0.031250 +vt 0.203125 0.062500 +vt 0.203125 0.031250 +vt 0.218750 0.062500 +vt 0.296875 0.078125 +vt 0.218750 0.078125 +vt 0.296875 0.031250 +vt 0.218750 0.015625 +vt 0.296875 0.015625 +vt 0.296875 0.062500 +vt 0.312500 0.031250 +vt 0.312500 0.062500 +vt 0.218750 0.031250 +vt 0.203125 0.062500 +vt 0.203125 0.031250 +vt 0.218750 0.062500 +vt 0.296875 0.078125 +vt 0.218750 0.078125 +vt 0.296875 0.031250 +vt 0.218750 0.015625 +vt 0.296875 0.015625 +vt 0.296875 0.062500 +vt 0.312500 0.031250 +vt 0.312500 0.062500 +vt 0.218750 0.031250 +vt 0.203125 0.062500 +vt 0.203125 0.031250 +vt 0.218750 0.062500 +vt 0.296875 0.078125 +vt 0.218750 0.078125 +vt 0.296875 0.031250 +vt 0.218750 0.015625 +vt 0.296875 0.015625 +vt 0.296875 0.062500 +vt 0.312500 0.031250 +vt 0.312500 0.062500 +vt 0.218750 0.031250 +vt 0.203125 0.062500 +vt 0.203125 0.031250 +vt 0.218750 0.062500 +vt 0.296875 0.078125 +vt 0.218750 0.078125 +vt 0.296875 0.031250 +vt 0.218750 0.015625 +vt 0.296875 0.015625 +vt 0.296875 0.062500 +vt 0.312500 0.031250 +vt 0.312500 0.062500 +vt 0.218750 0.031250 +vt 0.203125 0.062500 +vt 0.203125 0.031250 +vt 0.218750 0.062500 +vt 0.296875 0.078125 +vt 0.218750 0.078125 +vt 0.296875 0.031250 +vt 0.218750 0.015625 +vt 0.296875 0.015625 +vt 0.296875 0.062500 +vt 0.312500 0.031250 +vt 0.312500 0.062500 +vt 0.203125 0.078125 +vt 0.218750 0.328125 +vt 0.203125 0.328125 +vt 0.203125 0.078125 +vt 0.218750 0.328125 +vt 0.203125 0.328125 +vt 0.203125 0.078125 +vt 0.218750 0.328125 +vt 0.203125 0.328125 +vt 0.203125 0.078125 +vt 0.218750 0.328125 +vt 0.203125 0.328125 +vt 0.250000 0.078125 +vt 0.265625 0.078125 +vt 0.265625 0.328125 +vt 0.250000 0.078125 +vt 0.265625 0.078125 +vt 0.265625 0.328125 +vt 0.250000 0.078125 +vt 0.265625 0.078125 +vt 0.265625 0.328125 +vt 0.250000 0.078125 +vt 0.265625 0.078125 +vt 0.218750 0.078125 +vt 0.250000 0.328125 +vt 0.218750 0.078125 +vt 0.250000 0.328125 +vt 0.218750 0.078125 +vt 0.250000 0.328125 +vt 0.218750 0.078125 +vt 0.250000 0.328125 +vt 0.218750 0.328125 +vt 0.203125 0.078125 +vt 0.218750 0.078125 +vt 0.218750 0.328125 +vt 0.203125 0.078125 +vt 0.218750 0.078125 +vt 0.218750 0.328125 +vt 0.203125 0.078125 +vt 0.218750 0.078125 +vt 0.218750 0.328125 +vt 0.203125 0.078125 +vt 0.218750 0.078125 +vt 0.265625 0.328125 +vt 0.250000 0.328125 +vt 0.250000 0.078125 +vt 0.265625 0.328125 +vt 0.250000 0.328125 +vt 0.250000 0.078125 +vt 0.265625 0.328125 +vt 0.250000 0.328125 +vt 0.250000 0.078125 +vt 0.265625 0.328125 +vt 0.250000 0.328125 +vt 0.296875 0.328125 +vt 0.265625 0.078125 +vt 0.296875 0.078125 +vt 0.296875 0.328125 +vt 0.265625 0.078125 +vt 0.296875 0.078125 +vt 0.296875 0.328125 +vt 0.265625 0.078125 +vt 0.296875 0.078125 +vt 0.296875 0.328125 +vt 0.265625 0.078125 +vt 0.296875 0.078125 +vt 0.296875 0.078125 +vt 0.296875 0.328125 +vt 0.296875 0.078125 +vt 0.296875 0.328125 +vt 0.296875 0.078125 +vt 0.296875 0.328125 +vt 0.296875 0.078125 +vt 0.296875 0.328125 +vt 0.467018 0.000041 +vt 0.560886 0.500669 +vt 0.467018 0.500669 +vt 0.562500 -0.000000 +vt 0.468750 0.500000 +vt 0.468750 -0.000000 +vt 0.312500 0.500000 +vt 0.468750 0.593750 +vt 0.312500 0.593750 +vt 0.312500 0.500000 +vt 0.468750 0.593750 +vt 0.312500 0.593750 +vt 0.312500 -0.000000 +vt 0.468750 0.500000 +vt 0.312500 -0.000000 +vt 0.656250 0.187500 +vt 0.562500 0.125000 +vt 0.656250 0.125000 +vt 0.656250 0.062500 +vt 0.562500 0.000000 +vt 0.656250 0.000000 +vt 0.562500 0.062500 +vt 0.656250 0.250000 +vt 0.562500 0.187500 +vt 0.625000 0.437500 +vt 0.687500 0.406250 +vt 0.687500 0.437500 +vt 0.718750 0.312500 +vt 0.593750 0.375000 +vt 0.687500 0.406250 +vt 0.593750 0.375000 +vt 0.625000 0.281250 +vt 0.687500 0.250000 +vt 0.625000 0.281250 +vt 0.625000 0.250000 +vt 0.750000 0.375000 +vt 0.750000 0.312500 +vt 0.718750 0.437500 +vt 0.718750 0.281250 +vt 0.687500 0.281250 +vt 0.593750 0.250000 +vt 0.593750 0.406250 +vt 0.625000 0.406250 +vt 0.562500 0.312500 +vt 0.562500 0.375000 +vt 0.781250 0.000000 +vt 0.718750 0.062500 +vt 0.718750 0.000000 +vt 0.656250 0.218750 +vt 0.718750 -0.000000 +vt 0.718750 0.218750 +vt 0.656250 0.218750 +vt 0.718750 0.218750 +vt 0.656250 0.218750 +vt 0.718750 -0.000000 +vt 0.718750 0.218750 +vt 0.656250 0.218750 +vt 0.718750 -0.000000 +vt 0.718750 0.218750 +vt 0.781250 0.000000 +vt 0.718750 0.062500 +vt 0.718750 0.000000 +vt 0.656250 0.218750 +vt 0.718750 -0.000000 +vt 0.718750 0.218750 +vt 0.656250 0.218750 +vt 0.718750 0.218750 +vt 0.656250 0.218750 +vt 0.718750 -0.000000 +vt 0.718750 0.218750 +vt 0.656250 0.218750 +vt 0.718750 -0.000000 +vt 0.718750 0.218750 +vt 0.250000 0.500000 +vt 0.312500 0.562500 +vt 0.250000 0.562500 +vt 0.250000 0.500000 +vt 0.312500 0.562500 +vt 0.250000 0.562500 +vt 0.187500 0.921875 +vt 0.250000 0.546875 +vt 0.250000 0.921875 +vt 0.187500 0.921875 +vt 0.250000 0.546875 +vt 0.250000 0.921875 +vt 0.000000 0.546875 +vt 0.062500 0.968750 +vt 0.000000 0.921875 +vt 0.125000 0.500000 +vt 0.125000 0.968750 +vt 0.000000 0.546875 +vt 0.062500 0.968750 +vt 0.000000 0.921875 +vt 0.125000 0.500000 +vt 0.125000 0.968750 +vt 0.656250 0.187500 +vt 0.562500 0.125000 +vt 0.656250 0.125000 +vt 0.656250 0.062500 +vt 0.562500 0.000000 +vt 0.656250 0.000000 +vt 0.562500 0.062500 +vt 0.656250 0.250000 +vt 0.562500 0.187500 +vt 0.625000 0.437500 +vt 0.687500 0.406250 +vt 0.687500 0.437500 +vt 0.718750 0.312500 +vt 0.593750 0.375000 +vt 0.687500 0.406250 +vt 0.593750 0.375000 +vt 0.625000 0.281250 +vt 0.687500 0.250000 +vt 0.625000 0.281250 +vt 0.625000 0.250000 +vt 0.750000 0.375000 +vt 0.750000 0.312500 +vt 0.718750 0.437500 +vt 0.718750 0.281250 +vt 0.687500 0.281250 +vt 0.593750 0.250000 +vt 0.593750 0.406250 +vt 0.625000 0.406250 +vt 0.562500 0.312500 +vt 0.562500 0.375000 +vt 0.203125 0.000000 +vt 0.093750 0.500000 +vt 0.093750 0.500000 +vt 0.296875 0.015625 +vt 0.296875 0.015625 +vt 0.203125 0.000000 +vt 0.203125 0.000000 +vt 0.093750 0.500000 +vt 0.203125 0.000000 +vt 0.093750 0.500000 +vt 0.296875 0.015625 +vt 0.093750 0.500000 +vt 0.296875 0.015625 +vt 0.296875 0.015625 +vt 0.203125 0.000000 +vt 0.250000 0.359375 +vt 0.203125 0.328125 +vt 0.265625 0.328125 +vt 0.250000 0.359375 +vt 0.265625 0.328125 +vt 0.203125 0.328125 +vt 0.203125 0.328125 +vt 0.203125 0.328125 +vt 0.203125 0.328125 +vt 0.560886 0.000041 +vt 0.562500 0.500000 +vt 0.468750 -0.000000 +vt 0.562500 0.250000 +vt 0.593750 0.312500 +vt 0.718750 0.375000 +vt 0.687500 0.281250 +vt 0.718750 0.312500 +vt 0.718750 0.375000 +vt 0.625000 0.406250 +vt 0.593750 0.312500 +vt 0.718750 0.406250 +vt 0.718750 0.250000 +vt 0.593750 0.281250 +vt 0.593750 0.437500 +vt 0.781250 0.062500 +vt 0.656250 -0.000000 +vt 0.656250 -0.000000 +vt 0.656250 -0.000000 +vt 0.656250 -0.000000 +vt 0.781250 0.062500 +vt 0.656250 -0.000000 +vt 0.656250 -0.000000 +vt 0.656250 -0.000000 +vt 0.656250 -0.000000 +vt 0.312500 0.500000 +vt 0.312500 0.500000 +vt 0.187500 0.546875 +vt 0.187500 0.546875 +vt 0.062500 0.500000 +vt 0.062500 0.500000 +vt 0.562500 0.250000 +vt 0.593750 0.312500 +vt 0.718750 0.375000 +vt 0.687500 0.281250 +vt 0.718750 0.312500 +vt 0.718750 0.375000 +vt 0.625000 0.406250 +vt 0.593750 0.312500 +vt 0.718750 0.406250 +vt 0.718750 0.250000 +vt 0.593750 0.281250 +vt 0.593750 0.437500 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.7071 0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +s off +f 2/1/1 4/2/1 3/3/1 +f 7/4/2 6/5/2 5/6/2 +f 11/7/2 10/8/2 9/9/2 +f 15/10/2 14/11/2 13/12/2 +f 19/13/2 18/14/2 17/15/2 +f 23/16/2 22/17/2 21/18/2 +f 27/19/1 25/20/1 26/21/1 +f 31/22/1 29/23/1 30/24/1 +f 35/25/1 33/26/1 34/27/1 +f 39/28/1 37/29/1 38/30/1 +f 17/31/3 33/32/3 19/33/3 +f 10/34/4 26/35/4 9/36/4 +f 18/37/4 34/38/4 17/39/4 +f 12/40/5 27/41/5 10/8/5 +f 20/42/5 35/43/5 18/14/5 +f 11/7/6 28/44/6 12/45/6 +f 5/46/3 4/47/3 7/48/3 +f 19/13/6 36/49/6 20/50/6 +f 13/51/3 29/52/3 15/53/3 +f 6/54/4 3/55/4 5/56/4 +f 21/57/3 37/58/3 23/59/3 +f 14/60/4 30/61/4 13/62/4 +f 8/63/5 2/64/5 6/5/5 +f 22/65/4 38/66/4 21/67/4 +f 16/68/5 31/69/5 14/11/5 +f 7/4/6 1/70/6 8/71/6 +f 24/72/5 39/73/5 22/17/5 +f 15/10/6 32/74/6 16/75/6 +f 9/76/3 25/77/3 11/78/3 +f 23/16/6 40/79/6 24/80/6 +f 149/81/5 42/82/5 141/83/5 +f 145/84/3 43/85/3 137/86/3 +f 49/87/3 157/88/3 153/89/3 +f 46/90/4 49/91/4 42/92/4 +f 48/93/1 160/94/1 152/95/1 +f 42/82/2 153/96/2 141/83/2 +f 44/97/6 52/98/6 48/99/6 +f 53/100/5 165/101/5 161/102/5 +f 45/103/1 168/104/1 148/105/1 +f 43/106/2 161/102/2 137/107/2 +f 47/108/6 53/109/6 43/110/6 +f 41/111/4 56/112/4 45/113/4 +f 61/114/3 59/115/3 57/116/3 +f 63/117/6 60/118/6 59/119/6 +f 62/120/4 57/121/4 58/122/4 +f 64/123/5 58/124/5 60/125/5 +f 61/114/1 64/123/1 63/117/1 +f 69/126/3 67/127/3 65/128/3 +f 71/129/6 68/130/6 67/131/6 +f 70/132/4 65/133/4 66/134/4 +f 72/135/5 66/136/5 68/137/5 +f 69/126/1 72/135/1 71/129/1 +f 77/138/3 75/139/3 73/140/3 +f 79/141/6 76/142/6 75/143/6 +f 78/144/4 73/145/4 74/146/4 +f 80/147/5 74/148/5 76/149/5 +f 77/138/1 80/147/1 79/141/1 +f 85/150/3 83/151/3 81/152/3 +f 87/153/6 84/154/6 83/155/6 +f 86/156/4 81/157/4 82/158/4 +f 88/159/5 82/160/5 84/161/5 +f 85/150/1 88/159/1 87/153/1 +f 93/162/3 91/163/3 89/164/3 +f 95/165/6 92/166/6 91/167/6 +f 94/168/4 89/169/4 90/170/4 +f 96/171/5 90/172/5 92/173/5 +f 93/162/1 96/171/1 95/165/1 +f 101/174/3 99/175/3 97/176/3 +f 103/177/6 100/178/6 99/179/6 +f 102/180/4 97/181/4 98/182/4 +f 104/183/5 98/184/5 100/185/5 +f 101/174/1 104/183/1 103/177/1 +f 109/186/3 107/187/3 105/188/3 +f 111/189/6 108/190/6 107/191/6 +f 110/192/4 105/193/4 106/194/4 +f 112/195/5 106/196/5 108/197/5 +f 109/186/1 112/195/1 111/189/1 +f 117/198/3 115/199/3 113/200/3 +f 119/201/6 116/202/6 115/203/6 +f 118/204/4 113/205/4 114/206/4 +f 120/207/5 114/208/5 116/209/5 +f 117/198/1 120/207/1 119/201/1 +f 125/210/3 123/211/3 121/212/3 +f 127/213/6 124/214/6 123/215/6 +f 126/216/4 121/217/4 122/218/4 +f 128/219/5 122/220/5 124/221/5 +f 125/210/1 128/219/1 127/213/1 +f 133/222/3 131/223/3 129/224/3 +f 135/225/6 132/226/6 131/227/6 +f 134/228/4 129/229/4 130/230/4 +f 136/231/5 130/232/5 132/233/5 +f 133/222/1 136/231/1 135/225/1 +f 140/234/2 54/235/2 41/236/2 +f 139/237/2 164/238/2 140/239/2 +f 138/240/2 163/241/2 139/242/2 +f 137/243/2 162/244/2 138/245/2 +f 145/84/1 55/246/1 47/247/1 +f 146/248/1 165/249/1 145/250/1 +f 147/251/1 166/252/1 146/253/1 +f 148/254/1 167/255/1 147/256/1 +f 164/257/5 56/258/5 54/235/5 +f 163/259/5 168/260/5 164/238/5 +f 162/261/5 167/262/5 163/241/5 +f 161/263/5 166/264/5 162/244/5 +f 144/265/2 50/266/2 44/267/2 +f 143/268/2 156/269/2 144/270/2 +f 142/271/2 155/272/2 143/273/2 +f 141/274/2 154/275/2 142/276/2 +f 149/81/1 51/277/1 46/278/1 +f 150/279/1 157/280/1 149/281/1 +f 151/282/1 158/283/1 150/284/1 +f 152/285/1 159/286/1 151/287/1 +f 156/288/3 52/289/3 50/290/3 +f 155/291/3 160/292/3 156/293/3 +f 154/294/3 159/295/3 155/296/3 +f 153/297/3 158/298/3 154/299/3 +f 45/103/3 140/300/3 41/301/3 +f 148/254/3 139/302/3 140/303/3 +f 147/251/3 138/304/3 139/305/3 +f 146/248/3 137/306/3 138/307/3 +f 48/93/5 144/265/5 44/267/5 +f 152/285/5 143/268/5 144/270/5 +f 151/282/5 142/271/5 143/273/5 +f 150/279/5 141/274/5 142/276/5 +f 170/308/1 171/309/1 169/310/1 +f 173/311/2 175/312/2 174/313/2 +f 170/314/5 176/315/5 172/316/5 +f 171/317/3 174/318/3 169/319/3 +f 172/320/6 173/321/6 171/317/6 +f 169/322/4 175/312/4 170/314/4 +f 179/323/1 184/324/1 180/325/1 +f 178/326/2 182/327/2 177/328/2 +f 180/325/5 183/329/5 178/326/5 +f 177/330/3 181/331/3 179/323/3 +f 186/332/1 200/333/1 191/334/1 +f 198/335/4 200/333/4 194/336/4 +f 186/337/6 192/338/6 190/339/6 +f 190/340/2 196/341/2 187/342/2 +f 192/343/5 198/335/5 189/344/5 +f 200/333/7 192/345/7 191/334/7 +f 190/340/8 198/346/8 197/347/8 +f 196/341/9 188/348/9 187/342/9 +f 186/332/10 194/349/10 193/350/10 +f 188/351/3 194/336/3 185/352/3 +f 205/353/2 207/354/2 206/355/2 +f 202/356/5 208/357/5 204/358/5 +f 203/359/3 206/355/3 201/360/3 +f 204/361/6 205/362/6 203/363/6 +f 201/364/4 207/365/4 202/366/4 +f 213/367/2 215/368/2 214/369/2 +f 210/370/5 216/371/5 212/372/5 +f 211/373/3 214/369/3 209/374/3 +f 212/375/6 213/376/6 211/377/6 +f 209/378/4 215/379/4 210/380/4 +f 217/381/2 219/382/2 218/383/2 +f 221/384/2 223/385/2 222/386/2 +f 223/387/11 227/388/11 222/389/11 +f 219/390/11 225/391/11 218/392/11 +f 225/393/3 217/394/3 218/395/3 +f 217/394/12 230/396/12 220/397/12 +f 230/396/5 219/390/5 220/397/5 +f 227/398/3 221/399/3 222/400/3 +f 221/399/12 232/401/12 224/402/12 +f 232/401/5 223/387/5 224/402/5 +f 235/403/1 240/404/1 236/405/1 +f 234/406/2 238/407/2 233/408/2 +f 236/405/5 239/409/5 234/406/5 +f 233/410/3 237/411/3 235/403/3 +f 242/412/1 256/413/1 247/414/1 +f 254/415/4 256/413/4 250/416/4 +f 242/417/6 248/418/6 246/419/6 +f 246/420/2 252/421/2 243/422/2 +f 248/423/5 254/415/5 245/424/5 +f 256/413/7 248/425/7 247/414/7 +f 246/420/8 254/426/8 253/427/8 +f 252/421/9 244/428/9 243/422/9 +f 242/412/10 250/429/10 249/430/10 +f 244/431/3 250/416/3 241/432/3 +f 2/1/1 1/70/1 4/2/1 +f 7/4/2 8/71/2 6/5/2 +f 11/7/2 12/45/2 10/8/2 +f 15/10/2 16/75/2 14/11/2 +f 19/13/2 20/50/2 18/14/2 +f 23/16/2 24/80/2 22/17/2 +f 27/19/1 28/44/1 25/20/1 +f 31/22/1 32/74/1 29/23/1 +f 35/25/1 36/49/1 33/26/1 +f 39/28/1 40/79/1 37/29/1 +f 17/31/3 34/433/3 33/32/3 +f 10/34/4 27/434/4 26/35/4 +f 18/37/4 35/435/4 34/38/4 +f 12/40/5 28/436/5 27/41/5 +f 20/42/5 36/437/5 35/43/5 +f 11/7/6 25/20/6 28/44/6 +f 5/46/3 3/438/3 4/47/3 +f 19/13/6 33/26/6 36/49/6 +f 13/51/3 30/439/3 29/52/3 +f 6/54/4 2/440/4 3/55/4 +f 21/57/3 38/441/3 37/58/3 +f 14/60/4 31/442/4 30/61/4 +f 8/63/5 1/443/5 2/64/5 +f 22/65/4 39/444/4 38/66/4 +f 16/68/5 32/445/5 31/69/5 +f 7/4/6 4/2/6 1/70/6 +f 24/72/5 40/446/5 39/73/5 +f 15/10/6 29/23/6 32/74/6 +f 9/76/3 26/447/3 25/77/3 +f 23/16/6 37/29/6 40/79/6 +f 149/81/5 46/278/5 42/82/5 +f 145/84/3 47/247/3 43/85/3 +f 49/87/3 51/277/3 157/88/3 +f 46/90/4 51/448/4 49/91/4 +f 48/93/1 52/289/1 160/94/1 +f 42/82/2 49/449/2 153/96/2 +f 44/97/6 50/450/6 52/98/6 +f 53/100/5 55/246/5 165/101/5 +f 45/103/1 56/258/1 168/104/1 +f 43/106/2 53/100/2 161/102/2 +f 47/108/6 55/451/6 53/109/6 +f 41/111/4 54/452/4 56/112/4 +f 61/114/3 63/117/3 59/115/3 +f 63/117/6 64/123/6 60/118/6 +f 62/120/4 61/114/4 57/121/4 +f 64/123/5 62/120/5 58/124/5 +f 61/114/1 62/120/1 64/123/1 +f 69/126/3 71/129/3 67/127/3 +f 71/129/6 72/135/6 68/130/6 +f 70/132/4 69/126/4 65/133/4 +f 72/135/5 70/132/5 66/136/5 +f 69/126/1 70/132/1 72/135/1 +f 77/138/3 79/141/3 75/139/3 +f 79/141/6 80/147/6 76/142/6 +f 78/144/4 77/138/4 73/145/4 +f 80/147/5 78/144/5 74/148/5 +f 77/138/1 78/144/1 80/147/1 +f 85/150/3 87/153/3 83/151/3 +f 87/153/6 88/159/6 84/154/6 +f 86/156/4 85/150/4 81/157/4 +f 88/159/5 86/156/5 82/160/5 +f 85/150/1 86/156/1 88/159/1 +f 93/162/3 95/165/3 91/163/3 +f 95/165/6 96/171/6 92/166/6 +f 94/168/4 93/162/4 89/169/4 +f 96/171/5 94/168/5 90/172/5 +f 93/162/1 94/168/1 96/171/1 +f 101/174/3 103/177/3 99/175/3 +f 103/177/6 104/183/6 100/178/6 +f 102/180/4 101/174/4 97/181/4 +f 104/183/5 102/180/5 98/184/5 +f 101/174/1 102/180/1 104/183/1 +f 109/186/3 111/189/3 107/187/3 +f 111/189/6 112/195/6 108/190/6 +f 110/192/4 109/186/4 105/193/4 +f 112/195/5 110/192/5 106/196/5 +f 109/186/1 110/192/1 112/195/1 +f 117/198/3 119/201/3 115/199/3 +f 119/201/6 120/207/6 116/202/6 +f 118/204/4 117/198/4 113/205/4 +f 120/207/5 118/204/5 114/208/5 +f 117/198/1 118/204/1 120/207/1 +f 125/210/3 127/213/3 123/211/3 +f 127/213/6 128/219/6 124/214/6 +f 126/216/4 125/210/4 121/217/4 +f 128/219/5 126/216/5 122/220/5 +f 125/210/1 126/216/1 128/219/1 +f 133/222/3 135/225/3 131/223/3 +f 135/225/6 136/231/6 132/226/6 +f 134/228/4 133/222/4 129/229/4 +f 136/231/5 134/228/5 130/232/5 +f 133/222/1 134/228/1 136/231/1 +f 140/234/2 164/257/2 54/235/2 +f 139/237/2 163/259/2 164/238/2 +f 138/240/2 162/261/2 163/241/2 +f 137/243/2 161/263/2 162/244/2 +f 145/84/1 165/101/1 55/246/1 +f 146/248/1 166/264/1 165/249/1 +f 147/251/1 167/262/1 166/252/1 +f 148/254/1 168/260/1 167/255/1 +f 164/257/5 168/104/5 56/258/5 +f 163/259/5 167/255/5 168/260/5 +f 162/261/5 166/252/5 167/262/5 +f 161/263/5 165/249/5 166/264/5 +f 144/265/2 156/453/2 50/266/2 +f 143/268/2 155/454/2 156/269/2 +f 142/271/2 154/455/2 155/272/2 +f 141/274/2 153/456/2 154/275/2 +f 149/81/1 157/88/1 51/277/1 +f 150/279/1 158/298/1 157/280/1 +f 151/282/1 159/295/1 158/283/1 +f 152/285/1 160/292/1 159/286/1 +f 156/288/3 160/94/3 52/289/3 +f 155/291/3 159/286/3 160/292/3 +f 154/294/3 158/283/3 159/295/3 +f 153/297/3 157/280/3 158/298/3 +f 45/103/3 148/105/3 140/300/3 +f 148/254/3 147/256/3 139/302/3 +f 147/251/3 146/253/3 138/304/3 +f 146/248/3 145/250/3 137/306/3 +f 48/93/5 152/95/5 144/265/5 +f 152/285/5 151/287/5 143/268/5 +f 151/282/5 150/284/5 142/271/5 +f 150/279/5 149/281/5 141/274/5 +f 170/308/1 172/457/1 171/309/1 +f 173/311/2 176/458/2 175/312/2 +f 170/314/5 175/312/5 176/315/5 +f 171/317/3 173/321/3 174/318/3 +f 172/320/6 176/459/6 173/321/6 +f 169/322/4 174/313/4 175/312/4 +f 179/323/1 181/331/1 184/324/1 +f 178/326/2 183/329/2 182/327/2 +f 180/325/5 184/324/5 183/329/5 +f 177/330/3 182/460/3 181/331/3 +f 186/332/1 193/350/1 200/333/1 +f 194/336/4 195/461/4 196/341/4 +f 196/341/4 197/347/4 198/335/4 +f 198/335/4 199/462/4 200/333/4 +f 200/333/4 193/350/4 194/336/4 +f 194/336/4 196/341/4 198/335/4 +f 190/339/6 187/463/6 188/464/6 +f 188/464/6 185/465/6 186/337/6 +f 186/337/6 191/466/6 192/338/6 +f 192/338/6 189/467/6 190/339/6 +f 190/339/6 188/464/6 186/337/6 +f 190/340/2 197/347/2 196/341/2 +f 192/343/5 199/462/5 198/335/5 +f 200/333/7 199/468/7 192/345/7 +f 190/340/8 189/469/8 198/346/8 +f 196/341/9 195/470/9 188/348/9 +f 186/332/10 185/471/10 194/349/10 +f 188/351/3 195/461/3 194/336/3 +f 205/353/2 208/472/2 207/354/2 +f 202/356/5 207/473/5 208/357/5 +f 203/359/3 205/474/3 206/355/3 +f 204/361/6 208/475/6 205/362/6 +f 201/364/4 206/476/4 207/365/4 +f 213/367/2 216/477/2 215/368/2 +f 210/370/5 215/478/5 216/371/5 +f 211/373/3 213/479/3 214/369/3 +f 212/375/6 216/480/6 213/376/6 +f 209/378/4 214/481/4 215/379/4 +f 217/381/2 220/482/2 219/382/2 +f 221/384/2 224/483/2 223/385/2 +f 223/387/11 228/484/11 227/388/11 +f 219/390/11 226/485/11 225/391/11 +f 225/393/3 229/486/3 217/394/3 +f 217/394/12 229/486/12 230/396/12 +f 230/396/5 226/485/5 219/390/5 +f 227/398/3 231/487/3 221/399/3 +f 221/399/12 231/487/12 232/401/12 +f 232/401/5 228/484/5 223/387/5 +f 235/403/1 237/411/1 240/404/1 +f 234/406/2 239/409/2 238/407/2 +f 236/405/5 240/404/5 239/409/5 +f 233/410/3 238/488/3 237/411/3 +f 242/412/1 249/430/1 256/413/1 +f 250/416/4 251/489/4 252/421/4 +f 252/421/4 253/427/4 254/415/4 +f 254/415/4 255/490/4 256/413/4 +f 256/413/4 249/430/4 250/416/4 +f 250/416/4 252/421/4 254/415/4 +f 246/419/6 243/491/6 244/492/6 +f 244/492/6 241/493/6 242/417/6 +f 242/417/6 247/494/6 248/418/6 +f 248/418/6 245/495/6 246/419/6 +f 246/419/6 244/492/6 242/417/6 +f 246/420/2 253/427/2 252/421/2 +f 248/423/5 255/490/5 254/415/5 +f 256/413/7 255/496/7 248/425/7 +f 246/420/8 245/497/8 254/426/8 +f 252/421/9 251/498/9 244/428/9 +f 242/412/10 241/499/10 250/429/10 +f 244/431/3 251/489/3 250/416/3 diff --git a/src/main/resources/assets/hbm/textures/blocks/rail_standard_buffer.png b/src/main/resources/assets/hbm/textures/blocks/rail_standard_buffer.png new file mode 100644 index 000000000..a8943aaf8 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/rail_standard_buffer.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/fluids/calcium_solution.png b/src/main/resources/assets/hbm/textures/gui/fluids/calcium_solution.png new file mode 100644 index 000000000..f1ebd5aba Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/fluids/calcium_solution.png differ