new concrete, sound fixes, additions, slag tap

This commit is contained in:
Bob 2023-05-21 19:44:35 +02:00
parent f2574fc232
commit ecedb95d58
71 changed files with 4456 additions and 2059 deletions

View File

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

View File

@ -11,6 +11,8 @@ import com.hbm.blocks.machine.*;
import com.hbm.blocks.machine.pile.*;
import com.hbm.blocks.machine.rbmk.*;
import com.hbm.blocks.network.*;
import com.hbm.blocks.rail.RailNarrowCurve;
import com.hbm.blocks.rail.RailNarrowStraight;
import com.hbm.blocks.rail.RailStandardCurve;
import com.hbm.blocks.rail.RailStandardStraight;
import com.hbm.blocks.siege.*;
@ -328,6 +330,7 @@ public class ModBlocks {
public static Block reinforced_stone;
public static Block concrete_smooth;
public static Block concrete_colored;
public static Block concrete_colored_ext;
public static Block concrete;
public static Block concrete_asbestos;
public static Block concrete_super;
@ -664,6 +667,8 @@ public class ModBlocks {
public static Block foundry_channel;
public static Block foundry_tank;
public static Block foundry_outlet;
public static Block foundry_slagtap;
public static Block slag;
public static Block machine_difurnace_off;
public static Block machine_difurnace_on;
@ -1090,6 +1095,8 @@ public class ModBlocks {
public static Block rail_highspeed;
public static Block rail_booster;
public static Block rail_narrow_straight;
public static Block rail_narrow_curve;
public static Block rail_large_straight;
public static Block rail_large_curve;
@ -1507,6 +1514,7 @@ public class ModBlocks {
reinforced_stone = new BlockGeneric(Material.rock).setBlockName("reinforced_stone").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(3000.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_stone");
concrete_smooth = new BlockRadResistant(Material.rock).setBlockName("concrete_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(4000.0F).setBlockTextureName(RefStrings.MODID + ":concrete");
concrete_colored = new BlockConcreteColored(Material.rock).setBlockName("concrete_colored").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(4000.0F).setBlockTextureName(RefStrings.MODID + ":concrete");
concrete_colored_ext = new BlockConcreteColoredExt(Material.rock).setBlockName("concrete_colored_ext").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(4000.0F).setBlockTextureName(RefStrings.MODID + ":concrete_colored_ext");
concrete = new BlockGeneric(Material.rock).setBlockName("concrete").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(4000.0F).setBlockTextureName(RefStrings.MODID + ":concrete_tile");
concrete_asbestos = new BlockGeneric(Material.rock).setBlockName("concrete_asbestos").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(4000.0F).setBlockTextureName(RefStrings.MODID + ":concrete_asbestos");
concrete_super = new BlockUberConcrete().setBlockName("concrete_super").setCreativeTab(MainRegistry.blockTab).setHardness(150.0F).setResistance(10000.0F);
@ -1780,6 +1788,8 @@ public class ModBlocks {
foundry_channel = new FoundryChannel().setBlockName("foundry_channel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire");
foundry_tank = new FoundryTank().setBlockName("foundry_tank").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire");
foundry_outlet = new FoundryOutlet().setBlockName("foundry_outlet").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire");
foundry_slagtap = new FoundrySlagtap().setBlockName("foundry_slagtap").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire");
slag = new BlockDynamicSlag().setBlockName("slag").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":slag");
machine_difurnace_off = new MachineDiFurnace(false).setBlockName("machine_difurnace_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_difurnace_on = new MachineDiFurnace(true).setBlockName("machine_difurnace_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F);
@ -2113,6 +2123,8 @@ public class ModBlocks {
rail_narrow = new RailGeneric().setBlockName("rail_narrow").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_narrow");
rail_highspeed = new RailGeneric().setMaxSpeed(1F).setFlexible(false).setBlockName("rail_highspeed").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_highspeed");
rail_booster = new RailBooster().setBlockName("rail_booster").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_booster");
rail_narrow_straight = new RailNarrowStraight().setBlockName("rail_narrow_straight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_narrow_neo");
rail_narrow_curve = new RailNarrowCurve().setBlockName("rail_narrow_curve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_narrow_neo");
rail_large_straight = new RailStandardStraight().setBlockName("rail_large_straight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":block_steel");
rail_large_curve = new RailStandardCurve().setBlockName("rail_large_curve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":block_steel");
@ -2639,6 +2651,7 @@ public class ModBlocks {
GameRegistry.registerBlock(reinforced_ducrete, ItemBlockBlastInfo.class, reinforced_ducrete.getUnlocalizedName());
GameRegistry.registerBlock(concrete_smooth, ItemBlockBlastInfo.class, concrete_smooth.getUnlocalizedName());
GameRegistry.registerBlock(concrete_colored, ItemBlockColoredConcrete.class, concrete_colored.getUnlocalizedName());
register(concrete_colored_ext);
GameRegistry.registerBlock(concrete, ItemBlockBlastInfo.class, concrete.getUnlocalizedName());
GameRegistry.registerBlock(concrete_asbestos, ItemBlockBlastInfo.class, concrete_asbestos.getUnlocalizedName());
GameRegistry.registerBlock(concrete_super, ItemBlockBlastInfo.class, concrete_super.getUnlocalizedName());
@ -2993,6 +3006,8 @@ public class ModBlocks {
register(foundry_channel);
register(foundry_tank);
register(foundry_outlet);
register(foundry_slagtap);
register(slag);
register(machine_difurnace_off);
register(machine_difurnace_on);
register(machine_difurnace_extension);
@ -3337,6 +3352,8 @@ public class ModBlocks {
GameRegistry.registerBlock(rail_narrow, ItemBlockBase.class, rail_narrow.getUnlocalizedName());
GameRegistry.registerBlock(rail_highspeed, ItemBlockBase.class, rail_highspeed.getUnlocalizedName());
GameRegistry.registerBlock(rail_booster, ItemBlockBase.class, rail_booster.getUnlocalizedName());
register(rail_narrow_straight);
register(rail_narrow_curve);
register(rail_large_straight);
register(rail_large_curve);

View File

@ -0,0 +1,35 @@
package com.hbm.blocks.generic;
import com.hbm.blocks.BlockEnumMulti;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.material.Material;
import net.minecraft.util.IIcon;
public class BlockConcreteColoredExt extends BlockEnumMulti {
public BlockConcreteColoredExt(Material mat) {
super(mat, EnumConcreteType.class, true, true);
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta) {
if(meta == EnumConcreteType.MACHINE_STRIPE.ordinal() && (side == 0 || side == 1)) {
return super.getIcon(side, EnumConcreteType.MACHINE.ordinal());
}
return super.getIcon(side, meta);
}
public enum EnumConcreteType {
MACHINE,
MACHINE_STRIPE,
INDIGO,
PURPLE,
PINK,
HAZARD
}
}

View File

@ -0,0 +1,278 @@
package com.hbm.blocks.generic;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.material.MaterialShapes;
import com.hbm.inventory.material.Mats;
import com.hbm.inventory.material.Mats.MaterialStack;
import com.hbm.inventory.material.NTMMaterial;
import com.hbm.items.machine.ItemScraps;
import com.hbm.render.icon.RGBMutatorInterpolatedComponentRemap;
import com.hbm.render.icon.TextureAtlasSpriteMutatable;
import com.hbm.util.Compat;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.stats.StatList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.IIcon;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockDynamicSlag extends BlockContainer {
private HashMap<NTMMaterial, IIcon> iconMap = new HashMap();
public BlockDynamicSlag() {
super(Material.iron);
this.useNeighborBrightness = true;
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntitySlag();
}
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister reg) {
super.registerBlockIcons(reg);
if(reg instanceof TextureMap) {
TextureMap map = (TextureMap) reg;
for(NTMMaterial mat : Mats.orderedList) {
if(mat.solidColorLight != mat.solidColorDark) {
String placeholderName = this.getTextureName() + "-" + mat.names[0];
TextureAtlasSpriteMutatable mutableIcon = new TextureAtlasSpriteMutatable(placeholderName, new RGBMutatorInterpolatedComponentRemap(0xFFFFFF, 0x505050, mat.solidColorLight, mat.solidColorDark)).setBlockAtlas();
map.setTextureEntry(placeholderName, mutableIcon);
iconMap.put(mat, mutableIcon);
}
}
}
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) {
TileEntitySlag tile = (TileEntitySlag) world.getTileEntity(x, y, z);
if(tile != null && tile.mat != null) {
IIcon override = iconMap.get(tile.mat);
if(override != null) {
return override;
}
}
return this.blockIcon;
}
@Override
@SideOnly(Side.CLIENT)
public int colorMultiplier(IBlockAccess world, int x, int y, int z) {
TileEntitySlag tile = (TileEntitySlag) world.getTileEntity(x, y, z);
if(tile != null && tile.mat != null) {
if(!iconMap.containsKey(tile.mat)) {
return tile.mat.moltenColor;
}
}
return 0xffffff;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
TileEntitySlag tile = (TileEntitySlag) world.getTileEntity(x, y, z);
if(tile != null) {
this.setBlockBounds(0F, 0F, 0F, 1F, (float) tile.amount / (float) TileEntitySlag.maxAmount, 1F);
}
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
TileEntitySlag tile = (TileEntitySlag) world.getTileEntity(x, y, z);
if(tile != null) {
this.setBlockBounds(0F, 0F, 0F, 1F, (float) tile.amount / (float) TileEntitySlag.maxAmount, 1F);
}
return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ);
}
@Override
public void updateTick(World world, int x, int y, int z, Random rand) {
TileEntity s = Compat.getTileStandard(world, x, y, z);
TileEntity b = Compat.getTileStandard(world, x, y - 1, z);
/* Error here, delete the block */
if(s == null || !(s instanceof TileEntitySlag)) {
world.setBlockToAir(x, y, z);
return;
}
TileEntitySlag self = (TileEntitySlag) s;
/* Flow down */
if(world.getBlock(x, y - 1, z).isReplaceable(world, x, y - 1, z)) {
world.setBlock(x, y - 1, z, ModBlocks.slag);
TileEntitySlag tile = (TileEntitySlag) Compat.getTileStandard(world, x, y - 1, z);
tile.mat = self.mat;
tile.amount = self.amount;
world.markBlockForUpdate(x, y - 1, z);
world.setBlockToAir(x, y, z);
return;
} else if(b instanceof TileEntitySlag) {
TileEntitySlag below = (TileEntitySlag) b;
if(below.mat == self.mat && below.amount < TileEntitySlag.maxAmount) {
int transfer = Math.min(TileEntitySlag.maxAmount - below.amount, self.amount);
below.amount += transfer;
self.amount -= transfer;
if(self.amount <= 0){
world.setBlockToAir(x, y, z);
} else {
world.markBlockForUpdate(x, y, z);
}
world.markBlockForUpdate(x, y - 1, z);
world.scheduleBlockUpdate(x, y - 1, z, ModBlocks.slag, 1);
return;
}
}
/* Flow sideways, no neighbors */
ForgeDirection[] sides = new ForgeDirection[] { ForgeDirection.NORTH, ForgeDirection.SOUTH, ForgeDirection.EAST, ForgeDirection.WEST };
int count = 0;
for(ForgeDirection dir : sides) {
int iX = x + dir.offsetX;
int iZ = z + dir.offsetZ;
if(world.getBlock(iX, y, iZ).isReplaceable(world, iX, y, iZ)) {
count++;
}
}
if(self.amount >= self.maxAmount / 5 && count > 0) {
int toSpread = Math.max(self.amount / (count * 2), 1);
for(ForgeDirection dir : sides) {
int iX = x + dir.offsetX;
int iZ = z + dir.offsetZ;
if(world.getBlock(iX, y, iZ).isReplaceable(world, iX, y, iZ)) {
world.setBlock(iX, y, iZ, ModBlocks.slag);
TileEntitySlag tile = (TileEntitySlag) Compat.getTileStandard(world, iX, y, iZ);
world.markBlockForUpdate(iX, y, iZ);
world.scheduleBlockUpdate(iX, y, iZ, ModBlocks.slag, 1);
tile.mat = self.mat;
tile.amount = toSpread;
self.amount -= toSpread;
world.markBlockForUpdate(x, y, z);
}
}
}
}
@Override
public void onBlockHarvested(World world, int x, int y, int z, int meta, EntityPlayer player) {
if(!player.capabilities.isCreativeMode) {
harvesters.set(player);
this.dropBlockAsItem(world, x, y, z, meta, 0);
harvesters.set(null);
}
}
@Override
public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int meta) {
player.addStat(StatList.mineBlockStatArray[getIdFromBlock(this)], 1);
player.addExhaustion(0.025F);
}
@Override
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
ArrayList<ItemStack> ret = new ArrayList<ItemStack>();
TileEntitySlag tile = (TileEntitySlag) world.getTileEntity(x, y, z);
if(tile != null && tile.mat != null && tile.amount > 0) {
ret.add(ItemScraps.create(new MaterialStack(tile.mat, tile.amount)));
}
return ret;
}
@Override
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z, EntityPlayer player) {
TileEntitySlag tile = (TileEntitySlag) world.getTileEntity(x, y, z);
if(tile != null) {
return ItemScraps.create(new MaterialStack(tile.mat, tile.amount));
}
return super.getPickBlock(target, world, x, y, z, player);
}
public static class TileEntitySlag extends TileEntity {
public NTMMaterial mat;
public int amount;
public static int maxAmount = MaterialShapes.BLOCK.q(16);
@Override
public boolean canUpdate() {
return false;
}
@Override
public Packet getDescriptionPacket() {
NBTTagCompound nbt = new NBTTagCompound();
this.writeToNBT(nbt);
return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt);
}
@Override
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
this.readFromNBT(pkt.func_148857_g());
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.mat = Mats.matById.get(nbt.getInteger("mat"));
this.amount = nbt.getInteger("amount");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
if(this.mat != null) nbt.setInteger("mat", this.mat.id);
nbt.setInteger("amount", this.amount);
}
}
}

View File

@ -131,7 +131,7 @@ public class FoundryChannel extends BlockContainer implements ICrucibleAcceptor
if(b == ModBlocks.foundry_outlet && meta == dir.ordinal())
return true;
return b == ModBlocks.foundry_channel || b == ModBlocks.foundry_mold;
return b == ModBlocks.foundry_channel || b == ModBlocks.foundry_mold || b == ModBlocks.foundry_slagtap;
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();

View File

@ -167,12 +167,12 @@ public class FoundryOutlet extends BlockContainer implements ICrucibleAcceptor,
@Override
public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) {
return ((TileEntityFoundryOutlet) world.getTileEntity(x, y, z)).canAcceptPartialFlow(world, x, y, z, side, stack);
return ((ICrucibleAcceptor) world.getTileEntity(x, y, z)).canAcceptPartialFlow(world, x, y, z, side, stack);
}
@Override
public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) {
return ((TileEntityFoundryOutlet) world.getTileEntity(x, y, z)).flow(world, x, y, z, side, stack);
return ((ICrucibleAcceptor) world.getTileEntity(x, y, z)).flow(world, x, y, z, side, stack);
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();

View File

@ -0,0 +1,35 @@
package com.hbm.blocks.machine;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.machine.TileEntityFoundrySlagtap;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
public class FoundrySlagtap extends FoundryOutlet {
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
super.registerBlockIcons(iconRegister);
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":foundry_slagtap_top");
this.iconSide = iconRegister.registerIcon(RefStrings.MODID + ":foundry_slagtap_side");
this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":foundry_slagtap_bottom");
this.iconInner = iconRegister.registerIcon(RefStrings.MODID + ":foundry_slagtap_inner");
this.iconFront = iconRegister.registerIcon(RefStrings.MODID + ":foundry_slagtap_front");
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityFoundrySlagtap();
}
@Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { return false; }
@Override public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { return false; }
@Override public void printHook(Pre event, World world, int x, int y, int z) { }
}

View File

@ -25,7 +25,8 @@ public interface IRailNTM {
public TrackGauge getGauge(World world, int x, int y, int z);
public static enum TrackGauge {
STANDARD //roughly 1.5m
STANDARD, //roughly 1.5m
NARROW //roughly 0.75m
}
/** A wrapper for all relevant info required when leaving a rail */

View File

@ -0,0 +1,144 @@
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.AxisAlignedBB;
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 RailNarrowCurve extends BlockDummyable implements IRailNTM {
public RailNarrowCurve() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
return null;
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
@Override
public int getRenderType() {
return renderID;
}
@Override
public Vec3 getSnappingPos(World world, int x, int y, int z, double trainX, double trainY, double trainZ) {
return snapAndMove(world, x, y, z, trainX, trainY, trainZ, 0, 0, 0, 0, new RailContext());
}
@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) {
return snapAndMove(world, x, y, z, trainX, trainY, trainZ, motionX, motionY, motionZ, speed, info);
}
/* 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) {
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);
double turnRadius = 4.5D;
Vec3 vec = Vec3.createVectorHelper(trainX, trainY, trainZ);
double axisX = cX + 0.5 + dir.offsetX * 0.5 + rot.offsetX * turnRadius;
double axisZ = cZ + 0.5 + dir.offsetZ * 0.5 + rot.offsetZ * turnRadius;
Vec3 dist = Vec3.createVectorHelper(vec.xCoord - axisX, 0, vec.zCoord - axisZ);
dist = dist.normalize();
dist.xCoord *= turnRadius;
dist.zCoord *= turnRadius;
double moveAngle = Math.atan2(motionX, motionZ) * 180D / Math.PI + 90;
if(speed == 0) {
info.dist(0).pos(new BlockPos(x, y, z)).yaw((float) moveAngle);
return Vec3.createVectorHelper(axisX + dist.xCoord, y, axisZ + dist.zCoord);
}
double angleDeg = Math.atan2(dist.xCoord, dist.zCoord) * 180D / Math.PI + 90;
if(dir == Library.NEG_X) angleDeg -= 90;
if(dir == Library.POS_X) angleDeg += 90;
if(dir == Library.POS_Z) angleDeg += 180;
angleDeg = MathHelper.wrapAngleTo180_double(angleDeg);
double length90Deg = turnRadius * Math.PI / 2D;
double angularChange = speed / length90Deg * 90D;
ForgeDirection moveDir = ForgeDirection.UNKNOWN;
if(Math.abs(motionX) > Math.abs(motionZ)) {
moveDir = motionX > 0 ? Library.POS_X : Library.NEG_X;
} else {
moveDir = motionZ > 0 ? Library.POS_Z : Library.NEG_Z;
}
if(moveDir == dir || moveDir == rot.getOpposite()) {
angularChange *= -1;
}
double effAngle = angleDeg + angularChange;
moveAngle += angularChange;
if(effAngle > 90) {
double angleOvershoot = effAngle - 90D;
moveAngle -= angleOvershoot;
double lengthOvershoot = angleOvershoot * length90Deg / 90D;
info.dist(lengthOvershoot * Math.signum(speed * angularChange)).pos(new BlockPos(cX - dir.offsetX * 4 + rot.offsetX * 5, y, cZ - dir.offsetZ * 4 + rot.offsetZ * 5)).yaw((float) moveAngle);
return Vec3.createVectorHelper(axisX - dir.offsetX * turnRadius, y, axisZ - dir.offsetZ * turnRadius);
}
if(effAngle < 0) {
double angleOvershoot = -effAngle;
moveAngle -= angleOvershoot;
double lengthOvershoot = angleOvershoot * length90Deg / 90D;
info.dist(-lengthOvershoot * Math.signum(speed * angularChange)).pos(new BlockPos(cX + dir.offsetX , y, cZ + dir.offsetZ)).yaw((float) moveAngle);
return Vec3.createVectorHelper(axisX - rot.offsetX * turnRadius, y, axisZ -rot.offsetZ * turnRadius);
}
double radianChange = angularChange * Math.PI / 180D;
dist.rotateAroundY((float) radianChange);
return Vec3.createVectorHelper(axisX + dist.xCoord, y, axisZ + dist.zCoord);
}
@Override
public TrackGauge getGauge(World world, int x, int y, int z) {
return TrackGauge.NARROW;
}
@Override
public int[] getDimensions() {
return new int[] {0, 0, 4, 0, 4, 0};
}
@Override
public int getOffset() {
return 0;
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
this.setBlockBounds(0F, 0F, 0F, 1F, 0.125F, 1F);
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
this.setBlockBounds(0F, 0F, 0F, 1F, 0.125F, 1F);
return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ);
}
}

View File

@ -0,0 +1,115 @@
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.AxisAlignedBB;
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 RailNarrowStraight extends BlockDummyable implements IRailNTM {
public RailNarrowStraight() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return null;
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
@Override
public int getRenderType() {
return renderID;
}
@Override
public int[] getDimensions() {
return new int[] {0, 0, 2, 2, 0, 0};
}
@Override
public int getOffset() {
return 2;
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
this.setBlockBounds(0F, 0F, 0F, 1F, 0.125F, 1F);
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
this.setBlockBounds(0F, 0F, 0F, 1F, 0.125F, 1F);
return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ);
}
@Override
public Vec3 getSnappingPos(World world, int x, int y, int z, double trainX, double trainY, double trainZ) {
return snapAndMove(world, x, y, z, trainX, trainY, trainZ, 0, 0, 0, 0, new RailContext());
}
@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) {
return snapAndMove(world, x, y, z, trainX, trainY, trainZ, motionX, motionY, motionZ, speed, info);
}
/* 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) {
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);
Vec3 vec = Vec3.createVectorHelper(trainX, trainY, trainZ);
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;
vec.zCoord = cZ + 0.5;
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;
vec.yCoord = y;
vec.zCoord = MathHelper.clamp_double(targetZ, cZ - 2,cZ + 3);
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
public TrackGauge getGauge(World world, int x, int y, int z) {
return TrackGauge.NARROW;
}
}

View File

@ -50,11 +50,12 @@ public class RailStandardCurve extends BlockDummyable implements IRailNTM {
ForgeDirection dir = ForgeDirection.getOrientation(meta);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
double turnRadius = 4.5D;
double turnRadius = 4D;
double axisDist = 4.5D;
Vec3 vec = Vec3.createVectorHelper(trainX, trainY, trainZ);
double axisX = cX + 0.5 + dir.offsetX * 0.5 + rot.offsetX * turnRadius;
double axisZ = cZ + 0.5 + dir.offsetZ * 0.5 + rot.offsetZ * turnRadius;
double axisX = cX + 0.5 + dir.offsetX * 0.5 + rot.offsetX * axisDist;
double axisZ = cZ + 0.5 + dir.offsetZ * 0.5 + rot.offsetZ * axisDist;
Vec3 dist = Vec3.createVectorHelper(vec.xCoord - axisX, 0, vec.zCoord - axisZ);
dist = dist.normalize();

View File

@ -31,7 +31,7 @@ public class RailStandardStraight extends BlockDummyable implements IRailNTM {
@Override
public int[] getDimensions() {
return new int[] {0, 0, 2, 2, 0, 0};
return new int[] {0, 0, 2, 2, 1, 0};
}
@Override
@ -69,6 +69,7 @@ public class RailStandardStraight extends BlockDummyable implements IRailNTM {
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);
@ -87,7 +88,7 @@ public class RailStandardStraight extends BlockDummyable implements IRailNTM {
}
vec.xCoord = MathHelper.clamp_double(targetX, cX - 2, cX + 3);
vec.yCoord = y;
vec.zCoord = cZ + 0.5;
vec.zCoord = cZ + 0.5 + rot.offsetZ * 0.5;
info.dist(Math.abs(targetX - vec.xCoord) * Math.signum(speed));
info.pos(new BlockPos(cX + (motionX * speed > 0 ? 3 : -3), y, cZ));
} else {
@ -99,7 +100,7 @@ public class RailStandardStraight extends BlockDummyable implements IRailNTM {
targetZ -= speed;
info.yaw(180F);
}
vec.xCoord = cX + 0.5;
vec.xCoord = cX + 0.5 + rot.offsetX * 0.5;
vec.yCoord = y;
vec.zCoord = MathHelper.clamp_double(targetZ, cZ - 2,cZ + 3);
info.dist(Math.abs(targetZ - vec.zCoord) * Math.signum(speed));

View File

@ -452,6 +452,7 @@ public class OreDictManager {
ANY_HIGHEXPLOSIVE .ingot(ball_tnt).ingot(ball_tatb);
ANY_CONCRETE .any(concrete, concrete_smooth, concrete_asbestos, ducrete, ducrete_smooth);
for(int i = 0; i < 16; i++) { ANY_CONCRETE.any(new ItemStack(ModBlocks.concrete_colored, 1, i)); }
for(int i = 0; i < 16; i++) { ANY_CONCRETE.any(new ItemStack(ModBlocks.concrete_colored_ext, 1, i)); }
ANY_COKE .gem(fromAll(coke, EnumCokeType.class)).block(fromAll(block_coke, EnumCokeType.class));
ANY_BISMOID .ingot(ingot_bismuth, ingot_arsenic).nugget(nugget_bismuth, nugget_arsenic).block(block_bismuth);

View File

@ -229,14 +229,11 @@ public class ChemplantRecipes extends SerializableRecipe {
.outputFluids(new FluidStack(Fluids.XENON, 50)));
recipes.add(new ChemRecipe(61, "SATURN", 60)
.inputItems(
new ComparableStack(ModItems.powder_dura_steel),
new OreDictStack(P_RED.dust()))
.inputFluids(
new FluidStack(Fluids.ACID, 100),
(GeneralConfig.enableLBSM && GeneralConfig.enableLBSMSimpleChemsitry) ?
new FluidStack(Fluids.WATER, 200) :
new FluidStack(Fluids.MERCURY, 50))
.outputItems(new ItemStack(ModItems.ingot_saturnite, 2)));
new OreDictStack(DURA.dust(), 2),
new OreDictStack(CU.dust(), 1),
new OreDictStack(COAL.dust(), 1))
.inputFluids(new FluidStack(Fluids.SULFURIC_ACID, 100))
.outputItems(new ItemStack(ModItems.ingot_saturnite, 4)));
recipes.add(new ChemRecipe(62, "BALEFIRE", 100)
.inputItems(new ComparableStack(ModItems.egg_balefire_shard))
.inputFluids(new FluidStack(Fluids.KEROSENE, 6000))

View File

@ -99,7 +99,7 @@ public class ItemAutogen extends Item {
NTMMaterial mat = Mats.matById.get(stack.getItemDamage());
if(mat != null) {
return mat.solidColorLight;
return mat.moltenColor;
}
return 0xffffff;

View File

@ -59,7 +59,7 @@ public class ItemGunGauss extends ItemGunBase {
public void startActionClient(ItemStack stack, World world, EntityPlayer player, boolean main) {
if(!main && getItemWear(stack) < mainConfig.durability && player.inventory.hasItem(ModItems.gun_xvl1456_ammo)) {
chargeLoop = MainRegistry.proxy.getLoopedSound("hbm:weapon.tauChargeLoop2", (float)player.posX, (float)player.posY, (float)player.posZ, 1.0F, 0.75F);
chargeLoop = MainRegistry.proxy.getLoopedSound("hbm:weapon.tauChargeLoop2", (float)player.posX, (float)player.posY, (float)player.posZ, 1.0F, 5F, 0.75F);
world.playSoundAtEntity(player, "hbm:weapon.tauChargeLoop2", 1.0F, 0.75F);
if(chargeLoop != null) {
@ -120,7 +120,7 @@ public class ItemGunGauss extends ItemGunBase {
public AudioWrapper rebootAudio(AudioWrapper wrapper, EntityPlayer player) {
wrapper.stopSound();
AudioWrapper audio = MainRegistry.proxy.getLoopedSound("hbm:weapon.tauChargeLoop2", (float)player.posX, (float)player.posY, (float)player.posZ, wrapper.getVolume(), wrapper.getPitch());
AudioWrapper audio = MainRegistry.proxy.getLoopedSound("hbm:weapon.tauChargeLoop2", (float)player.posX, (float)player.posY, (float)player.posZ, wrapper.getVolume(), wrapper.getRange(), wrapper.getPitch());
audio.startSound();
return audio;
}

View File

@ -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 (4592)";
public static final String VERSION = "1.0.27 BETA (4606)";
//HBM's Beta Naming Convention:
//V T (X)
//V -> next release version

View File

@ -783,6 +783,9 @@ public class ClientProxy extends ServerProxy {
RenderingRegistry.registerBlockHandler(new RenderFoundryTank());
RenderingRegistry.registerBlockHandler(new RenderFoundryOutlet());
RenderingRegistry.registerBlockHandler(new RenderNarrowStraightRail());
RenderingRegistry.registerBlockHandler(new RenderNarrowCurveRail());
RenderingRegistry.registerBlockHandler(new RenderBlockRotated(ModBlocks.charge_dynamite.getRenderType(), ResourceManager.charge_dynamite));
RenderingRegistry.registerBlockHandler(new RenderBlockRotated(ModBlocks.charge_c4.getRenderType(), ResourceManager.charge_c4));
@ -1875,13 +1878,23 @@ public class ClientProxy extends ServerProxy {
}
@Override
public AudioWrapper getLoopedSound(String sound, float x, float y, float z, float volume, float pitch) {
public AudioWrapper getLoopedSound(String sound, float x, float y, float z, float volume, float range, float pitch) {
AudioWrapperClient audio = new AudioWrapperClient(new ResourceLocation(sound));
audio.updatePosition(x, y, z);
audio.updateVolume(volume);
audio.updateRange(range);
return audio;
}
@Override
public AudioWrapper getLoopedSound(String sound, float x, float y, float z, float volume, float range, float pitch, int keepAlive) {
AudioWrapper audio = getLoopedSound(sound, x, y, z, volume, range, pitch);
audio.setKeepAlive(keepAlive);
return audio;
}
/** Only used for doors */
@Override
public AudioWrapper getLoopedSoundStartStop(World world, String sound, String start, String stop, float x, float y, float z, float volume, float pitch) {
AudioWrapperClientStartStop audio = new AudioWrapperClientStartStop(world, sound == null ? null : new ResourceLocation(sound), start, stop, volume * 5);

View File

@ -5,6 +5,7 @@ import java.util.List;
import com.hbm.blocks.BlockEnums.DecoCabinetEnum;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockConcreteColoredExt.EnumConcreteType;
import com.hbm.blocks.generic.BlockGenericStairs;
import com.hbm.blocks.generic.BlockMultiSlab;
import com.hbm.blocks.generic.BlockNTMFlower.EnumFlowerType;
@ -406,9 +407,16 @@ public class CraftingManager {
for(int i = 0; i < 16; i++) {
String dyeName = "dye" + dyes[15 - i];
addRecipeAuto(new ItemStack(ModBlocks.concrete_colored, 8, i), new Object[] { "CCC", "CDC", "CCC", 'C', ModBlocks.concrete_smooth, 'D', dyeName });
addRecipeAuto(new ItemStack(ModBlocks.concrete_colored, 8, i), new Object[] { "CCC", "CDC", "CCC", 'C', ModBlocks.concrete_colored, 'D', dyeName });
}
addShapelessAuto(new ItemStack(ModBlocks.concrete_smooth, 1), new Object[] { ModBlocks.concrete_colored });
addShapelessAuto(new ItemStack(ModBlocks.concrete_smooth, 1), new Object[] { ModBlocks.concrete_colored_ext });
addRecipeAuto(new ItemStack(ModBlocks.concrete_colored_ext, 6, EnumConcreteType.MACHINE.ordinal()), new Object[] { "CCC", "1 2", "CCC", 'C', ModBlocks.concrete_smooth, '1', KEY_BROWN, '2', KEY_GRAY });
addRecipeAuto(new ItemStack(ModBlocks.concrete_colored_ext, 6, EnumConcreteType.MACHINE_STRIPE.ordinal()), new Object[] { "CCC", "1 2", "CCC", 'C', ModBlocks.concrete_smooth, '1', KEY_BROWN, '2', KEY_BLACK });
addRecipeAuto(new ItemStack(ModBlocks.concrete_colored_ext, 6, EnumConcreteType.INDIGO.ordinal()), new Object[] { "CCC", "1 2", "CCC", 'C', ModBlocks.concrete_smooth, '1', KEY_BLUE, '2', KEY_PURPLE });
addRecipeAuto(new ItemStack(ModBlocks.concrete_colored_ext, 6, EnumConcreteType.PURPLE.ordinal()), new Object[] { "CCC", "1 2", "CCC", 'C', ModBlocks.concrete_smooth, '1', KEY_PURPLE, '2', KEY_PURPLE });
addRecipeAuto(new ItemStack(ModBlocks.concrete_colored_ext, 6, EnumConcreteType.PINK.ordinal()), new Object[] { "CCC", "1 2", "CCC", 'C', ModBlocks.concrete_smooth, '1', KEY_PINK, '2', KEY_RED });
addRecipeAuto(new ItemStack(ModBlocks.concrete_colored_ext, 6, EnumConcreteType.HAZARD.ordinal()), new Object[] { "CCC", "1 2", "CCC", 'C', ModBlocks.concrete_smooth, '1', KEY_YELLOW, '2', KEY_BLACK });
addRecipeAuto(new ItemStack(ModBlocks.gneiss_tile, 4), new Object[] { "CC", "CC", 'C', ModBlocks.stone_gneiss });
addRecipeAuto(new ItemStack(ModBlocks.gneiss_brick, 4), new Object[] { "CC", "CC", 'C', ModBlocks.gneiss_tile });
@ -961,6 +969,7 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModBlocks.foundry_channel, 4), new Object[] { "B B", " S ", 'B', ModItems.ingot_firebrick, 'S', Blocks.stone_slab });
addRecipeAuto(new ItemStack(ModBlocks.foundry_tank), new Object[] { "B B", "I I", "BSB", 'B', ModItems.ingot_firebrick, 'I', STEEL.ingot(), 'S', Blocks.stone_slab });
addShapelessAuto(new ItemStack(ModBlocks.foundry_outlet), new Object[] { ModBlocks.foundry_channel, STEEL.plate() });
addShapelessAuto(new ItemStack(ModBlocks.foundry_slagtap), new Object[] { ModBlocks.foundry_channel, Blocks.stonebrick });
addRecipeAuto(new ItemStack(ModItems.mold_base), new Object[] { " B ", "BIB", " B ", 'B', ModItems.ingot_firebrick, 'I', IRON.ingot() });
addRecipeAuto(new ItemStack(ModBlocks.brick_fire), new Object[] { "BB", "BB", 'B', ModItems.ingot_firebrick });
addShapelessAuto(new ItemStack(ModItems.ingot_firebrick, 4), new Object[] { ModBlocks.brick_fire });

View File

@ -129,7 +129,7 @@ public class ResourceManager {
public static final IModelCustom assemfac = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assemfac.obj"));
//Chemplant
public static final IModelCustom chemplant_body = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_body.obj"));
public static final IModelCustom chemplant_body = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_body.obj"));
public static final IModelCustom chemplant_spinner = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_spinner.obj"));
public static final IModelCustom chemplant_piston = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_piston.obj"));
public static final IModelCustom chemplant_fluid = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/chemplant_new_fluid.hmf"));
@ -1327,6 +1327,8 @@ public class ResourceManager {
public static final IModelCustom pipe_neo = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/pipe_neo.obj"));
public static final IModelCustom difurnace_extension = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/difurnace_extension.obj"));
public static final IModelCustom splitter = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/splitter.obj"));
public static final IModelCustom rail_narrow_straight = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_narrow.obj"));
public static final IModelCustom rail_narrow_curve = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_narrow_bend.obj"));
public static final IModelCustom charge_dynamite = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/charge_dynamite.obj"));
public static final IModelCustom charge_c4 = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/charge_c4.obj"));

View File

@ -41,7 +41,8 @@ public class ServerProxy {
public void registerMissileItems() { }
public AudioWrapper getLoopedSound(String sound, float x, float y, float z, float volume, float pitch) { return null; }
public AudioWrapper getLoopedSound(String sound, float x, float y, float z, float volume, float range, float pitch) { return null; }
public AudioWrapper getLoopedSound(String sound, float x, float y, float z, float volume, float range, float pitch, int keepAlive) { return null; }
public AudioWrapper getLoopedSoundStartStop(World world, String sound, String start, String stop, float x, float y, float z, float volume, float pitch) { return null; }
public void playSound(String sound, Object data) { }

View File

@ -10,6 +10,7 @@ import net.minecraft.block.Block;
import net.minecraft.client.renderer.EntityRenderer;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
public class RenderFoundryOutlet implements ISimpleBlockRenderingHandler {
@ -82,7 +83,8 @@ public class RenderFoundryOutlet implements ISimpleBlockRenderingHandler {
FoundryOutlet outlet = (FoundryOutlet) block;
int meta = world.getBlockMetadata(x, y, z);
TileEntityFoundryOutlet tile = (TileEntityFoundryOutlet) world.getTileEntity(x, y, z);
TileEntity tile = world.getTileEntity(x, y, z);
TileEntityFoundryOutlet tileOutlet = tile instanceof TileEntityFoundryOutlet ? (TileEntityFoundryOutlet) tile : null;
int brightness = block.getMixedBrightnessForBlock(world, x, y, z);
tessellator.setBrightness(brightness);
@ -105,13 +107,13 @@ public class RenderFoundryOutlet implements ISimpleBlockRenderingHandler {
renderer.renderFaceXPos(block, x, y, z, outlet.iconFront);
renderer.renderFaceXNeg(block, x, y, z, outlet.iconFront);
if(tile.filter != null) {
if(tileOutlet != null && tileOutlet.filter != null) {
renderer.setRenderBounds(0.96875D, 0.0625, 0.375D, 0.96875D, top, 0.625D);
renderer.renderFaceXPos(block, x, y, z, outlet.iconFilter);
renderer.renderFaceXNeg(block, x, y, z, outlet.iconFilter);
}
if(tile.isClosed()) {
if(tileOutlet != null && tileOutlet.isClosed()) {
renderer.setRenderBounds(0.9375D, 0.0625, 0.375D, 0.9375D, top, 0.625D);
renderer.renderFaceXPos(block, x, y, z, outlet.iconLock);
renderer.renderFaceXNeg(block, x, y, z, outlet.iconLock);
@ -136,13 +138,13 @@ public class RenderFoundryOutlet implements ISimpleBlockRenderingHandler {
renderer.renderFaceXPos(block, x, y, z, outlet.iconFront);
renderer.renderFaceXNeg(block, x, y, z, outlet.iconFront);
if(tile.filter != null) {
if(tileOutlet != null && tileOutlet.filter != null) {
renderer.setRenderBounds(0.03125D, 0.0625, 0.375D, 0.03125D, top, 0.625D);
renderer.renderFaceXPos(block, x, y, z, outlet.iconFilter);
renderer.renderFaceXNeg(block, x, y, z, outlet.iconFilter);
}
if(tile.isClosed()) {
if(tileOutlet != null && tileOutlet.isClosed()) {
renderer.setRenderBounds(0.0625D, 0.0625, 0.375D, 0.0625D, top, 0.625D);
renderer.renderFaceXPos(block, x, y, z, outlet.iconLock);
renderer.renderFaceXNeg(block, x, y, z, outlet.iconLock);
@ -167,13 +169,13 @@ public class RenderFoundryOutlet implements ISimpleBlockRenderingHandler {
renderer.renderFaceZPos(block, x, y, z, outlet.iconFront);
renderer.renderFaceZNeg(block, x, y, z, outlet.iconFront);
if(tile.filter != null) {
if(tileOutlet != null && tileOutlet.filter != null) {
renderer.setRenderBounds(0.375D, 0.0625, 0.96875D, 0.625D, top, 0.96875D);
renderer.renderFaceZPos(block, x, y, z, outlet.iconFilter);
renderer.renderFaceZNeg(block, x, y, z, outlet.iconFilter);
}
if(tile.isClosed()) {
if(tileOutlet != null && tileOutlet.isClosed()) {
renderer.setRenderBounds(0.375D, 0.0625, 0.9375D, 0.625D, top, 0.9375D);
renderer.renderFaceZPos(block, x, y, z, outlet.iconLock);
renderer.renderFaceZNeg(block, x, y, z, outlet.iconLock);
@ -198,13 +200,13 @@ public class RenderFoundryOutlet implements ISimpleBlockRenderingHandler {
renderer.renderFaceZPos(block, x, y, z, outlet.iconFront);
renderer.renderFaceZNeg(block, x, y, z, outlet.iconFront);
if(tile.filter != null) {
if(tileOutlet != null && tileOutlet.filter != null) {
renderer.setRenderBounds(0.375D, 0.0625D, 0.03125, 0.625D, top, 0.03125D);
renderer.renderFaceZPos(block, x, y, z, outlet.iconFilter);
renderer.renderFaceZNeg(block, x, y, z, outlet.iconFilter);
}
if(tile.isClosed()) {
if(tileOutlet != null && tileOutlet.isClosed()) {
renderer.setRenderBounds(0.375D, 0.0625, 0.0625D, 0.625D, top, 0.0625D);
renderer.renderFaceZPos(block, x, y, z, outlet.iconLock);
renderer.renderFaceZNeg(block, x, y, z, outlet.iconLock);

View File

@ -0,0 +1,69 @@
package com.hbm.render.block;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.rail.RailNarrowCurve;
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 RenderNarrowCurveRail implements ISimpleBlockRenderingHandler {
@Override
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
GL11.glPushMatrix();
Tessellator tessellator = Tessellator.instance;
GL11.glScaled(0.2, 0.2, 0.2);
GL11.glTranslated(2.5, -0.0625, -1.5);
tessellator.startDrawingQuads();
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_narrow_curve, 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 = 90F / 180F * (float) Math.PI;
if(meta == 14)
rotation = 180F / 180F * (float) Math.PI;
if(meta == 13)
rotation = 270F / 180F * (float) Math.PI;
tessellator.addTranslation(x + 0.5F, y, z + 0.5F);
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_narrow_curve, block.getIcon(1, 0), tessellator, rotation, true);
tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F);
return true;
}
@Override
public boolean shouldRender3DInInventory(int modelId) {
return true;
}
@Override
public int getRenderId() {
return RailNarrowCurve.renderID;
}
}

View File

@ -0,0 +1,62 @@
package com.hbm.render.block;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.rail.RailNarrowStraight;
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 RenderNarrowStraightRail 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);
tessellator.startDrawingQuads();
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_narrow_straight, 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) {
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
tessellator.setColorOpaque_F(1, 1, 1);
int meta = world.getBlockMetadata(x, y, z);
float rotation = 0;
if(meta == 2 || meta == 3 || meta == 12 || meta == 13)
rotation = 90F / 180F * (float) Math.PI;
tessellator.addTranslation(x + 0.5F, y, z + 0.5F);
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_narrow_straight, block.getIcon(1, 0), tessellator, rotation, true);
tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F);
return true;
}
@Override
public boolean shouldRender3DInInventory(int modelId) {
return true;
}
@Override
public int getRenderId() {
return RailNarrowStraight.renderID;
}
}

View File

@ -52,7 +52,8 @@ public class TextureAtlasSpriteMutatable extends TextureAtlasSprite {
if(mutator != null) {
for(int i = 0; i < frames.length; i++) {
BufferedImage frame = frames[i];
mutator.mutate(frame, i, frames.length);
if(frame != null) mutator.mutate(frame, i, frames.length);
}
}

View File

@ -257,7 +257,9 @@ public class ItemRenderLibrary {
}
public void renderCommon() {
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glShadeModel(GL11.GL_SMOOTH);
bindTexture(ResourceManager.chemplant_body_tex); ResourceManager.chemplant_body.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
bindTexture(ResourceManager.chemplant_piston_tex); ResourceManager.chemplant_piston.renderAll();
bindTexture(ResourceManager.chemplant_spinner_tex);
GL11.glTranslated(-0.625, 0, 0.625);

View File

@ -42,7 +42,9 @@ public class RenderChemplant extends TileEntitySpecialRenderer {
bindTexture(ResourceManager.chemplant_body_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.chemplant_body.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glPopMatrix();

View File

@ -11,10 +11,9 @@ import net.minecraft.tileentity.TileEntity;
public class RenderMicrowave extends TileEntitySpecialRenderer {
@Override
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f)
{
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) {
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5D, y - 0.75, z + 0.5D);
GL11.glTranslated(x + 0.5D, y - 0.785, z + 0.5D);
GL11.glEnable(GL11.GL_LIGHTING);
switch(tileEntity.getBlockMetadata()) {
@ -23,7 +22,7 @@ public class RenderMicrowave extends TileEntitySpecialRenderer {
case 3: GL11.glRotatef(180, 0F, 1F, 0F); break;
case 5: GL11.glRotatef(270, 0F, 1F, 0F); break;
}
GL11.glTranslated(-0.5D, 0.0D, 0.5D);
GL11.glTranslated(-0.5D, 0.0D, 0.65D);
TileEntityMicrowave mic = (TileEntityMicrowave) tileEntity;

View File

@ -11,13 +11,17 @@ import net.minecraft.util.ResourceLocation;
@SideOnly(Side.CLIENT)
public class AudioDynamic extends MovingSound {
public float intendedVolume;
public float maxVolume = 1;
public float range;
public int keepAlive;
public int timeSinceKA;;
public boolean shouldExpire = false;;
protected AudioDynamic(ResourceLocation loc) {
super(loc);
this.repeat = true;
this.field_147666_i = ISound.AttenuationType.LINEAR;
this.intendedVolume = 10;
this.field_147666_i = ISound.AttenuationType.NONE;
this.range = 10;
}
public void setPosition(float x, float y, float z) {
@ -34,9 +38,18 @@ public class AudioDynamic extends MovingSound {
if(player != null) {
f = (float)Math.sqrt(Math.pow(xPosF - player.posX, 2) + Math.pow(yPosF - player.posY, 2) + Math.pow(zPosF - player.posZ, 2));
volume = func(f, intendedVolume);
volume = func(f);
} else {
volume = intendedVolume;
volume = maxVolume;
}
if(this.shouldExpire) {
if(this.timeSinceKA > this.keepAlive) {
this.stop();
}
this.timeSinceKA++;
}
}
@ -49,15 +62,28 @@ public class AudioDynamic extends MovingSound {
}
public void setVolume(float volume) {
this.intendedVolume = volume;
this.volume = volume;
}
public void setRange(float range) {
this.range = range;
}
public void setKeepAlive(int keepAlive) {
this.keepAlive = keepAlive;
this.shouldExpire = true;
}
public void keepAlive() {
this.timeSinceKA = 0;
}
public void setPitch(float pitch) {
this.field_147663_c = pitch;
}
public float func(float f, float v) {
return (f / v) * -2 + 2;
public float func(float dist) {
return (dist / range) * -maxVolume + maxVolume;
}
public boolean isPlaying() {

View File

@ -2,13 +2,18 @@ package com.hbm.sound;
public class AudioWrapper {
public void setKeepAlive(int keepAlive) { }
public void keepAlive() { }
public void updatePosition(float x, float y, float z) { }
public void updateVolume(float volume) { }
public void updateRange(float range) { }
public void updatePitch(float pitch) { }
public float getVolume() { return 0F; }
public float getRange() { return 0F; }
public float getPitch() { return 0F; }

View File

@ -14,6 +14,18 @@ public class AudioWrapperClient extends AudioWrapper {
sound = new AudioDynamic(source);
}
@Override
public void setKeepAlive(int keepAlive) {
if(sound != null)
sound.setKeepAlive(keepAlive);
}
@Override
public void keepAlive() {
if(sound != null)
sound.keepAlive();
}
@Override
public void updatePosition(float x, float y, float z) {
if(sound != null)
@ -26,6 +38,12 @@ public class AudioWrapperClient extends AudioWrapper {
sound.setVolume(volume);
}
@Override
public void updateRange(float range) {
if(sound != null)
sound.setRange(range);
}
@Override
public void updatePitch(float pitch) {
if(sound != null)

View File

@ -3,6 +3,7 @@ package com.hbm.sound;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
/** Only used for doors */
public class AudioWrapperClientStartStop extends AudioWrapperClient {
public String start;

View File

@ -1,5 +1,7 @@
package com.hbm.tileentity;
import com.hbm.sound.AudioWrapper;
import api.hbm.energy.ILoadedTile;
import net.minecraft.tileentity.TileEntity;
@ -17,4 +19,13 @@ public class TileEntityLoadedBase extends TileEntity implements ILoadedTile {
super.onChunkUnload();
this.isLoaded = false;
}
public AudioWrapper createAudioLoop() { return null; }
public AudioWrapper rebootAudio(AudioWrapper wrapper) {
wrapper.stopSound();
AudioWrapper audio = createAudioLoop();
audio.startSound();
return audio;
}
}

View File

@ -4,7 +4,6 @@ import com.hbm.blocks.ModBlocks;
import com.hbm.packet.AuxGaugePacket;
import com.hbm.packet.NBTPacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.sound.AudioWrapper;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.entity.player.EntityPlayer;
@ -222,13 +221,4 @@ public abstract class TileEntityMachineBase extends TileEntityLoadedBase impleme
return Math.max(volume, 0);
}
public AudioWrapper createAudioLoop() { return null; }
public AudioWrapper rebootAudio(AudioWrapper wrapper) {
wrapper.stopSound();
AudioWrapper audio = createAudioLoop();
audio.startSound();
return audio;
}
}

View File

@ -7,6 +7,7 @@ import java.util.List;
import com.hbm.blocks.bomb.BlockVolcano.TileEntityVolcanoCore;
import com.hbm.blocks.generic.BlockBedrockOreTE.TileEntityBedrockOre;
import com.hbm.blocks.generic.BlockBobble.TileEntityBobble;
import com.hbm.blocks.generic.BlockDynamicSlag.TileEntitySlag;
import com.hbm.blocks.generic.BlockEmitter.TileEntityEmitter;
import com.hbm.blocks.generic.BlockLoot.TileEntityLoot;
import com.hbm.blocks.generic.BlockMotherOfAllOres.TileEntityRandomOre;
@ -268,6 +269,8 @@ public class TileMappings {
put(TileEntityFoundryChannel.class, "tileentity_foundry_channel");
put(TileEntityFoundryTank.class, "tileentity_foundry_tank");
put(TileEntityFoundryOutlet.class, "tileentity_foundry_outlet");
put(TileEntityFoundrySlagtap.class, "tileentity_foundry_slagtap");
put(TileEntitySlag.class, "tileentity_foundry_slag");
put(TileEntityMachineAutocrafter.class, "tileentity_autocrafter");
put(TileEntityDiFurnaceRTG.class, "tileentity_rtg_difurnace");

View File

@ -0,0 +1,115 @@
package com.hbm.tileentity.machine;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockDynamicSlag.TileEntitySlag;
import com.hbm.inventory.material.Mats.MaterialStack;
import com.hbm.packet.AuxParticlePacketNT;
import com.hbm.packet.PacketDispatcher;
import com.hbm.util.Compat;
import api.hbm.block.ICrucibleAcceptor;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.block.Block;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityFoundrySlagtap extends TileEntity implements ICrucibleAcceptor {
@Override
public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) {
Vec3 start = Vec3.createVectorHelper(x + 0.5, y - 0.125, z + 0.5);
Vec3 end = Vec3.createVectorHelper(x + 0.5, y + 0.125 - 15, z + 0.5);
MovingObjectPosition mop = world.func_147447_a(start, end, true, true, true);
if(mop == null || mop.typeOfHit != mop.typeOfHit.BLOCK) {
return false;
}
return true;
}
@Override
public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) {
if(stack == null || stack.material == null || stack.amount <= 0) {
return null;
}
Vec3 start = Vec3.createVectorHelper(x + 0.5, y - 0.125, z + 0.5);
Vec3 end = Vec3.createVectorHelper(x + 0.5, y + 0.125 - 15, z + 0.5);
MovingObjectPosition mop = world.func_147447_a(start, end, true, true, true);
if(mop == null || mop.typeOfHit != mop.typeOfHit.BLOCK) {
return null;
}
Block hit = world.getBlock(mop.blockX, mop.blockY, mop.blockZ);
Block above = world.getBlock(mop.blockX, mop.blockY + 1, mop.blockZ);
boolean didFlow = false;
if(hit == ModBlocks.slag) {
TileEntitySlag tile = (TileEntitySlag) Compat.getTileStandard(world, mop.blockX, mop.blockY, mop.blockZ);
if(tile.mat == stack.material) {
int transfer = Math.min(tile.maxAmount - tile.amount, stack.amount);
tile.amount += transfer;
stack.amount -= transfer;
didFlow = didFlow || transfer > 0;
world.markBlockForUpdate(mop.blockX, mop.blockY, mop.blockZ);
world.scheduleBlockUpdate(mop.blockX, mop.blockY, mop.blockZ, ModBlocks.slag, 1);
}
} else if(hit.isReplaceable(world, mop.blockX, mop.blockY, mop.blockZ)) {
world.setBlock(mop.blockX, mop.blockY, mop.blockZ, ModBlocks.slag);
TileEntitySlag tile = (TileEntitySlag) Compat.getTileStandard(world, mop.blockX, mop.blockY, mop.blockZ);
tile.mat = stack.material;
int transfer = Math.min(tile.maxAmount, stack.amount);
tile.amount += transfer;
stack.amount -= transfer;
didFlow = didFlow || transfer > 0;
world.markBlockForUpdate(mop.blockX, mop.blockY, mop.blockZ);
world.scheduleBlockUpdate(mop.blockX, mop.blockY, mop.blockZ, ModBlocks.slag, 1);
}
if(stack.amount > 0 && above.isReplaceable(world, mop.blockX, mop.blockY + 1, mop.blockZ)) {
world.setBlock(mop.blockX, mop.blockY + 1, mop.blockZ, ModBlocks.slag);
TileEntitySlag tile = (TileEntitySlag) Compat.getTileStandard(world, mop.blockX, mop.blockY + 1, mop.blockZ);
tile.mat = stack.material;
int transfer = Math.min(tile.maxAmount, stack.amount);
tile.amount += transfer;
stack.amount -= transfer;
didFlow = didFlow || transfer > 0;
world.markBlockForUpdate(mop.blockX, mop.blockY + 1, mop.blockZ);
world.scheduleBlockUpdate(mop.blockX, mop.blockY + 1, mop.blockZ, ModBlocks.slag, 1);
}
if(didFlow) {
ForgeDirection dir = side.getOpposite();
double hitY = mop.blockY;
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "foundry");
data.setInteger("color", stack.material.moltenColor);
data.setByte("dir", (byte) dir.ordinal());
data.setFloat("off", 0.375F);
data.setFloat("base", 0F);
data.setFloat("len", Math.max(1F, yCoord - (float) (Math.ceil(hitY))));
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, xCoord + 0.5D - dir.offsetX * 0.125, yCoord + 0.125, zCoord + 0.5D - dir.offsetZ * 0.125), new TargetPoint(worldObj.provider.dimensionId, xCoord + 0.5, yCoord, zCoord + 0.5, 50));
}
if(stack.amount <= 0) {
stack = null;
}
return stack;
}
@Override public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { return false; }
@Override public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { return stack; }
}

View File

@ -20,7 +20,9 @@ import com.hbm.inventory.fluid.trait.FT_Heatable;
import com.hbm.inventory.fluid.trait.FT_Heatable.HeatingStep;
import com.hbm.inventory.fluid.trait.FT_Heatable.HeatingType;
import com.hbm.lib.Library;
import com.hbm.main.MainRegistry;
import com.hbm.saveddata.TomSaveData;
import com.hbm.sound.AudioWrapper;
import com.hbm.tileentity.IConfigurableMachine;
import com.hbm.tileentity.INBTPacketReceiver;
import com.hbm.tileentity.TileEntityLoadedBase;
@ -41,8 +43,12 @@ public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IFluid
public int heat;
public FluidTank[] tanks;
public List<IFluidAcceptor> list = new ArrayList();
public boolean isOn;
public boolean hasExploded = false;
private AudioWrapper audio;
private int audioTime;
/* CONFIGURABLE */
public static int maxHeat = 12_800_000; //the heat required to turn 64k of water into steam
public static double diffusion = 0.1D;
@ -76,6 +82,7 @@ public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IFluid
data.setInteger("heat", lastHeat);
tanks[0].writeToNBT(data, "0");
this.isOn = false;
this.tryConvert();
tanks[1].writeToNBT(data, "1");
@ -86,7 +93,57 @@ public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IFluid
}
data.setBoolean("exploded", this.hasExploded);
data.setBoolean("isOn", this.isOn);
INBTPacketReceiver.networkPack(this, data, 25);
} else {
if(this.isOn) audioTime = 20;
if(audioTime > 0) {
audioTime--;
if(audio == null) {
audio = createAudioLoop();
audio.startSound();
} else if(!audio.isPlaying()) {
audio = rebootAudio(audio);
}
audio.keepAlive();
} else {
if(audio != null) {
audio.stopSound();
audio = null;
}
}
}
}
@Override
public AudioWrapper createAudioLoop() {
return MainRegistry.proxy.getLoopedSound("hbm:block.boiler", xCoord, yCoord, zCoord, 0.125F, 10F, 1.0F, 20);
}
@Override
public void onChunkUnload() {
if(audio != null) {
audio.stopSound();
audio = null;
}
}
@Override
public void invalidate() {
super.invalidate();
if(audio != null) {
audio.stopSound();
audio = null;
}
}
@ -96,6 +153,7 @@ public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IFluid
this.heat = nbt.getInteger("heat");
this.tanks[0].readFromNBT(nbt, "0");
this.tanks[1].readFromNBT(nbt, "1");
this.isOn = nbt.getBoolean("isOn");
}
protected void tryPullHeat() {
@ -159,6 +217,10 @@ public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IFluid
worldObj.playSoundEffect(xCoord + 0.5, yCoord + 2, zCoord + 0.5, "hbm:block.boilerGroan", 0.5F, 1.0F);
}
if(ops > 0) {
this.isOn = true;
}
if(outputOps == 0 && canExplode) {
this.hasExploded = true;
BlockDummyable.safeRem = true;

View File

@ -1,6 +1,8 @@
package com.hbm.tileentity.machine;
import com.hbm.blocks.BlockDummyable;
import com.hbm.main.MainRegistry;
import com.hbm.sound.AudioWrapper;
import com.hbm.tileentity.INBTPacketReceiver;
import com.hbm.tileentity.TileEntityLoadedBase;
@ -17,8 +19,11 @@ public class TileEntityHeaterElectric extends TileEntityLoadedBase implements IH
public long power;
public int heatEnergy;
public boolean isOn;
protected int setting = 0;
private AudioWrapper audio;
@Override
public void updateEntity() {
@ -33,15 +38,63 @@ public class TileEntityHeaterElectric extends TileEntityLoadedBase implements IH
this.tryPullHeat();
this.isOn = false;
if(setting > 0 && this.power >= this.getConsumption()) {
this.power -= this.getConsumption();
this.heatEnergy += getHeatGen();
this.isOn = true;
}
NBTTagCompound data = new NBTTagCompound();
data.setByte("s", (byte) this.setting);
data.setInteger("h", this.heatEnergy);
data.setBoolean("o", isOn);
INBTPacketReceiver.networkPack(this, data, 25);
} else {
if(isOn) {
if(audio == null) {
audio = createAudioLoop();
audio.startSound();
} else if(!audio.isPlaying()) {
audio = rebootAudio(audio);
}
audio.keepAlive();
} else {
if(audio != null) {
audio.stopSound();
audio = null;
}
}
}
}
@Override
public AudioWrapper createAudioLoop() {
return MainRegistry.proxy.getLoopedSound("hbm:block.electricHum", xCoord, yCoord, zCoord, 0.25F, 7.5F, 1.0F, 20);
}
@Override
public void onChunkUnload() {
if(audio != null) {
audio.stopSound();
audio = null;
}
}
@Override
public void invalidate() {
super.invalidate();
if(audio != null) {
audio.stopSound();
audio = null;
}
}
@ -49,6 +102,7 @@ public class TileEntityHeaterElectric extends TileEntityLoadedBase implements IH
public void networkUnpack(NBTTagCompound nbt) {
this.setting = nbt.getByte("s");
this.heatEnergy = nbt.getInteger("h");
this.isOn = nbt.getBoolean("o");
}
@Override

View File

@ -256,7 +256,7 @@ public class TileEntityMachineAssembler extends TileEntityMachineBase implements
@Override
public AudioWrapper createAudioLoop() {
return MainRegistry.proxy.getLoopedSound("hbm:block.assemblerOperate", xCoord, yCoord, zCoord, 1.0F, 1.0F);
return MainRegistry.proxy.getLoopedSound("hbm:block.assemblerOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F);
}
private void updateConnections() {

View File

@ -224,14 +224,16 @@ public class TileEntityMachineCentrifuge extends TileEntityMachineBase implement
}
}
@Override
public void networkUnpack(NBTTagCompound data) {
this.power = data.getLong("power");
this.progress = data.getInteger("progress");
this.isProgressing = data.getBoolean("isProgressing");
}
@Override
public AudioWrapper createAudioLoop() {
return MainRegistry.proxy.getLoopedSound("hbm:block.centrifugeOperate", xCoord, yCoord, zCoord, 2.0F, 1.0F);
return MainRegistry.proxy.getLoopedSound("hbm:block.centrifugeOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F);
}
@Override

View File

@ -93,8 +93,8 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements
this.isProgressing = false;
this.power = Library.chargeTEFromItems(slots, 0, power, maxPower);
if(!tanks[0].loadTank(17, 19, slots)) tanks[0].unloadTank(17, 19, slots);
if(!tanks[1].loadTank(18, 20, slots)) tanks[1].unloadTank(18, 20, slots);
if(!tanks[0].loadTank(17, 19, slots) && (slots[17] == null || slots[17].getItem() != ModItems.fluid_barrel_infinite)) tanks[0].unloadTank(17, 19, slots);
if(!tanks[1].loadTank(18, 20, slots) && (slots[18] == null || slots[18].getItem() != ModItems.fluid_barrel_infinite)) tanks[1].unloadTank(18, 20, slots);
tanks[2].unloadTank(9, 11, slots);
tanks[3].unloadTank(10, 12, slots);
@ -162,7 +162,7 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements
worldObj.spawnParticle("cloud", x, y, z, 0.0, 0.1, 0.0);
}
float volume = this.getVolume(2);
float volume = 1;//this.getVolume(2);
if(isProgressing && volume > 0) {
@ -187,7 +187,7 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements
@Override
public AudioWrapper createAudioLoop() {
return MainRegistry.proxy.getLoopedSound("hbm:block.chemplantOperate", xCoord, yCoord, zCoord, 1.0F, 1.0F);
return MainRegistry.proxy.getLoopedSound("hbm:block.chemplantOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F);
}
@Override

View File

@ -157,7 +157,7 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachineBase imp
}
public AudioWrapper createAudioLoop() {
return MainRegistry.proxy.getLoopedSound("hbm:block.igeneratorOperate", xCoord, yCoord, zCoord, 2.0F, 1.0F);
return MainRegistry.proxy.getLoopedSound("hbm:block.igeneratorOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F);
}
@Override

View File

@ -196,7 +196,7 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB
}
public AudioWrapper createAudioLoop() {
return MainRegistry.proxy.getLoopedSound("hbm:weapon.tauChargeLoop", xCoord, yCoord, zCoord, 1.0F, 1.0F);
return MainRegistry.proxy.getLoopedSound("hbm:weapon.tauChargeLoop", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F);
}
private void updateConnections() {

View File

@ -170,12 +170,12 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement
if(audio == null) { //if there is no sound playing, start it
audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, 1.0F, 1.0F);
audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, 1.0F, 20F, 1.0F);
audio.startSound();
} else if(!audio.isPlaying()) {
audio.stopSound();
audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, 1.0F, 1.0F);
audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, 1.0F, 20F, 1.0F);
audio.startSound();
}

View File

@ -382,7 +382,7 @@ public class TileEntityMachineTurbofan extends TileEntityMachineBase implements
}
public AudioWrapper createAudioLoop() {
return MainRegistry.proxy.getLoopedSound("hbm:block.turbofanOperate", xCoord, yCoord, zCoord, 5.0F, 1.0F);
return MainRegistry.proxy.getLoopedSound("hbm:block.turbofanOperate", xCoord, yCoord, zCoord, 1.0F, 50F, 1.0F, 20);
}
@Override

View File

@ -171,7 +171,7 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS
@Override
public AudioWrapper createAudioLoop() {
return MainRegistry.proxy.getLoopedSound("hbm:block.soyuzReady", xCoord, yCoord, zCoord, 1.0F, 1.0F);
return MainRegistry.proxy.getLoopedSound("hbm:block.soyuzReady", xCoord, yCoord, zCoord, 2.0F, 100F, 1.0F);
}
public void onChunkUnload() {

View File

@ -24,6 +24,8 @@ import com.hbm.inventory.gui.GUIMachineRefinery;
import com.hbm.inventory.recipes.RefineryRecipes;
import com.hbm.items.ModItems;
import com.hbm.lib.Library;
import com.hbm.main.MainRegistry;
import com.hbm.sound.AudioWrapper;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.IOverpressurable;
import com.hbm.tileentity.IPersistentNBT;
@ -66,6 +68,10 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements
public boolean onFire = false;
public Explosion lastExplosion = null;
private AudioWrapper audio;
private int audioTime;
public boolean isOn;
private static final int[] slot_access = new int[] {11};
public TileEntityMachineRefinery() {
@ -138,6 +144,8 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements
if(!worldObj.isRemote) {
this.isOn = false;
if(this.getBlockMetadata() < 12) {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()).getRotation(ForgeDirection.DOWN);
worldObj.removeTileEntity(xCoord, yCoord, zCoord);
@ -201,7 +209,57 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements
for(int i = 0; i < 5; i++) tanks[i].writeToNBT(data, "" + i);
data.setBoolean("exploded", hasExploded);
data.setBoolean("onFire", onFire);
data.setBoolean("isOn", this.isOn);
this.networkPack(data, 150);
} else {
if(this.isOn) audioTime = 20;
if(audioTime > 0) {
audioTime--;
if(audio == null) {
audio = createAudioLoop();
audio.startSound();
} else if(!audio.isPlaying()) {
audio = rebootAudio(audio);
}
audio.keepAlive();
} else {
if(audio != null) {
audio.stopSound();
audio = null;
}
}
}
}
@Override
public AudioWrapper createAudioLoop() {
return MainRegistry.proxy.getLoopedSound("hbm:block.boiler", xCoord, yCoord, zCoord, 0.25F, 15F, 1.0F, 20);
}
@Override
public void onChunkUnload() {
if(audio != null) {
audio.stopSound();
audio = null;
}
}
@Override
public void invalidate() {
super.invalidate();
if(audio != null) {
audio.stopSound();
audio = null;
}
}
@ -211,6 +269,7 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements
for(int i = 0; i < 5; i++) tanks[i].readFromNBT(nbt, "" + i);
this.hasExploded = nbt.getBoolean("exploded");
this.onFire = nbt.getBoolean("onFire");
this.isOn = nbt.getBoolean("isOn");
}
private void refine() {
@ -233,6 +292,7 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements
}
}
this.isOn = true;
tanks[0].setFill(tanks[0].getFill() - 100);
for(int i = 0; i < stacks.length; i++)

View File

@ -7,6 +7,8 @@ import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.inventory.gui.GUIMachineVacuumDistill;
import com.hbm.inventory.recipes.RefineryRecipes;
import com.hbm.lib.Library;
import com.hbm.main.MainRegistry;
import com.hbm.sound.AudioWrapper;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.IPersistentNBT;
import com.hbm.tileentity.TileEntityMachineBase;
@ -31,6 +33,10 @@ public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implem
public FluidTank[] tanks;
private AudioWrapper audio;
private int audioTime;
public boolean isOn;
public TileEntityMachineVacuumDistill() {
super(11);
@ -52,6 +58,8 @@ public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implem
if(!worldObj.isRemote) {
this.isOn = false;
this.updateConnections();
power = Library.chargeTEFromItems(slots, 0, power, maxPower);
tanks[0].loadTank(1, 2, slots);
@ -73,14 +81,65 @@ public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implem
NBTTagCompound data = new NBTTagCompound();
data.setLong("power", this.power);
data.setBoolean("isOn", this.isOn);
for(int i = 0; i < 5; i++) tanks[i].writeToNBT(data, "" + i);
this.networkPack(data, 150);
} else {
if(this.isOn) audioTime = 20;
if(audioTime > 0) {
audioTime--;
if(audio == null) {
audio = createAudioLoop();
audio.startSound();
} else if(!audio.isPlaying()) {
audio = rebootAudio(audio);
}
audio.keepAlive();
} else {
if(audio != null) {
audio.stopSound();
audio = null;
}
}
}
}
@Override
public AudioWrapper createAudioLoop() {
return MainRegistry.proxy.getLoopedSound("hbm:block.boiler", xCoord, yCoord, zCoord, 0.25F, 15F, 1.0F, 20);
}
@Override
public void onChunkUnload() {
if(audio != null) {
audio.stopSound();
audio = null;
}
}
@Override
public void invalidate() {
super.invalidate();
if(audio != null) {
audio.stopSound();
audio = null;
}
}
@Override
public void networkUnpack(NBTTagCompound nbt) {
this.power = nbt.getLong("power");
this.isOn = nbt.getBoolean("isOn");
for(int i = 0; i < 5; i++) tanks[i].readFromNBT(nbt, "" + i);
}
@ -93,6 +152,7 @@ public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implem
if(tanks[3].getFill() + RefineryRecipes.vac_frac_light > tanks[3].getMaxFill()) return;
if(tanks[4].getFill() + RefineryRecipes.vac_frac_sour > tanks[4].getMaxFill()) return;
this.isOn = true;
power -= 10_000;
tanks[0].setFill(tanks[0].getFill() - 100);
tanks[1].setFill(tanks[1].getFill() + RefineryRecipes.vac_frac_heavy);

View File

@ -100,6 +100,7 @@ public class Compat {
public static List<ItemStack> scrapeItemFromME(ItemStack meDrive) {
List<ItemStack> stacks = new ArrayList();
try {
if(meDrive != null && meDrive.hasTagCompound()) {
NBTTagCompound nbt = meDrive.getTagCompound();
int types = nbt.getShort("it"); //ITEM_TYPE_TAG
@ -113,11 +114,11 @@ public class Compat {
int count = nbt.getInteger("@" + i);
stack.stackSize = count;
stacks.add(stack);
}
}
}
} catch(Exception ex) { }
return stacks;
}

View File

@ -3606,6 +3606,12 @@ tile.concrete_colored.red.name=Roter Beton
tile.concrete_colored.silver.name=Hellgrauer Beton
tile.concrete_colored.white.name=Weißer Beton
tile.concrete_colored.yellow.name=Gelber Beton
tile.concrete_colored_ext.hazard.name=Builder's Choice Concrete - Gefahrenstreifen
tile.concrete_colored_ext.indigo.name=Builder's Choice Concrete - Tiefes Indigo
tile.concrete_colored_ext.machine.name=Builder's Choice Concrete - Industrieller Ton
tile.concrete_colored_ext.machine_stripe.name=Builder's Choice Concrete - Industrieller Streifen
tile.concrete_colored_ext.pink.name=Builder's Choice Concrete - Männliches Pink
tile.concrete_colored_ext.purple.name=Builder's Choice Concrete - Mysteriöses Lila
tile.concrete_pillar.name=Stahlbetonsäule
tile.concrete_slab.concrete.name=Betonfliesenstufe
tile.concrete_slab.concrete_asbestos.name=Asbestbetonstufe
@ -3745,6 +3751,7 @@ tile.foundry_channel.name=Gusskanal
tile.foundry_tank.name=Gießerei-Lagerbecken
tile.foundry_mold.name=Seichtes Gussbecken
tile.foundry_outlet.name=Ausguss
tile.foundry_slagtap.name=Schlackeausguss
tile.fraction_spacer.name=Fraktionierungsturm-Teiler
tile.frozen_dirt.name=Gefrorene Erde
tile.frozen_grass.name=Gefrorenes Gras

View File

@ -4418,6 +4418,12 @@ tile.concrete_colored.red.name=Red Concrete
tile.concrete_colored.silver.name=Light Gray Concrete
tile.concrete_colored.white.name=White Concrete
tile.concrete_colored.yellow.name=Yellow Concrete
tile.concrete_colored_ext.hazard.name=Builder's Choice Concrete - Hazard Stripe
tile.concrete_colored_ext.indigo.name=Builder's Choice Concrete - Deep Indigo
tile.concrete_colored_ext.machine.name=Builder's Choice Concrete - Industrial Tinge
tile.concrete_colored_ext.machine_stripe.name=Builder's Choice Concrete - Industrial Stripe
tile.concrete_colored_ext.pink.name=Builder's Choice Concrete - Manly Pink
tile.concrete_colored_ext.purple.name=Builder's Choice Concrete - Mysterious Purple
tile.concrete_pillar.name=Rebar Reinforced Concrete Pillar
tile.concrete_slab.concrete.name=Concrete Tile Slab
tile.concrete_slab.concrete_asbestos.name=Asbestos Concrete Slab
@ -4562,6 +4568,7 @@ tile.foundry_channel.name=Foundry Channel
tile.foundry_tank.name=Foundry Storage Basin
tile.foundry_mold.name=Shallow Foundry Basin
tile.foundry_outlet.name=Foundry Outlet
tile.foundry_slagtap.name=Foundry Slag Outlet
tile.fraction_spacer.name=Fractioning Tower Separator
tile.frozen_dirt.name=Frozen Dirt
tile.frozen_grass.name=Frozen Grass

View File

@ -0,0 +1,314 @@
# Blender v2.79 (sub 0) OBJ File: 'rail_narrow.blend'
# www.blender.org
o Plane
v 0.500000 0.125000 0.375000
v -0.500000 0.125000 0.375000
v -0.500000 0.125000 -0.375000
v 0.500000 0.125000 -0.375000
v -0.500000 0.000000 0.375000
v 0.500000 0.000000 0.375000
v -0.500000 0.000000 -0.437500
v 0.500000 0.000000 -0.437500
v -0.500000 0.000000 0.437500
v 0.500000 0.000000 0.437500
v -0.500000 0.000000 -0.375000
v 0.500000 0.000000 -0.375000
v -0.500000 0.125000 0.437500
v 0.500000 0.125000 0.437500
v 0.500000 0.125000 -0.437500
v -0.500000 0.125000 -0.437500
v 0.187500 0.000000 0.375000
v 0.312500 0.000000 0.375000
v 0.187500 0.000000 -0.375000
v 0.312500 0.000000 -0.375000
v 0.187500 0.062500 -0.375000
v 0.187500 0.062500 0.375000
v 0.312500 0.062500 0.375000
v 0.312500 0.062500 -0.375000
v 0.187500 0.000000 -0.437500
v 0.312500 0.000000 -0.437500
v 0.187500 0.062500 -0.437500
v 0.312500 0.062500 -0.437500
v 0.187500 0.000000 -0.500000
v 0.312500 0.000000 -0.500000
v 0.187500 0.062500 -0.500000
v 0.312500 0.062500 -0.500000
v 0.187500 0.000000 0.437500
v 0.312500 0.000000 0.437500
v 0.187500 0.062500 0.437500
v 0.312500 0.062500 0.437500
v 0.187500 0.000000 0.500000
v 0.312500 0.000000 0.500000
v 0.187500 0.062500 0.500000
v 0.312500 0.062500 0.500000
v -0.312500 0.000000 0.375000
v -0.187500 0.000000 0.375000
v -0.312500 0.000000 -0.375000
v -0.187500 0.000000 -0.375000
v -0.312500 0.062500 -0.375000
v -0.312500 0.062500 0.375000
v -0.187500 0.062500 0.375000
v -0.187500 0.062500 -0.375000
v -0.312500 0.000000 -0.437500
v -0.187500 0.000000 -0.437500
v -0.312500 0.062500 -0.437500
v -0.187500 0.062500 -0.437500
v -0.312500 0.000000 -0.500000
v -0.187500 0.000000 -0.500000
v -0.312500 0.062500 -0.500000
v -0.187500 0.062500 -0.500000
v -0.312500 0.000000 0.437500
v -0.187500 0.000000 0.437500
v -0.312500 0.062500 0.437500
v -0.187500 0.062500 0.437500
v -0.312500 0.000000 0.500000
v -0.187500 0.000000 0.500000
v -0.312500 0.062500 0.500000
v -0.187500 0.062500 0.500000
vt 0.125000 0.000000
vt 0.062500 1.000000
vt 0.062500 0.000000
vt 0.937500 1.000000
vt 0.875000 0.000000
vt 0.937500 0.000000
vt 0.062500 1.000000
vt 0.125000 0.000000
vt 0.125000 1.000000
vt 0.875000 0.000000
vt 0.937500 1.000000
vt 0.875000 1.000000
vt 0.125000 -0.000000
vt 0.062500 0.125000
vt 0.062500 -0.000000
vt 1.000000 0.000000
vt -0.000000 0.125000
vt -0.000000 0.000000
vt 1.000000 0.000000
vt -0.000000 0.125000
vt -0.000000 0.000000
vt 0.937500 -0.000000
vt 0.875000 0.125000
vt 0.875000 -0.000000
vt 0.937500 0.000000
vt 0.875000 0.125000
vt 0.875000 0.000000
vt 1.000000 -0.000000
vt -0.000000 0.125000
vt -0.000000 -0.000000
vt 1.000000 -0.000000
vt -0.000000 0.125000
vt -0.000000 -0.000000
vt 0.125000 0.000000
vt 0.062500 0.125000
vt 0.062500 0.000000
vt 0.875000 0.687500
vt 0.125000 0.812500
vt 0.125000 0.687500
vt 0.875000 0.812500
vt 0.125000 0.687500
vt 0.875000 0.687500
vt 0.875000 0.000000
vt 0.125000 0.062500
vt 0.125000 0.000000
vt 0.875000 -0.000000
vt 0.125000 0.062500
vt 0.125000 -0.000000
vt 0.062500 0.812500
vt 0.000000 0.687500
vt 0.062500 0.687500
vt 0.062500 0.062500
vt -0.000000 -0.000000
vt 0.062500 -0.000000
vt 0.937500 0.000000
vt 1.000000 0.062500
vt 0.937500 0.062500
vt 1.000000 0.687500
vt 0.937500 0.812500
vt 0.937500 0.687500
vt 0.312500 0.062500
vt 0.187500 -0.000000
vt 0.312500 -0.000000
vt 0.062500 0.062500
vt 0.000000 0.000000
vt 0.062500 0.000000
vt 0.000000 0.812500
vt 0.062500 0.687500
vt 0.062500 0.812500
vt 0.937500 -0.000000
vt 1.000000 0.062500
vt 0.937500 0.062500
vt 0.937500 0.687500
vt 1.000000 0.812500
vt 0.937500 0.812500
vt 0.812500 0.062500
vt 0.687500 0.000000
vt 0.812500 0.000000
vt 0.875000 0.187500
vt 0.125000 0.312500
vt 0.125000 0.187500
vt 0.875000 0.312500
vt 0.125000 0.187500
vt 0.875000 0.187500
vt 0.875000 0.000000
vt 0.125000 0.062500
vt 0.125000 0.000000
vt 0.875000 -0.000000
vt 0.125000 0.062500
vt 0.125000 -0.000000
vt 0.062500 0.312500
vt 0.000000 0.187500
vt 0.062500 0.187500
vt 0.062500 0.062500
vt -0.000000 -0.000000
vt 0.062500 -0.000000
vt 0.937500 0.000000
vt 1.000000 0.062500
vt 0.937500 0.062500
vt 1.000000 0.187500
vt 0.937500 0.312500
vt 0.937500 0.187500
vt 0.812500 0.062500
vt 0.687500 -0.000000
vt 0.812500 -0.000000
vt 0.062500 0.062500
vt 0.000000 0.000000
vt 0.062500 0.000000
vt 0.000000 0.312500
vt 0.062500 0.187500
vt 0.062500 0.312500
vt 0.937500 -0.000000
vt 1.000000 0.062500
vt 0.937500 0.062500
vt 0.937500 0.187500
vt 1.000000 0.312500
vt 0.937500 0.312500
vt 0.312500 0.062500
vt 0.187500 0.000000
vt 0.312500 0.000000
vt 0.125000 1.000000
vt 0.875000 1.000000
vt 0.062500 0.000000
vt 0.937500 0.000000
vt 0.125000 0.125000
vt 1.000000 0.125000
vt 1.000000 0.125000
vt 0.937500 0.125000
vt 0.937500 0.125000
vt 1.000000 0.125000
vt 1.000000 0.125000
vt 0.125000 0.125000
vt 0.875000 0.812500
vt 0.125000 0.812500
vt 0.875000 0.062500
vt 0.875000 0.062500
vt 0.000000 0.812500
vt -0.000000 0.062500
vt 1.000000 0.000000
vt 1.000000 0.812500
vt 0.187500 0.062500
vt 0.000000 0.062500
vt 0.000000 0.687500
vt 1.000000 -0.000000
vt 1.000000 0.687500
vt 0.687500 0.062500
vt 0.875000 0.312500
vt 0.125000 0.312500
vt 0.875000 0.062500
vt 0.875000 0.062500
vt 0.000000 0.312500
vt -0.000000 0.062500
vt 1.000000 0.000000
vt 1.000000 0.312500
vt 0.687500 0.062500
vt 0.000000 0.062500
vt 0.000000 0.187500
vt 1.000000 -0.000000
vt 1.000000 0.187500
vt 0.187500 0.062500
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
s off
f 3/1/1 15/2/1 16/3/1
f 8/4/2 11/5/2 7/6/2
f 10/7/2 5/8/2 6/9/2
f 2/10/1 14/11/1 1/12/1
f 11/13/3 16/14/3 7/15/3
f 10/16/4 13/17/4 9/18/4
f 12/19/4 3/20/4 11/21/4
f 9/22/3 2/23/3 5/24/3
f 8/25/5 4/26/5 12/27/5
f 7/28/6 15/29/6 8/30/6
f 5/31/6 1/32/6 6/33/6
f 6/34/5 14/35/5 10/36/5
f 19/37/2 18/38/2 17/39/2
f 23/40/1 21/41/1 22/42/1
f 20/43/5 23/44/5 18/45/5
f 17/46/3 21/47/3 19/48/3
f 28/49/1 31/50/1 27/51/1
f 27/52/3 29/53/3 25/54/3
f 26/55/5 32/56/5 28/57/5
f 29/58/2 26/59/2 25/60/2
f 31/61/6 30/62/6 29/63/6
f 36/64/5 38/65/5 34/66/5
f 38/67/2 33/68/2 34/69/2
f 33/70/3 39/71/3 35/72/3
f 35/73/1 40/74/1 36/75/1
f 40/76/4 37/77/4 38/78/4
f 43/79/2 42/80/2 41/81/2
f 47/82/1 45/83/1 46/84/1
f 44/85/5 47/86/5 42/87/5
f 41/88/3 45/89/3 43/90/3
f 52/91/1 55/92/1 51/93/1
f 51/94/3 53/95/3 49/96/3
f 50/97/5 56/98/5 52/99/5
f 53/100/2 50/101/2 49/102/2
f 55/103/6 54/104/6 53/105/6
f 60/106/5 62/107/5 58/108/5
f 62/109/2 57/110/2 58/111/2
f 57/112/3 63/113/3 59/114/3
f 59/115/1 64/116/1 60/117/1
f 64/118/4 61/119/4 62/120/4
f 3/1/1 4/121/1 15/2/1
f 8/4/2 12/122/2 11/5/2
f 10/7/2 9/123/2 5/8/2
f 2/10/1 13/124/1 14/11/1
f 11/13/3 3/125/3 16/14/3
f 10/16/4 14/126/4 13/17/4
f 12/19/4 4/127/4 3/20/4
f 9/22/3 13/128/3 2/23/3
f 8/25/5 15/129/5 4/26/5
f 7/28/6 16/130/6 15/29/6
f 5/31/6 2/131/6 1/32/6
f 6/34/5 1/132/5 14/35/5
f 19/37/2 20/133/2 18/38/2
f 23/40/1 24/134/1 21/41/1
f 20/43/5 24/135/5 23/44/5
f 17/46/3 22/136/3 21/47/3
f 28/49/1 32/137/1 31/50/1
f 27/52/3 31/138/3 29/53/3
f 26/55/5 30/139/5 32/56/5
f 29/58/2 30/140/2 26/59/2
f 31/61/6 32/141/6 30/62/6
f 36/64/5 40/142/5 38/65/5
f 38/67/2 37/143/2 33/68/2
f 33/70/3 37/144/3 39/71/3
f 35/73/1 39/145/1 40/74/1
f 40/76/4 39/146/4 37/77/4
f 43/79/2 44/147/2 42/80/2
f 47/82/1 48/148/1 45/83/1
f 44/85/5 48/149/5 47/86/5
f 41/88/3 46/150/3 45/89/3
f 52/91/1 56/151/1 55/92/1
f 51/94/3 55/152/3 53/95/3
f 50/97/5 54/153/5 56/98/5
f 53/100/2 54/154/2 50/101/2
f 55/103/6 56/155/6 54/104/6
f 60/106/5 64/156/5 62/107/5
f 62/109/2 61/157/2 57/110/2
f 57/112/3 61/158/3 63/113/3
f 59/115/1 63/159/1 64/116/1
f 64/118/4 63/160/4 61/119/4

View File

@ -0,0 +1,681 @@
# Blender v2.79 (sub 0) OBJ File: 'rail_narrow_bend.blend'
# www.blender.org
o Plane
v 0.500000 0.125000 0.375000
v 0.500000 0.125000 -0.375000
v 0.500000 0.000000 0.375000
v 0.500000 0.000000 -0.437500
v -0.463258 0.125000 -0.342627
v 0.500000 0.000000 0.437500
v -0.292554 0.125000 0.515560
v 0.500000 0.000000 -0.375000
v -0.451065 0.000000 -0.281328
v 0.500000 0.125000 0.437500
v 0.500000 0.125000 -0.437500
v -0.292554 0.000000 0.515560
v -3.325402 0.062500 1.279721
v -3.404702 0.062500 1.376347
v -3.325402 0.000000 1.279721
v -3.404702 0.000000 1.376347
v -3.057147 0.000000 2.669533
v -2.998222 0.000000 2.559293
v -3.057147 0.062500 2.669533
v -2.998222 0.062500 2.559293
v -0.601330 0.062500 0.654096
v -0.720948 0.062500 0.690382
v -0.601330 0.000000 0.654096
v -0.720948 0.000000 0.690382
v -0.052285 0.000000 -0.469798
v 0.072113 0.000000 -0.482049
v -0.052285 0.062500 -0.469798
v 0.072113 0.062500 -0.482049
v -0.891615 0.062500 -0.302844
v -1.011232 0.062500 -0.266559
v -0.891615 0.000000 -0.302844
v -1.011232 0.000000 -0.266559
v 0.045732 0.000000 0.525387
v 0.170130 0.000000 0.513135
v 0.045732 0.062500 0.525387
v 0.170130 0.062500 0.513135
v -0.463258 0.000000 -0.342627
v -0.304748 0.000000 0.454261
v -0.451065 0.125000 -0.281328
v -0.304748 0.125000 0.454261
v -3.605381 0.125000 1.756872
v -2.877845 0.125000 2.242996
v -3.553414 0.000000 1.791595
v -2.877845 0.000000 2.242996
v -3.605381 0.000000 1.756872
v -2.929812 0.000000 2.208273
v -3.553414 0.125000 1.791595
v -2.929812 0.125000 2.208273
v -2.243128 0.125000 0.394619
v -1.757004 0.125000 1.122155
v -2.208405 0.000000 0.446586
v -1.757004 0.000000 1.122155
v -2.243128 0.000000 0.394619
v -1.791727 0.000000 1.070188
v -2.208405 0.125000 0.446586
v -1.791727 0.125000 1.070188
v -4.342627 0.125000 3.536741
v -3.484440 0.125000 3.707446
v -4.281328 0.000000 3.548935
v -3.484440 0.000000 3.707446
v -4.342627 0.000000 3.536741
v -3.545739 0.000000 3.695252
v -4.281328 0.125000 3.548935
v -3.545739 0.125000 3.695252
v 0.500000 0.000000 4.500000
v -3.625000 0.125000 4.500000
v -4.375000 0.125000 4.500000
v -3.625000 0.000000 4.500000
v -4.437500 0.000000 4.500000
v -3.562500 0.000000 4.500000
v -4.375000 0.000000 4.500000
v -3.562500 0.125000 4.500000
v -4.437500 0.125000 4.500000
v -2.416816 0.125000 1.583184
v -2.947145 0.125000 1.052855
v -2.416816 0.000000 1.583184
v -2.991340 0.000000 1.008660
v -2.372621 0.000000 1.627379
v -2.947145 0.000000 1.052855
v -2.372621 0.125000 1.627379
v -2.991340 0.125000 1.008660
v -3.311003 0.125000 2.921431
v -4.003912 0.125000 2.634418
v -3.311003 0.000000 2.921431
v -4.061655 0.000000 2.610501
v -3.253261 0.000000 2.945349
v -4.003912 0.000000 2.634418
v -3.253261 0.125000 2.945349
v -4.061655 0.125000 2.610501
v -1.078569 0.125000 0.688997
v -1.365582 0.125000 -0.003912
v -1.078569 0.000000 0.688997
v -1.389499 0.000000 -0.061655
v -1.054651 0.000000 0.746740
v -1.365582 0.000000 -0.003912
v -1.054651 0.125000 0.746740
v -1.389499 0.125000 -0.061655
v -3.880144 0.062500 2.087896
v -3.939068 0.062500 2.198136
v -3.880144 0.000000 2.087896
v -3.939068 0.000000 2.198136
v -2.631691 0.000000 2.010740
v -2.552392 0.000000 1.914114
v -2.631691 0.062500 2.010740
v -2.552392 0.062500 1.914114
v -4.266559 0.062500 2.988768
v -4.302845 0.062500 3.108386
v -4.266559 0.000000 2.988768
v -4.302845 0.000000 3.108386
v -3.486865 0.000000 4.170131
v -3.474612 0.000000 4.045732
v -3.486865 0.062500 4.170131
v -3.474612 0.062500 4.045732
v -1.989260 0.062500 1.368309
v -2.085886 0.062500 1.447608
v -1.989260 0.000000 1.368309
v -2.085886 0.000000 1.447608
v -1.912104 0.000000 0.119856
v -1.801864 0.000000 0.060932
v -1.912104 0.062500 0.119856
v -1.801864 0.062500 0.060932
v -2.623653 0.062500 0.595299
v -2.720279 0.062500 0.674598
v -2.623653 0.000000 0.595299
v -2.720279 0.000000 0.674598
v -1.440707 0.000000 1.001778
v -1.330467 0.000000 0.942852
v -1.440707 0.062500 1.001778
v -1.330467 0.062500 0.942852
v -4.469797 0.062500 3.947715
v -4.482049 0.062500 4.072114
v -4.469797 0.000000 3.947715
v -4.482049 0.000000 4.072114
v -3.345904 0.000000 3.398670
v -3.309618 0.000000 3.279053
v -3.345904 0.062500 3.398670
v -3.309618 0.062500 3.279053
vt 0.615249 0.562500
vt 0.726069 0.437500
vt 0.615249 0.437500
vt 0.678003 0.453027
vt 0.764947 0.316851
vt 0.688434 0.459997
vt 0.613503 0.437500
vt 0.722644 0.562500
vt 0.613503 0.562500
vt 0.828202 0.562500
vt 0.828202 0.437500
vt 0.812063 0.161529
vt 0.753357 0.312051
vt 0.799759 0.159082
vt 0.823229 0.437500
vt 0.823229 0.562500
vt 0.812063 0.161529
vt 0.753357 0.312051
vt 0.764947 0.316851
vt 0.678003 0.453027
vt 0.688434 0.459997
vt 1.000000 0.437500
vt 0.993671 0.562500
vt 0.993671 0.437500
vt 0.576594 0.576594
vt 0.585465 0.585465
vt 0.459997 0.688434
vt 0.917722 0.437500
vt 0.911392 0.562500
vt 0.911392 0.437500
vt 0.777932 0.500000
vt 0.762144 0.437500
vt 0.777932 0.437500
vt 0.283574 0.500000
vt 0.325146 0.437500
vt 0.325146 0.500000
vt 0.342277 0.500000
vt 0.342277 0.437500
vt 0.626982 0.783754
vt 0.519041 0.612678
vt 0.499646 0.628595
vt 0.829653 0.500000
vt 0.762144 0.500000
vt 0.797787 0.091181
vt 1.000000 0.085886
vt 0.800246 0.066212
vt 0.845441 0.437500
vt 0.829653 0.437500
vt 0.964030 0.279326
vt 0.764669 0.245069
vt 0.771952 0.221060
vt 0.947343 0.500000
vt 0.961181 0.437500
vt 0.947343 0.437500
vt 0.856491 0.437500
vt 0.856491 0.500000
vt 1.000000 0.085886
vt 0.797787 0.091181
vt 0.800246 0.066212
vt 0.956746 0.303335
vt 0.771952 0.221060
vt 0.764669 0.245069
vt 0.870329 0.500000
vt 0.870329 0.437500
vt 0.312050 0.753357
vt 0.316851 0.764947
vt 0.159082 0.799759
vt 0.161529 0.812063
vt 0.171798 0.437501
vt 0.273931 0.562500
vt 0.273931 0.437500
vt 0.161529 0.812063
vt 0.312050 0.753357
vt 0.316851 0.764947
vt 0.176771 0.562500
vt 0.277356 0.437500
vt 0.277356 0.562500
vt 0.107153 0.562500
vt 0.000000 0.437501
vt 0.000000 0.562500
vt 0.000000 0.991058
vt 0.190898 0.959711
vt 0.193346 0.972015
vt 0.006329 0.437501
vt 0.112125 0.562500
vt 0.006329 0.562500
vt 0.000000 0.991058
vt 0.190898 0.959711
vt 0.000000 0.978513
vt 0.171798 0.562500
vt 0.082278 0.437501
vt 0.082278 0.562500
vt 0.000000 0.815428
vt 0.000000 0.827972
vt 0.088607 0.437501
vt 0.088607 0.562500
vt 0.000000 0.827972
vt 0.000000 0.815428
vt 0.892847 0.562499
vt 1.000000 0.562499
vt 0.991058 0.000000
vt 0.959711 0.190898
vt 0.978513 0.000000
vt 0.887875 0.562499
vt 0.959711 0.190898
vt 0.991058 0.000000
vt 0.978513 0.000000
vt 0.917722 0.562500
vt 0.827972 0.000000
vt 0.815427 0.000000
vt 0.827972 0.000000
vt 0.799759 0.159082
vt 0.500000 0.562500
vt 0.585465 0.585465
vt 0.500000 0.437500
vt 0.386497 0.437500
vt 0.500000 0.437500
vt 0.453027 0.678003
vt 0.459997 0.688434
vt 0.384751 0.437500
vt 0.500000 0.562500
vt 0.193346 0.972015
vt 0.374461 0.904028
vt 0.550602 0.824035
vt 0.543633 0.813604
vt 0.691913 0.691913
vt 0.824035 0.550602
vt 0.813604 0.543633
vt 0.915618 0.379261
vt 0.904028 0.374461
vt 0.972015 0.193346
vt 0.767173 0.562499
vt 0.887875 0.437500
vt 0.915618 0.379261
vt 0.904028 0.374461
vt 0.892847 0.437500
vt 0.770598 0.562499
vt 0.636203 0.437500
vt 0.636203 0.562500
vt 0.813604 0.543633
vt 0.824035 0.550602
vt 0.637950 0.437500
vt 0.637950 0.562499
vt 0.500000 0.562500
vt 0.691913 0.691913
vt 0.500000 0.562500
vt 0.363797 0.437500
vt 0.363797 0.562500
vt 0.550602 0.824035
vt 0.543633 0.813604
vt 0.362050 0.437500
vt 0.362050 0.562500
vt 0.232827 0.562500
vt 0.374461 0.904028
vt 0.229402 0.562500
vt 0.112125 0.437501
vt 0.107153 0.437501
vt 0.300705 0.437500
vt 0.283574 0.437500
vt 0.484159 0.879185
vt 0.367412 0.713993
vt 0.389540 0.702165
vt 0.420906 0.500000
vt 0.438722 0.437500
vt 0.420906 0.437500
vt 0.434944 0.437500
vt 0.434944 0.500000
vt 0.646376 0.767837
vt 0.499646 0.628595
vt 0.519041 0.612678
vt 0.367412 0.713993
vt 0.484159 0.879185
vt 0.389540 0.702165
vt 0.452759 0.500000
vt 0.452759 0.437500
vt 0.565056 0.500000
vt 0.547241 0.437500
vt 0.565056 0.437500
vt 0.038819 0.500001
vt 0.129671 0.437501
vt 0.129671 0.500001
vt 0.143509 0.500001
vt 0.143509 0.437501
vt 0.221060 0.771952
vt 0.303335 0.956746
vt 0.245069 0.764669
vt 0.561278 0.500000
vt 0.547241 0.500000
vt 0.879185 0.484159
vt 0.713993 0.367412
vt 0.702165 0.389540
vt 0.579094 0.437500
vt 0.561278 0.437500
vt 0.628595 0.499646
vt 0.767837 0.646376
vt 0.612678 0.519041
vt 0.699295 0.500000
vt 0.716426 0.437500
vt 0.699295 0.437500
vt 0.657723 0.437500
vt 0.657723 0.500000
vt 0.713993 0.367412
vt 0.879185 0.484159
vt 0.702165 0.389540
vt 0.767837 0.646376
vt 0.628595 0.499646
vt 0.612678 0.519041
vt 0.674854 0.500000
vt 0.674854 0.437500
vt 0.052657 0.437501
vt 0.038819 0.437501
vt 0.110855 0.997541
vt 0.066211 0.800246
vt 0.091181 0.797787
vt 0.154559 0.500000
vt 0.170347 0.437500
vt 0.154559 0.437500
vt 0.222068 0.437501
vt 0.222068 0.500000
vt 0.303335 0.956746
vt 0.221060 0.771952
vt 0.245069 0.764669
vt 0.085886 1.000000
vt 0.091181 0.797787
vt 0.066211 0.800246
vt 0.237856 0.500000
vt 0.237856 0.437501
vt 0.726069 0.562500
vt 0.722644 0.437500
vt 0.453027 0.678003
vt 0.646376 0.767837
vt 0.997541 0.110855
vt 0.845441 0.500000
vt 0.956746 0.303335
vt 0.961181 0.500000
vt 0.997541 0.110855
vt 0.964030 0.279326
vt 0.159082 0.799759
vt 0.176771 0.437501
vt 0.000000 0.978513
vt 0.972015 0.193346
vt 0.815427 0.000000
vt 0.576594 0.576594
vt 0.386497 0.562500
vt 0.384751 0.562500
vt 0.379261 0.915618
vt 0.700784 0.700784
vt 0.767173 0.437500
vt 0.770598 0.437500
vt 0.500000 0.437500
vt 0.700784 0.700784
vt 0.500000 0.437500
vt 0.232827 0.437500
vt 0.379261 0.915618
vt 0.229402 0.437500
vt 0.300705 0.500000
vt 0.462031 0.891012
vt 0.438722 0.500000
vt 0.626982 0.783754
vt 0.462031 0.891012
vt 0.279326 0.964030
vt 0.891012 0.462031
vt 0.579094 0.500000
vt 0.783754 0.626981
vt 0.716426 0.500000
vt 0.891012 0.462031
vt 0.783754 0.626981
vt 0.052657 0.500000
vt 0.085886 1.000000
vt 0.170347 0.500000
vt 0.279326 0.964030
vt 0.110855 0.997541
vn -0.4714 0.0000 -0.8819
vn 0.0000 1.0000 0.0000
vn 0.4714 0.0000 0.8819
vn -0.2903 0.0000 -0.9569
vn 0.2903 0.0000 0.9569
vn 0.0000 -1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn -0.4714 0.0000 0.8819
vn 0.8819 0.0000 0.4714
vn -0.9569 0.0000 0.2903
vn -0.0980 0.0000 -0.9952
vn -0.9952 0.0000 0.0980
vn 0.9952 0.0000 -0.0980
vn 0.0980 0.0000 0.9952
vn -0.9569 0.0000 -0.2903
vn 0.9569 0.0000 0.2903
vn -0.9952 0.0000 -0.0980
vn 0.9952 0.0000 0.0980
vn 0.0000 0.0000 1.0000
vn 0.6344 0.0000 0.7730
vn -0.6344 0.0000 -0.7730
vn 0.7730 0.0000 0.6344
vn -0.7730 0.0000 -0.6344
vn -0.8819 0.0000 -0.4714
vn 0.9569 0.0000 -0.2903
vn -0.6344 0.0000 0.7730
vn 0.6344 0.0000 -0.7730
vn 0.4714 0.0000 -0.8819
vn -0.0980 0.0000 0.9952
vn -0.7730 0.0000 0.6344
vn -0.8819 0.0000 0.4714
vn 0.8819 0.0000 -0.4714
vn 0.7730 0.0000 -0.6344
vn -0.2903 0.0000 0.9569
vn 0.2903 0.0000 -0.9569
vn 0.0980 0.0000 -0.9952
s off
f 56/1/1 92/2/1 54/3/1
f 50/4/2 90/5/2 56/6/2
f 52/7/3 96/8/3 50/9/3
f 92/2/4 40/10/4 38/11/4
f 40/12/2 96/13/2 7/14/2
f 96/8/5 12/15/5 7/16/5
f 38/17/6 94/18/6 92/19/6
f 92/19/6 52/20/6 54/21/6
f 4/22/7 2/23/7 8/24/7
f 54/21/6 78/25/6 76/26/6
f 78/25/6 46/27/6 76/26/6
f 3/28/7 10/29/7 6/30/7
f 21/31/5 24/32/5 23/33/5
f 99/34/8 17/35/8 19/36/8
f 20/37/9 17/35/9 18/38/9
f 16/39/6 103/40/6 102/41/6
f 30/42/10 24/32/10 22/43/10
f 33/44/6 26/45/6 34/46/6
f 30/42/4 31/47/4 32/48/4
f 29/49/2 22/50/2 21/51/2
f 27/52/11 26/53/11 25/54/11
f 27/52/12 33/55/12 35/56/12
f 28/57/2 35/58/2 36/59/2
f 32/60/6 23/61/6 24/62/6
f 26/53/13 36/63/13 34/64/13
f 36/63/14 33/55/14 34/64/14
f 46/27/6 86/65/6 84/66/6
f 84/66/6 60/67/6 62/68/6
f 62/69/15 82/70/15 84/71/15
f 64/72/2 88/73/2 82/74/2
f 58/75/16 86/76/16 88/77/16
f 57/78/17 69/79/17 73/80/17
f 73/81/2 63/82/2 57/83/2
f 71/84/18 63/85/18 67/86/18
f 69/87/6 59/88/6 71/89/6
f 64/90/17 68/91/17 66/92/17
f 72/93/2 64/72/2 66/94/2
f 70/95/18 58/75/18 72/96/18
f 68/97/6 60/67/6 70/98/6
f 4/22/11 5/99/11 11/100/11
f 11/101/2 39/102/2 2/103/2
f 67/86/19 69/79/19 71/84/19
f 72/96/19 68/91/19 70/95/19
f 39/104/14 8/24/14 2/23/14
f 9/105/6 4/106/6 8/107/6
f 38/11/11 1/108/11 3/28/11
f 1/109/2 7/14/2 10/110/2
f 7/16/14 6/30/14 10/29/14
f 3/111/6 12/112/6 38/17/6
f 80/113/20 52/7/20 50/9/20
f 74/114/2 50/4/2 56/6/2
f 76/115/21 56/1/21 54/3/21
f 80/113/22 44/116/22 78/117/22
f 42/118/2 74/114/2 48/119/2
f 46/120/23 74/121/23 76/115/23
f 44/116/9 88/77/9 86/76/9
f 82/74/2 42/118/2 48/119/2
f 82/70/24 46/120/24 84/71/24
f 61/122/6 87/123/6 59/88/6
f 87/123/6 45/124/6 43/125/6
f 45/124/6 79/126/6 43/125/6
f 79/126/6 53/127/6 51/128/6
f 51/128/6 93/129/6 95/130/6
f 95/130/6 37/131/6 9/105/6
f 91/132/5 9/133/5 39/104/5
f 39/102/2 97/134/2 91/135/2
f 37/136/4 97/137/4 5/99/4
f 51/138/3 91/132/3 55/139/3
f 55/140/2 97/134/2 49/141/2
f 97/137/1 53/142/1 49/143/1
f 75/144/20 51/138/20 55/139/20
f 49/141/2 75/145/2 55/140/2
f 53/142/21 81/146/21 49/143/21
f 43/147/22 75/144/22 47/148/22
f 75/145/2 41/149/2 47/150/2
f 81/146/23 45/151/23 41/152/23
f 83/153/9 43/147/9 47/148/9
f 41/149/2 83/154/2 47/150/2
f 45/151/24 89/155/24 41/152/24
f 59/156/16 83/153/16 63/85/16
f 83/154/2 57/83/2 63/82/2
f 89/155/15 61/157/15 57/78/15
f 31/47/25 21/31/25 23/33/25
f 99/34/24 100/158/24 101/159/24
f 98/160/2 19/161/2 20/162/2
f 14/163/23 15/164/23 16/165/23
f 14/163/26 102/166/26 104/167/26
f 13/168/2 104/169/2 105/170/2
f 17/171/6 100/172/6 18/173/6
f 15/164/27 105/174/27 103/175/27
f 105/174/22 102/166/22 103/175/22
f 100/158/28 20/37/28 18/38/28
f 114/176/20 117/177/20 116/178/20
f 131/179/29 110/180/29 112/181/29
f 113/182/18 110/180/18 111/183/18
f 134/184/6 108/185/6 135/186/6
f 123/187/30 117/177/30 115/188/30
f 118/189/6 127/190/6 126/191/6
f 123/187/21 124/192/21 125/193/21
f 114/194/2 123/195/2 115/196/2
f 120/197/1 119/198/1 118/199/1
f 120/197/31 126/200/31 128/201/31
f 129/202/2 120/203/2 128/204/2
f 125/205/6 116/206/6 117/207/6
f 119/198/32 129/208/32 127/209/32
f 129/208/3 126/200/3 127/209/3
f 124/192/33 114/176/33 116/178/33
f 131/179/17 132/210/17 133/211/17
f 130/212/2 112/213/2 113/214/2
f 107/215/15 108/216/15 109/217/15
f 107/215/34 134/218/34 136/219/34
f 106/220/2 136/221/2 137/222/2
f 133/223/6 111/224/6 110/225/6
f 108/216/35 137/226/35 135/227/35
f 137/226/16 134/218/16 135/227/16
f 132/210/36 113/182/36 111/183/36
f 56/1/1 90/228/1 92/2/1
f 50/4/2 96/13/2 90/5/2
f 52/7/3 94/229/3 96/8/3
f 92/2/4 90/228/4 40/10/4
f 40/12/2 90/5/2 96/13/2
f 96/8/5 94/229/5 12/15/5
f 38/17/6 12/112/6 94/18/6
f 92/19/6 94/18/6 52/20/6
f 4/22/7 11/100/7 2/23/7
f 54/21/6 52/20/6 78/25/6
f 78/25/6 44/230/6 46/27/6
f 3/28/7 1/108/7 10/29/7
f 21/31/5 22/43/5 24/32/5
f 99/34/8 101/159/8 17/35/8
f 20/37/9 19/36/9 17/35/9
f 16/39/6 15/231/6 103/40/6
f 30/42/10 32/48/10 24/32/10
f 33/44/6 25/232/6 26/45/6
f 30/42/4 29/233/4 31/47/4
f 29/49/2 30/234/2 22/50/2
f 27/52/11 28/235/11 26/53/11
f 27/52/12 25/54/12 33/55/12
f 28/57/2 27/236/2 35/58/2
f 32/60/6 31/237/6 23/61/6
f 26/53/13 28/235/13 36/63/13
f 36/63/14 35/56/14 33/55/14
f 46/27/6 44/230/6 86/65/6
f 84/66/6 86/65/6 60/67/6
f 62/69/15 64/90/15 82/70/15
f 64/72/2 58/238/2 88/73/2
f 58/75/16 60/239/16 86/76/16
f 57/78/17 61/157/17 69/79/17
f 73/81/2 67/240/2 63/82/2
f 71/84/18 59/156/18 63/85/18
f 69/87/6 61/122/6 59/88/6
f 64/90/17 62/69/17 68/91/17
f 72/93/2 58/238/2 64/72/2
f 70/95/18 60/239/18 58/75/18
f 68/97/6 62/68/6 60/67/6
f 4/22/11 37/136/11 5/99/11
f 11/101/2 5/241/2 39/102/2
f 67/86/19 73/80/19 69/79/19
f 72/96/19 66/92/19 68/91/19
f 39/104/14 9/133/14 8/24/14
f 9/105/6 37/131/6 4/106/6
f 38/11/11 40/10/11 1/108/11
f 1/109/2 40/12/2 7/14/2
f 7/16/14 12/15/14 6/30/14
f 3/111/6 6/242/6 12/112/6
f 80/113/20 78/117/20 52/7/20
f 74/114/2 80/243/2 50/4/2
f 76/115/21 74/121/21 56/1/21
f 80/113/22 42/244/22 44/116/22
f 42/118/2 80/243/2 74/114/2
f 46/120/23 48/245/23 74/121/23
f 44/116/9 42/244/9 88/77/9
f 82/74/2 88/73/2 42/118/2
f 82/70/24 48/245/24 46/120/24
f 61/122/6 85/246/6 87/123/6
f 87/123/6 85/246/6 45/124/6
f 45/124/6 77/247/6 79/126/6
f 79/126/6 77/247/6 53/127/6
f 51/128/6 53/127/6 93/129/6
f 95/130/6 93/129/6 37/131/6
f 91/132/5 95/248/5 9/133/5
f 39/102/2 5/241/2 97/134/2
f 37/136/4 93/249/4 97/137/4
f 51/138/3 95/248/3 91/132/3
f 55/140/2 91/135/2 97/134/2
f 97/137/1 93/249/1 53/142/1
f 75/144/20 79/250/20 51/138/20
f 49/141/2 81/251/2 75/145/2
f 53/142/21 77/252/21 81/146/21
f 43/147/22 79/250/22 75/144/22
f 75/145/2 81/251/2 41/149/2
f 81/146/23 77/252/23 45/151/23
f 83/153/9 87/253/9 43/147/9
f 41/149/2 89/254/2 83/154/2
f 45/151/24 85/255/24 89/155/24
f 59/156/16 87/253/16 83/153/16
f 83/154/2 89/254/2 57/83/2
f 89/155/15 85/255/15 61/157/15
f 31/47/25 29/233/25 21/31/25
f 99/34/24 98/256/24 100/158/24
f 98/160/2 99/257/2 19/161/2
f 14/163/23 13/258/23 15/164/23
f 14/163/26 16/165/26 102/166/26
f 13/168/2 14/259/2 104/169/2
f 17/171/6 101/260/6 100/172/6
f 15/164/27 13/258/27 105/174/27
f 105/174/22 104/167/22 102/166/22
f 100/158/28 98/256/28 20/37/28
f 114/176/20 115/188/20 117/177/20
f 131/179/29 133/211/29 110/180/29
f 113/182/18 112/181/18 110/180/18
f 134/184/6 109/261/6 108/185/6
f 123/187/30 125/193/30 117/177/30
f 118/189/6 119/262/6 127/190/6
f 123/187/21 122/263/21 124/192/21
f 114/194/2 122/264/2 123/195/2
f 120/197/1 121/265/1 119/198/1
f 120/197/31 118/199/31 126/200/31
f 129/202/2 121/266/2 120/203/2
f 125/205/6 124/267/6 116/206/6
f 119/198/32 121/265/32 129/208/32
f 129/208/3 128/201/3 126/200/3
f 124/192/33 122/263/33 114/176/33
f 131/179/17 130/268/17 132/210/17
f 130/212/2 131/269/2 112/213/2
f 107/215/15 106/270/15 108/216/15
f 107/215/34 109/217/34 134/218/34
f 106/220/2 107/271/2 136/221/2
f 133/223/6 132/272/6 111/224/6
f 108/216/35 106/270/35 137/226/35
f 137/226/16 136/219/16 134/218/16
f 132/210/36 130/268/36 113/182/36

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -52,6 +52,8 @@
"block.turbinegasRunning": {"category": "block", "sounds": [{"name": "block/turbinegasRunning", "stream": false}]},
"block.turbinegasShutdown": {"category": "block", "sounds": [{"name": "block/turbinegasShutdown", "stream": true}]},
"block.damage": {"category": "block", "sounds": ["block/dam1", "block/dam2", "block/dam3", "block/dam4"]},
"block.electricHum": {"category": "block", "sounds": [{"name": "block/electricHum", "stream": false}]},
"block.boiler": {"category": "block", "sounds": [{"name": "block/boiler", "stream": false}]},
"door.TransitionSealOpen": {"category": "block", "sounds": [{"name": "block/door/transition_seal_open", "stream": true}]},
"door.wghStart": {"category": "block", "sounds": [{"name": "block/door/wgh_start", "stream": true}]},

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 716 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 515 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B