getting railed again

This commit is contained in:
Bob 2024-01-06 22:59:40 +01:00
parent f254756c3d
commit 4c3945c924
50 changed files with 2772 additions and 1112 deletions

View File

@ -7,6 +7,10 @@
* Will automatically do single ingredient 2x2 or 3x3 recipes like compressing ingots into blocks at up to 9 operations per tick
* Input is strictly on the top and output on the bottom
* The side acts as an output for the ingredients as a way to de-clog the funnel from leftover materials
* Stealth missile
* A missile that is not picked up by radars, turrets or ABMs
* Marginally more powerful than a tier 1 HE missile
* Somewhat expensive, takes a full minute to make in the assembler
## Changed
* Updated russian localization
@ -23,14 +27,19 @@
* Now features proper animations for drawing the weapon, firing and reloading, as well as new sounds
* Comes with a new and improved 3D model as well as a cylinder gap flash when firing
* Is now part of the red room loot pool
* Durability has been drastically increased
* Powder box recipes now produce 8 boxes from the same amount of ingredients, making cyclotron recipes more affordable
* Buffed the radiation-powered engine, all valid fuels now produce 10x more energy per tick
* Removed tungsten and HSS bolts as dedicated items, they are now a single bolt item that uses the autogen system
* Regular steel is now also a valid bolt material which will replace tungsten in many recipes where tungsten just doesn't make sense
* Bolts Are now 1/8 of an ingot instead of 1/2 which makes some recipes marginally cheaper, as well as making them equal to GregTech bolts
* Bolts are oredicted and interchangeable, as well as recycleable in the crucible
* The N45 naval mine has been obliterated
* The solar boiler's ray rendering is no longer bound by particle settings, instead it will be disabled when fast graphics are enabaled
* The solar boiler's internal buffer has been reduced, its steam output is now capped at 10,000mB/t (which should be 20kHE/t or 0.8MHE/s)
## Fixed
* Fixed afterburn upgrades not being craftable with bakelite
* Fixed bismuth block not being properly oredicted
* Powder detectors that are used in the same network as diodes should now be somewhat less wrong
* Powder detectors that are used in the same network as diodes should now be somewhat less wrong
* Fixed horrifying gamebreaking issue that would frequently cause crashes, corrupt worlds and bluescreen PCs where the red copper block and the advanced alloy block had inconsistent colors

View File

@ -664,7 +664,6 @@ public class ModBlocks {
public static Block nuke_custom;
public static Block nuke_solinium;
public static Block nuke_n2;
public static Block nuke_n45;
public static Block nuke_fstbmb;
public static Block bomb_multi;
@ -1174,7 +1173,8 @@ public class ModBlocks {
public static Block rail_large_straight;
public static Block rail_large_straight_short;
public static Block rail_large_curve;
public static Block rail_large_curve_wide;
public static Block rail_large_curve_7;
public static Block rail_large_curve_9;
public static Block rail_large_ramp;
public static Block rail_large_buffer;
public static Block rail_large_switch;
@ -1803,7 +1803,6 @@ public class ModBlocks {
nuke_custom = new NukeCustom(Material.iron).setBlockName("nuke_custom").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(200.0F).setBlockTextureName(RefStrings.MODID + ":custom");
nuke_solinium = new NukeSolinium(Material.iron).setBlockName("nuke_solinium").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(200.0F).setBlockTextureName(RefStrings.MODID + ":nuke_solinium");
nuke_n2 = new NukeN2(Material.iron).setBlockName("nuke_n2").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(200.0F).setBlockTextureName(RefStrings.MODID + ":nuke_n2");
nuke_n45 = new NukeN45(Material.iron).setBlockName("nuke_n45").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(200.0F).setBlockTextureName(RefStrings.MODID + ":code");
nuke_fstbmb = new NukeBalefire(Material.iron).setBlockName("nuke_fstbmb").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(200.0F).setBlockTextureName(RefStrings.MODID + ":nuke_fstbmb");
bomb_multi = new BombMulti(Material.iron).setBlockName("bomb_multi").setCreativeTab(MainRegistry.nukeTab).setResistance(200.0F).setBlockTextureName(RefStrings.MODID + ":bomb_multi1");
@ -2252,14 +2251,15 @@ public class ModBlocks {
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(null).setBlockTextureName(RefStrings.MODID + ":rail_narrow_neo");
rail_narrow_curve = new RailNarrowCurve().setBlockName("rail_narrow_curve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_narrow_neo");
rail_large_straight = new RailStandardStraight().setBlockName("rail_large_straight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_straight_short = new RailStandardStraightShort().setBlockName("rail_large_straight_short").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_curve = new RailStandardCurve().setBlockName("rail_large_curve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_curve_wide = new RailStandardCurveWide().setBlockName("rail_large_curve_wide").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_ramp = new RailStandardRamp().setBlockName("rail_large_ramp").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_buffer = new RailStandardBuffer().setBlockName("rail_large_buffer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_buffer");
rail_large_switch = new RailStandardSwitch().setBlockName("rail_large_switch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_switch_flipped = new RailStandardSwitchFlipped().setBlockName("rail_large_switch_flipped").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_straight = new RailStandardStraight().setBlockName("rail_large_straight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_straight_short = new RailStandardStraightShort().setBlockName("rail_large_straight_short").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_curve = new RailStandardCurveBase().setBlockName("rail_large_curve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_curve_7 = new RailStandardCurveWide7().setBlockName("rail_large_curve_7").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_curve_9 = new RailStandardCurveWide9().setBlockName("rail_large_curve_9").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_ramp = new RailStandardRamp().setBlockName("rail_large_ramp").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_buffer = new RailStandardBuffer().setBlockName("rail_large_buffer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_buffer");
rail_large_switch = new RailStandardSwitch().setBlockName("rail_large_switch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_switch_flipped = new RailStandardSwitchFlipped().setBlockName("rail_large_switch_flipped").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
crate = new BlockCrate(Material.wood).setBlockName("crate").setStepSound(Block.soundTypeWood).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.consumableTab).setBlockTextureName(RefStrings.MODID + ":crate");
crate_weapon = new BlockCrate(Material.wood).setBlockName("crate_weapon").setStepSound(Block.soundTypeWood).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.consumableTab).setBlockTextureName(RefStrings.MODID + ":crate_weapon");
@ -2994,7 +2994,6 @@ public class ModBlocks {
GameRegistry.registerBlock(nuke_fleija, nuke_fleija.getUnlocalizedName());
GameRegistry.registerBlock(nuke_solinium, nuke_solinium.getUnlocalizedName());
GameRegistry.registerBlock(nuke_n2, nuke_n2.getUnlocalizedName());
GameRegistry.registerBlock(nuke_n45, nuke_n45.getUnlocalizedName());
GameRegistry.registerBlock(nuke_fstbmb, nuke_fstbmb.getUnlocalizedName());
GameRegistry.registerBlock(nuke_custom, nuke_custom.getUnlocalizedName());
@ -3561,7 +3560,8 @@ public class ModBlocks {
register(rail_large_straight);
register(rail_large_straight_short);
register(rail_large_curve);
register(rail_large_curve_wide);
register(rail_large_curve_7);
register(rail_large_curve_9);
register(rail_large_ramp);
register(rail_large_buffer);
register(rail_large_switch);

View File

@ -1,137 +0,0 @@
package com.hbm.blocks.bomb;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.interfaces.IBomb;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.bomb.TileEntityNukeN45;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class NukeN45 extends BlockContainer implements IBomb {
private final Random field_149933_a = new Random();
private static boolean keepInventory = false;
public NukeN45(Material p_i45386_1_) {
super(p_i45386_1_);
}
@Override
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
return new TileEntityNukeN45();
}
@Override
public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_) {
if(!keepInventory) {
ISidedInventory tileentityfurnace = (ISidedInventory) p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_);
if(tileentityfurnace != null) {
for(int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) {
ItemStack itemstack = tileentityfurnace.getStackInSlot(i1);
if(itemstack != null) {
float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
while(itemstack.stackSize > 0) {
int j1 = this.field_149933_a.nextInt(21) + 10;
if(j1 > itemstack.stackSize) {
j1 = itemstack.stackSize;
}
itemstack.stackSize -= j1;
EntityItem entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
if(itemstack.hasTagCompound()) {
entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy());
}
float f3 = 0.05F;
entityitem.motionX = (float) this.field_149933_a.nextGaussian() * f3;
entityitem.motionY = (float) this.field_149933_a.nextGaussian() * f3 + 0.2F;
entityitem.motionZ = (float) this.field_149933_a.nextGaussian() * f3;
p_149749_1_.spawnEntityInWorld(entityitem);
}
}
}
p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_);
}
}
super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_);
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if(world.isRemote) {
return true;
} else if(!player.isSneaking()) {
TileEntityNukeN45 entity = (TileEntityNukeN45) world.getTileEntity(x, y, z);
if(entity != null) {
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
}
return true;
} else {
return false;
}
}
@Override
public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) {
return Item.getItemFromBlock(ModBlocks.nuke_n45);
}
@Override
public int getRenderType() {
return -1;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
public BombReturnCode explode(World world, int x, int y, int z) {
if(!world.isRemote) {
TileEntityNukeN45 entity = (TileEntityNukeN45) world.getTileEntity(x, y, z);
if(entity.getType() == 100) {
entity.primed = true;
return BombReturnCode.TRIGGERED;
} else if(!entity.primed && entity.getType() > 0) {
int t = entity.getType();
entity.clearSlots();
entity.explode(world, x, y, z, t);
return BombReturnCode.DETONATED;
}
return BombReturnCode.ERROR_MISSING_COMPONENT;
}
return BombReturnCode.UNDEFINED;
}
}

View File

@ -158,8 +158,6 @@ public abstract class BlockRailWaypointSystem extends BlockDummyable implements
currentPos = nextNode;
}
if(!world.isRemote) PacketDispatcher.wrapper.sendToAllAround(new PlayerInformPacket(ChatBuilder.start("" + distRemaining).color(EnumChatFormatting.RED).flush(), 1), new TargetPoint(world.provider.dimensionId, x, y, z, 50));
info.overshoot = distRemaining;
info.pos = new BlockPos(currentPos.xCoord, currentPos.yCoord, currentPos.zCoord);

View File

@ -22,9 +22,11 @@ import net.minecraft.world.World;
import net.minecraftforge.client.model.obj.WavefrontObject;
import net.minecraftforge.common.util.ForgeDirection;
public class RailStandardCurve extends BlockDummyable implements IRailNTM, IRenderBlock {
public class RailStandardCurveBase extends BlockDummyable implements IRailNTM, IRenderBlock {
protected int width = 4;
public RailStandardCurve() {
public RailStandardCurveBase() {
super(Material.iron);
}
@ -59,8 +61,8 @@ public class RailStandardCurve extends BlockDummyable implements IRailNTM, IRend
ForgeDirection dir = ForgeDirection.getOrientation(meta);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
double turnRadius = 4D;
double axisDist = 4.5D;
double turnRadius = width;
double axisDist = width + 0.5D;
Vec3 vec = Vec3.createVectorHelper(trainX, trainY, trainZ);
double axisX = cX + 0.5 + dir.offsetX * 0.5 + rot.offsetX * axisDist;
@ -105,7 +107,7 @@ public class RailStandardCurve extends BlockDummyable implements IRailNTM, IRend
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);
info.dist(lengthOvershoot * Math.signum(speed * angularChange)).pos(new BlockPos(cX - dir.offsetX * width + rot.offsetX * (width + 1), y, cZ - dir.offsetZ * width + rot.offsetZ * (width + 1))).yaw((float) moveAngle);
return Vec3.createVectorHelper(axisX - dir.offsetX * turnRadius, y + 0.1875, axisZ - dir.offsetZ * turnRadius);
}
@ -130,7 +132,7 @@ public class RailStandardCurve extends BlockDummyable implements IRailNTM, IRend
@Override
public int[] getDimensions() {
return new int[] {0, 0, 4, 0, 4, 0};
return new int[] {0, 0, width, 0, width, 0};
}
@Override
@ -208,9 +210,10 @@ public class RailStandardCurve extends BlockDummyable implements IRailNTM, IRend
@Override
@SideOnly(Side.CLIENT)
public void renderInventory(Tessellator tessellator, Block block, int metadata) {
GL11.glScaled(0.2, 0.2, 0.2);
GL11.glTranslated(2.5, -0.0625, -1.5);
GL11.glRotated(90, 0, 1, 0);
GL11.glScaled(0.3, 0.3, 0.3);
GL11.glRotated(45, 0, 1, 0);
GL11.glRotated(60, 1, 0, 0);
GL11.glTranslated(2, 0, 2);
tessellator.startDrawingQuads();
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_curve, block.getIcon(1, 0), tessellator, 0, false);
tessellator.draw();

View File

@ -1,239 +0,0 @@
package com.hbm.blocks.rail;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.BlockDummyable;
import com.hbm.lib.Library;
import com.hbm.main.ResourceManager;
import com.hbm.render.util.ObjUtil;
import com.hbm.util.fauxpointtwelve.BlockPos;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.Tessellator;
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.client.model.obj.WavefrontObject;
import net.minecraftforge.common.util.ForgeDirection;
public class RailStandardCurveWide extends BlockDummyable implements IRailNTM, IRenderBlock {
public RailStandardCurveWide() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
return null;
}
@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, MoveContext context) {
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 = 6D;
double axisDist = 6.5D;
Vec3 vec = Vec3.createVectorHelper(trainX, trainY, trainZ);
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();
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 * 6 + rot.offsetX * 7, y, cZ - dir.offsetZ * 6 + rot.offsetZ * 7)).yaw((float) moveAngle);
return Vec3.createVectorHelper(axisX - dir.offsetX * turnRadius, y + 0.1875, 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 + 0.1875, axisZ -rot.offsetZ * turnRadius);
}
double radianChange = angularChange * Math.PI / 180D;
dist.rotateAroundY((float) radianChange);
return Vec3.createVectorHelper(axisX + dist.xCoord, y + 0.1875, axisZ + dist.zCoord);
}
@Override
public TrackGauge getGauge(World world, int x, int y, int z) {
return TrackGauge.STANDARD;
}
@Override
public int[] getDimensions() {
return new int[] {0, 0, 6, 0, 6, 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);
}
@Override
protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
dir = dir.getOpposite();
int dX = dir.offsetX;
int dZ = dir.offsetZ;
int rX = rot.offsetX;
int rZ = rot.offsetZ;
return world.getBlock(x + dX, y, z + dZ).isReplaceable(world, x + dX, y, z + dZ) &&
world.getBlock(x + rX, y, z + rZ).isReplaceable(world, x + rX, y, z + rZ) &&
world.getBlock(x + dX + rX, y, z + dZ + rZ).isReplaceable(world, x + dX + rX, y, z + dZ + rZ) &&
world.getBlock(x + dX + rX * 2, y, z + dZ + rZ * 2).isReplaceable(world, x + dX + rX * 2, y, z + dZ + rZ * 2) &&
world.getBlock(x + dX * 2 + rX, y, z + dZ * 2 + rZ).isReplaceable(world, x + dX * 2 + rX, y, z + dZ * 2 + rZ) &&
world.getBlock(x + dX * 2 + rX * 2, y, z + dZ * 2 + rZ * 2).isReplaceable(world, x + dX * 2 + rX * 2, y, z + dZ * 2 + rZ * 2) &&
world.getBlock(x + dX * 3 + rX, y, z + dZ * 3 + rZ).isReplaceable(world, x + dX * 3 + rX, y, z + dZ * 3 + rZ) &&
world.getBlock(x + dX * 3 + rX * 2, y, z + dZ * 3 + rZ * 2).isReplaceable(world, x + dX * 3 + rX * 2, y, z + dZ * 3 + rZ * 2) &&
world.getBlock(x + dX * 2 + rX * 3, y, z + dZ * 2 + rZ * 3).isReplaceable(world, x + dX * 2 + rX * 3, y, z + dZ * 2 + rZ * 3) &&
world.getBlock(x + dX * 3 + rX * 3, y, z + dZ * 3 + rZ * 3).isReplaceable(world, x + dX * 3 + rX * 3, y, z + dZ * 3 + rZ * 3) &&
world.getBlock(x + dX * 4 + rX * 3, y, z + dZ * 4 + rZ * 3).isReplaceable(world, x + dX * 4 + rX * 3, y, z + dZ * 4 + rZ * 3) &&
world.getBlock(x + dX * 3 + rX * 4, y, z + dZ * 3 + rZ * 4).isReplaceable(world, x + dX * 3 + rX * 4, y, z + dZ * 3 + rZ * 4) &&
world.getBlock(x + dX * 4 + rX * 4, y, z + dZ * 4 + rZ * 4).isReplaceable(world, x + dX * 4 + rX * 4, y, z + dZ * 4 + rZ * 4);
}
@Override
protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
BlockDummyable.safeRem = true;
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
dir = dir.getOpposite();
int dX = dir.offsetX;
int dZ = dir.offsetZ;
int rX = rot.offsetX;
int rZ = rot.offsetZ;
world.setBlock(x + dX, y, z + dZ, this, dir.ordinal(), 3);
world.setBlock(x + dX * 2, y, z + dZ * 2, this, dir.ordinal(), 3);
world.setBlock(x + rX, y, z + rZ, this, rot.ordinal(), 3);
world.setBlock(x + dX + rX, y, z + dZ + rZ, this, rot.ordinal(), 3);
world.setBlock(x + dX * 2 + rX, y, z + dZ * 2 + rZ, this, rot.ordinal(), 3);
world.setBlock(x + dX * 3 + rX, y, z + dZ * 3 + rZ, this, dir.ordinal(), 3);
world.setBlock(x + dX * 4 + rX, y, z + dZ * 4 + rZ, this, dir.ordinal(), 3);
world.setBlock(x + dX * 2 + rX * 2, y, z + dZ * 2 + rZ * 2, this, rot.ordinal(), 3);
world.setBlock(x + dX * 3 + rX * 2, y, z + dZ * 3 + rZ * 2, this, dir.ordinal(), 3);
world.setBlock(x + dX * 4 + rX * 2, y, z + dZ * 4 + rZ * 2, this, dir.ordinal(), 3);
world.setBlock(x + dX * 5 + rX * 2, y, z + dZ * 5 + rZ * 2, this, dir.ordinal(), 3);
world.setBlock(x + dX * 3 + rX * 3, y, z + dZ * 3 + rZ * 3, this, rot.ordinal(), 3);
world.setBlock(x + dX * 4 + rX * 3, y, z + dZ * 4 + rZ * 3, this, dir.ordinal(), 3);
world.setBlock(x + dX * 5 + rX * 3, y, z + dZ * 5 + rZ * 3, this, dir.ordinal(), 3);
world.setBlock(x + dX * 4 + rX * 4, y, z + dZ * 4 + rZ * 4, this, rot.ordinal(), 3);
world.setBlock(x + dX * 5 + rX * 4, y, z + dZ * 5 + rZ * 4, this, dir.ordinal(), 3);
world.setBlock(x + dX * 6 + rX * 4, y, z + dZ * 6 + rZ * 4, this, dir.ordinal(), 3);
world.setBlock(x + dX * 5 + rX * 5, y, z + dZ * 5 + rZ * 5, this, rot.ordinal(), 3);
world.setBlock(x + dX * 5 + rX * 6, y, z + dZ * 5 + rZ * 6, this, rot.ordinal(), 3);
world.setBlock(x + dX * 6 + rX * 5, y, z + dZ * 6 + rZ * 5, this, rot.ordinal(), 3);
world.setBlock(x + dX * 6 + rX * 6, y, z + dZ * 6 + rZ * 6, this, rot.ordinal(), 3);
BlockDummyable.safeRem = false;
}
@Override
@SideOnly(Side.CLIENT)
public void renderInventory(Tessellator tessellator, Block block, int metadata) {
GL11.glScaled(0.12, 0.12, 0.12);
GL11.glTranslated(2.5, -0.0625, -3);
GL11.glRotated(90, 0, 1, 0);
tessellator.startDrawingQuads();
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_curve_wide, block.getIcon(1, 0), tessellator, 0, false);
tessellator.draw();
}
@Override
@SideOnly(Side.CLIENT)
public void renderWorld(Tessellator tessellator, Block block, int meta, IBlockAccess world, int x, int y, int z) {
if(meta < 12) return;
float rotation = 0;
if(meta == 15) rotation = 90F / 180F * (float) Math.PI;
if(meta == 12) rotation = 180F / 180F * (float) Math.PI;
if(meta == 14) rotation = 270F / 180F * (float) Math.PI;
tessellator.addTranslation(x + 0.5F, y, z + 0.5F);
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_curve_wide, block.getIcon(1, 0), tessellator, rotation, true);
tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F);
}
}

View File

@ -0,0 +1,113 @@
package com.hbm.blocks.rail;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.BlockDummyable;
import com.hbm.main.ResourceManager;
import com.hbm.render.util.ObjUtil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.obj.WavefrontObject;
import net.minecraftforge.common.util.ForgeDirection;
public class RailStandardCurveWide7 extends RailStandardCurveBase {
public RailStandardCurveWide7() {
super();
this.width = 6;
}
@Override
protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
dir = dir.getOpposite();
int dX = dir.offsetX;
int dZ = dir.offsetZ;
int rX = rot.offsetX;
int rZ = rot.offsetZ;
return world.getBlock(x + dX, y, z + dZ).isReplaceable(world, x + dX, y, z + dZ) &&
world.getBlock(x + rX, y, z + rZ).isReplaceable(world, x + rX, y, z + rZ) &&
world.getBlock(x + dX + rX, y, z + dZ + rZ).isReplaceable(world, x + dX + rX, y, z + dZ + rZ) &&
world.getBlock(x + dX + rX * 2, y, z + dZ + rZ * 2).isReplaceable(world, x + dX + rX * 2, y, z + dZ + rZ * 2) &&
world.getBlock(x + dX * 2 + rX, y, z + dZ * 2 + rZ).isReplaceable(world, x + dX * 2 + rX, y, z + dZ * 2 + rZ) &&
world.getBlock(x + dX * 2 + rX * 2, y, z + dZ * 2 + rZ * 2).isReplaceable(world, x + dX * 2 + rX * 2, y, z + dZ * 2 + rZ * 2) &&
world.getBlock(x + dX * 3 + rX, y, z + dZ * 3 + rZ).isReplaceable(world, x + dX * 3 + rX, y, z + dZ * 3 + rZ) &&
world.getBlock(x + dX * 3 + rX * 2, y, z + dZ * 3 + rZ * 2).isReplaceable(world, x + dX * 3 + rX * 2, y, z + dZ * 3 + rZ * 2) &&
world.getBlock(x + dX * 2 + rX * 3, y, z + dZ * 2 + rZ * 3).isReplaceable(world, x + dX * 2 + rX * 3, y, z + dZ * 2 + rZ * 3) &&
world.getBlock(x + dX * 3 + rX * 3, y, z + dZ * 3 + rZ * 3).isReplaceable(world, x + dX * 3 + rX * 3, y, z + dZ * 3 + rZ * 3) &&
world.getBlock(x + dX * 4 + rX * 3, y, z + dZ * 4 + rZ * 3).isReplaceable(world, x + dX * 4 + rX * 3, y, z + dZ * 4 + rZ * 3) &&
world.getBlock(x + dX * 3 + rX * 4, y, z + dZ * 3 + rZ * 4).isReplaceable(world, x + dX * 3 + rX * 4, y, z + dZ * 3 + rZ * 4) &&
world.getBlock(x + dX * 4 + rX * 4, y, z + dZ * 4 + rZ * 4).isReplaceable(world, x + dX * 4 + rX * 4, y, z + dZ * 4 + rZ * 4);
}
@Override
protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
BlockDummyable.safeRem = true;
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
dir = dir.getOpposite();
int dX = dir.offsetX;
int dZ = dir.offsetZ;
int rX = rot.offsetX;
int rZ = rot.offsetZ;
world.setBlock(x + dX, y, z + dZ, this, dir.ordinal(), 3);
world.setBlock(x + dX * 2, y, z + dZ * 2, this, dir.ordinal(), 3);
world.setBlock(x + rX, y, z + rZ, this, rot.ordinal(), 3);
world.setBlock(x + dX + rX, y, z + dZ + rZ, this, rot.ordinal(), 3);
world.setBlock(x + dX * 2 + rX, y, z + dZ * 2 + rZ, this, rot.ordinal(), 3);
world.setBlock(x + dX * 3 + rX, y, z + dZ * 3 + rZ, this, dir.ordinal(), 3);
world.setBlock(x + dX * 4 + rX, y, z + dZ * 4 + rZ, this, dir.ordinal(), 3);
world.setBlock(x + dX * 2 + rX * 2, y, z + dZ * 2 + rZ * 2, this, rot.ordinal(), 3);
world.setBlock(x + dX * 3 + rX * 2, y, z + dZ * 3 + rZ * 2, this, dir.ordinal(), 3);
world.setBlock(x + dX * 4 + rX * 2, y, z + dZ * 4 + rZ * 2, this, dir.ordinal(), 3);
world.setBlock(x + dX * 5 + rX * 2, y, z + dZ * 5 + rZ * 2, this, dir.ordinal(), 3);
world.setBlock(x + dX * 3 + rX * 3, y, z + dZ * 3 + rZ * 3, this, rot.ordinal(), 3);
world.setBlock(x + dX * 4 + rX * 3, y, z + dZ * 4 + rZ * 3, this, dir.ordinal(), 3);
world.setBlock(x + dX * 5 + rX * 3, y, z + dZ * 5 + rZ * 3, this, dir.ordinal(), 3);
world.setBlock(x + dX * 4 + rX * 4, y, z + dZ * 4 + rZ * 4, this, rot.ordinal(), 3);
world.setBlock(x + dX * 5 + rX * 4, y, z + dZ * 5 + rZ * 4, this, dir.ordinal(), 3);
world.setBlock(x + dX * 6 + rX * 4, y, z + dZ * 6 + rZ * 4, this, dir.ordinal(), 3);
world.setBlock(x + dX * 5 + rX * 5, y, z + dZ * 5 + rZ * 5, this, rot.ordinal(), 3);
world.setBlock(x + dX * 5 + rX * 6, y, z + dZ * 5 + rZ * 6, this, rot.ordinal(), 3);
world.setBlock(x + dX * 6 + rX * 5, y, z + dZ * 6 + rZ * 5, this, rot.ordinal(), 3);
world.setBlock(x + dX * 6 + rX * 6, y, z + dZ * 6 + rZ * 6, this, rot.ordinal(), 3);
BlockDummyable.safeRem = false;
}
@Override
@SideOnly(Side.CLIENT)
public void renderInventory(Tessellator tessellator, Block block, int metadata) {
GL11.glScaled(0.225, 0.225, 0.225);
GL11.glRotated(45, 0, 1, 0);
GL11.glRotated(60, 1, 0, 0);
GL11.glTranslated(3, 0, 3);
tessellator.startDrawingQuads();
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_curve_wide7, block.getIcon(1, 0), tessellator, 0, false);
tessellator.draw();
}
@Override
@SideOnly(Side.CLIENT)
public void renderWorld(Tessellator tessellator, Block block, int meta, IBlockAccess world, int x, int y, int z) {
if(meta < 12) return;
float rotation = 0;
if(meta == 15) rotation = 90F / 180F * (float) Math.PI;
if(meta == 12) rotation = 180F / 180F * (float) Math.PI;
if(meta == 14) rotation = 270F / 180F * (float) Math.PI;
tessellator.addTranslation(x + 0.5F, y, z + 0.5F);
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_curve_wide7, block.getIcon(1, 0), tessellator, rotation, true);
tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F);
}
}

View File

@ -0,0 +1,148 @@
package com.hbm.blocks.rail;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.BlockDummyable;
import com.hbm.main.ResourceManager;
import com.hbm.render.util.ObjUtil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.obj.WavefrontObject;
import net.minecraftforge.common.util.ForgeDirection;
public class RailStandardCurveWide9 extends RailStandardCurveBase {
public RailStandardCurveWide9() {
super();
this.width = 8;
}
@Override
protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
dir = dir.getOpposite();
int dX = dir.offsetX;
int dZ = dir.offsetZ;
int rX = rot.offsetX;
int rZ = rot.offsetZ;
int[][] dim = new int[][] {
{1, 0},
{2, 0},
{0, 1},
{1, 1},
{2, 1},
{3, 1},
{4, 1},
{2, 2},
{3, 2},
{4, 2},
{5, 2},
{4, 3},
{5, 3},
{5, 4},
{6, 3},
{6, 4},
{7, 4},
{6, 5},
{7, 5},
{6, 6},
{7, 6},
{7, 7},
{7, 8},
{8, 6},
{8, 7},
{8, 8},
};
for(int[] array : dim) {
if(!world.getBlock(x + dX * array[0] + rX * array[1], y, z + dZ * array[0] + rZ * array[1]).isReplaceable(world, x + dX * array[0] + rX * array[1], y, z + dZ * array[0] + rZ * array[1])) return false;
}
return true;
}
@Override
protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
BlockDummyable.safeRem = true;
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
dir = dir.getOpposite();
int dX = dir.offsetX;
int dZ = dir.offsetZ;
int rX = rot.offsetX;
int rZ = rot.offsetZ;
int d = dir.ordinal();
int r = rot.ordinal();
int[][] dim = new int[][] {
{1, 0, d},
{2, 0, d},
{0, 1, r},
{1, 1, d},
{2, 1, d},
{3, 1, d},
{4, 1, d},
{2, 2, r},
{3, 2, r},
{4, 2, r},
{5, 2, d},
{4, 3, r},
{5, 3, r},
{5, 4, r},
{6, 3, d},
{6, 4, d},
{7, 4, d},
{6, 5, r},
{7, 5, r},
{6, 6, r},
{7, 6, r},
{7, 7, r},
{7, 8, r},
{8, 6, d},
{8, 7, d},
{8, 8, d},
};
for(int[] array : dim) {
world.setBlock(x + dX * array[0] + rX * array[1], y, z + dZ * array[0] + rZ * array[1], this, array[2], 3);
}
BlockDummyable.safeRem = false;
}
@Override
@SideOnly(Side.CLIENT)
public void renderInventory(Tessellator tessellator, Block block, int metadata) {
GL11.glScaled(0.175, 0.175, 0.175);
GL11.glRotated(45, 0, 1, 0);
GL11.glRotated(60, 1, 0, 0);
GL11.glTranslated(4, 0, 4);
tessellator.startDrawingQuads();
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_curve_wide9, block.getIcon(1, 0), tessellator, 0, false);
tessellator.draw();
}
@Override
@SideOnly(Side.CLIENT)
public void renderWorld(Tessellator tessellator, Block block, int meta, IBlockAccess world, int x, int y, int z) {
if(meta < 12) return;
float rotation = 0;
if(meta == 15) rotation = 90F / 180F * (float) Math.PI;
if(meta == 12) rotation = 180F / 180F * (float) Math.PI;
if(meta == 14) rotation = 270F / 180F * (float) Math.PI;
tessellator.addTranslation(x + 0.5F, y, z + 0.5F);
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_curve_wide9, block.getIcon(1, 0), tessellator, rotation, true);
tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F);
}
}

View File

@ -223,6 +223,7 @@ public class EntityMappings {
addEntity(EntityAcidBomb.class, "entity_acid_bomb", 1000);
addEntity(EntityFallingBlockNT.class, "entity_falling_block_nt", 1000);
addEntity(EntityBoatRubber.class, "entity_rubber_boat", 250, false);
addEntity(EntityMissileStealth.class, "entity_missile_stealth", 1000);
addEntity(EntityItemWaste.class, "entity_item_waste", 100);
addEntity(EntityItemBuoyant.class, "entity_item_buoyant", 100);

View File

@ -108,7 +108,8 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements
for(Entity e : TileEntityMachineRadarNT.matchingEntities) {
if(e.dimension != this.dimension) continue;
if(!(e instanceof EntityMissileBaseNT)) continue;
if(!(e instanceof EntityMissileBaseNT)) continue; //can only lock onto missiles
if(e instanceof EntityMissileStealth) continue; //cannot lack onto missiles with stealth coating
Vec3 vec = Vec3.createVectorHelper(e.posX - posX, e.posY - posY, e.posZ - posZ);

View File

@ -15,7 +15,6 @@ import com.hbm.explosion.vanillant.standard.ExplosionEffectStandard;
import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard;
import com.hbm.main.MainRegistry;
import api.hbm.entity.IRadarDetectable;
import api.hbm.entity.IRadarDetectableNT;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -31,7 +30,7 @@ import net.minecraftforge.common.ForgeChunkManager;
import net.minecraftforge.common.ForgeChunkManager.Ticket;
import net.minecraftforge.common.ForgeChunkManager.Type;
public abstract class EntityMissileBaseNT extends EntityThrowableInterp implements IChunkLoader, IRadarDetectable, IRadarDetectableNT {
public abstract class EntityMissileBaseNT extends EntityThrowableInterp implements IChunkLoader, IRadarDetectableNT {
public int startX;
public int startZ;

View File

@ -105,11 +105,6 @@ public class EntityMissileDoomsday extends EntityMissileBaseNT {
return null;
}
@Override
public RadarTargetType getTargetType() {
return RadarTargetType.MISSILE_TIER4;
}
@Override
public String getUnlocalizedName() {
return "radar.target.doomsday";

View File

@ -61,11 +61,6 @@ public class EntityMissileShuttle extends EntityMissileBaseNT {
return new ItemStack(ModItems.missile_generic);
}
@Override
public RadarTargetType getTargetType() {
return RadarTargetType.MISSILE_TIER3;
}
@Override
public String getUnlocalizedName() {
return "radar.target.shuttle";

View File

@ -0,0 +1,33 @@
package com.hbm.entity.missile;
import java.util.ArrayList;
import java.util.List;
import com.hbm.inventory.OreDictManager.DictFrame;
import com.hbm.inventory.material.Mats;
import com.hbm.items.ItemEnums.EnumAshType;
import com.hbm.items.ModItems;
import api.hbm.entity.IRadarDetectableNT;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
public class EntityMissileStealth extends EntityMissileBaseNT {
public EntityMissileStealth(World world) { super(world); }
public EntityMissileStealth(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); }
@Override
public List<ItemStack> getDebris() {
List<ItemStack> list = new ArrayList<ItemStack>();
list.add(new ItemStack(ModItems.bolt, 4, Mats.MAT_STEEL.id));
return list;
}
@Override public String getUnlocalizedName() { return "radar.target.tier1"; }
@Override public int getBlipLevel() { return IRadarDetectableNT.TIER1; }
@Override public boolean canBeSeenBy(Object radar) { return false; }
@Override public void onImpact() { this.explodeStandard(20F, 24, false, true); }
@Override public ItemStack getDebrisRareDrop() { return DictFrame.fromOne(ModItems.powder_ash, EnumAshType.MISC); }
}

View File

@ -37,11 +37,6 @@ public abstract class EntityMissileTier0 extends EntityMissileBaseNT {
return list;
}
@Override
public RadarTargetType getTargetType() {
return RadarTargetType.MISSILE_TIER0;
}
@Override
public String getUnlocalizedName() {
return "radar.target.tier0";

View File

@ -25,11 +25,6 @@ public abstract class EntityMissileTier1 extends EntityMissileBaseNT {
return list;
}
@Override
public RadarTargetType getTargetType() {
return RadarTargetType.MISSILE_TIER1;
}
@Override
public String getUnlocalizedName() {
return "radar.target.tier1";

View File

@ -29,11 +29,6 @@ public abstract class EntityMissileTier2 extends EntityMissileBaseNT {
return list;
}
@Override
public RadarTargetType getTargetType() {
return RadarTargetType.MISSILE_TIER2;
}
@Override
public String getUnlocalizedName() {
return "radar.target.tier2";

View File

@ -31,11 +31,6 @@ public abstract class EntityMissileTier3 extends EntityMissileBaseNT {
return list;
}
@Override
public RadarTargetType getTargetType() {
return RadarTargetType.MISSILE_TIER3;
}
@Override
public String getUnlocalizedName() {
return "radar.target.tier3";

View File

@ -30,11 +30,6 @@ public abstract class EntityMissileTier4 extends EntityMissileBaseNT {
return list;
}
@Override
public RadarTargetType getTargetType() {
return RadarTargetType.MISSILE_TIER4;
}
@Override
public String getUnlocalizedName() {
return "radar.target.tier4";

View File

@ -131,7 +131,7 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay {
data.setInteger("color", 0x0000ff);
data.setFloat("scale", 1.5F);
data.setString("text", id + " (#" + train.ltuIndex + ")");
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, train.posX, train.posY + 1, train.posZ), new TargetPoint(this.dimension, train.posX, train.posY + 1, train.posZ, 50));
//PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, train.posX, train.posY + 1, train.posZ), new TargetPoint(this.dimension, train.posX, train.posY + 1, train.posZ, 50));
}
}
@ -891,6 +891,6 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay {
@SideOnly(Side.CLIENT)
public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) {
List<String> text = new ArrayList();
ILookOverlay.printGeneric(event, this.getClass().getSimpleName() + " " + this.hashCode(), 0xffff00, 0x404000, text); //none of this shit is going to work anyway
//ILookOverlay.printGeneric(event, this.getClass().getSimpleName() + " " + this.hashCode(), 0xffff00, 0x404000, text);
}
}

View File

@ -22,7 +22,7 @@ public abstract class EntityRailCarCargo extends EntityRailCarBase implements II
this.dataWatcher.addObject(10, new Integer(0));
}
public int countVacantSlots() {
public int countOccupiedSlots() {
int slots = 0;
for(int i = 0; i < this.getSizeInventory(); i++) {
@ -53,11 +53,9 @@ public abstract class EntityRailCarCargo extends EntityRailCarBase implements II
this.slots[slot] = null;
}
if(!this.worldObj.isRemote) this.dataWatcher.updateObject(10, this.countVacantSlots());
return itemstack;
}
} else {
if(!this.worldObj.isRemote) this.dataWatcher.updateObject(10, this.countVacantSlots());
return null;
}
}
@ -67,10 +65,8 @@ public abstract class EntityRailCarCargo extends EntityRailCarBase implements II
if(this.slots[slot] != null) {
ItemStack itemstack = this.slots[slot];
this.slots[slot] = null;
if(!this.worldObj.isRemote) this.dataWatcher.updateObject(10, this.countVacantSlots());
return itemstack;
} else {
if(!this.worldObj.isRemote) this.dataWatcher.updateObject(10, this.countVacantSlots());
return null;
}
}
@ -82,8 +78,12 @@ public abstract class EntityRailCarCargo extends EntityRailCarBase implements II
if(stack != null && stack.stackSize > this.getInventoryStackLimit()) {
stack.stackSize = this.getInventoryStackLimit();
}
if(!this.worldObj.isRemote) this.dataWatcher.updateObject(10, this.countVacantSlots());
}
@Override
public void onUpdate() {
super.onUpdate();
if(!this.worldObj.isRemote) this.dataWatcher.updateObject(10, this.countOccupiedSlots());
}
@Override
@ -142,7 +142,7 @@ public abstract class EntityRailCarCargo extends EntityRailCarBase implements II
}
}
this.dataWatcher.updateObject(10, this.countVacantSlots());
this.dataWatcher.updateObject(10, this.countOccupiedSlots());
}
@Override

View File

@ -291,6 +291,6 @@ public abstract class EntityRailCarRidable extends EntityRailCarCargo {
text.add("Front: " + this.coupledFront);
text.add("Back: " + this.coupledBack);*/
text.add("Nearest seat: " + this.getNearestSeat(MainRegistry.proxy.me()));
ILookOverlay.printGeneric(event, this.getClass().getSimpleName() + " " + this.hashCode(), 0xffff00, 0x404000, text);
//ILookOverlay.printGeneric(event, this.getClass().getSimpleName() + " " + this.hashCode(), 0xffff00, 0x404000, text);
}
}

View File

@ -83,7 +83,7 @@ public class Gun44MagnumFactory {
GunConfiguration config = getBaseConfig();
config.durability = 4000;
config.durability = 31_000;
config.name = "ifScope";
config.manufacturer = EnumGunManufacturer.IF;

View File

@ -1,82 +0,0 @@
package com.hbm.inventory.container;
import com.hbm.tileentity.bomb.TileEntityNukeN45;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class ContainerNukeN45 extends Container {
private TileEntityNukeN45 diFurnace;
public ContainerNukeN45(InventoryPlayer invPlayer, TileEntityNukeN45 tedf) {
diFurnace = tedf;
//Payload
this.addSlotToContainer(new Slot(tedf, 0, 44, 35));
//Range up
this.addSlotToContainer(new Slot(tedf, 1, 116, 35));
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 9; j++)
{
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
}
}
for(int i = 0; i < 9; i++)
{
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142));
}
}
@Override
public void addCraftingToCrafters(ICrafting crafting) {
super.addCraftingToCrafters(crafting);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2)
{
ItemStack var3 = null;
Slot var4 = (Slot) this.inventorySlots.get(par2);
if (var4 != null && var4.getHasStack())
{
ItemStack var5 = var4.getStack();
var3 = var5.copy();
if (par2 <= 1) {
if (!this.mergeItemStack(var5, 2, this.inventorySlots.size(), true))
{
return null;
}
}
else if (!this.mergeItemStack(var5, 0, 2, false))
{
return null;
}
if (var5.stackSize == 0)
{
var4.putStack((ItemStack) null);
}
else
{
var4.onSlotChanged();
}
}
return var3;
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return diFurnace.isUseableByPlayer(player);
}
}

View File

@ -1,73 +0,0 @@
package com.hbm.inventory.gui;
import org.lwjgl.opengl.GL11;
import com.hbm.inventory.container.ContainerNukeN45;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.bomb.TileEntityNukeN45;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.ResourceLocation;
public class GUINukeN45 extends GuiInfoContainer {
public static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/weapon/gui_n45.png");
private TileEntityNukeN45 diFurnace;
public GUINukeN45(InventoryPlayer invPlayer, TileEntityNukeN45 tedf) {
super(new ContainerNukeN45(invPlayer, tedf));
diFurnace = tedf;
this.xSize = 176;
this.ySize = 168;
}
@Override
public void drawScreen(int mouseX, int mouseY, float f) {
super.drawScreen(mouseX, mouseY, f);
String[] text = new String[] { "The first slot holds the payload.",
"Acceptable payloads:",
" -Det Cord",
" -TNT",
" -Explosive Charge",
" -Nuclear Charge",
"Using detonator while in mine mode will",
"arm the mine, set to explode when",
"it detects a large entity nearby."};
this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text);
String[] text1 = new String[] { "The second slot is for green machine",
"upgrades. Entity detection range increases",
"by 5 blocks for every level.",
"When left empty, the mine can not be armed",
"an will behave like a regular bomb." };
this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, text1);
if(diFurnace.primed)
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 121, guiTop + 22, 6, 8, mouseX, mouseY, new String[]{ "Mine armed!" } );
}
@Override
protected void drawGuiContainerForegroundLayer(int i, int j) {
String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName());
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
}
@Override
protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
if(diFurnace.primed) {
drawTexturedModalRect(guiLeft + 121, guiTop + 22, 176, 0, 6, 8);
}
this.drawInfoPanel(guiLeft - 16, guiTop + 36, 16, 16, 2);
this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 16, 16, 16, 3);
}
}

View File

@ -197,6 +197,7 @@ public class AssemblerRecipes {
makeRecipe(new ComparableStack(ModItems.warhead_volcano, 1), new AStack[] {new OreDictStack(TI.plate(), 24), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_nuke, 3), new OreDictStack(U238.block(), 24), new ComparableStack(ModItems.circuit_tantalium, 5) }, 600);
makeRecipe(new ComparableStack(ModItems.warhead_thermo_endo, 1), new AStack[] {new ComparableStack(ModBlocks.therm_endo, 2), new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.circuit_targeting_tier3, 1) },300);
makeRecipe(new ComparableStack(ModItems.warhead_thermo_exo, 1), new AStack[] {new ComparableStack(ModBlocks.therm_exo, 2), new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.circuit_targeting_tier3, 1) },300);
makeRecipe(new ComparableStack(ModItems.missile_stealth, 1), new AStack[] { new OreDictStack(TI.plate(), 20), new OreDictStack(AL.plate(), 20), new OreDictStack(CU.plate(), 10), new OreDictStack(KEY_BLACK, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit_gold), new OreDictStack(STEEL.bolt(), 32) },1200);
makeRecipe(new ComparableStack(ModItems.thruster_nuclear, 1), new AStack[] {new OreDictStack(DURA.ingot(), 32), new OreDictStack(B.ingot(), 8), new OreDictStack(PB.plate(), 16), new ComparableStack(ModItems.pipes_steel), new ComparableStack(ModItems.circuit_gold, 1) },600);
makeRecipe(new ComparableStack(ModItems.sat_base, 1), new AStack[] {new ComparableStack(ModItems.thruster_large, 1), new OreDictStack(STEEL.plate(), 6), new ComparableStack(ModItems.plate_desh, 4), new ComparableStack(ModItems.hull_big_titanium, 3), new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), new ComparableStack(ModItems.photo_panel, 24), new ComparableStack(ModItems.board_copper, 12), new ComparableStack(ModItems.circuit_gold, 6), new ComparableStack(ModItems.battery_lithium_cell_6, 1), },500);
makeRecipe(new ComparableStack(ModItems.sat_head_mapper, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 4), new OreDictStack(STEEL.plate(), 6), new ComparableStack(ModItems.hull_small_steel, 3), new ComparableStack(ModItems.plate_desh, 2), new ComparableStack(ModItems.circuit_gold, 2), new OreDictStack(RUBBER.ingot(), 12), new OreDictStack(REDSTONE.dust(), 6), new ComparableStack(Items.diamond, 1), new ComparableStack(Blocks.glass_pane, 6), },400);

View File

@ -1321,6 +1321,7 @@ public class ModItems {
public static Item missile_schrabidium;
public static Item missile_emp;
public static Item missile_shuttle;
public static Item missile_stealth;
public static Item mp_thruster_10_kerosene;
public static Item mp_thruster_10_kerosene_tec;
@ -3940,6 +3941,7 @@ public class ModItems {
missile_schrabidium = new Item().setUnlocalizedName("missile_schrabidium").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_schrabidium");
missile_emp = new Item().setUnlocalizedName("missile_emp").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_emp");
missile_shuttle = new ItemMissileShuttle().setUnlocalizedName("missile_shuttle").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_shuttle");
missile_stealth = new Item().setUnlocalizedName("missile_stealth").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_stealth");
missile_carrier = new Item().setUnlocalizedName("missile_carrier").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_carrier");
missile_soyuz = new ItemSoyuz().setUnlocalizedName("missile_soyuz").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":soyuz");
missile_soyuz_lander = new ItemCustomLore().setUnlocalizedName("missile_soyuz_lander").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":soyuz_lander");
@ -6862,6 +6864,7 @@ public class ModItems {
GameRegistry.registerItem(missile_schrabidium, missile_schrabidium.getUnlocalizedName());
GameRegistry.registerItem(missile_emp, missile_emp.getUnlocalizedName());
GameRegistry.registerItem(missile_shuttle, missile_shuttle.getUnlocalizedName());
GameRegistry.registerItem(missile_stealth, missile_stealth.getUnlocalizedName());
GameRegistry.registerItem(missile_carrier, missile_carrier.getUnlocalizedName());
GameRegistry.registerItem(missile_soyuz, missile_soyuz.getUnlocalizedName());
GameRegistry.registerItem(missile_soyuz_lander, missile_soyuz_lander.getUnlocalizedName());

View File

@ -44,9 +44,9 @@ public class ItemTrain extends ItemEnumMulti {
public static enum EnumTrainType {
// Engine Gauge Max Speed Accel. Eng. Brake Parking Brake
CARGO_TRAM(TrainCargoTram.class, "Electric", "Standard Gauge", "10m/s", "0.2m/s", "<1m/s", "Yes"),
CARGO_TRAM(TrainCargoTram.class, "Electric", "Standard Gauge", "10m/s", "0.2m/s²", "<1m/s", "Yes"),
CARGO_TRAM_TRAILER(TrainCargoTramTrailer.class, null, "Standard Gauge", "Yes", null, null, "No"),
TUNNEL_BORE(TrainTunnelBore.class, "NONE", "Standard Gauge", "10m/s", "0.2m/s", "<1m/s", "Yes");
TUNNEL_BORE(TrainTunnelBore.class, "NONE", "Standard Gauge", "10m/s", "0.2m/s²", "<1m/s", "Yes");
public Class<? extends EntityRailCarBase> train;
public String engine;
@ -78,20 +78,24 @@ public class ItemTrain extends ItemEnumMulti {
try { train = type.train.getConstructor(World.class).newInstance(world); } catch(Exception e) { }
if(train != null && train.getGauge() == ((IRailNTM) b).getGauge(world, x, y, z)) {
if(!world.isRemote) {
train.setPosition(x + fx, y + fy, z + fz);
BlockPos anchor = train.getCurrentAnchorPos();
train.rotationYaw = entity.rotationYaw;
Vec3 corePos = train.getRelPosAlongRail(anchor, 0, new MoveContext(RailCheckType.CORE, 0));
train.setPosition(x + fx, y + fy, z + fz);
BlockPos anchor = train.getCurrentAnchorPos();
train.rotationYaw = entity.rotationYaw;
Vec3 corePos = train.getRelPosAlongRail(anchor, 0, new MoveContext(RailCheckType.CORE, 0));
if(corePos != null) {
train.setPosition(corePos.xCoord, corePos.yCoord, corePos.zCoord);
Vec3 frontPos = train.getRelPosAlongRail(anchor, train.getLengthSpan(), new MoveContext(RailCheckType.FRONT, train.getCollisionSpan() - train.getLengthSpan()));
Vec3 backPos = train.getRelPosAlongRail(anchor, -train.getLengthSpan(), new MoveContext(RailCheckType.BACK, train.getCollisionSpan() - train.getLengthSpan()));
train.rotationYaw = train.generateYaw(frontPos, backPos);
world.spawnEntityInWorld(train);
if(frontPos != null && backPos != null) {
if(!world.isRemote) {
train.rotationYaw = train.generateYaw(frontPos, backPos);
world.spawnEntityInWorld(train);
}
stack.stackSize--;
return true;
}
}
stack.stackSize--;
return true;
}
}

View File

@ -185,7 +185,6 @@ public class ClientProxy extends ServerProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityNukeSolinium.class, new RenderNukeSolinium());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityNukeN2.class, new RenderNukeN2());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityNukeMan.class, new RenderNukeMan());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityNukeN45.class, new RenderNukeN45());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityNukeBalefire.class, new RenderNukeFstbmb());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBombMulti.class, new RenderBombMulti());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityNukeMike.class, new RenderNukeMike());
@ -668,6 +667,7 @@ public class ClientProxy extends ServerProxy {
RenderingRegistry.registerEntityRenderingHandler(EntityMissileCustom.class, new RenderMissileCustom());
RenderingRegistry.registerEntityRenderingHandler(EntityMissileGeneric.class, new RenderMissileGeneric());
RenderingRegistry.registerEntityRenderingHandler(EntityMissileDecoy.class, new RenderMissileGeneric());
RenderingRegistry.registerEntityRenderingHandler(EntityMissileStealth.class, new RenderMissileGeneric());
RenderingRegistry.registerEntityRenderingHandler(EntityMissileAntiBallistic.class, new RenderMissileGeneric());
RenderingRegistry.registerEntityRenderingHandler(EntityMissileIncendiary.class, new RenderMissileGeneric());
RenderingRegistry.registerEntityRenderingHandler(EntityMissileCluster.class, new RenderMissileGeneric());

View File

@ -518,8 +518,12 @@ public class CraftingManager {
addShapelessAuto(new ItemStack(ModBlocks.rail_large_straight_short, 5), new Object[] { ModBlocks.rail_large_straight });
addRecipeAuto(new ItemStack(ModBlocks.rail_large_buffer, 1), new Object[] { " S", "RS", 'R', ModBlocks.rail_large_straight, 'S', STEEL.ingot() });
addRecipeAuto(new ItemStack(ModBlocks.rail_large_curve, 1), new Object[] { "R ", " R", 'R', ModBlocks.rail_large_straight });
addRecipeAuto(new ItemStack(ModBlocks.rail_large_curve_wide, 1), new Object[] { "RR", " R", 'R', ModBlocks.rail_large_straight });
addRecipeAuto(new ItemStack(ModBlocks.rail_large_curve_7, 1), new Object[] { "RR", " R", 'R', ModBlocks.rail_large_straight });
addRecipeAuto(new ItemStack(ModBlocks.rail_large_curve_9, 1), new Object[] { "RR ", " R", " R", 'R', ModBlocks.rail_large_straight });
addRecipeAuto(new ItemStack(ModBlocks.rail_large_ramp, 1), new Object[] { " R ", "SSS", 'R', ModBlocks.rail_large_straight, 'S', KEY_SLAB });
addRecipeAuto(new ItemStack(ModBlocks.rail_large_switch, 1), new Object[] { "R R", " RR", " R", 'R', ModBlocks.rail_large_straight });
addShapelessAuto(new ItemStack(ModBlocks.rail_large_switch), new Object[] { ModBlocks.rail_large_switch_flipped });
addShapelessAuto(new ItemStack(ModBlocks.rail_large_switch_flipped), new Object[] { ModBlocks.rail_large_switch });
addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.bomb_multi), 1), new Object[] { "AAD", "CHF", "AAD", 'A', ModItems.wire_aluminium, 'C', ModItems.circuit_aluminium, 'H', ModItems.hull_small_aluminium, 'F', ModItems.fins_quad_titanium, 'D', KEY_WHITE });
addShapelessAuto(new ItemStack(ModItems.powder_ice, 4), new Object[] { Items.snowball, KNO.dust(), REDSTONE.dust() });

View File

@ -1,6 +1,7 @@
package com.hbm.main;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Random;
@ -12,6 +13,10 @@ import org.lwjgl.opengl.GL11;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockAshes;
import com.hbm.blocks.rail.IRailNTM;
import com.hbm.blocks.rail.IRailNTM.MoveContext;
import com.hbm.blocks.rail.IRailNTM.RailCheckType;
import com.hbm.blocks.rail.IRailNTM.RailContext;
import com.hbm.config.GeneralConfig;
import com.hbm.entity.mob.EntityHunterChopper;
import com.hbm.entity.projectile.EntityChopperMine;
@ -64,6 +69,7 @@ import com.hbm.tileentity.machine.TileEntityNukeFurnace;
import com.hbm.util.I18nUtil;
import com.hbm.util.ItemStackUtil;
import com.hbm.util.LoggingUtil;
import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.wiaj.GuiWorldInAJar;
import com.hbm.wiaj.cannery.CanneryBase;
import com.hbm.wiaj.cannery.Jars;

View File

@ -1047,6 +1047,7 @@ public class ResourceManager {
//Missiles
public static final IModelCustom missileV2 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/missile_v2.obj")).asDisplayList();
public static final IModelCustom missileABM = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/missile_abm.obj")).asDisplayList();
public static final IModelCustom missileStealth = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/missile_stealth.obj"), false).asDisplayList();
public static final IModelCustom missileStrong = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/missile_strong.obj"));
public static final IModelCustom missileHuge = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/missile_huge.obj"));
public static final IModelCustom missileNuclear = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missileNeon.obj"));
@ -1191,6 +1192,7 @@ public class ResourceManager {
public static final ResourceLocation missileV2_BU_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_v2_bu.png");
public static final ResourceLocation missileV2_decoy_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_v2_decoy.png");
public static final ResourceLocation missileAA_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_abm.png");
public static final ResourceLocation missileStealth_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_stealth.png");
public static final ResourceLocation missileStrong_HE_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_strong.png");
public static final ResourceLocation missileStrong_EMP_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_strong_emp.png");
public static final ResourceLocation missileStrong_IN_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_strong_inc.png");
@ -1469,7 +1471,8 @@ public class ResourceManager {
public static final IModelCustom rail_standard_straight = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard.obj"));
public static final IModelCustom rail_standard_straight_short = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_short.obj"));
public static final IModelCustom rail_standard_curve = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_bend.obj"));
public static final IModelCustom rail_standard_curve_wide = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_bend_wide.obj"));
public static final IModelCustom rail_standard_curve_wide7 = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_bend_wide.obj"));
public static final IModelCustom rail_standard_curve_wide9 = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_bend_wide9.obj"));
public static final IModelCustom rail_standard_ramp = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_ramp.obj"));
public static final IModelCustom rail_standard_buffer = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_buffer.obj"));
public static final IModelCustom rail_standard_switch = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_switch.obj"));

View File

@ -5,7 +5,6 @@ import com.hbm.items.weapon.ItemMissile.PartSize;
import com.hbm.tileentity.TileEntityMachineBase;
import com.hbm.tileentity.bomb.TileEntityCompactLauncher;
import com.hbm.tileentity.bomb.TileEntityLaunchTable;
import com.hbm.tileentity.bomb.TileEntityNukeN45;
import com.hbm.tileentity.machine.TileEntityAMSBase;
import com.hbm.tileentity.machine.TileEntityAMSEmitter;
import com.hbm.tileentity.machine.TileEntityAMSLimiter;
@ -127,11 +126,6 @@ public class AuxGaugePacket implements IMessage {
if(m.id == 0)
boiler.heat = m.value;
}
if (te instanceof TileEntityNukeN45) {
TileEntityNukeN45 nuke = (TileEntityNukeN45)te;
nuke.primed = m.value == 1;
}
if (te instanceof TileEntityCompactLauncher) {
TileEntityCompactLauncher launcher = (TileEntityCompactLauncher)te;

View File

@ -3,6 +3,7 @@ package com.hbm.render.entity.rocket;
import org.lwjgl.opengl.GL11;
import com.hbm.entity.missile.EntityMissileAntiBallistic;
import com.hbm.entity.missile.EntityMissileStealth;
import com.hbm.entity.missile.EntityMissileTier1.*;
import com.hbm.main.ResourceManager;
@ -28,6 +29,9 @@ public class RenderMissileGeneric extends Render {
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileABM.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
} else if(entity instanceof EntityMissileStealth) {
bindTexture(ResourceManager.missileStealth_tex);
ResourceManager.missileStealth.renderAll();
} else {
if(entity instanceof EntityMissileGeneric)

View File

@ -32,19 +32,21 @@ public class RenderLaunchPadTier1 extends TileEntitySpecialRenderer {
//TODO: add a registry for missile rendering to be reused here and for the entity renderer
if(toRender.getItem() == ModItems.missile_generic) {
GL11.glScalef(1.0F, 1.0F, 1.0F);
bindTexture(ResourceManager.missileV2_HE_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileV2.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_decoy) {
GL11.glScalef(1.0F, 1.0F, 1.0F);
bindTexture(ResourceManager.missileV2_decoy_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileV2.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_stealth) {
bindTexture(ResourceManager.missileStealth_tex);
ResourceManager.missileStealth.renderAll();
}
if(toRender.getItem() == ModItems.missile_strong) {
GL11.glScalef(1.5F, 1.5F, 1.5F);
bindTexture(ResourceManager.missileStrong_HE_tex);

View File

@ -1,113 +0,0 @@
package com.hbm.render.tileentity;
import org.lwjgl.opengl.GL11;
import com.hbm.main.ResourceManager;
import com.hbm.tileentity.bomb.TileEntityNukeN45;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
public class RenderNukeN45 extends TileEntitySpecialRenderer {
@Override
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f)
{
boolean standing = tileEntity.getWorldObj().getBlock(tileEntity.xCoord, tileEntity.yCoord - 1, tileEntity.zCoord).isNormalCube();
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5D, y, z + 0.5D);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_CULL_FACE);
bindTexture(ResourceManager.universal);
GL11.glPushMatrix();
//GL11.glScaled(2.0D, 2.0D, 2.0D);
if(standing) {
ResourceManager.n45_stand.renderAll();
}
double d = 0.25;
if(((TileEntityNukeN45)tileEntity).primed)
d /= 4D;
GL11.glTranslated(0, standing ? 1D : 0.5D, 0);
ResourceManager.n45_globe.renderAll();
GL11.glRotated(90, 1, 0, 0);
for(int i = 0; i < 8; i++) {
ResourceManager.n45_knob.renderAll();
GL11.glTranslated(0, -d, 0);
ResourceManager.n45_rod.renderAll();
GL11.glTranslated(0, d, 0);
GL11.glRotated(45, 0, 0, 1);
}
GL11.glRotated(45, 0, 0, 1);
for(int i = 0; i < 4; i++) {
GL11.glRotated(-45, 1, 0, 0);
ResourceManager.n45_knob.renderAll();
GL11.glTranslated(0, -d, 0);
ResourceManager.n45_rod.renderAll();
GL11.glTranslated(0, d, 0);
GL11.glRotated(45, 1, 0, 0);
GL11.glRotated(90, 0, 0, 1);
}
GL11.glRotated(-90, 0, 0, 1);
for(int i = 0; i < 4; i++) {
GL11.glRotated(45, 1, 0, 0);
ResourceManager.n45_knob.renderAll();
GL11.glTranslated(0, -d, 0);
ResourceManager.n45_rod.renderAll();
GL11.glTranslated(0, d, 0);
GL11.glRotated(-45, 1, 0, 0);
GL11.glRotated(90, 0, 0, 1);
}
GL11.glRotated(45, 0, 0, 1);
GL11.glRotated(-90, 1, 0, 0);
ResourceManager.n45_knob.renderAll();
GL11.glTranslated(0, -d, 0);
ResourceManager.n45_rod.renderAll();
GL11.glTranslated(0, d, 0);
if(!standing) {
int depth = 0;
for(int i = 0; i < 51; i++) {
if(!tileEntity.getWorldObj().getBlock(tileEntity.xCoord, tileEntity.yCoord - i - 1, tileEntity.zCoord).isNormalCube()) {
depth++;
} else {
break;
}
}
if(depth != 0 && depth < 51) {
GL11.glTranslated(0, -1D, 0);
for(int i = 0; i < depth + 1; i++) {
ResourceManager.n45_chain.renderAll();
GL11.glTranslated(0, -1, 0);
}
}
}
GL11.glPopMatrix();
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glPopMatrix();
}
}

View File

@ -38,7 +38,7 @@ public class RenderSolarBoiler extends TileEntitySpecialRenderer {
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glPopMatrix();
if(te instanceof TileEntitySolarBoiler && Minecraft.getMinecraft().gameSettings.particleSetting < 2) {
if(te instanceof TileEntitySolarBoiler && !Minecraft.getMinecraft().gameSettings.fancyGraphics) {
TileEntitySolarBoiler boiler = (TileEntitySolarBoiler) te;
Tessellator tess = Tessellator.instance;

View File

@ -128,7 +128,6 @@ public class TileMappings {
put(TileEntityLandmine.class, "tileentity_landmine");
put(TileEntityMachineKeyForge.class, "tileentity_key_forge");
put(TileEntitySellafield.class, "tileentity_sellafield_core");
put(TileEntityNukeN45.class, "tileentity_n45");
put(TileEntityBlastDoor.class, "tileentity_blast_door");
put(TileEntitySafe.class, "tileentity_safe");
put(TileEntityMachineGasCent.class, "tileentity_gas_centrifuge");

View File

@ -12,6 +12,7 @@ import com.hbm.entity.missile.EntityMissileAntiBallistic;
import com.hbm.entity.missile.EntityMissileBaseNT;
import com.hbm.entity.missile.EntityMissileDoomsday;
import com.hbm.entity.missile.EntityMissileShuttle;
import com.hbm.entity.missile.EntityMissileStealth;
import com.hbm.entity.missile.EntityMissileTier0.*;
import com.hbm.entity.missile.EntityMissileTier1.*;
import com.hbm.entity.missile.EntityMissileTier2.*;
@ -88,8 +89,9 @@ public class TileEntityLaunchPad extends TileEntityMachineBase implements IEnerg
missiles.put(new ComparableStack(ModItems.missile_nuclear), EntityMissileNuclear.class);
missiles.put(new ComparableStack(ModItems.missile_nuclear_cluster), EntityMissileMirv.class);
missiles.put(new ComparableStack(ModItems.missile_volcano), EntityMissileVolcano.class);
missiles.put(new ComparableStack(ModItems.missile_doomsday), EntityMissileDoomsday.class);
missiles.put(new ComparableStack(ModItems.missile_stealth), EntityMissileStealth.class);
}
public ItemStack toRender;

View File

@ -1,326 +0,0 @@
package com.hbm.tileentity.bomb;
import java.util.List;
import com.hbm.blocks.ModBlocks;
import com.hbm.config.BombConfig;
import com.hbm.entity.effect.EntityNukeTorex;
import com.hbm.entity.logic.EntityNukeExplosionMK5;
import com.hbm.explosion.ExplosionLarge;
import com.hbm.inventory.container.ContainerNukeN45;
import com.hbm.inventory.gui.GUINukeN45;
import com.hbm.items.ModItems;
import com.hbm.packet.AuxGaugePacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.tileentity.IGUIProvider;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.potion.Potion;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
public class TileEntityNukeN45 extends TileEntity implements ISidedInventory, IGUIProvider {
public ItemStack slots[];
private String customName;
public boolean primed = false;
public TileEntityNukeN45() {
slots = new ItemStack[2];
}
@Override
public int getSizeInventory() {
return slots.length;
}
@Override
public ItemStack getStackInSlot(int i) {
return slots[i];
}
@Override
public ItemStack decrStackSize(int i, int j) {
if(slots[i] != null)
{
if(slots[i].stackSize <= j)
{
ItemStack itemStack = slots[i];
slots[i] = null;
return itemStack;
}
ItemStack itemStack1 = slots[i].splitStack(j);
if (slots[i].stackSize == 0)
{
slots[i] = null;
}
return itemStack1;
} else {
return null;
}
}
@Override
public ItemStack getStackInSlotOnClosing(int i) {
if(slots[i] != null)
{
ItemStack itemStack = slots[i];
slots[i] = null;
return itemStack;
} else {
return null;
}
}
@Override
public void setInventorySlotContents(int i, ItemStack itemStack) {
slots[i] = itemStack;
if(itemStack != null && itemStack.stackSize > getInventoryStackLimit())
{
itemStack.stackSize = getInventoryStackLimit();
}
}
@Override
public String getInventoryName() {
return this.hasCustomInventoryName() ? this.customName : "container.nukeN45";
}
@Override
public boolean hasCustomInventoryName() {
return this.customName != null && this.customName.length() > 0;
}
public void setCustomName(String name) {
this.customName = name;
}
@Override
public int getInventoryStackLimit() {
return 64;
}
@Override
public boolean isUseableByPlayer(EntityPlayer player) {
if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this)
{
return false;
}else{
return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=64;
}
}
@Override
public void openInventory() {
}
@Override
public void closeInventory() {
}
@Override
public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) {
return false;
}
@Override
public int[] getAccessibleSlotsFromSide(int p_94128_1_) {
return new int[0];
}
@Override
public boolean canInsertItem(int i, ItemStack itemStack, int j) {
return this.isItemValidForSlot(i, itemStack);
}
@Override
public boolean canExtractItem(int i, ItemStack itemStack, int j) {
return true;
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
NBTTagList list = nbt.getTagList("items", 10);
primed = nbt.getBoolean("primed");
slots = new ItemStack[getSizeInventory()];
for(int i = 0; i < list.tagCount(); i++)
{
NBTTagCompound nbt1 = list.getCompoundTagAt(i);
byte b0 = nbt1.getByte("slot");
if(b0 >= 0 && b0 < slots.length)
{
slots[b0] = ItemStack.loadItemStackFromNBT(nbt1);
}
}
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
NBTTagList list = new NBTTagList();
nbt.setBoolean("primed", primed);
for(int i = 0; i < slots.length; i++)
{
if(slots[i] != null)
{
NBTTagCompound nbt1 = new NBTTagCompound();
nbt1.setByte("slot", (byte)i);
slots[i].writeToNBT(nbt1);
list.appendTag(nbt1);
}
}
nbt.setTag("items", list);
}
public void updateEntity() {
if(!worldObj.isRemote) {
PacketDispatcher.wrapper.sendToAllAround(new AuxGaugePacket(xCoord, yCoord, zCoord, primed ? 1 : 0, 0), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 150));
if(primed) {
if(getType() == 0) {
return;
}
int rad = 0;
if(slots[1] != null) {
if(slots[1].getItem() == ModItems.upgrade_effect_1)
rad = 5;
if(slots[1].getItem() == ModItems.upgrade_effect_2)
rad = 10;
if(slots[1].getItem() == ModItems.upgrade_effect_3)
rad = 15;
}
if(rad == 0) {
primed = false;
return;
}
List<Object> list = worldObj.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(xCoord + 0.5 - rad, yCoord + 0.5 - rad, zCoord + 0.5 - rad, xCoord + 0.5 + rad, yCoord + 0.5 + rad, zCoord + 0.5 + rad));
for(Object o : list) {
Entity e = (Entity)o;
if(e instanceof EntityLivingBase && e.width * e.width * e.height >= 0.5 && !((EntityLivingBase)e).isPotionActive(Potion.invisibility.id)) {
int t = getType();
this.clearSlots();
explode(worldObj, xCoord, yCoord, zCoord, t);
break;
}
}
}
}
}
public static void explode(World world, int x, int y, int z, int type) {
if(!world.isRemote) {
world.setBlockToAir(x, y, z);
//System.out.println(type);
switch(type) {
case 1:
world.createExplosion(null, x + 0.5, y + 0.5, z + 0.5, 1.5F, true);
break;
case 2:
world.createExplosion(null, x + 0.5, y + 0.5, z + 0.5, 4.0F, true);
break;
case 3:
ExplosionLarge.explode(world, x, y, z, 15, true, false, false);
break;
case 4:
world.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(world, (int)(BombConfig.missileRadius * 0.75F), x + 0.5, y + 0.5, z + 0.5));
EntityNukeTorex.statFac(world, x + 0.5, y + 0.5, z + 0.5, BombConfig.missileRadius * 0.75F);
break;
}
}
}
public int getType() {
if(!primed && slots[1] != null) {
if(slots[1].getItem() == ModItems.upgrade_effect_1 ||
slots[1].getItem() == ModItems.upgrade_effect_2 ||
slots[1].getItem() == ModItems.upgrade_effect_3)
return 100;
}
if(slots[0] != null) {
if(slots[0].getItem() == Item.getItemFromBlock(ModBlocks.det_cord))
return 1;
if(slots[0].getItem() == Item.getItemFromBlock(Blocks.tnt))
return 2;
if(slots[0].getItem() == Item.getItemFromBlock(ModBlocks.det_charge))
return 3;
if(slots[0].getItem() == Item.getItemFromBlock(ModBlocks.det_nuke))
return 4;
}
return 0;
}
public void clearSlots() {
for(int i = 0; i < slots.length; i++)
{
slots[i] = null;
}
}
@Override
public AxisAlignedBB getRenderBoundingBox() {
return TileEntity.INFINITE_EXTENT_AABB;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared()
{
return 65536.0D;
}
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerNukeN45(player.inventory, this);
}
@Override
@SideOnly(Side.CLIENT)
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUINukeN45(player.inventory, this);
}
}

View File

@ -354,7 +354,7 @@ public class TileEntityMachineArcWelder extends TileEntityMachineBase implements
@Override
public void provideInfo(UpgradeType type, int level, List<String> info, boolean extendedInfo) {
info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_electric_furnace_off));
info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_arc_welder));
if(type == UpgradeType.SPEED) {
info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 100 / 6) + "%"));
info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%"));

View File

@ -21,7 +21,6 @@ import com.hbm.lib.Library;
import com.hbm.main.MainRegistry;
import com.hbm.saveddata.SatelliteSavedData;
import com.hbm.saveddata.satellites.Satellite;
import com.hbm.saveddata.satellites.Satellite.Interfaces;
import com.hbm.saveddata.satellites.SatelliteLaser;
import com.hbm.tileentity.IConfigurableMachine;
import com.hbm.tileentity.IGUIProvider;

View File

@ -30,18 +30,14 @@ public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFlui
public HashSet<ChunkCoordinates> secondary = new HashSet();
public TileEntitySolarBoiler() {
water = new FluidTank(Fluids.WATER, 16000, 0);
steam = new FluidTank(Fluids.STEAM, 1600000, 1);
water = new FluidTank(Fluids.WATER, 100, 0);
steam = new FluidTank(Fluids.STEAM, 10_000, 1);
}
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
//if(worldObj.getTotalWorldTime() % 5 == 0) {
fillFluidInit(Fluids.STEAM);
//}
this.trySubscribe(water.getTankType(), worldObj, xCoord, yCoord + 3, zCoord, Library.POS_Y);
this.trySubscribe(water.getTankType(), worldObj, xCoord, yCoord - 1, zCoord, Library.NEG_Y);

View File

@ -29,6 +29,7 @@ import com.hbm.tileentity.TileEntityMachineBase;
import com.hbm.util.CompatExternal;
import api.hbm.energy.IEnergyUser;
import api.hbm.entity.IRadarDetectableNT;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -642,6 +643,7 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple
if(targetMachines) {
if(e instanceof IRadarDetectableNT && !((IRadarDetectableNT)e).canBeSeenBy(this)) return false;
if(e instanceof EntityMissileBaseNT) return true;
if(e instanceof EntityMissileCustom) return true;
if(e instanceof EntityMinecart) return true;
@ -653,9 +655,7 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple
if(targetPlayers ) {
if(e instanceof FakePlayer)
return false;
if(e instanceof FakePlayer) return false;
if(e instanceof EntityPlayer) return true;
for(Class c : CompatExternal.turretTargetPlayer) if(c.isAssignableFrom(e.getClass())) return true;
}

View File

@ -1292,9 +1292,9 @@ item.bobmazon_machines.name=Bobmazon: Blöcke und Maschinen
item.bobmazon_materials.name=Bobmazon: Ressourcen
item.bobmazon_tools.name=Bobmazon: Werkzeuge
item.bobmazon_weapons.name=Bobmazon: Waffen und Sprengstoffe
item.bolt_compound.name=Verstärkte Turbinenwelle
item.bolt_dura_steel.name=Schnellarbeitsstahlbolzen
item.bolt.name=%sbolzen
item.bolt_compound.name=Verstärkte Turbinenwelle
item.boltgun.name=Pneumatische Nietenpistole
item.bomb_caller.name=Luftschlag Zielmarker
item.bomb_waffle.name=Massenvernichtungswaffel
item.guide_book.name=Handbuch
@ -2316,18 +2316,10 @@ item.missile_nuclear_cluster.name=H-Rakete
item.missile_rain.name=Schüttbombenregen
item.missile_schrabidium.name=Schrabidiumrakete
item.missile_shuttle.name=Reliant Robin Space Shuttle
item.missile_skin_camo.name=Raketenskin: Camouflage
item.missile_skin_desert.name=Raketenskin: Wüstencamouflage
item.missile_skin_flames.name=Raketenskin: Krasse Flammen
item.missile_skin_manly_pink.name=Raketenskin: Männliches Pink
item.missile_skin_metal.name=Raketenskin: Metall
item.missile_skin_orange_insulation.name=Raketenskin: Oranger Isolator
item.missile_skin_sleek.name=Raketenskin: IF-R&D
item.missile_skin_soviet_glory.name=Raketenskin: Sowjetischer Ruhm
item.missile_skin_soviet_stank.name=Raketenskin: Sowjetischer Mief
item.missile_soyuz.name=Soyuz-FG
item.missile_soyuz_lander.name=Orbitalmodul
item.missile_strong.name=Starke HE Rakete
item.missile_stealth.name=Stealth-Rakete
item.missile_taint.name=Verdorbene Rakete
item.missile_volcano.name=Tectonic Missile
item.missile_volcano.desc=Mit der Kraft von Kernwaffen können wir einen Vulkan beschwören!
@ -4383,6 +4375,15 @@ tile.radiorec.name=UKW Radio
tile.rail_booster.name=Hochgeschwindigkeits-Boosterschienen
tile.rail_highspeed.name=Hochgeschwindigkeitsschienen
tile.rail_narrow.name=Schmalspurschienen
tile.rail_large_buffer.name=Normalspur-Prellbock (5m)
tile.rail_large_curve.name=Normalspur-Kurve (5m)
tile.rail_large_curve_7.name=Normalspur-Kurve (7m)
tile.rail_large_curve_9.name=Normalspur-Kurve (9m)
tile.rail_large_ramp.name=Normalspur-Rampe (5m)
tile.rail_large_straight.name=Normalspur-Schiene (5m)
tile.rail_large_straight_short.name=Normalspur-Schiene (1m)
tile.rail_large_switch.name=Normalspur-Weiche (15m, Links)
tile.rail_large_switch_flipped.name=Normalspur-Weiche (15m, Rechts)
tile.rail_wood.name=Holzschienen
tile.rbmk_absorber.name=RBMK Bor-Neutronenabsorber
tile.rbmk_blank.name=RBMK Strukturteil

View File

@ -1954,8 +1954,8 @@ item.bobmazon_machines.name=Bobmazon: Blocks and Machines
item.bobmazon_materials.name=Bobmazon: Materials
item.bobmazon_tools.name=Bobmazon: Tools
item.bobmazon_weapons.name=Bobmazon: Weapons and Explosives
item.bolt_compound.name=Reinforced Turbine Shaft
item.bolt.name=%s Bolt
item.bolt_compound.name=Reinforced Turbine Shaft
item.boltgun.name=Pneumatic Rivet Gun
item.bomb_caller.name=Airstrike Designator
item.bomb_waffle.name=Waffle of Mass Destruction
@ -3058,27 +3058,10 @@ item.missile_nuclear_cluster.name=Thermonuclear Missile
item.missile_rain.name=Bomblet Rain
item.missile_schrabidium.name=Schrabidium Missile
item.missile_shuttle.name=Reliant Robin Space Shuttle
item.missile_skin_camo.name=Missile Skin: Camo
item.missile_skin_color.desc=I can't find my missile anymore!
item.missile_skin_desert.name=Missile Skin: Desert Camo
item.missile_skin_desert.desc=Looks like sand, tastes like metal.
item.missile_skin_flames.name=Missile Skin: Sick Flames
item.missile_skin_flames.desc=Radical!
item.missile_skin_manly_pink.name=Missile Skin: Manly Pink
item.missile_skin_manly_pink.desc=Pink, the manliest color of them all.
item.missile_skin_metal.name=Missile Skin: Metal
item.missile_skin_metal.desc=Metal sheets and metal bolts, reinforced with metal.
item.missile_skin_orange_insulation.name=Missile Skin: Orange Insulation
item.missile_skin_orange_insulation.desc=Not an orange juice bottle;$do not attempt to drink contents.
item.missile_skin_sleek.name=Missile Skin: IF-R&D
item.missile_skin_sleek.desc=Chevrons are cool!
item.missile_skin_soviet_glory.name=Missile Skin: Soviet Glory
item.missile_skin_soviet_glory.desc=услуга перевода недоступна
item.missile_skin_soviet_stank.name=Missile Skin: Soviet Stank
item.missile_skin_soviet_stank.desc=This one's got the real 60's stank to it.
item.missile_soyuz.name=Soyuz-FG
item.missile_soyuz_lander.name=Orbital Module
item.missile_soyuz_lander.desc=Doubles as a crappy lander!
item.missile_stealth.name=Stealth Missile
item.missile_strong.name=Strong HE Missile
item.missile_taint.name=Taint-Tipped Missile
item.missile_volcano.name=Tectonic Missile
@ -5382,6 +5365,15 @@ tile.radiobox.name=Rosenberg Pest Control Box
tile.radiorec.name=FM Radio
tile.rail_booster.name=High Speed Booster Rail
tile.rail_highspeed.name=High Speed Rail
tile.rail_large_buffer.name=Standard Gauge Buffer Stop Rail (5m)
tile.rail_large_curve.name=Standard Gauge Curve Rail (5m)
tile.rail_large_curve_7.name=Standard Gauge Curve Rail (7m)
tile.rail_large_curve_9.name=Standard Gauge Curve Rail (9m)
tile.rail_large_ramp.name=Standard Gauge Ramp Rail (5m)
tile.rail_large_straight.name=Standard Gauge Rail (5m)
tile.rail_large_straight_short.name=Standard Gauge Rail (1m)
tile.rail_large_switch.name=Standard Gauge Switch Rail (15m, Left)
tile.rail_large_switch_flipped.name=Standard Gauge Switch Rail (15m, Right)
tile.rail_narrow.name=Narrow Gauge Cart Rail
tile.rail_wood.name=Wooden Tracks
tile.rbmk_absorber.name=RBMK Boron Neutron Absorber

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,384 @@
# Blender v2.79 (sub 0) OBJ File: 'MissileStealth.blend'
# www.blender.org
o Cylinder
v 0.487139 0.500000 -0.281250
v 0.487139 0.500000 0.281250
v 0.000000 0.500000 0.562500
v -0.487139 0.500000 0.281250
v 0.000000 0.500000 -0.562500
v -0.487139 0.500000 -0.281250
v 0.000000 1.000000 -0.750000
v -0.649519 1.000000 -0.375000
v -0.649519 1.000000 0.375000
v 0.000000 1.000000 0.750000
v 0.649519 1.000000 0.375000
v 0.649519 1.000000 -0.375000
v 0.000000 7.000000 -0.750000
v -0.649519 7.000000 -0.375000
v -0.649519 7.000000 0.375000
v 0.000000 7.000000 0.750000
v 0.649519 7.000000 0.375000
v 0.649519 7.000000 -0.375000
v 0.000000 11.000000 0.000000
v 0.755918 -0.020288 -1.295622
v 0.255918 0.979712 -0.429596
v 0.505918 -0.020288 -0.862609
v 0.755918 1.479711 -1.295621
v 0.255918 3.479711 -0.429596
v 0.310045 0.979712 -0.398346
v 0.310045 3.479711 -0.398346
v 0.810045 -0.020288 -1.264372
v 0.560045 -0.020288 -0.831359
v 0.810045 1.479711 -1.264371
v 0.689955 1.479712 1.333705
v 0.439955 -0.020288 0.900692
v 0.689955 -0.020288 1.333705
v 0.189955 3.479711 0.467680
v 0.189955 0.979712 0.467680
v 0.244082 3.479711 0.436430
v 0.744082 1.479712 1.302455
v 0.494082 -0.020288 0.869442
v 0.244082 0.979712 0.436430
v 0.744082 -0.020288 1.302455
v -1.500000 -0.020288 -0.006834
v -0.500000 0.979712 -0.006834
v -1.000000 -0.020288 -0.006834
v -1.500000 1.479712 -0.006834
v -0.500000 3.479712 -0.006834
v -0.500000 0.979712 -0.069334
v -0.500000 3.479712 -0.069334
v -1.500000 -0.020288 -0.069334
v -1.000000 -0.020288 -0.069334
v -1.500000 1.479712 -0.069334
v -0.744082 -0.020288 -1.302455
v -0.244082 0.979712 -0.436430
v -0.494082 -0.020288 -0.869442
v -0.744082 1.479711 -1.302455
v -0.244082 3.479711 -0.436430
v -0.189955 0.979712 -0.467680
v -0.189955 3.479711 -0.467680
v -0.689956 -0.020288 -1.333705
v -0.439955 -0.020288 -0.900692
v -0.689956 1.479711 -1.333705
v 1.500000 1.479712 0.069333
v 1.000000 -0.020288 0.069334
v 1.500000 -0.020288 0.069333
v 0.500000 3.479711 0.069334
v 0.500000 0.979712 0.069334
v 0.500000 3.479711 0.006834
v 1.500000 1.479712 0.006834
v 1.000000 -0.020288 0.006834
v 0.500000 0.979712 0.006834
v 1.500000 -0.020288 0.006833
v -0.755918 -0.020288 1.295621
v -0.255918 0.979712 0.429596
v -0.505918 -0.020288 0.862609
v -0.755918 1.479712 1.295621
v -0.255918 3.479712 0.429596
v -0.310045 0.979712 0.398346
v -0.310045 3.479712 0.398346
v -0.810045 -0.020288 1.264371
v -0.560045 -0.020288 0.831359
v -0.810045 1.479712 1.264371
vt 0.400000 0.047619
vt 0.511111 0.000000
vt 0.533333 0.047619
vt 0.666667 0.047619
vt 0.777778 -0.000000
vt 0.800000 0.047619
vt 0.133333 0.047619
vt 0.244444 0.000000
vt 0.266667 0.047619
vt 0.644444 0.000000
vt 0.022222 0.000000
vt 0.111111 0.000000
vt 0.850033 0.099935
vt 0.800066 0.053571
vt 0.850033 0.007208
vt 0.266667 0.619048
vt 0.000000 0.619048
vt 0.000000 0.047619
vt 0.533333 0.619048
vt 0.133333 0.619048
vt 0.666667 0.619048
vt 0.400000 0.619048
vt 0.377778 0.000000
vt 0.600000 1.000000
vt 0.800000 0.619048
vt 0.733333 1.000000
vt 0.066667 1.000000
vt 0.200000 1.000000
vt 0.333333 1.000000
vt 0.466667 1.000000
vt 0.977778 0.392857
vt 0.977778 0.250000
vt 0.888889 0.250000
vt 0.888889 0.250000
vt 0.977778 0.250000
vt 0.977778 0.392857
vt 0.988889 0.392857
vt 0.988889 0.250000
vt 0.977778 0.202381
vt 0.988889 0.202381
vt 0.988889 0.583333
vt 0.988889 0.107143
vt 0.977778 0.107143
vt 0.988889 0.107143
vt 0.977778 0.202381
vt 0.977778 0.107143
vt 0.988889 0.392857
vt 0.977778 0.583333
vt 0.977778 0.392857
vt 0.988889 0.250000
vt 0.988889 0.202381
vt 0.977778 0.250000
vt 0.888889 0.250000
vt 0.977778 0.392857
vt 0.977778 0.250000
vt 0.888889 0.250000
vt 0.977778 0.392857
vt 0.977778 0.250000
vt 0.888889 0.250000
vt 0.888889 0.250000
vt 0.977778 0.250000
vt 0.977778 0.392857
vt 0.988889 0.392857
vt 0.988889 0.250000
vt 0.977778 0.202381
vt 0.988889 0.202381
vt 0.988889 0.583333
vt 0.977778 0.107143
vt 0.988889 0.107143
vt 0.977778 0.392857
vt 0.977778 0.250000
vt 0.888889 0.250000
vt 0.888889 0.250000
vt 0.977778 0.250000
vt 0.977778 0.392857
vt 0.988889 0.392857
vt 0.988889 0.250000
vt 0.988889 0.202381
vt 0.977778 0.202381
vt 0.988889 0.583333
vt 0.977778 0.107143
vt 0.988889 0.107143
vt 0.988889 0.202381
vt 0.977778 0.107143
vt 0.988889 0.107143
vt 0.988889 0.583333
vt 0.977778 0.392857
vt 0.988889 0.392857
vt 0.977778 0.250000
vt 0.977778 0.202381
vt 0.988889 0.250000
vt 0.888889 0.250000
vt 0.977778 0.392857
vt 0.977778 0.250000
vt 0.888889 0.250000
vt 0.977778 0.392857
vt 0.977778 0.250000
vt 0.888889 0.250000
vt 0.888889 0.250000
vt 0.977778 0.250000
vt 0.977778 0.392857
vt 0.988889 0.392857
vt 0.988889 0.250000
vt 0.988889 0.202381
vt 0.977778 0.202381
vt 0.988889 0.583333
vt 0.977778 0.107143
vt 0.988889 0.107143
vt 0.422222 0.000000
vt 0.688889 0.000000
vt 0.155556 0.000000
vt 0.555556 -0.000000
vt 0.949967 0.007208
vt 0.999934 0.053571
vt 0.949967 0.099935
vt 0.288889 0.000000
vt 0.800000 0.345238
vt 0.800000 0.583333
vt 0.800000 0.583333
vt 0.800000 0.345238
vt 0.977778 0.583333
vt 0.988889 0.583333
vt 0.800000 0.583333
vt 0.800000 0.345238
vt 0.800000 0.345238
vt 0.800000 0.583333
vt 0.800000 0.345238
vt 0.800000 0.583333
vt 0.800000 0.583333
vt 0.800000 0.345238
vt 0.977778 0.583333
vt 0.800000 0.345238
vt 0.800000 0.583333
vt 0.800000 0.583333
vt 0.800000 0.345238
vt 0.977778 0.583333
vt 0.977778 0.583333
vt 0.800000 0.583333
vt 0.800000 0.345238
vt 0.800000 0.345238
vt 0.800000 0.583333
vt 0.800000 0.345238
vt 0.800000 0.583333
vt 0.800000 0.583333
vt 0.800000 0.345238
vt 0.977778 0.583333
vn -0.4756 -0.3089 -0.8237
vn -0.4756 -0.3089 0.8237
vn 0.9511 -0.3089 0.0000
vn -0.9511 -0.3089 0.0000
vn 0.4756 -0.3089 0.8237
vn -0.0000 -1.0000 0.0000
vn 0.5000 0.0000 -0.8660
vn 0.5000 0.0000 0.8660
vn -1.0000 0.0000 0.0000
vn 1.0000 0.0000 0.0000
vn -0.5000 0.0000 0.8660
vn -0.5000 0.0000 -0.8660
vn 0.4756 -0.3089 -0.8237
vn -0.9871 0.1603 0.0000
vn -0.4935 0.1603 0.8548
vn 0.4935 0.1603 0.8548
vn 0.9871 0.1603 0.0000
vn 0.4935 0.1603 -0.8548
vn -0.4935 0.1603 -0.8548
vn -0.8660 0.0000 -0.5000
vn 0.8660 -0.0000 0.5000
vn 0.4472 0.4472 -0.7746
vn -0.4472 -0.4472 0.7746
vn -0.4472 -0.4472 -0.7746
vn 0.4472 0.4472 0.7746
vn -0.8660 -0.0000 0.5000
vn 0.8660 0.0000 -0.5000
vn 0.0000 0.0000 1.0000
vn -0.0000 0.0000 -1.0000
vn -0.8944 0.4472 0.0000
vn 0.8944 -0.4472 0.0000
vn -0.4472 0.4472 -0.7746
vn 0.4472 -0.4472 0.7746
vn -0.8944 -0.4472 0.0000
vn 0.8944 0.4472 -0.0000
vn -0.4472 0.4472 0.7746
vn 0.4472 -0.4472 -0.7746
s off
f 7/1/1 6/2/1 8/3/1
f 9/4/2 3/5/2 10/6/2
f 11/7/3 1/8/3 12/9/3
f 8/3/4 4/10/4 9/4/4
f 11/7/5 3/11/5 2/12/5
f 2/13/6 3/14/6 4/15/6
f 7/1/7 18/16/7 12/9/7
f 11/7/8 16/17/8 10/18/8
f 9/4/9 14/19/9 8/3/9
f 12/9/10 17/20/10 11/7/10
f 10/6/11 15/21/11 9/4/11
f 8/3/12 13/22/12 7/1/12
f 12/9/13 5/23/13 7/1/13
f 14/19/14 15/21/14 19/24/14
f 15/21/15 16/25/15 19/26/15
f 16/17/16 17/20/16 19/27/16
f 17/20/17 18/16/17 19/28/17
f 18/16/18 13/22/18 19/29/18
f 13/22/19 14/19/19 19/30/19
f 23/31/20 20/32/20 22/33/20
f 28/34/21 27/35/21 29/36/21
f 23/37/7 27/35/7 20/38/7
f 20/38/6 28/39/6 22/40/6
f 24/41/22 29/36/22 23/37/22
f 21/42/23 28/39/23 25/43/23
f 38/44/24 31/45/24 34/46/24
f 36/47/25 33/48/25 30/49/25
f 39/50/6 31/45/6 37/51/6
f 36/47/8 32/52/8 39/50/8
f 31/53/26 32/52/26 30/49/26
f 36/54/27 39/55/27 37/56/27
f 43/57/28 40/58/28 42/59/28
f 48/60/29 47/61/29 49/62/29
f 43/63/9 47/61/9 40/64/9
f 40/64/6 48/65/6 42/66/6
f 44/67/30 49/62/30 43/63/30
f 42/66/31 45/68/31 41/69/31
f 53/70/26 50/71/26 52/72/26
f 58/73/27 57/74/27 59/75/27
f 53/76/12 57/74/12 50/77/12
f 52/78/6 57/74/6 58/79/6
f 54/80/32 59/75/32 53/76/32
f 52/78/33 55/81/33 51/82/33
f 67/83/34 64/84/34 68/85/34
f 65/86/35 60/87/35 66/88/35
f 67/83/6 62/89/6 61/90/6
f 66/88/10 62/89/10 69/91/10
f 61/92/28 62/89/28 60/87/28
f 66/93/29 69/94/29 67/95/29
f 73/96/21 70/97/21 72/98/21
f 78/99/20 77/100/20 79/101/20
f 73/102/11 77/100/11 70/103/11
f 72/104/6 77/100/6 78/105/6
f 74/106/36 79/101/36 73/102/36
f 72/104/37 75/107/37 71/108/37
f 7/1/1 5/109/1 6/2/1
f 9/4/2 4/110/2 3/5/2
f 11/7/3 2/111/3 1/8/3
f 8/3/4 6/112/4 4/10/4
f 11/7/5 10/18/5 3/11/5
f 4/15/6 6/113/6 5/114/6
f 5/114/6 1/115/6 4/15/6
f 1/115/6 2/13/6 4/15/6
f 7/1/7 13/22/7 18/16/7
f 11/7/8 17/20/8 16/17/8
f 9/4/9 15/21/9 14/19/9
f 12/9/10 18/16/10 17/20/10
f 10/6/11 16/25/11 15/21/11
f 8/3/12 14/19/12 13/22/12
f 12/9/13 1/116/13 5/23/13
f 22/33/20 21/117/20 23/31/20
f 21/117/20 24/118/20 23/31/20
f 26/119/21 25/120/21 29/36/21
f 25/120/21 28/34/21 29/36/21
f 23/37/7 29/36/7 27/35/7
f 20/38/6 27/35/6 28/39/6
f 24/41/22 26/121/22 29/36/22
f 21/42/23 22/40/23 28/39/23
f 38/44/24 37/51/24 31/45/24
f 36/47/25 35/122/25 33/48/25
f 39/50/6 32/52/6 31/45/6
f 36/47/8 30/49/8 32/52/8
f 33/123/26 34/124/26 30/49/26
f 34/124/26 31/53/26 30/49/26
f 37/56/27 38/125/27 36/54/27
f 38/125/27 35/126/27 36/54/27
f 42/59/28 41/127/28 43/57/28
f 41/127/28 44/128/28 43/57/28
f 46/129/29 45/130/29 49/62/29
f 45/130/29 48/60/29 49/62/29
f 43/63/9 49/62/9 47/61/9
f 40/64/6 47/61/6 48/65/6
f 44/67/30 46/131/30 49/62/30
f 42/66/31 48/65/31 45/68/31
f 52/72/26 51/132/26 53/70/26
f 51/132/26 54/133/26 53/70/26
f 56/134/27 55/135/27 59/75/27
f 55/135/27 58/73/27 59/75/27
f 53/76/12 59/75/12 57/74/12
f 52/78/6 50/77/6 57/74/6
f 54/80/32 56/136/32 59/75/32
f 52/78/33 58/79/33 55/81/33
f 67/83/34 61/90/34 64/84/34
f 65/86/35 63/137/35 60/87/35
f 67/83/6 69/91/6 62/89/6
f 66/88/10 60/87/10 62/89/10
f 63/138/28 64/139/28 60/87/28
f 64/139/28 61/92/28 60/87/28
f 67/95/29 68/140/29 66/93/29
f 68/140/29 65/141/29 66/93/29
f 72/98/21 71/142/21 73/96/21
f 71/142/21 74/143/21 73/96/21
f 76/144/20 75/145/20 79/101/20
f 75/145/20 78/99/20 79/101/20
f 73/102/11 79/101/11 77/100/11
f 72/104/6 70/103/6 77/100/6
f 74/106/36 76/146/36 79/101/36
f 72/104/37 78/105/37 75/107/37

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB