mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
eeeeeeee macarena!
This commit is contained in:
parent
65cda2b65b
commit
7ad017ec8e
22
changelog
22
changelog
@ -19,6 +19,17 @@
|
||||
* Halogen floodlights are made with bromine and cast a light beam 32 blocks long
|
||||
* Lights are on by default and can be toggled with redstone
|
||||
* Tritium lamps have also been retrofitted with longer range lighting, casting beams in all cardinal directions for 8 blocks
|
||||
* Launch pad
|
||||
* The standard launch pad is now a 9x9 platform that changes depending on what missile is loaded
|
||||
* Missiles now have to be fueled like they would need to be on custom missile launchers
|
||||
* The old launch pad has been renamed to silo launch pad and has kept the same rough shape
|
||||
* Launch pads can still receive missiles from hoppers, however they now have a loading delay, making missiles no longer spammable from a single launch pad
|
||||
* Large launch pads have to physically lift and place the rocket onto the pad, while the silo launch pad has a refueling delay
|
||||
* Custom missiles are not yet usable on the new launch pad, for now they still require the dedicated custom missile launch pads
|
||||
* Large silo hatch
|
||||
* Because the new nuclear missile model is too fat, there's now a larger silo hatch
|
||||
* Has a 7x7 footprint and a 5x5 opening
|
||||
* Bedrock ores for neodymium and rare earth chunks
|
||||
|
||||
## Changed
|
||||
* Deco bocks now drop all of the time, but they drop themselves instead of ingots
|
||||
@ -74,6 +85,13 @@
|
||||
* Instead of taking up the chestplate slot, it's now an armor mod worn in the insert slot
|
||||
* The armor no longer gives absorption, instead it adds 25 points to the shield count
|
||||
* The +25 bypasses the shield limit of 100, meaning that with enough shield infusions, the total maximum is now 125
|
||||
* The likelihood of uranium ore turning into schrabidium from full-sized nukes is now 10% instead of 1%. Conversion rates for small dirty explosions such as radioactive barrels remain unchanged.
|
||||
* Fallout layers will no longer affect players in creative mode
|
||||
* Rare earth chunks are now centrifugable, yielding larger quantities of the elements that are most needed earlier in the game
|
||||
* Tier 3 missilles no longer need large fuel tanks and thrusters, instead they use two medium fuel tanks and four medium thrusters
|
||||
* Tier 4s now need three thrusters
|
||||
* Tier 0 missiles now come pre-fueled with solid fuel as part of their recipe
|
||||
* Updated the ABM recipe to use the act welder, being made of a tier 0 missile assembly with extra thrusters and loaded with TNT/TATB
|
||||
|
||||
## Fixed
|
||||
* Fixed dupe caused by shift-clicking ashes out of the bricked furnace
|
||||
@ -91,4 +109,6 @@
|
||||
* Fixed research reactor OC integration allowing the control rods to be set out of bounds
|
||||
* Fixed fallout falling faster and overlaying if multiple fallout areas intersect
|
||||
* Fixed template folder 3D models rendering with weird shading
|
||||
* HUD elements like jetpack charge and the shield bar should now still render even if Tinker's Construct replaces the health bar renderer
|
||||
* HUD elements like jetpack charge and the shield bar should now still render even if Tinker's Construct replaces the health bar renderer
|
||||
* Fixed players glitching into blocks with larger bounding box when standing on top of them and relogging
|
||||
* Fixed a rare crash caused by doors on chunk borders
|
||||
|
||||
@ -608,6 +608,7 @@ public class ModBlocks {
|
||||
public static Block fire_door;
|
||||
public static Block transition_seal;
|
||||
public static Block silo_hatch;
|
||||
public static Block silo_hatch_large;
|
||||
|
||||
// 1.12.2 Doors
|
||||
public static Block secure_access_door;
|
||||
@ -2134,6 +2135,7 @@ public class ModBlocks {
|
||||
fire_door = new BlockDoorGeneric(Material.iron, DoorDecl.FIRE_DOOR).setBlockName("fire_door").setHardness(10.0F).setResistance(1_000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fire_door");
|
||||
transition_seal = new BlockDoorGeneric(Material.iron, DoorDecl.TRANSITION_SEAL).setBlockName("transition_seal").setHardness(10.0F).setResistance(1_000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":transition_seal");
|
||||
silo_hatch = new BlockDoorGeneric(Material.iron, DoorDecl.SILO_HATCH).setBlockName("silo_hatch").setHardness(10.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
silo_hatch_large = new BlockDoorGeneric(Material.iron, DoorDecl.SILO_HATCH_LARGE).setBlockName("silo_hatch_large").setHardness(10.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
secure_access_door = new BlockDoorGeneric(Material.iron, DoorDecl.SECURE_ACCESS_DOOR).setBlockName("secure_access_door").setHardness(20.0F).setResistance(2_000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
large_vehicle_door = new BlockDoorGeneric(Material.iron, DoorDecl.LARGE_VEHICLE_DOOR).setBlockName("large_vehicle_door").setHardness(10.0F).setResistance(1_000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
qe_containment = new BlockDoorGeneric(Material.iron, DoorDecl.QE_CONTAINMENT).setBlockName("qe_containment").setHardness(10.0F).setResistance(1_000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
@ -3082,6 +3084,7 @@ public class ModBlocks {
|
||||
GameRegistry.registerBlock(fire_door, fire_door.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(transition_seal, transition_seal.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(silo_hatch, silo_hatch.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(silo_hatch_large, silo_hatch_large.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(sliding_blast_door, sliding_blast_door.getUnlocalizedName());
|
||||
|
||||
//Doors
|
||||
|
||||
@ -2,23 +2,33 @@ package com.hbm.blocks.bomb;
|
||||
|
||||
import com.hbm.blocks.BlockDummyable;
|
||||
import com.hbm.interfaces.IBomb;
|
||||
import com.hbm.tileentity.TileEntityProxyCombo;
|
||||
import com.hbm.tileentity.bomb.TileEntityLaunchPad;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class LaunchPad extends BlockDummyable implements IBomb {
|
||||
|
||||
public LaunchPad(Material mat) {
|
||||
super(mat);
|
||||
this.bounding.add(AxisAlignedBB.getBoundingBox(-1.5D, 0D, -1.5D, -0.5D, 1D, -0.5D));
|
||||
this.bounding.add(AxisAlignedBB.getBoundingBox(0.5D, 0D, -1.5D, 1.5D, 1D, -0.5D));
|
||||
this.bounding.add(AxisAlignedBB.getBoundingBox(-1.5D, 0D, 0.5D, -0.5D, 1D, 1.5D));
|
||||
this.bounding.add(AxisAlignedBB.getBoundingBox(0.5D, 0D, 0.5D, 1.5D, 1D, 1.5D));
|
||||
this.bounding.add(AxisAlignedBB.getBoundingBox(-0.5D, 0.5D, -1.5D, 0.5D, 1D, 1.5D));
|
||||
this.bounding.add(AxisAlignedBB.getBoundingBox(-1.5D, 0.5D, -0.5D, 1.5D, 1D, 0.5D));
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createNewTileEntity(World world, int meta) {
|
||||
if(meta >= 12) return new TileEntityLaunchPad();
|
||||
if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid();
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -71,4 +81,17 @@ public class LaunchPad extends BlockDummyable implements IBomb {
|
||||
}
|
||||
super.onNeighborBlockChange( world, x, y, z, blockIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
|
||||
super.fillSpace(world, x, y, z, dir, o);
|
||||
|
||||
x += dir.offsetX * o;
|
||||
z += dir.offsetZ * o;
|
||||
|
||||
this.makeExtra(world, x + 1, y, z + 1);
|
||||
this.makeExtra(world, x + 1, y, z - 1);
|
||||
this.makeExtra(world, x - 1, y, z + 1);
|
||||
this.makeExtra(world, x - 1, y, z - 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,23 +2,30 @@ package com.hbm.blocks.bomb;
|
||||
|
||||
import com.hbm.blocks.BlockDummyable;
|
||||
import com.hbm.interfaces.IBomb;
|
||||
import com.hbm.tileentity.TileEntityProxyCombo;
|
||||
import com.hbm.tileentity.bomb.TileEntityLaunchPadLarge;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class LaunchPadLarge extends BlockDummyable implements IBomb {
|
||||
|
||||
public LaunchPadLarge(Material mat) {
|
||||
super(mat);
|
||||
this.bounding.add(AxisAlignedBB.getBoundingBox(-4.5D, 0D, -4.5D, 4.5D, 1D, -0.5D));
|
||||
this.bounding.add(AxisAlignedBB.getBoundingBox(-4.5D, 0D, 0.5D, 4.5D, 1D, 4.5D));
|
||||
this.bounding.add(AxisAlignedBB.getBoundingBox(-4.5D, 0.875D, -0.5D, 4.5D, 1D, 0.5D));
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createNewTileEntity(World world, int meta) {
|
||||
if(meta >= 12) return new TileEntityLaunchPadLarge();
|
||||
if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid();
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -71,4 +78,21 @@ public class LaunchPadLarge extends BlockDummyable implements IBomb {
|
||||
}
|
||||
super.onNeighborBlockChange( world, x, y, z, blockIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
|
||||
super.fillSpace(world, x, y, z, dir, o);
|
||||
|
||||
x += dir.offsetX * o;
|
||||
z += dir.offsetZ * o;
|
||||
|
||||
this.makeExtra(world, x + 4, y, z + 2);
|
||||
this.makeExtra(world, x + 4, y, z - 2);
|
||||
this.makeExtra(world, x - 4, y, z + 2);
|
||||
this.makeExtra(world, x - 4, y, z - 2);
|
||||
this.makeExtra(world, x + 2, y, z + 4);
|
||||
this.makeExtra(world, x - 2, y, z + 4);
|
||||
this.makeExtra(world, x + 2, y, z - 4);
|
||||
this.makeExtra(world, x - 2, y, z - 4);
|
||||
}
|
||||
}
|
||||
|
||||
@ -48,6 +48,7 @@ public class BlockFallout extends Block {
|
||||
public void onEntityWalking(World world, int x, int y, int z, Entity entity) {
|
||||
|
||||
if(!world.isRemote && entity instanceof EntityLivingBase) {
|
||||
if(entity instanceof EntityPlayer && ((EntityPlayer)entity).capabilities.isCreativeMode) return;
|
||||
PotionEffect effect = new PotionEffect(HbmPotion.radiation.id, 10 * 60 * 20, 0);
|
||||
effect.setCurativeItems(new ArrayList());
|
||||
((EntityLivingBase) entity).addPotionEffect(effect);
|
||||
|
||||
@ -70,8 +70,8 @@ public class FalloutConfigJSON {
|
||||
entries.add(new FalloutEntry() .mMa(Material.plants) .prim(new Triplet(Blocks.air, 0, 1)) .max(woodEffectRange));
|
||||
entries.add(new FalloutEntry() .mMa(Material.vine) .prim(new Triplet(Blocks.air, 0, 1)) .max(woodEffectRange));
|
||||
entries.add(new FalloutEntry() .mB(ModBlocks.waste_leaves) .prim(new Triplet(Blocks.air, 0, 1)) .max(woodEffectRange));
|
||||
entries.add(new FalloutEntry() .mB(Blocks.leaves) .prim(new Triplet(ModBlocks.waste_leaves, 0, 1)) .min(woodEffectRange));
|
||||
entries.add(new FalloutEntry() .mB(Blocks.leaves2) .prim(new Triplet(ModBlocks.waste_leaves, 0, 1)) .min(woodEffectRange));
|
||||
entries.add(new FalloutEntry() .mB(Blocks.leaves) .prim(new Triplet(ModBlocks.waste_leaves, 0, 1)) .min(woodEffectRange - 5D));
|
||||
entries.add(new FalloutEntry() .mB(Blocks.leaves2) .prim(new Triplet(ModBlocks.waste_leaves, 0, 1)) .min(woodEffectRange - 5D));
|
||||
|
||||
entries.add(new FalloutEntry().mB(Blocks.mossy_cobblestone).prim(new Triplet(Blocks.coal_ore, 0, 1)));
|
||||
entries.add(new FalloutEntry().mB(ModBlocks.ore_nether_uranium).prim(new Triplet(ModBlocks.ore_nether_schrabidium, 0, 1), new Triplet(ModBlocks.ore_nether_uranium_scorched, 0, 99)));
|
||||
@ -84,8 +84,8 @@ public class FalloutConfigJSON {
|
||||
entries.add(new FalloutEntry().prim(new Triplet(ModBlocks.ore_sellafield_diamond, m, 3), new Triplet(ModBlocks.ore_sellafield_emerald, m, 2)) .c(0.5) .max(i * 5).sol(true).mB(Blocks.coal_ore));
|
||||
entries.add(new FalloutEntry().prim(new Triplet(ModBlocks.ore_sellafield_diamond, m, 1)) .c(0.2) .max(i * 5).sol(true).mB(ModBlocks.ore_lignite));
|
||||
entries.add(new FalloutEntry().prim(new Triplet(ModBlocks.ore_sellafield_emerald, m, 1)) .max(i * 5).sol(true).mB(ModBlocks.ore_beryllium));
|
||||
entries.add(new FalloutEntry().prim(new Triplet(ModBlocks.ore_sellafield_schrabidium, m, 1), new Triplet(ModBlocks.ore_sellafield_uranium_scorched, m, 99)) .max(i * 5).sol(true).mB(ModBlocks.ore_uranium));
|
||||
entries.add(new FalloutEntry().prim(new Triplet(ModBlocks.ore_sellafield_schrabidium, m, 1), new Triplet(ModBlocks.ore_sellafield_uranium_scorched, m, 99)) .max(i * 5).sol(true).mB(ModBlocks.ore_gneiss_uranium));
|
||||
entries.add(new FalloutEntry().prim(new Triplet(ModBlocks.ore_sellafield_schrabidium, m, 1), new Triplet(ModBlocks.ore_sellafield_uranium_scorched, m, 9)) .max(i * 5).sol(true).mB(ModBlocks.ore_uranium));
|
||||
entries.add(new FalloutEntry().prim(new Triplet(ModBlocks.ore_sellafield_schrabidium, m, 1), new Triplet(ModBlocks.ore_sellafield_uranium_scorched, m, 9)) .max(i * 5).sol(true).mB(ModBlocks.ore_gneiss_uranium));
|
||||
entries.add(new FalloutEntry().prim(new Triplet(ModBlocks.ore_sellafield_radgem, m, 1)) .max(i * 5).sol(true).mB(Blocks.diamond_ore));
|
||||
entries.add(new FalloutEntry() .prim(new Triplet(ModBlocks.sellafield_slaked, m, 1)).max(i * 5).sol(true).mMa(Material.rock));
|
||||
entries.add(new FalloutEntry() .prim(new Triplet(ModBlocks.sellafield_slaked, m, 1)).max(i * 5).sol(true).mMa(Material.sand));
|
||||
|
||||
@ -122,7 +122,7 @@ public class EntityNukeTorex extends Entity {
|
||||
for(int i = 0; i < 20; i++) {
|
||||
for(int j = 0; j < 4; j++) {
|
||||
float angle = (float) (Math.PI * 2 * rand.nextDouble());
|
||||
Vec3 vec = Vec3.createVectorHelper(torusWidth + rollerSize * (3 + rand.nextDouble()), 0, 0);
|
||||
Vec3 vec = Vec3.createVectorHelper(torusWidth + rollerSize * (5 + rand.nextDouble()), 0, 0);
|
||||
vec.rotateAroundZ((float) (Math.PI / 45 * j));
|
||||
vec.rotateAroundY(angle);
|
||||
Cloudlet cloud = new Cloudlet(posX + vec.xCoord, posY + coreHeight - 5 + j * s, posZ + vec.zCoord, angle, 0, (int) ((20 + ticksExisted / 10) * (1 + rand.nextDouble() * 0.1)), TorexType.CONDENSATION);
|
||||
|
||||
@ -176,17 +176,29 @@ public abstract class EntityMissileBaseNT extends EntityThrowableInterp implemen
|
||||
}
|
||||
|
||||
protected void spawnContrail() {
|
||||
this.spawnContraolWithOffset(0, 0, 0);
|
||||
}
|
||||
|
||||
protected void spawnContraolWithOffset(double offsetX, double offsetY, double offsetZ) {
|
||||
Vec3 vec = Vec3.createVectorHelper(this.lastTickPosX - this.posX, this.lastTickPosY - this.posY, this.lastTickPosZ - this.posZ);
|
||||
double len = vec.lengthVector();
|
||||
vec = vec.normalize();
|
||||
Vec3 thrust = Vec3.createVectorHelper(0, 1, 0);
|
||||
thrust.rotateAroundZ(this.rotationPitch * (float) Math.PI / 180F);
|
||||
thrust.rotateAroundY((this.rotationYaw + 90) * (float) Math.PI / 180F);
|
||||
|
||||
for(int i = 0; i < Math.max(Math.min(len, 10), 1); i++) {
|
||||
int j = i - 1;
|
||||
double j = i - len;
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setDouble("posX", posX - vec.xCoord * j);
|
||||
data.setDouble("posY", posY - vec.yCoord * j);
|
||||
data.setDouble("posZ", posZ - vec.zCoord * j);
|
||||
data.setDouble("posX", posX - vec.xCoord * j + offsetX);
|
||||
data.setDouble("posY", posY - vec.yCoord * j + offsetY);
|
||||
data.setDouble("posZ", posZ - vec.zCoord * j + offsetZ);
|
||||
data.setString("type", "missileContrail");
|
||||
data.setFloat("scale", this.getContrailScale());
|
||||
data.setDouble("moX", -thrust.xCoord);
|
||||
data.setDouble("moY", -thrust.yCoord);
|
||||
data.setDouble("moZ", -thrust.zCoord);
|
||||
data.setInteger("maxAge", 100 + rand.nextInt(40));
|
||||
MainRegistry.proxy.effectNT(data);
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@ import com.hbm.entity.logic.EntityNukeExplosionMK5;
|
||||
import com.hbm.items.ModItems;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityMissileDoomsday extends EntityMissileBaseNT {
|
||||
@ -26,6 +27,26 @@ public class EntityMissileDoomsday extends EntityMissileBaseNT {
|
||||
EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.missileRadius * 2);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void spawnContrail() {
|
||||
|
||||
byte rot = this.dataWatcher.getWatchableObjectByte(3);
|
||||
|
||||
Vec3 thrust = Vec3.createVectorHelper(0, 0, 1);
|
||||
switch(rot) {
|
||||
case 2: thrust.rotateAroundY((float) -Math.PI / 2F); break;
|
||||
case 4: thrust.rotateAroundY((float) -Math.PI); break;
|
||||
case 3: thrust.rotateAroundY((float) -Math.PI / 2F * 3F); break;
|
||||
}
|
||||
thrust.rotateAroundY((this.rotationYaw + 90) * (float) Math.PI / 180F);
|
||||
thrust.rotateAroundX(this.rotationPitch * (float) Math.PI / 180F);
|
||||
thrust.rotateAroundY(-(this.rotationYaw + 90) * (float) Math.PI / 180F);
|
||||
|
||||
this.spawnContraolWithOffset(thrust.xCoord, thrust.yCoord, thrust.zCoord);
|
||||
this.spawnContraolWithOffset(0, 0, 0);
|
||||
this.spawnContraolWithOffset(-thrust.xCoord, -thrust.zCoord, -thrust.zCoord);
|
||||
}
|
||||
|
||||
@Override public List<ItemStack> getDebris() { return null; }
|
||||
@Override public ItemStack getDebrisRareDrop() { return null; }
|
||||
@Override public String getUnlocalizedName() { return "radar.target.doomsday"; }
|
||||
|
||||
@ -11,6 +11,7 @@ import com.hbm.items.ModItems;
|
||||
|
||||
import api.hbm.entity.IRadarDetectableNT;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public abstract class EntityMissileTier3 extends EntityMissileBaseNT {
|
||||
@ -39,6 +40,20 @@ public abstract class EntityMissileTier3 extends EntityMissileBaseNT {
|
||||
public int getBlipLevel() {
|
||||
return IRadarDetectableNT.TIER3;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void spawnContrail() {
|
||||
|
||||
Vec3 thrust = Vec3.createVectorHelper(0, 0, 0.5);
|
||||
thrust.rotateAroundY((this.rotationYaw + 90) * (float) Math.PI / 180F);
|
||||
thrust.rotateAroundX(this.rotationPitch * (float) Math.PI / 180F);
|
||||
thrust.rotateAroundY(-(this.rotationYaw + 90) * (float) Math.PI / 180F);
|
||||
|
||||
this.spawnContraolWithOffset(thrust.xCoord, thrust.yCoord, thrust.zCoord);
|
||||
this.spawnContraolWithOffset(-thrust.zCoord, thrust.yCoord, thrust.xCoord);
|
||||
this.spawnContraolWithOffset(-thrust.xCoord, -thrust.zCoord, -thrust.zCoord);
|
||||
this.spawnContraolWithOffset(thrust.zCoord, -thrust.zCoord, -thrust.xCoord);
|
||||
}
|
||||
|
||||
public static class EntityMissileBurst extends EntityMissileTier3 {
|
||||
public EntityMissileBurst(World world) { super(world); }
|
||||
|
||||
@ -12,6 +12,7 @@ import com.hbm.items.ModItems;
|
||||
|
||||
import api.hbm.entity.IRadarDetectableNT;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public abstract class EntityMissileTier4 extends EntityMissileBaseNT {
|
||||
@ -39,6 +40,26 @@ public abstract class EntityMissileTier4 extends EntityMissileBaseNT {
|
||||
public int getBlipLevel() {
|
||||
return IRadarDetectableNT.TIER4;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void spawnContrail() {
|
||||
|
||||
byte rot = this.dataWatcher.getWatchableObjectByte(3);
|
||||
|
||||
Vec3 thrust = Vec3.createVectorHelper(0, 0, 1);
|
||||
switch(rot) {
|
||||
case 2: thrust.rotateAroundY((float) -Math.PI / 2F); break;
|
||||
case 4: thrust.rotateAroundY((float) -Math.PI); break;
|
||||
case 3: thrust.rotateAroundY((float) -Math.PI / 2F * 3F); break;
|
||||
}
|
||||
thrust.rotateAroundY((this.rotationYaw + 90) * (float) Math.PI / 180F);
|
||||
thrust.rotateAroundX(this.rotationPitch * (float) Math.PI / 180F);
|
||||
thrust.rotateAroundY(-(this.rotationYaw + 90) * (float) Math.PI / 180F);
|
||||
|
||||
this.spawnContraolWithOffset(thrust.xCoord, thrust.yCoord, thrust.zCoord);
|
||||
this.spawnContraolWithOffset(0, 0, 0);
|
||||
this.spawnContraolWithOffset(-thrust.xCoord, -thrust.zCoord, -thrust.zCoord);
|
||||
}
|
||||
|
||||
public static class EntityMissileNuclear extends EntityMissileTier4 {
|
||||
public EntityMissileNuclear(World world) { super(world); }
|
||||
|
||||
@ -1,8 +1,12 @@
|
||||
package com.hbm.inventory.container;
|
||||
|
||||
import com.hbm.inventory.FluidContainerRegistry;
|
||||
import com.hbm.inventory.SlotTakeOnly;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.tileentity.bomb.TileEntityLaunchPadBase;
|
||||
|
||||
import api.hbm.energy.IBatteryItem;
|
||||
import api.hbm.item.IDesignatorItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
@ -42,10 +46,59 @@ public class ContainerLaunchPadLarge extends Container {
|
||||
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 212));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int par2) {
|
||||
return null; //TODO
|
||||
ItemStack var3 = null;
|
||||
Slot var4 = (Slot) this.inventorySlots.get(par2);
|
||||
|
||||
if(var4 != null && var4.getHasStack()) {
|
||||
ItemStack var5 = var4.getStack();
|
||||
var3 = var5.copy();
|
||||
|
||||
if(par2 <= 6) {
|
||||
if(!this.mergeItemStack(var5, 7, this.inventorySlots.size(), true)) {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
|
||||
if(var3.getItem() instanceof IBatteryItem || var3.getItem() == ModItems.battery_creative) {
|
||||
if(!this.mergeItemStack(var5, 2, 3, false)) {
|
||||
return null;
|
||||
}
|
||||
} else if(launchpad.isMissileValid(var3)) {
|
||||
if(!this.mergeItemStack(var5, 0, 1, false)) {
|
||||
return null;
|
||||
}
|
||||
} else if(var3.getItem() == ModItems.fluid_barrel_infinite) {
|
||||
if(!this.mergeItemStack(var5, 3, 4, false)) if(!this.mergeItemStack(var5, 5, 6, false)) {
|
||||
return null;
|
||||
}
|
||||
} else if(FluidContainerRegistry.getFluidContent(var3, launchpad.tanks[0].getTankType()) > 0) {
|
||||
if(!this.mergeItemStack(var5, 3, 4, false)) {
|
||||
return null;
|
||||
}
|
||||
} else if(FluidContainerRegistry.getFluidContent(var3, launchpad.tanks[1].getTankType()) > 0) {
|
||||
if(!this.mergeItemStack(var5, 5, 6, false)) {
|
||||
return null;
|
||||
}
|
||||
} else if(var3.getItem() instanceof IDesignatorItem) {
|
||||
if(!this.mergeItemStack(var5, 1, 2, false)) {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if(var5.stackSize == 0) {
|
||||
var4.putStack((ItemStack) null);
|
||||
} else {
|
||||
var4.onSlotChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return var3;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package com.hbm.inventory.gui;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
@ -12,12 +14,14 @@ import com.hbm.items.weapon.ItemMissile;
|
||||
import com.hbm.lib.RefStrings;
|
||||
import com.hbm.render.item.ItemRenderMissileGeneric;
|
||||
import com.hbm.tileentity.bomb.TileEntityLaunchPadBase;
|
||||
import com.hbm.util.I18nUtil;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.client.renderer.texture.TextureManager;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class GUILaunchPadLarge extends GuiInfoContainer {
|
||||
@ -40,6 +44,17 @@ public class GUILaunchPadLarge extends GuiInfoContainer {
|
||||
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 107, guiTop + 88 - 52, 16, 52, launchpad.power, launchpad.maxPower);
|
||||
launchpad.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 125, guiTop + 88 - 52, 16, 52);
|
||||
launchpad.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 143, guiTop + 88 - 52, 16, 52);
|
||||
|
||||
if(this.mc.thePlayer.inventory.getItemStack() == null && this.isMouseOverSlot(this.inventorySlots.getSlot(1), mouseX, mouseY) && !this.inventorySlots.getSlot(1).getHasStack()) {
|
||||
ItemStack[] list = new ItemStack[] { new ItemStack(ModItems.designator), new ItemStack(ModItems.designator_range), new ItemStack(ModItems.designator_manual) };
|
||||
List<Object[]> lines = new ArrayList();
|
||||
ItemStack selected = list[(int) ((System.currentTimeMillis() % (1000 * list.length)) / 1000)];
|
||||
selected.stackSize = 0;
|
||||
lines.add(list);
|
||||
|
||||
lines.add(new Object[] {I18nUtil.resolveKey(selected.getDisplayName())});
|
||||
this.drawStackText(lines, mouseX, mouseY, this.fontRendererObj);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -109,5 +124,28 @@ public class GUILaunchPadLarge extends GuiInfoContainer {
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
}
|
||||
|
||||
GL11.glPushMatrix();
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
GL11.glTranslated(guiLeft + 34, guiTop + 107, 0);
|
||||
String text = "";
|
||||
int color = 0xffffff;
|
||||
if(launchpad.state == launchpad.STATE_MISSING) {
|
||||
GL11.glScaled(0.5, 0.5, 1);
|
||||
text = "Not ready";
|
||||
color = 0xff0000;
|
||||
}
|
||||
if(launchpad.state == launchpad.STATE_LOADING) {
|
||||
GL11.glScaled(0.6, 0.6, 1);
|
||||
text = "Loading...";
|
||||
color = 0xff8000;
|
||||
}
|
||||
if(launchpad.state == launchpad.STATE_READY) {
|
||||
GL11.glScaled(0.8, 0.8, 1);
|
||||
text = "Ready";
|
||||
color = 0x00ff000;
|
||||
}
|
||||
this.fontRendererObj.drawString(text, -this.fontRendererObj.getStringWidth(text) / 2, -this.fontRendererObj.FONT_HEIGHT / 2, color);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,11 +19,11 @@ import net.minecraft.util.ResourceLocation;
|
||||
public class GUIMachineHydrotreater extends GuiInfoContainer {
|
||||
|
||||
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_hydrotreater.png");
|
||||
private TileEntityMachineHydrotreater refinery;
|
||||
private TileEntityMachineHydrotreater hydrotreater;
|
||||
|
||||
public GUIMachineHydrotreater(InventoryPlayer invPlayer, TileEntityMachineHydrotreater tedf) {
|
||||
super(new ContainerMachineHydrotreater(invPlayer, tedf));
|
||||
refinery = tedf;
|
||||
hydrotreater = tedf;
|
||||
|
||||
this.xSize = 176;
|
||||
this.ySize = 238;
|
||||
@ -33,11 +33,11 @@ public class GUIMachineHydrotreater extends GuiInfoContainer {
|
||||
public void drawScreen(int mouseX, int mouseY, float f) {
|
||||
super.drawScreen(mouseX, mouseY, f);
|
||||
|
||||
refinery.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 35, guiTop + 70 - 52, 16, 52);
|
||||
refinery.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 53, guiTop + 70 - 52, 16, 52);
|
||||
refinery.tanks[2].renderTankInfo(this, mouseX, mouseY, guiLeft + 125, guiTop + 70 - 52, 16, 52);
|
||||
refinery.tanks[3].renderTankInfo(this, mouseX, mouseY, guiLeft + 143, guiTop + 70 - 52, 16, 52);
|
||||
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 17, guiTop + 70 - 52, 16, 52, refinery.power, refinery.maxPower);
|
||||
hydrotreater.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 35, guiTop + 70 - 52, 16, 52);
|
||||
hydrotreater.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 53, guiTop + 70 - 52, 16, 52);
|
||||
hydrotreater.tanks[2].renderTankInfo(this, mouseX, mouseY, guiLeft + 125, guiTop + 70 - 52, 16, 52);
|
||||
hydrotreater.tanks[3].renderTankInfo(this, mouseX, mouseY, guiLeft + 143, guiTop + 70 - 52, 16, 52);
|
||||
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 17, guiTop + 70 - 52, 16, 52, hydrotreater.power, hydrotreater.maxPower);
|
||||
|
||||
if(this.mc.thePlayer.inventory.getItemStack() == null && this.isMouseOverSlot(this.inventorySlots.getSlot(10), mouseX, mouseY) && !this.inventorySlots.getSlot(10).getHasStack()) {
|
||||
List<Object[]> lines = new ArrayList();
|
||||
@ -50,7 +50,7 @@ public class GUIMachineHydrotreater extends GuiInfoContainer {
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int i, int j) {
|
||||
String name = this.refinery.hasCustomInventoryName() ? this.refinery.getInventoryName() : I18n.format(this.refinery.getInventoryName());
|
||||
String name = this.hydrotreater.hasCustomInventoryName() ? this.hydrotreater.getInventoryName() : I18n.format(this.hydrotreater.getInventoryName());
|
||||
|
||||
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 5, 0xffffff);
|
||||
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
|
||||
@ -62,12 +62,12 @@ public class GUIMachineHydrotreater extends GuiInfoContainer {
|
||||
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
|
||||
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
|
||||
|
||||
int j = (int) (refinery.power * 54 / refinery.maxPower);
|
||||
int j = (int) (hydrotreater.power * 54 / hydrotreater.maxPower);
|
||||
drawTexturedModalRect(guiLeft + 17, guiTop + 70 - j, 176, 52 - j, 16, j);
|
||||
|
||||
refinery.tanks[0].renderTank(guiLeft + 35, guiTop + 70, this.zLevel, 16, 52);
|
||||
refinery.tanks[1].renderTank(guiLeft + 53, guiTop + 70, this.zLevel, 16, 52);
|
||||
refinery.tanks[2].renderTank(guiLeft + 125, guiTop + 70, this.zLevel, 16, 52);
|
||||
refinery.tanks[3].renderTank(guiLeft + 143, guiTop + 70, this.zLevel, 16, 52);
|
||||
hydrotreater.tanks[0].renderTank(guiLeft + 35, guiTop + 70, this.zLevel, 16, 52);
|
||||
hydrotreater.tanks[1].renderTank(guiLeft + 53, guiTop + 70, this.zLevel, 16, 52);
|
||||
hydrotreater.tanks[2].renderTank(guiLeft + 125, guiTop + 70, this.zLevel, 16, 52);
|
||||
hydrotreater.tanks[3].renderTank(guiLeft + 143, guiTop + 70, this.zLevel, 16, 52);
|
||||
}
|
||||
}
|
||||
|
||||
@ -97,7 +97,7 @@ public class Mats {
|
||||
public static final NTMMaterial MAT_TITANIUM = makeSmeltable(2200, TI, 0xF7F3F2, 0x4F4C4B, 0xA99E79).setShapes(INGOT, DUST, PLATE, CASTPLATE, WELDEDPLATE, BLOCK, HEAVY_COMPONENT);
|
||||
public static final NTMMaterial MAT_COPPER = makeSmeltable(2900, CU, 0xFDCA88, 0x601E0D, 0xC18336).setShapes(WIRE, INGOT, DUST, PLATE, CASTPLATE, WELDEDPLATE, BLOCK, HEAVY_COMPONENT);
|
||||
public static final NTMMaterial MAT_TUNGSTEN = makeSmeltable(7400, W, 0x868686, 0x000000, 0x977474).setShapes(WIRE, BOLT, INGOT, DUST, DENSEWIRE, CASTPLATE, WELDEDPLATE, BLOCK, HEAVY_COMPONENT);
|
||||
public static final NTMMaterial MAT_ALUMINIUM = makeSmeltable(1300, AL, 0xFFFFFF, 0x344550, 0xD0B8EB).setShapes(WIRE, INGOT, DUST, PLATE, CASTPLATE, BLOCK, HEAVY_COMPONENT);
|
||||
public static final NTMMaterial MAT_ALUMINIUM = makeSmeltable(1300, AL, 0xFFFFFF, 0x344550, 0xD0B8EB).setShapes(WIRE, INGOT, DUST, PLATE, CASTPLATE, WELDEDPLATE, BLOCK, HEAVY_COMPONENT);
|
||||
public static final NTMMaterial MAT_LEAD = makeSmeltable(8200, PB, 0xA6A6B2, 0x03030F, 0x646470).setShapes(NUGGET, INGOT, DUST, PLATE, CASTPLATE, BLOCK, HEAVY_COMPONENT);
|
||||
public static final NTMMaterial MAT_BISMUTH = makeSmeltable(8300, BI, 0xB200FF).setShapes(NUGGET, BILLET, INGOT, DUST, BLOCK);
|
||||
public static final NTMMaterial MAT_ARSENIC = makeSmeltable(3300, AS, 0x6CBABA, 0x242525, 0x558080).setShapes(NUGGET, INGOT);
|
||||
|
||||
@ -69,6 +69,8 @@ public class ArcWelderRecipes extends SerializableRecipe {
|
||||
//mid-game PWR
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.plate_welded, 1, Mats.MAT_ZIRCONIUM.id), 600, 10_000L,
|
||||
new OreDictStack(ZR.plateCast(), 2)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.plate_welded, 1, Mats.MAT_ALUMINIUM.id), 300, 10_000L,
|
||||
new OreDictStack(AL.plateCast(), 2)));
|
||||
//late-game fusion
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.plate_welded, 1, Mats.MAT_TCALLOY.id), 1_200, 1_000_000L, new FluidStack(Fluids.OXYGEN, 1_000),
|
||||
new OreDictStack(TCALLOY.plateCast(), 2)));
|
||||
@ -83,11 +85,11 @@ public class ArcWelderRecipes extends SerializableRecipe {
|
||||
//Missile Parts
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.thruster_small), 60, 1_000L, new OreDictStack(STEEL.plate(), 4), new ComparableStack(ModItems.wire_aluminium, 4), new OreDictStack(CU.plate(), 4)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.thruster_medium), 100, 2_000L, new OreDictStack(STEEL.plate(), 8), new ComparableStack(ModItems.motor, 1), new OreDictStack(GRAPHITE.ingot(), 8)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.thruster_large), 200, 5_000L, new OreDictStack(DURA.ingot(), 12), new ComparableStack(ModItems.motor, 2), new OreDictStack(OreDictManager.getReflector(), 16)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.thruster_large), 200, 5_000L, new OreDictStack(DURA.ingot(), 10), new ComparableStack(ModItems.motor, 1), new OreDictStack(OreDictManager.getReflector(), 12)));
|
||||
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.fuel_tank_small), 60, 1_000L, new OreDictStack(Fluids.ETHANOL.getDict(1_000), 6), new OreDictStack(AL.plate(), 6), new OreDictStack(STEEL.plate(), 2)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.fuel_tank_medium), 100, 2_000L, new OreDictStack(Fluids.KEROSENE.getDict(1_000), 8), new OreDictStack(TI.plate(), 12), new OreDictStack(STEEL.plate(), 4)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.fuel_tank_large), 200, 5_000L, new OreDictStack(Fluids.KEROSENE.getDict(1_000), 12), new OreDictStack(TI.plate(), 24), new OreDictStack(STEEL.plateCast(), 3)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.fuel_tank_small), 60, 1_000L, new OreDictStack(AL.plate(), 6), new OreDictStack(CU.plate(), 4), new ComparableStack(ModBlocks.steel_scaffold, 4)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.fuel_tank_medium), 100, 2_000L, new OreDictStack(AL.plateCast(), 4), new OreDictStack(TI.plate(), 8), new ComparableStack(ModBlocks.steel_scaffold, 12)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.fuel_tank_large), 200, 5_000L, new OreDictStack(AL.plateWelded(), 8), new OreDictStack(BIGMT.plate(), 12), new ComparableStack(ModBlocks.steel_scaffold, 16)));
|
||||
|
||||
//Missiles
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_anti_ballistic), 100, 5_000L, new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 3), new ComparableStack(ModItems.missile_assembly), new ComparableStack(ModItems.thruster_small, 4)));
|
||||
@ -103,14 +105,14 @@ public class ArcWelderRecipes extends SerializableRecipe {
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_buster_strong), 200, 10_000L, new ComparableStack(ModItems.warhead_buster_medium), new ComparableStack(ModItems.fuel_tank_medium), new ComparableStack(ModItems.thruster_medium)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_emp_strong), 200, 10_000L, new ComparableStack(ModBlocks.emp_bomb, 3), new ComparableStack(ModItems.fuel_tank_medium), new ComparableStack(ModItems.thruster_medium)));
|
||||
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_burst), 300, 25_000L, new ComparableStack(ModItems.warhead_generic_large), new ComparableStack(ModItems.fuel_tank_large), new ComparableStack(ModItems.thruster_large)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_inferno), 300, 25_000L, new ComparableStack(ModItems.warhead_incendiary_large), new ComparableStack(ModItems.fuel_tank_large), new ComparableStack(ModItems.thruster_large)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_rain), 300, 25_000L, new ComparableStack(ModItems.warhead_cluster_large), new ComparableStack(ModItems.fuel_tank_large), new ComparableStack(ModItems.thruster_large)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_drill), 300, 25_000L, new ComparableStack(ModItems.warhead_buster_large), new ComparableStack(ModItems.fuel_tank_large), new ComparableStack(ModItems.thruster_large)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_burst), 300, 25_000L, new ComparableStack(ModItems.warhead_generic_large), new ComparableStack(ModItems.fuel_tank_medium, 2), new ComparableStack(ModItems.thruster_medium, 4)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_inferno), 300, 25_000L, new ComparableStack(ModItems.warhead_incendiary_large), new ComparableStack(ModItems.fuel_tank_medium, 2), new ComparableStack(ModItems.thruster_medium, 4)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_rain), 300, 25_000L, new ComparableStack(ModItems.warhead_cluster_large), new ComparableStack(ModItems.fuel_tank_medium, 2), new ComparableStack(ModItems.thruster_medium, 4)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_drill), 300, 25_000L, new ComparableStack(ModItems.warhead_buster_large), new ComparableStack(ModItems.fuel_tank_medium, 2), new ComparableStack(ModItems.thruster_medium, 4)));
|
||||
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_nuclear), 600, 50_000L, new ComparableStack(ModItems.warhead_nuclear), new ComparableStack(ModItems.fuel_tank_large), new ComparableStack(ModItems.thruster_large)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_nuclear_cluster), 600, 50_000L, new ComparableStack(ModItems.warhead_mirv), new ComparableStack(ModItems.fuel_tank_large), new ComparableStack(ModItems.thruster_large)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_volcano), 600, 50_000L, new ComparableStack(ModItems.warhead_volcano), new ComparableStack(ModItems.fuel_tank_large), new ComparableStack(ModItems.thruster_large)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_nuclear), 600, 50_000L, new ComparableStack(ModItems.warhead_nuclear), new ComparableStack(ModItems.fuel_tank_large), new ComparableStack(ModItems.thruster_large, 3)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_nuclear_cluster), 600, 50_000L, new ComparableStack(ModItems.warhead_mirv), new ComparableStack(ModItems.fuel_tank_large), new ComparableStack(ModItems.thruster_large, 3)));
|
||||
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_volcano), 600, 50_000L, new ComparableStack(ModItems.warhead_volcano), new ComparableStack(ModItems.fuel_tank_large), new ComparableStack(ModItems.thruster_large, 3)));
|
||||
}
|
||||
|
||||
public static HashMap getRecipes() {
|
||||
|
||||
@ -314,7 +314,6 @@ public class AssemblerRecipes {
|
||||
makeRecipe(new ComparableStack(ModBlocks.float_bomb, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.levitation_unit, 1), new ComparableStack(ModItems.circuit_gold, 4), new ComparableStack(ModItems.wire_gold, 6), },250);
|
||||
makeRecipe(new ComparableStack(ModBlocks.therm_endo, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.powder_ice, 32), new ComparableStack(ModItems.circuit_gold, 1), new ComparableStack(ModItems.coil_gold, 4), },250);
|
||||
makeRecipe(new ComparableStack(ModBlocks.therm_exo, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new OreDictStack(P_RED.dust(), 32), new ComparableStack(ModItems.circuit_gold, 1), new ComparableStack(ModItems.coil_gold, 4), },250);
|
||||
makeRecipe(new ComparableStack(ModBlocks.launch_pad, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 2), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModBlocks.machine_battery, 1), new ComparableStack(ModItems.circuit_gold, 2), },250);
|
||||
makeRecipe(new ComparableStack(ModItems.spawn_chopper, 1), new AStack[] {new ComparableStack(ModItems.chopper_blades, 5), new ComparableStack(ModItems.chopper_gun, 1), new ComparableStack(ModItems.chopper_head, 1), new ComparableStack(ModItems.chopper_tail, 1), new ComparableStack(ModItems.chopper_torso, 1), new ComparableStack(ModItems.chopper_wing, 2), },300);
|
||||
makeRecipe(new ComparableStack(ModItems.gun_defabricator, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 2), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(IRON.plate(), 5), new ComparableStack(ModItems.mechanism_special, 3), new ComparableStack(Items.diamond, 1), new ComparableStack(ModItems.plate_dalekanium, 3), },200);
|
||||
makeRecipe(new ComparableStack(ModItems.gun_osipr_ammo, 24), new AStack[] {new OreDictStack(STEEL.plate(), 2), new OreDictStack(REDSTONE.dust(), 1), new ComparableStack(Items.glowstone_dust, 1), },50);
|
||||
@ -1027,6 +1026,21 @@ public class AssemblerRecipes {
|
||||
new ComparableStack(ModBlocks.glass_quartz, 16)
|
||||
}, 200);
|
||||
|
||||
|
||||
makeRecipe(new ComparableStack(ModBlocks.launch_pad_large, 1), new AStack[] {
|
||||
new OreDictStack(STEEL.plateCast(), 6),
|
||||
new OreDictStack(ANY_CONCRETE.any(), 64),
|
||||
new OreDictStack(ANY_PLASTIC.ingot(), 16),
|
||||
new ComparableStack(ModBlocks.steel_scaffold, 24),
|
||||
new ComparableStack(ModItems.circuit_red_copper, 3)
|
||||
}, 200);
|
||||
makeRecipe(new ComparableStack(ModBlocks.launch_pad, 1), new AStack[] {
|
||||
new OreDictStack(STEEL.plateWelded(), 8),
|
||||
new OreDictStack(ANY_CONCRETE.any(), 8),
|
||||
new OreDictStack(ANY_HARDPLASTIC.ingot(), 16),
|
||||
new ComparableStack(ModItems.circuit_gold, 1)
|
||||
}, 400);
|
||||
|
||||
makeRecipe(new ComparableStack(ModItems.euphemium_capacitor, 1), new AStack[]
|
||||
{
|
||||
new OreDictStack(NB.ingot(), 4),
|
||||
@ -1226,6 +1240,7 @@ public class AssemblerRecipes {
|
||||
makeRecipe(new ComparableStack(ModBlocks.secure_access_door, 1), new AStack[]{new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ALLOY.plate(), 16), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 32), new OreDictStack("dyeRed", 8)}, 4000);
|
||||
makeRecipe(new ComparableStack(ModBlocks.sliding_seal_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack("dyeWhite", 2)}, 200);
|
||||
makeRecipe(new ComparableStack(ModBlocks.silo_hatch, 1), new AStack[]{new OreDictStack(STEEL.plateWelded(), 4), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(STEEL.bolt(), 16), new OreDictStack(KEY_GREEN, 4)}, 200);
|
||||
makeRecipe(new ComparableStack(ModBlocks.silo_hatch_large, 1), new AStack[]{new OreDictStack(STEEL.plateWelded(), 6), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 2), new OreDictStack(STEEL.bolt(), 16), new OreDictStack(KEY_GREEN, 8)}, 200);
|
||||
|
||||
if(Loader.isModLoaded("Mekanism")) {
|
||||
|
||||
|
||||
@ -47,8 +47,9 @@ public class CrystallizerRecipes extends SerializableRecipe {
|
||||
@Override
|
||||
public void registerDefaults() {
|
||||
|
||||
int baseTime = 600;
|
||||
int utilityTime = 100;
|
||||
final int baseTime = 600;
|
||||
final int utilityTime = 100;
|
||||
final int mixingTime = 20;
|
||||
FluidStack sulfur = new FluidStack(Fluids.SULFURIC_ACID, 500);
|
||||
|
||||
registerRecipe(COAL.ore(), new CrystallizerRecipe(ModItems.crystal_coal, baseTime));
|
||||
@ -93,8 +94,8 @@ public class CrystallizerRecipes extends SerializableRecipe {
|
||||
registerRecipe(new ComparableStack(Items.rotten_flesh), new CrystallizerRecipe(Items.leather, utilityTime));
|
||||
registerRecipe(new ComparableStack(ModItems.coal_infernal), new CrystallizerRecipe(ModItems.solid_fuel, utilityTime));
|
||||
registerRecipe(new ComparableStack(ModBlocks.stone_gneiss), new CrystallizerRecipe(ModItems.powder_lithium, utilityTime));
|
||||
registerRecipe(new ComparableStack(Items.dye, 1, 15), new CrystallizerRecipe(new ItemStack(Items.slime_ball, 4), 20), new FluidStack(Fluids.SULFURIC_ACID, 250));
|
||||
registerRecipe(new ComparableStack(Items.bone), new CrystallizerRecipe(new ItemStack(Items.slime_ball, 16), 20), new FluidStack(Fluids.SULFURIC_ACID, 1_000));
|
||||
registerRecipe(new ComparableStack(Items.dye, 1, 15), new CrystallizerRecipe(new ItemStack(Items.slime_ball, 4), mixingTime), new FluidStack(Fluids.SULFURIC_ACID, 250));
|
||||
registerRecipe(new ComparableStack(Items.bone), new CrystallizerRecipe(new ItemStack(Items.slime_ball, 16), mixingTime), new FluidStack(Fluids.SULFURIC_ACID, 1_000));
|
||||
registerRecipe(new ComparableStack(DictFrame.fromOne(ModItems.plant_item, EnumPlantType.MUSTARDWILLOW)), new CrystallizerRecipe(new ItemStack(ModItems.powder_cadmium), 100).setReq(10), new FluidStack(Fluids.RADIOSOLVENT, 250));
|
||||
registerRecipe(new ComparableStack(DictFrame.fromOne(ModItems.powder_ash, EnumAshType.FULLERENE)), new CrystallizerRecipe(new ItemStack(ModItems.ingot_cft), baseTime).setReq(4), new FluidStack(Fluids.XYLENE, 1_000));
|
||||
|
||||
@ -105,6 +106,7 @@ public class CrystallizerRecipes extends SerializableRecipe {
|
||||
registerRecipe(new ComparableStack(ModItems.powder_desh_ready), new CrystallizerRecipe(ModItems.ingot_desh, baseTime));
|
||||
registerRecipe(new ComparableStack(ModItems.powder_meteorite), new CrystallizerRecipe(ModItems.fragment_meteorite, utilityTime));
|
||||
registerRecipe(CD.dust(), new CrystallizerRecipe(ModItems.ingot_rubber, baseTime), new FluidStack(Fluids.FISHOIL, 250));
|
||||
registerRecipe(new ComparableStack(ModItems.powder_sawdust), new CrystallizerRecipe(ModItems.cordite, mixingTime), new FluidStack(Fluids.NITROGLYCERIN, 250));
|
||||
|
||||
registerRecipe(new ComparableStack(ModItems.meteorite_sword_treated), new CrystallizerRecipe(ModItems.meteorite_sword_etched, baseTime));
|
||||
registerRecipe(new ComparableStack(ModItems.powder_impure_osmiridium), new CrystallizerRecipe(ModItems.crystal_osmiridium, baseTime), new FluidStack(Fluids.SCHRABIDIC, 1_000));
|
||||
@ -131,12 +133,12 @@ public class CrystallizerRecipes extends SerializableRecipe {
|
||||
|
||||
FluidStack[] dyes = new FluidStack[] {new FluidStack(Fluids.WOODOIL, 100), new FluidStack(Fluids.FISHOIL, 100)};
|
||||
for(FluidStack dye : dyes) {
|
||||
registerRecipe(COAL.dust(), new CrystallizerRecipe(DictFrame.fromOne(ModItems.chemical_dye, EnumChemDye.BLACK, 4), 20), dye);
|
||||
registerRecipe(TI.dust(), new CrystallizerRecipe(DictFrame.fromOne(ModItems.chemical_dye, EnumChemDye.WHITE, 4), 20), dye);
|
||||
registerRecipe(IRON.dust(), new CrystallizerRecipe(DictFrame.fromOne(ModItems.chemical_dye, EnumChemDye.RED, 4), 20), dye);
|
||||
registerRecipe(W.dust(), new CrystallizerRecipe(DictFrame.fromOne(ModItems.chemical_dye, EnumChemDye.YELLOW, 4), 20), dye);
|
||||
registerRecipe(CU.dust(), new CrystallizerRecipe(DictFrame.fromOne(ModItems.chemical_dye, EnumChemDye.GREEN, 4), 20), dye);
|
||||
registerRecipe(CO.dust(), new CrystallizerRecipe(DictFrame.fromOne(ModItems.chemical_dye, EnumChemDye.BLUE, 4), 20), dye);
|
||||
registerRecipe(COAL.dust(), new CrystallizerRecipe(DictFrame.fromOne(ModItems.chemical_dye, EnumChemDye.BLACK, 4), mixingTime), dye);
|
||||
registerRecipe(TI.dust(), new CrystallizerRecipe(DictFrame.fromOne(ModItems.chemical_dye, EnumChemDye.WHITE, 4), mixingTime), dye);
|
||||
registerRecipe(IRON.dust(), new CrystallizerRecipe(DictFrame.fromOne(ModItems.chemical_dye, EnumChemDye.RED, 4), mixingTime), dye);
|
||||
registerRecipe(W.dust(), new CrystallizerRecipe(DictFrame.fromOne(ModItems.chemical_dye, EnumChemDye.YELLOW, 4), mixingTime), dye);
|
||||
registerRecipe(CU.dust(), new CrystallizerRecipe(DictFrame.fromOne(ModItems.chemical_dye, EnumChemDye.GREEN, 4), mixingTime), dye);
|
||||
registerRecipe(CO.dust(), new CrystallizerRecipe(DictFrame.fromOne(ModItems.chemical_dye, EnumChemDye.BLUE, 4), mixingTime), dye);
|
||||
}
|
||||
|
||||
registerRecipe(new ComparableStack(DictFrame.fromOne(ModItems.oil_tar, EnumTarType.CRUDE)), new CrystallizerRecipe(DictFrame.fromOne(ModItems.oil_tar, EnumTarType.WAX), 20), new FluidStack(Fluids.CHLORINE, 250));
|
||||
|
||||
@ -934,7 +934,7 @@ public class ClientProxy extends ServerProxy {
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
if("exKerosene".equals(type)) {
|
||||
ParticleContrail contrail = new ParticleContrail(man, world, x, y, z);
|
||||
ParticleContrail contrail = new ParticleContrail(man, world, x, y, z, 0F, 0F, 0F, 1F);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
if("exSolid".equals(type)) {
|
||||
@ -973,9 +973,26 @@ public class ClientProxy extends ServerProxy {
|
||||
double z = data.getDouble("posZ");
|
||||
|
||||
if("missileContrail".equals(type)) {
|
||||
|
||||
if(Vec3.createVectorHelper(player.posX - x, player.posY - y, player.posZ - z).lengthVector() > 350) return;
|
||||
|
||||
float scale = data.hasKey("scale") ? data.getFloat("scale") : 1F;
|
||||
ParticleContrail contrail = new ParticleContrail(man, world, x, y, z, 0, 0, 0, scale);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
double mX = data.getDouble("moX");
|
||||
double mY = data.getDouble("moY");
|
||||
double mZ = data.getDouble("moZ");
|
||||
|
||||
/*ParticleContrail contrail = new ParticleContrail(man, world, x, y, z, 0, 0, 0, scale);
|
||||
contrail.motionX = mX;
|
||||
contrail.motionY = mY;
|
||||
contrail.motionZ = mZ;
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);*/
|
||||
|
||||
ParticleRocketFlame fx = new ParticleRocketFlame(man, world, x, y, z).setScale(scale);
|
||||
fx.motionX = mX;
|
||||
fx.motionY = mY;
|
||||
fx.motionZ = mZ;
|
||||
if(data.hasKey("maxAge")) fx.setMaxAge(data.getInteger("maxAge"));
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(fx);
|
||||
}
|
||||
|
||||
if("smoke".equals(type)) {
|
||||
|
||||
@ -351,6 +351,8 @@ public class ResourceManager {
|
||||
|
||||
public static final ResourceLocation silo_hatch_tex = new ResourceLocation(RefStrings.MODID, "textures/models/doors/silo_hatch.png");
|
||||
public static WavefrontObjDisplayList silo_hatch = new WavefrontObjDisplayList(new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/doors/silo_hatch.obj")));
|
||||
public static final ResourceLocation silo_hatch_large_tex = new ResourceLocation(RefStrings.MODID, "textures/models/doors/silo_hatch_large.png");
|
||||
public static WavefrontObjDisplayList silo_hatch_large = new WavefrontObjDisplayList(new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/doors/silo_hatch_large.obj")));
|
||||
|
||||
|
||||
//Lights
|
||||
|
||||
@ -21,8 +21,20 @@ public class ParticleRocketFlame extends EntityFX {
|
||||
super(p_i1218_1_, p_i1218_2_, p_i1218_4_, p_i1218_6_);
|
||||
particleIcon = ModEventHandlerClient.particleBase;
|
||||
maxAge = 300 + rand.nextInt(50);
|
||||
this.particleScale = 1F;
|
||||
}
|
||||
|
||||
public ParticleRocketFlame setScale(float scale) {
|
||||
this.particleScale = scale;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ParticleRocketFlame setMaxAge(int maxAge) {
|
||||
this.maxAge = maxAge;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
this.prevPosX = this.posX;
|
||||
this.prevPosY = this.posY;
|
||||
@ -30,51 +42,54 @@ public class ParticleRocketFlame extends EntityFX {
|
||||
|
||||
this.age++;
|
||||
|
||||
if (this.age == this.maxAge) {
|
||||
if(this.age == this.maxAge) {
|
||||
this.setDead();
|
||||
}
|
||||
|
||||
this.motionX *= 0.9099999785423279D;
|
||||
this.motionY *= 0.9099999785423279D;
|
||||
this.motionZ *= 0.9099999785423279D;
|
||||
this.motionX *= 0.91D;
|
||||
this.motionY *= 0.91D;
|
||||
this.motionZ *= 0.91D;
|
||||
|
||||
this.moveEntity(this.motionX, this.motionY, this.motionZ);
|
||||
this.moveEntity(this.motionX, this.motionY, this.motionZ);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFXLayer() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
public void renderParticle(Tessellator p_70539_1_, float p_70539_2_, float p_70539_3_, float p_70539_4_, float p_70539_5_, float p_70539_6_, float p_70539_7_) {
|
||||
|
||||
Random urandom = new Random(this.getEntityId());
|
||||
|
||||
for(int i = 0; i < 10; i++) {
|
||||
|
||||
float add = urandom.nextFloat() * 0.3F;
|
||||
float dark = 1 - Math.min(((float)(age) / (float)(maxAge * 0.25F)), 1);
|
||||
|
||||
this.particleRed = 1 * dark + add;
|
||||
this.particleGreen = 0.6F * dark + add;
|
||||
this.particleBlue = 0 + add;
|
||||
|
||||
this.particleAlpha = (float) Math.pow(1 - Math.min(((float)(age) / (float)(maxAge)), 1), 0.5);
|
||||
|
||||
p_70539_1_.setColorRGBA_F(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha * 0.75F);
|
||||
p_70539_1_.setNormal(0.0F, 1.0F, 0.0F);
|
||||
p_70539_1_.setBrightness(240);
|
||||
|
||||
float spread = (float) Math.pow(((float)(age) / (float)maxAge) * 4F, 1.5) + 1F;
|
||||
|
||||
float scale = urandom.nextFloat() * 0.5F + 0.1F + ((float)(age) / (float)maxAge) * 2F;
|
||||
float pX = (float) ((this.prevPosX + (this.posX - this.prevPosX) * (double)p_70539_2_ - interpPosX) + (urandom.nextGaussian() - 1D) * 0.2F * spread);
|
||||
float pY = (float) ((this.prevPosY + (this.posY - this.prevPosY) * (double)p_70539_2_ - interpPosY) + (urandom.nextGaussian() - 1D) * 0.5F * spread);
|
||||
float pZ = (float) ((this.prevPosZ + (this.posZ - this.prevPosZ) * (double)p_70539_2_ - interpPosZ) + (urandom.nextGaussian() - 1D) * 0.2F * spread);
|
||||
|
||||
p_70539_1_.addVertexWithUV((double)(pX - p_70539_3_ * scale - p_70539_6_ * scale), (double)(pY - p_70539_4_ * scale), (double)(pZ - p_70539_5_ * scale - p_70539_7_ * scale), particleIcon.getMaxU(), particleIcon.getMaxV());
|
||||
p_70539_1_.addVertexWithUV((double)(pX - p_70539_3_ * scale + p_70539_6_ * scale), (double)(pY + p_70539_4_ * scale), (double)(pZ - p_70539_5_ * scale + p_70539_7_ * scale), particleIcon.getMaxU(), particleIcon.getMinV());
|
||||
p_70539_1_.addVertexWithUV((double)(pX + p_70539_3_ * scale + p_70539_6_ * scale), (double)(pY + p_70539_4_ * scale), (double)(pZ + p_70539_5_ * scale + p_70539_7_ * scale), particleIcon.getMinU(), particleIcon.getMinV());
|
||||
p_70539_1_.addVertexWithUV((double)(pX + p_70539_3_ * scale - p_70539_6_ * scale), (double)(pY - p_70539_4_ * scale), (double)(pZ + p_70539_5_ * scale - p_70539_7_ * scale), particleIcon.getMinU(), particleIcon.getMaxV());
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderParticle(Tessellator p_70539_1_, float interp, float sX, float sY, float sZ, float dX, float dZ) {
|
||||
|
||||
Random urandom = new Random(this.getEntityId());
|
||||
|
||||
for(int i = 0; i < 10; i++) {
|
||||
|
||||
float add = urandom.nextFloat() * 0.3F;
|
||||
float dark = 1 - Math.min(((float) (age) / (float) (maxAge * 0.25F)), 1);
|
||||
|
||||
this.particleRed = 1 * dark + add;
|
||||
this.particleGreen = 0.6F * dark + add;
|
||||
this.particleBlue = 0 + add;
|
||||
|
||||
this.particleAlpha = (float) Math.pow(1 - Math.min(((float) (age) / (float) (maxAge)), 1), 0.5);
|
||||
|
||||
p_70539_1_.setColorRGBA_F(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha * 0.75F);
|
||||
p_70539_1_.setNormal(0.0F, 1.0F, 0.0F);
|
||||
p_70539_1_.setBrightness(240);
|
||||
|
||||
float spread = (float) Math.pow(((float) (age) / (float) maxAge) * 4F, 1.5) + 1F;
|
||||
spread *= this.particleScale;
|
||||
|
||||
float scale = (urandom.nextFloat() * 0.5F + 0.1F + ((float) (age) / (float) maxAge) * 2F) * particleScale;
|
||||
float pX = (float) ((this.prevPosX + (this.posX - this.prevPosX) * (double) interp - interpPosX) + (urandom.nextGaussian() - 1D) * 0.2F * spread);
|
||||
float pY = (float) ((this.prevPosY + (this.posY - this.prevPosY) * (double) interp - interpPosY) + (urandom.nextGaussian() - 1D) * 0.5F * spread);
|
||||
float pZ = (float) ((this.prevPosZ + (this.posZ - this.prevPosZ) * (double) interp - interpPosZ) + (urandom.nextGaussian() - 1D) * 0.2F * spread);
|
||||
|
||||
p_70539_1_.addVertexWithUV((double) (pX - sX * scale - dX * scale), (double) (pY - sY * scale), (double) (pZ - sZ * scale - dZ * scale), particleIcon.getMaxU(), particleIcon.getMaxV());
|
||||
p_70539_1_.addVertexWithUV((double) (pX - sX * scale + dX * scale), (double) (pY + sY * scale), (double) (pZ - sZ * scale + dZ * scale), particleIcon.getMaxU(), particleIcon.getMinV());
|
||||
p_70539_1_.addVertexWithUV((double) (pX + sX * scale + dX * scale), (double) (pY + sY * scale), (double) (pZ + sZ * scale + dZ * scale), particleIcon.getMinU(), particleIcon.getMinV());
|
||||
p_70539_1_.addVertexWithUV((double) (pX + sX * scale - dX * scale), (double) (pY - sY * scale), (double) (pZ + sZ * scale - dZ * scale), particleIcon.getMinU(), particleIcon.getMaxV());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -30,7 +30,8 @@ public class ParticleSmokePlume extends EntityFX {
|
||||
public ParticleSmokePlume(TextureManager p_i1213_1_, World p_i1218_1_, double p_i1218_2_, double p_i1218_4_, double p_i1218_6_) {
|
||||
super(p_i1218_1_, p_i1218_2_, p_i1218_4_, p_i1218_6_);
|
||||
theRenderEngine = p_i1213_1_;
|
||||
maxAge = 100 + rand.nextInt(40);
|
||||
maxAge = 80 + rand.nextInt(20);
|
||||
this.particleScale = 0.25F;
|
||||
}
|
||||
|
||||
public void onUpdate() {
|
||||
@ -39,6 +40,8 @@ public class ParticleSmokePlume extends EntityFX {
|
||||
this.prevPosZ = this.posZ;
|
||||
|
||||
particleAlpha = 1 - ((float) age / (float) maxAge);
|
||||
float prevScale = this.particleScale;
|
||||
this.particleScale = 0.25F + ((float) age / (float) maxAge) * 2;
|
||||
|
||||
++this.age;
|
||||
|
||||
@ -48,9 +51,9 @@ public class ParticleSmokePlume extends EntityFX {
|
||||
|
||||
double bak = Vec3.createVectorHelper(motionX, motionY, motionZ).lengthVector();
|
||||
|
||||
this.moveEntity(this.motionX, this.motionY, this.motionZ);
|
||||
this.moveEntity(this.motionX, this.motionY + (this.particleScale - prevScale), this.motionZ);
|
||||
|
||||
if(Math.abs(motionX) < 0.025 && Math.abs(motionZ) < 0.025) {
|
||||
if(this.isCollidedVertically) {
|
||||
motionY = bak;
|
||||
}
|
||||
|
||||
@ -85,16 +88,16 @@ public class ParticleSmokePlume extends EntityFX {
|
||||
|
||||
p_70539_1_.startDrawingQuads();
|
||||
|
||||
this.particleRed = this.particleGreen = this.particleBlue = urandom.nextFloat() * 0.7F + 0.2F;
|
||||
this.particleRed = this.particleGreen = this.particleBlue = urandom.nextFloat() * 0.75F + 0.1F;
|
||||
|
||||
p_70539_1_.setColorRGBA_F(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha);
|
||||
p_70539_1_.setNormal(0.0F, 1.0F, 0.0F);
|
||||
p_70539_1_.setBrightness(240);
|
||||
|
||||
float scale = 0.5F;
|
||||
float pX = (float) ((this.prevPosX + (this.posX - this.prevPosX) * (double) p_70539_2_ - dX) + urandom.nextGaussian() * 0.5);
|
||||
float pY = (float) ((this.prevPosY + (this.posY - this.prevPosY) * (double) p_70539_2_ - dY) + urandom.nextGaussian() * 0.5);
|
||||
float pZ = (float) ((this.prevPosZ + (this.posZ - this.prevPosZ) * (double) p_70539_2_ - dZ) + urandom.nextGaussian() * 0.5);
|
||||
float scale = this.particleScale;
|
||||
float pX = (float) ((this.prevPosX + (this.posX - this.prevPosX) * (double) p_70539_2_ - dX) + urandom.nextGaussian() * 0.5 * scale);
|
||||
float pY = (float) ((this.prevPosY + (this.posY - this.prevPosY) * (double) p_70539_2_ - dY) + urandom.nextGaussian() * 0.5 * scale);
|
||||
float pZ = (float) ((this.prevPosZ + (this.posZ - this.prevPosZ) * (double) p_70539_2_ - dZ) + urandom.nextGaussian() * 0.5 * scale);
|
||||
|
||||
p_70539_1_.addVertexWithUV((double) (pX - p_70539_3_ * scale - p_70539_6_ * scale), (double) (pY - p_70539_4_ * scale), (double) (pZ - p_70539_5_ * scale - p_70539_7_ * scale), 1, 1);
|
||||
p_70539_1_.addVertexWithUV((double) (pX - p_70539_3_ * scale + p_70539_6_ * scale), (double) (pY + p_70539_4_ * scale), (double) (pZ - p_70539_5_ * scale + p_70539_7_ * scale), 1, 0);
|
||||
|
||||
@ -743,10 +743,30 @@ public class ItemRenderLibrary {
|
||||
GL11.glTranslated(0, 0.875, -1.875);
|
||||
GL11.glRotated(-120, 1, 0, 0);
|
||||
GL11.glTranslated(0, -0.875, 1.875);
|
||||
GL11.glTranslated(0, 0.25, 0);
|
||||
ResourceManager.silo_hatch.renderPart("Hatch");
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
}
|
||||
});
|
||||
renderers.put(Item.getItemFromBlock(ModBlocks.silo_hatch_large), new ItemRenderBase(){
|
||||
public void renderInventory() {
|
||||
GL11.glTranslated(0, -2, 0);
|
||||
GL11.glScaled(1.5, 1.5, 1.5);
|
||||
}
|
||||
public void renderCommon() {
|
||||
bindTexture(ResourceManager.silo_hatch_large_tex);
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
GL11.glTranslated(1, 0, 0);
|
||||
GL11.glRotated(90, 0, 1, 0);
|
||||
ResourceManager.silo_hatch_large.renderPart("Frame");
|
||||
GL11.glTranslated(0, 0.875, -2.875);
|
||||
GL11.glRotated(-120, 1, 0, 0);
|
||||
GL11.glTranslated(0, -0.875, 2.875);
|
||||
GL11.glTranslated(0, 0.25, 0);
|
||||
ResourceManager.silo_hatch_large.renderPart("Hatch");
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
}
|
||||
});
|
||||
renderers.put(Item.getItemFromBlock(ModBlocks.qe_containment), new ItemRenderBase(){
|
||||
public void renderInventory() {
|
||||
GL11.glTranslated(0, -3.5, 0);
|
||||
|
||||
@ -5,18 +5,23 @@ import java.util.function.Consumer;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.blocks.BlockDummyable;
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.inventory.RecipesCommon.ComparableStack;
|
||||
import com.hbm.items.weapon.ItemMissile;
|
||||
import com.hbm.items.weapon.ItemMissile.MissileFormFactor;
|
||||
import com.hbm.main.ResourceManager;
|
||||
import com.hbm.render.item.ItemRenderBase;
|
||||
import com.hbm.render.item.ItemRenderMissileGeneric;
|
||||
import com.hbm.tileentity.bomb.TileEntityLaunchPadLarge;
|
||||
|
||||
import net.minecraft.client.renderer.texture.TextureManager;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.client.IItemRenderer;
|
||||
|
||||
public class RenderLaunchPadLarge extends TileEntitySpecialRenderer {
|
||||
public class RenderLaunchPadLarge extends TileEntitySpecialRenderer implements IItemRendererProvider {
|
||||
|
||||
@Override
|
||||
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) {
|
||||
@ -97,4 +102,30 @@ public class RenderLaunchPadLarge extends TileEntitySpecialRenderer {
|
||||
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getItemForRenderer() {
|
||||
return Item.getItemFromBlock(ModBlocks.launch_pad_large);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemRenderer getRenderer() {
|
||||
return new ItemRenderBase( ) {
|
||||
public void renderInventory() {
|
||||
GL11.glTranslated(0, -3.75, 0);
|
||||
GL11.glScaled(1.625, 1.625, 1.625);
|
||||
}
|
||||
public void renderCommonWithStack(ItemStack item) {
|
||||
GL11.glScaled(0.5, 0.5, 0.5);
|
||||
GL11.glRotatef(90, 0F, 1F, 0F);
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
bindTexture(ResourceManager.missile_erector_tex);
|
||||
ResourceManager.missile_erector.renderPart("Pad");
|
||||
bindTexture(ResourceManager.missile_erector_atlas_tex);
|
||||
ResourceManager.missile_erector.renderPart("Atlas_Pad");
|
||||
ResourceManager.missile_erector.renderPart("Atlas_Erector");
|
||||
ResourceManager.missile_erector.renderPart("Atlas_Pivot");
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
}};
|
||||
}
|
||||
}
|
||||
|
||||
@ -922,6 +922,66 @@ public abstract class DoorDecl {
|
||||
|
||||
};
|
||||
|
||||
public static final DoorDecl SILO_HATCH_LARGE = new DoorDecl() {
|
||||
|
||||
@Override public String getOpenSoundEnd() { return "hbm:door.wgh_big_stop"; };
|
||||
@Override public String getOpenSoundLoop() { return "hbm:door.wgh_big_start"; };
|
||||
@Override public String getOpenSoundStart() { return null; };
|
||||
@Override public String getCloseSoundStart() { return null; };
|
||||
@Override public String getCloseSoundEnd() { return "hbm:door.wgh_big_stop"; };
|
||||
@Override public float getSoundVolume() { return 2; }
|
||||
@Override public boolean remoteControllable() { return true; }
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void getTranslation(String partName, float openTicks, boolean child, float[] trans) {
|
||||
if("Hatch".equals(partName)) {
|
||||
set(trans, 0, 0.25F * Library.smoothstep(getNormTime(openTicks, 0, 10), 0, 1), 0);
|
||||
} else {
|
||||
set(trans, 0, 0, 0);
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void getOrigin(String partName, float[] orig) {
|
||||
if("Hatch".equals(partName)) {
|
||||
set(orig, 0F, 0.875F, -2.875F);
|
||||
return;
|
||||
}
|
||||
set(orig, 0, 0, 0);
|
||||
super.getOrigin(partName, orig);
|
||||
};
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void getRotation(String partName, float openTicks, float[] rot) {
|
||||
if("Hatch".equals(partName)) {
|
||||
set(rot, Library.smoothstep(getNormTime(openTicks, 20, 100), 0, 1) * -240, 0, 0);
|
||||
return;
|
||||
}
|
||||
super.getRotation(partName, openTicks, rot);
|
||||
};
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean doesRender(String partName, boolean child) {
|
||||
return true;
|
||||
};
|
||||
|
||||
@Override public int timeToOpen() { return 60; };
|
||||
@Override public int[][] getDoorOpenRanges() { return new int[][] { { 2, 0, 1, -3, 3, 0 }, { 1, 0, 2, -5, 3, 0 }, { 0, 0, 2, -5, 3, 0 }, { -1, 0, 2, -5, 3, 0 }, { -2, 0, 1, -3, 3, 0 } }; }
|
||||
@Override public float getDoorRangeOpenTime(int ticks, int idx) { return getNormTime(ticks, 20, 20); };
|
||||
|
||||
|
||||
@Override public int getBlockOffset() { return 3; }
|
||||
@Override public int[] getDimensions() { return new int[] { 0, 0, 3, 3, 3, 3 }; }
|
||||
@Override @SideOnly(Side.CLIENT) public ResourceLocation getTextureForPart(String partName) { return ResourceManager.silo_hatch_large_tex; }
|
||||
@Override public ResourceLocation getTextureForPart(int skinIndex, String partName) { return ResourceManager.silo_hatch_large_tex; }
|
||||
@Override @SideOnly(Side.CLIENT) public WavefrontObjDisplayList getModel() { return ResourceManager.silo_hatch_large; }
|
||||
|
||||
};
|
||||
|
||||
public static final DoorDecl LARGE_VEHICLE_DOOR = new DoorDecl() {
|
||||
|
||||
@Override
|
||||
|
||||
@ -167,7 +167,7 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn
|
||||
|
||||
public DoorDecl getDoorType(){
|
||||
|
||||
if(this.doorType == null)
|
||||
if(this.doorType == null && this.getBlockType() instanceof BlockDoorGeneric)
|
||||
this.doorType = ((BlockDoorGeneric)this.getBlockType()).type;
|
||||
|
||||
return this.doorType;
|
||||
|
||||
@ -1,16 +1,24 @@
|
||||
package com.hbm.tileentity.bomb;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.entity.missile.EntityMissileBaseNT;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.util.fauxpointtwelve.DirPos;
|
||||
|
||||
import api.hbm.energy.IEnergyUser;
|
||||
import api.hbm.fluid.IFluidStandardReceiver;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class TileEntityLaunchPad extends TileEntityLaunchPadBase implements IEnergyUser, IFluidStandardReceiver {
|
||||
|
||||
@Override public boolean isReadyForLaunch() { return delay <= 0; }
|
||||
@Override public double getLaunchOffset() { return 2D; }
|
||||
@Override public double getLaunchOffset() { return 1D; }
|
||||
|
||||
public int delay = 0;
|
||||
|
||||
@ -24,11 +32,52 @@ public class TileEntityLaunchPad extends TileEntityLaunchPadBase implements IEne
|
||||
if(!this.isMissileValid() || !this.hasFuel()) {
|
||||
this.delay = 100;
|
||||
}
|
||||
|
||||
if(!this.hasFuel() || !this.isMissileValid()) {
|
||||
this.state = this.STATE_MISSING;
|
||||
} else {
|
||||
if(this.delay > 0) {
|
||||
this.state = this.STATE_LOADING;
|
||||
} else {
|
||||
this.state = this.STATE_READY;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
List<EntityMissileBaseNT> entities = worldObj.getEntitiesWithinAABB(EntityMissileBaseNT.class, AxisAlignedBB.getBoundingBox(xCoord - 0.5, yCoord, zCoord - 0.5, xCoord + 1.5, yCoord + 10, zCoord + 1.5));
|
||||
|
||||
if(!entities.isEmpty()) {
|
||||
for(int i = 0; i < 15; i++) {
|
||||
|
||||
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10);
|
||||
if(worldObj.rand.nextBoolean()) dir = dir.getOpposite();
|
||||
if(worldObj.rand.nextBoolean()) dir = dir.getRotation(ForgeDirection.UP);
|
||||
float moX = (float) (worldObj.rand.nextGaussian() * 0.15F + 0.75) * dir.offsetX;
|
||||
float moZ = (float) (worldObj.rand.nextGaussian() * 0.15F + 0.75) * dir.offsetZ;
|
||||
|
||||
MainRegistry.proxy.spawnParticle(xCoord + 0.5, yCoord + 0.25, zCoord + 0.5, "launchsmoke", new float[] {moX, 0, moZ});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
super.updateEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public DirPos[] getConPos() {
|
||||
return new DirPos[] {
|
||||
new DirPos(xCoord + 2, yCoord, zCoord - 1, Library.POS_X),
|
||||
new DirPos(xCoord + 2, yCoord, zCoord + 1, Library.POS_X),
|
||||
new DirPos(xCoord - 2, yCoord, zCoord - 1, Library.NEG_X),
|
||||
new DirPos(xCoord - 2, yCoord, zCoord + 1, Library.NEG_X),
|
||||
new DirPos(xCoord - 1, yCoord, zCoord + 2, Library.POS_Z),
|
||||
new DirPos(xCoord + 1, yCoord, zCoord + 2, Library.POS_Z),
|
||||
new DirPos(xCoord - 1, yCoord, zCoord - 2, Library.NEG_Z),
|
||||
new DirPos(xCoord + 1, yCoord, zCoord - 2, Library.NEG_Z)
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
|
||||
@ -48,7 +48,9 @@ import com.hbm.main.MainRegistry;
|
||||
import com.hbm.tileentity.IGUIProvider;
|
||||
import com.hbm.tileentity.IRadarCommandReceiver;
|
||||
import com.hbm.tileentity.TileEntityMachineBase;
|
||||
import com.hbm.util.TrackerUtil;
|
||||
import com.hbm.util.fauxpointtwelve.BlockPos;
|
||||
import com.hbm.util.fauxpointtwelve.DirPos;
|
||||
|
||||
import api.hbm.energy.IEnergyUser;
|
||||
import api.hbm.fluid.IFluidStandardReceiver;
|
||||
@ -66,6 +68,7 @@ import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase implements IEnergyUser, IFluidStandardReceiver, IGUIProvider, IRadarCommandReceiver {
|
||||
|
||||
@ -116,6 +119,11 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl
|
||||
public int redstonePower;
|
||||
public Set<BlockPos> activatedBlocks = new HashSet<>(4);
|
||||
|
||||
public int state = 0;
|
||||
public static final int STATE_MISSING = 0;
|
||||
public static final int STATE_LOADING = 1;
|
||||
public static final int STATE_READY = 2;
|
||||
|
||||
public FluidTank[] tanks;
|
||||
|
||||
public TileEntityLaunchPadBase() {
|
||||
@ -129,12 +137,37 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl
|
||||
public String getName() {
|
||||
return "container.launchPad";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canExtractItem(int slot, ItemStack itemStack, int side) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getAccessibleSlotsFromSide(int side) {
|
||||
return new int[] { 0 };
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValidForSlot(int slot, ItemStack stack) {
|
||||
return slot == 0 && this.isMissileValid(stack);
|
||||
}
|
||||
|
||||
public abstract DirPos[] getConPos();
|
||||
|
||||
@Override
|
||||
public void updateEntity() {
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
if(worldObj.getTotalWorldTime() % 20 == 0) {
|
||||
for(DirPos pos : getConPos()) {
|
||||
this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
|
||||
if(tanks[0].getTankType() != Fluids.NONE) this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
|
||||
if(tanks[1].getTankType() != Fluids.NONE) this.trySubscribe(tanks[1].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
|
||||
}
|
||||
}
|
||||
|
||||
if(this.redstonePower > 0 && this.prevRedstonePower == 0) {
|
||||
this.launchFromDesignator();
|
||||
}
|
||||
@ -161,6 +194,7 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl
|
||||
super.serialize(buf);
|
||||
|
||||
buf.writeLong(this.power);
|
||||
buf.writeInt(this.state);
|
||||
tanks[0].serialize(buf);
|
||||
tanks[1].serialize(buf);
|
||||
|
||||
@ -178,6 +212,7 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl
|
||||
super.deserialize(buf);
|
||||
|
||||
this.power = buf.readLong();
|
||||
this.state = buf.readInt();
|
||||
tanks[0].deserialize(buf);
|
||||
tanks[1].deserialize(buf);
|
||||
|
||||
@ -248,6 +283,10 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl
|
||||
@Override public long getMaxPower() { return maxPower; }
|
||||
@Override public FluidTank[] getAllTanks() { return this.tanks; }
|
||||
@Override public FluidTank[] getReceivingTanks() { return this.tanks; }
|
||||
|
||||
@Override public boolean canConnect(ForgeDirection dir) {
|
||||
return dir != ForgeDirection.UP && dir != ForgeDirection.DOWN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||
@ -284,7 +323,11 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl
|
||||
|
||||
/** Requires the missile slot to be non-null and he item to be compatible */
|
||||
public boolean isMissileValid() {
|
||||
return slots[0] != null && slots[0].getItem() instanceof ItemMissile;
|
||||
return slots[0] != null && isMissileValid(slots[0]);
|
||||
}
|
||||
|
||||
public boolean isMissileValid(ItemStack stack) {
|
||||
return stack.getItem() instanceof ItemMissile;
|
||||
}
|
||||
|
||||
public boolean hasFuel() {
|
||||
@ -329,6 +372,7 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl
|
||||
|
||||
public void finalizeLaunch(Entity missile) {
|
||||
worldObj.spawnEntityInWorld(missile);
|
||||
TrackerUtil.setTrackingRange(worldObj, missile, 500);
|
||||
worldObj.playSoundEffect(xCoord + 0.5, yCoord, zCoord + 0.5, "hbm:weapon.missileTakeOff", 2.0F, 1.0F);
|
||||
|
||||
this.power -= 75_000;
|
||||
|
||||
@ -1,11 +1,15 @@
|
||||
package com.hbm.tileentity.bomb;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.entity.missile.EntityMissileBaseNT;
|
||||
import com.hbm.items.weapon.ItemMissile;
|
||||
import com.hbm.items.weapon.ItemMissile.MissileFormFactor;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.sound.AudioWrapper;
|
||||
import com.hbm.tileentity.IGUIProvider;
|
||||
import com.hbm.tileentity.IRadarCommandReceiver;
|
||||
import com.hbm.util.fauxpointtwelve.DirPos;
|
||||
|
||||
import api.hbm.energy.IEnergyUser;
|
||||
import api.hbm.fluid.IFluidStandardReceiver;
|
||||
@ -14,8 +18,9 @@ import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase implements IEnergyUser, IFluidStandardReceiver, IGUIProvider, IRadarCommandReceiver {
|
||||
public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase implements IEnergyUser, IFluidStandardReceiver, IRadarCommandReceiver {
|
||||
|
||||
public int formFactor = -1;
|
||||
/** Whether the missile has already been placed on the launchpad. Missile will render statically on the pad if true */
|
||||
@ -105,6 +110,8 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase implements
|
||||
|
||||
//only extend if the erector isn't up yet and the missile can be loaded
|
||||
if(!erected && readyToLoad) {
|
||||
this.state = this.STATE_LOADING;
|
||||
|
||||
//first, rotate the erector
|
||||
if(erector != 0F) {
|
||||
erector = Math.max(erector - erectorSpeed, 0F);
|
||||
@ -135,6 +142,9 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase implements
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!this.hasFuel() || !this.isMissileValid()) this.state = this.STATE_MISSING;
|
||||
if(this.erected && this.canLaunch()) this.state = this.STATE_READY;
|
||||
|
||||
boolean prevLiftMoving = this.liftMoving;
|
||||
boolean prevErectorMoving = this.erectorMoving;
|
||||
@ -200,6 +210,20 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase implements
|
||||
data.setFloat("strafe", 0.05F);
|
||||
for(int i = 0; i < 3; i++) MainRegistry.proxy.effectNT(data);
|
||||
}
|
||||
|
||||
List<EntityMissileBaseNT> entities = worldObj.getEntitiesWithinAABB(EntityMissileBaseNT.class, AxisAlignedBB.getBoundingBox(xCoord - 0.5, yCoord, zCoord - 0.5, xCoord + 1.5, yCoord + 10, zCoord + 1.5));
|
||||
|
||||
if(!entities.isEmpty()) {
|
||||
for(int i = 0; i < 15; i++) {
|
||||
|
||||
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10);
|
||||
if(worldObj.rand.nextBoolean()) dir = dir.getOpposite();
|
||||
float moX = (float) (worldObj.rand.nextGaussian() * 0.15F + 0.75) * dir.offsetX;
|
||||
float moZ = (float) (worldObj.rand.nextGaussian() * 0.15F + 0.75) * dir.offsetZ;
|
||||
|
||||
MainRegistry.proxy.spawnParticle(xCoord + 0.5, yCoord + 0.25, zCoord + 0.5, "launchsmoke", new float[] {moX, 0, moZ});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
super.updateEntity();
|
||||
@ -257,6 +281,20 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase implements
|
||||
nbt.setInteger("formFactor", formFactor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DirPos[] getConPos() {
|
||||
return new DirPos[] {
|
||||
new DirPos(xCoord + 5, yCoord, zCoord - 2, Library.POS_X),
|
||||
new DirPos(xCoord + 5, yCoord, zCoord + 2, Library.POS_X),
|
||||
new DirPos(xCoord - 5, yCoord, zCoord - 2, Library.NEG_X),
|
||||
new DirPos(xCoord - 5, yCoord, zCoord + 2, Library.NEG_X),
|
||||
new DirPos(xCoord - 2, yCoord, zCoord + 5, Library.POS_Z),
|
||||
new DirPos(xCoord + 2, yCoord, zCoord + 5, Library.POS_Z),
|
||||
new DirPos(xCoord - 2, yCoord, zCoord - 5, Library.NEG_Z),
|
||||
new DirPos(xCoord + 2, yCoord, zCoord - 5, Library.NEG_Z)
|
||||
};
|
||||
}
|
||||
|
||||
AxisAlignedBB bb = null;
|
||||
|
||||
@Override
|
||||
|
||||
@ -84,22 +84,17 @@ public class TileEntityMachineReactorBreeding extends TileEntityMachineBase impl
|
||||
|
||||
for(byte d = 2; d < 6; d++) {
|
||||
ForgeDirection dir = ForgeDirection.getOrientation(d);
|
||||
|
||||
Block b = worldObj.getBlock(xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ);
|
||||
TileEntity te = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ);
|
||||
|
||||
if(b == ModBlocks.reactor_research) {
|
||||
|
||||
int[] pos = ((ReactorResearch) ModBlocks.reactor_research).findCore(worldObj, xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ);
|
||||
|
||||
if(pos != null) {
|
||||
|
||||
TileEntity tile = worldObj.getTileEntity(pos[0], pos[1], pos[2]);
|
||||
|
||||
if(tile instanceof TileEntityReactorResearch) {
|
||||
|
||||
TileEntityReactorResearch reactor = (TileEntityReactorResearch) tile;
|
||||
|
||||
this.flux += reactor.totalFlux;
|
||||
}
|
||||
}
|
||||
|
||||
@ -164,12 +164,12 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG
|
||||
int chunkX = xCoord >> 4;
|
||||
int chunkZ = zCoord >> 4;
|
||||
|
||||
//since fluid sources are often not within 1 chunk, we just do 3 chunks distance and call it a day
|
||||
//since fluid sources are often not within 1 chunk, we just do 2 chunks distance and call it a day
|
||||
if(!worldObj.getChunkProvider().chunkExists(chunkX, chunkZ) ||
|
||||
!worldObj.getChunkProvider().chunkExists(chunkX + 3, chunkZ + 3) ||
|
||||
!worldObj.getChunkProvider().chunkExists(chunkX + 3, chunkZ - 3) ||
|
||||
!worldObj.getChunkProvider().chunkExists(chunkX - 3, chunkZ + 3) ||
|
||||
!worldObj.getChunkProvider().chunkExists(chunkX - 3, chunkZ - 3)) {
|
||||
!worldObj.getChunkProvider().chunkExists(chunkX + 2, chunkZ + 2) ||
|
||||
!worldObj.getChunkProvider().chunkExists(chunkX + 2, chunkZ - 2) ||
|
||||
!worldObj.getChunkProvider().chunkExists(chunkX - 2, chunkZ + 2) ||
|
||||
!worldObj.getChunkProvider().chunkExists(chunkX - 2, chunkZ - 2)) {
|
||||
this.unloadDelay = 60;
|
||||
}
|
||||
|
||||
|
||||
@ -82,12 +82,14 @@ public class TileEntityMachineHydrotreater extends TileEntityMachineBase impleme
|
||||
@Override
|
||||
public void serialize(ByteBuf buf) {
|
||||
super.serialize(buf);
|
||||
buf.writeLong(power);
|
||||
for(int i = 0; i < 4; i++) tanks[i].serialize(buf);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserialize(ByteBuf buf) {
|
||||
super.deserialize(buf);
|
||||
this.power = buf.readLong();
|
||||
for(int i = 0; i < 4; i++) tanks[i].deserialize(buf);
|
||||
}
|
||||
|
||||
|
||||
@ -240,6 +240,8 @@ public class TileEntityTurretArty extends TileEntityTurretBaseArtillery implemen
|
||||
}
|
||||
this.lastRotationPitch = this.rotationPitch;
|
||||
this.lastRotationYaw = this.rotationYaw;
|
||||
this.rotationPitch = this.syncRotationPitch;
|
||||
this.rotationYaw = this.syncRotationYaw;
|
||||
}
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
@ -139,6 +139,8 @@ public class TileEntityTurretHIMARS extends TileEntityTurretBaseArtillery implem
|
||||
this.lastRotationPitch = this.rotationPitch;
|
||||
this.lastRotationYaw = this.rotationYaw;
|
||||
this.lastCrane = this.crane;
|
||||
this.rotationPitch = this.syncRotationPitch;
|
||||
this.rotationYaw = this.syncRotationYaw;
|
||||
}
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
@ -83,7 +83,7 @@ public class WorldInAJar implements IBlockAccess {
|
||||
}
|
||||
|
||||
//always render fullbright, if the situation requires it we could add a very rudimentary system that
|
||||
//darkens blocks id there is a solid one above
|
||||
//darkens blocks if there is a solid one above
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getLightBrightnessForSkyBlocks(int x, int y, int z, int blockBrightness) {
|
||||
|
||||
@ -4505,6 +4505,7 @@ tile.sellafield_core.name=Sellafit-Corium
|
||||
tile.sellafield_slaked.name=Gelöschtes Sellafit
|
||||
tile.semtex.name=Semtex
|
||||
tile.silo_hatch.name=Siloluke
|
||||
tile.silo_hatch_large.name=Große Siloluke
|
||||
tile.sliding_blast_door.name=Sprengtür
|
||||
tile.solar_mirror.name=Heliostatspiegel
|
||||
tile.soyuz_capsule.name=Landekapsel
|
||||
|
||||
@ -5518,6 +5518,7 @@ tile.sellafield.5.name=Sellafite-Corium
|
||||
tile.sellafield_slaked.name=Slaked Sellafite
|
||||
tile.semtex.name=Semtex
|
||||
tile.silo_hatch.name=Silo Hatch
|
||||
tile.silo_hatch_large.name=Large Silo Hatch
|
||||
tile.sliding_blast_door.name=Sliding Blast Door
|
||||
tile.solar_mirror.name=Heliostat Mirror
|
||||
tile.soyuz_capsule.name=Cargo Landing Capsule
|
||||
|
||||
576
src/main/resources/assets/hbm/models/doors/silo_hatch_large.obj
Normal file
576
src/main/resources/assets/hbm/models/doors/silo_hatch_large.obj
Normal file
@ -0,0 +1,576 @@
|
||||
# Blender v2.79 (sub 0) OBJ File: 'silo_hatch_large.blend'
|
||||
# www.blender.org
|
||||
o Hatch
|
||||
v 2.750000 0.750000 -1.750000
|
||||
v 1.750000 0.750000 -2.750000
|
||||
v -2.750000 0.750000 -1.750000
|
||||
v -1.750000 0.750000 -2.750000
|
||||
v -2.750000 0.750000 1.750000
|
||||
v -1.750000 0.750000 2.750000
|
||||
v -2.750000 1.000000 -1.750000
|
||||
v -2.750000 1.000000 1.750000
|
||||
v 2.750000 1.000000 -1.750000
|
||||
v 2.750000 1.000000 1.750000
|
||||
v 1.750000 1.000000 2.750000
|
||||
v -1.750000 1.000000 2.750000
|
||||
v 2.750000 0.750000 1.750000
|
||||
v 1.750000 0.750000 2.750000
|
||||
v 1.750000 1.000000 -2.750000
|
||||
v -1.750000 1.000000 -2.750000
|
||||
v -1.250000 0.750000 -2.500000
|
||||
v 1.250000 0.750000 -2.500000
|
||||
v -1.250000 0.750000 -3.000000
|
||||
v 1.250000 0.750000 -3.000000
|
||||
v -1.250000 0.500000 -3.000000
|
||||
v -1.250000 0.500000 -2.500000
|
||||
v 1.250000 0.500000 -2.500000
|
||||
v 1.250000 0.500000 -3.000000
|
||||
v -1.500000 0.750000 -2.500000
|
||||
v 1.500000 0.750000 -2.500000
|
||||
v -1.500000 0.750000 2.500000
|
||||
v 1.500000 0.750000 2.500000
|
||||
v 2.500000 0.750000 1.500000
|
||||
v 2.500000 0.750000 -1.500000
|
||||
v -2.500000 0.750000 -1.500000
|
||||
v -2.500000 0.750000 1.500000
|
||||
v 1.500000 0.500000 -2.500000
|
||||
v 2.500000 0.500000 -1.500000
|
||||
v 2.500000 0.500000 1.500000
|
||||
v -1.500000 0.500000 2.500000
|
||||
v 1.500000 0.500000 2.500000
|
||||
v -2.500000 0.500000 -1.500000
|
||||
v -2.500000 0.500000 1.500000
|
||||
v -1.500000 0.500000 -2.500000
|
||||
vt 0.918367 0.620690
|
||||
vt 1.000000 0.603448
|
||||
vt 1.000000 0.620690
|
||||
vt 0.918367 0.620690
|
||||
vt 1.000000 0.603448
|
||||
vt 1.000000 0.620690
|
||||
vt 0.632653 0.620690
|
||||
vt 0.918367 0.603448
|
||||
vt 0.918367 0.620690
|
||||
vt 0.632653 0.620690
|
||||
vt 0.918367 0.603448
|
||||
vt 0.632653 0.620690
|
||||
vt 0.918367 0.603448
|
||||
vt 1.000000 0.603448
|
||||
vt 1.000000 0.620690
|
||||
vt 0.918367 0.620690
|
||||
vt 1.000000 0.603448
|
||||
vt 1.000000 0.620690
|
||||
vt 0.632653 0.620690
|
||||
vt 0.918367 0.603448
|
||||
vt 0.653061 0.586207
|
||||
vt 0.897959 0.586207
|
||||
vt 0.918367 1.000000
|
||||
vt 0.551020 0.931035
|
||||
vt 0.816327 0.224138
|
||||
vt 0.612245 0.189655
|
||||
vt 0.816327 0.189655
|
||||
vt 0.612245 0.172414
|
||||
vt 0.816327 0.137931
|
||||
vt 0.816327 0.172414
|
||||
vt 0.571429 0.189655
|
||||
vt 0.857143 0.172414
|
||||
vt 0.857143 0.189655
|
||||
vt 1.000000 0.586207
|
||||
vt 0.653061 0.586207
|
||||
vt 0.897959 0.586207
|
||||
vt 1.000000 0.586207
|
||||
vt 0.918367 0.586207
|
||||
vt 1.000000 0.586207
|
||||
vt 0.653061 0.586207
|
||||
vt 0.897959 0.586207
|
||||
vt 1.000000 0.586207
|
||||
vt 0.918367 0.586207
|
||||
vt 0.632653 0.603448
|
||||
vt 0.897959 0.586207
|
||||
vt 0.918367 0.586207
|
||||
vt 1.000000 0.568965
|
||||
vt 0.653061 0.568965
|
||||
vt 0.571429 0.293103
|
||||
vt 0.897959 0.224138
|
||||
vt 0.897959 0.568965
|
||||
vt 0.653061 0.586207
|
||||
vt 0.897959 0.568965
|
||||
vt 1.000000 0.568965
|
||||
vt 1.000000 0.568965
|
||||
vt 0.897959 0.568965
|
||||
vt 0.918367 0.586207
|
||||
vt 1.000000 0.568965
|
||||
vt 0.897959 0.568965
|
||||
vt 0.632653 0.603448
|
||||
vt 0.632653 0.603448
|
||||
vt 0.632653 0.603448
|
||||
vt 1.000000 0.689655
|
||||
vt 1.000000 0.931035
|
||||
vt 0.632653 1.000000
|
||||
vt 0.551020 0.689655
|
||||
vt 0.612245 0.224138
|
||||
vt 0.612245 0.137931
|
||||
vt 0.571429 0.172414
|
||||
vt 0.918367 0.568965
|
||||
vt 0.979592 0.293103
|
||||
vt 0.979592 0.500000
|
||||
vt 0.571429 0.500000
|
||||
vt 0.653061 0.224138
|
||||
vt 0.653061 0.568965
|
||||
vt 0.918367 0.568965
|
||||
vt 0.918367 0.568965
|
||||
vt 0.653061 0.568965
|
||||
vt 0.918367 0.568965
|
||||
vt 0.653061 0.568965
|
||||
vn 0.7071 0.0000 0.7071
|
||||
vn -0.7071 0.0000 -0.7071
|
||||
vn -1.0000 0.0000 0.0000
|
||||
vn 0.0000 0.0000 1.0000
|
||||
vn 0.0000 0.0000 -1.0000
|
||||
vn -0.7071 0.0000 0.7071
|
||||
vn 0.7071 0.0000 -0.7071
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn 0.0000 -1.0000 0.0000
|
||||
vn 0.0000 1.0000 0.0000
|
||||
s off
|
||||
f 11/1/1 13/2/1 10/3/1
|
||||
f 16/4/2 3/5/2 7/6/2
|
||||
f 7/7/3 5/8/3 8/9/3
|
||||
f 12/10/4 14/11/4 11/1/4
|
||||
f 15/12/5 4/13/5 16/4/5
|
||||
f 8/9/6 6/14/6 12/15/6
|
||||
f 9/16/7 2/17/7 15/18/7
|
||||
f 10/19/8 1/20/8 9/16/8
|
||||
f 14/11/9 27/21/9 28/22/9
|
||||
f 15/23/10 7/24/10 12/10/10
|
||||
f 17/25/10 20/26/10 19/27/10
|
||||
f 24/28/9 22/29/9 21/30/9
|
||||
f 18/31/8 24/28/8 20/26/8
|
||||
f 20/26/5 21/30/5 19/27/5
|
||||
f 19/27/3 22/32/3 17/33/3
|
||||
f 14/11/9 29/34/9 13/2/9
|
||||
f 1/20/9 29/35/9 30/36/9
|
||||
f 26/37/9 1/20/9 30/38/9
|
||||
f 5/8/9 27/39/9 6/14/9
|
||||
f 5/8/9 31/40/9 32/41/9
|
||||
f 31/42/9 4/13/9 25/43/9
|
||||
f 2/44/9 25/45/9 4/13/9
|
||||
f 28/46/1 35/47/1 29/34/1
|
||||
f 36/48/9 38/49/9 33/50/9
|
||||
f 27/21/4 37/51/4 28/22/4
|
||||
f 26/52/5 40/53/5 25/45/5
|
||||
f 25/43/2 38/54/2 31/42/2
|
||||
f 30/38/7 33/55/7 26/37/7
|
||||
f 31/40/3 39/56/3 32/41/3
|
||||
f 32/57/6 36/58/6 27/39/6
|
||||
f 29/35/8 34/59/8 30/36/8
|
||||
f 11/1/1 14/11/1 13/2/1
|
||||
f 16/4/2 4/13/2 3/5/2
|
||||
f 7/7/3 3/60/3 5/8/3
|
||||
f 12/10/4 6/61/4 14/11/4
|
||||
f 15/12/5 2/44/5 4/13/5
|
||||
f 8/9/6 5/8/6 6/14/6
|
||||
f 9/16/7 1/20/7 2/17/7
|
||||
f 10/19/8 13/62/8 1/20/8
|
||||
f 14/11/9 6/61/9 27/21/9
|
||||
f 12/10/10 11/1/10 10/63/10
|
||||
f 10/63/10 9/64/10 15/23/10
|
||||
f 15/23/10 16/65/10 7/24/10
|
||||
f 7/24/10 8/66/10 12/10/10
|
||||
f 12/10/10 10/63/10 15/23/10
|
||||
f 17/25/10 18/67/10 20/26/10
|
||||
f 24/28/9 23/68/9 22/29/9
|
||||
f 18/31/8 23/69/8 24/28/8
|
||||
f 20/26/5 24/28/5 21/30/5
|
||||
f 19/27/3 21/30/3 22/32/3
|
||||
f 14/11/9 28/46/9 29/34/9
|
||||
f 1/20/9 13/62/9 29/35/9
|
||||
f 26/37/9 2/17/9 1/20/9
|
||||
f 5/8/9 32/57/9 27/39/9
|
||||
f 5/8/9 3/60/9 31/40/9
|
||||
f 31/42/9 3/5/9 4/13/9
|
||||
f 2/44/9 26/52/9 25/45/9
|
||||
f 28/46/1 37/70/1 35/47/1
|
||||
f 33/50/9 34/71/9 35/72/9
|
||||
f 35/72/9 37/51/9 36/48/9
|
||||
f 36/48/9 39/73/9 38/49/9
|
||||
f 38/49/9 40/74/9 33/50/9
|
||||
f 33/50/9 35/72/9 36/48/9
|
||||
f 27/21/4 36/48/4 37/51/4
|
||||
f 26/52/5 33/75/5 40/53/5
|
||||
f 25/43/2 40/76/2 38/54/2
|
||||
f 30/38/7 34/77/7 33/55/7
|
||||
f 31/40/3 38/78/3 39/56/3
|
||||
f 32/57/6 39/79/6 36/58/6
|
||||
f 29/35/8 35/80/8 34/59/8
|
||||
o Frame
|
||||
v -2.500000 0.000000 1.500000
|
||||
v -2.500000 0.000000 -3.500000
|
||||
v 2.500000 0.000000 -3.500000
|
||||
v -3.250000 1.000000 -2.250000
|
||||
v -2.500000 0.250000 -3.500000
|
||||
v 2.500000 0.250000 -3.500000
|
||||
v -3.250000 1.000000 2.250000
|
||||
v -2.250000 1.000000 -3.250000
|
||||
v 2.250000 1.000000 -3.250000
|
||||
v -3.500000 0.250000 -2.500000
|
||||
v -1.500000 0.000000 -2.500000
|
||||
v 1.500000 0.000000 -2.500000
|
||||
v -1.500000 0.750000 -2.500000
|
||||
v -3.500000 0.250000 2.500000
|
||||
v 1.500000 0.750000 -2.500000
|
||||
v -3.500000 0.000000 -2.500000
|
||||
v -1.750000 0.750000 -2.750000
|
||||
v 1.750000 0.750000 -2.750000
|
||||
v -3.500000 0.000000 2.500000
|
||||
v -1.750000 1.000000 -2.750000
|
||||
v 1.750000 1.000000 -2.750000
|
||||
v -1.250000 0.750000 -2.750000
|
||||
v 1.250000 0.750000 -2.750000
|
||||
v 1.250000 0.500000 -2.500000
|
||||
v -1.250000 0.500000 -2.500000
|
||||
v -1.250000 1.000000 -2.750000
|
||||
v 1.250000 1.000000 -2.750000
|
||||
v -1.250000 1.000000 -3.000000
|
||||
v 1.250000 1.000000 -3.000000
|
||||
v -1.250000 0.500000 -3.000000
|
||||
v 1.250000 0.500000 -3.000000
|
||||
v -1.250000 0.750000 -2.500000
|
||||
v 1.250000 0.750000 -2.500000
|
||||
v -2.500000 0.000000 3.500000
|
||||
v 2.500000 0.000000 3.500000
|
||||
v -2.500000 0.250000 3.500000
|
||||
v 2.500000 0.250000 3.500000
|
||||
v -2.250000 1.000000 3.250000
|
||||
v 2.250000 1.000000 3.250000
|
||||
v -1.500000 0.000000 2.500000
|
||||
v 1.500000 0.000000 2.500000
|
||||
v -1.500000 0.750000 2.500000
|
||||
v 1.500000 0.750000 2.500000
|
||||
v -1.750000 0.750000 2.750000
|
||||
v 1.750000 0.750000 2.750000
|
||||
v -1.750000 1.000000 2.750000
|
||||
v 1.750000 1.000000 2.750000
|
||||
v 3.500000 0.000000 2.500000
|
||||
v 3.500000 0.000000 -2.500000
|
||||
v 3.500000 0.250000 2.500000
|
||||
v 3.500000 0.250000 -2.500000
|
||||
v 3.250000 1.000000 2.250000
|
||||
v 3.250000 1.000000 -2.250000
|
||||
v 2.500000 0.000000 1.500000
|
||||
v 2.500000 0.000000 -1.500000
|
||||
v 2.500000 0.750000 1.500000
|
||||
v 2.500000 0.750000 -1.500000
|
||||
v 2.750000 0.750000 1.750000
|
||||
v 2.750000 0.750000 -1.750000
|
||||
v 2.750000 1.000000 1.750000
|
||||
v 2.750000 1.000000 -1.750000
|
||||
v -2.500000 0.000000 -1.500000
|
||||
v -2.500000 0.750000 -1.500000
|
||||
v -2.500000 0.750000 1.500000
|
||||
v -2.750000 0.750000 1.750000
|
||||
v -2.750000 0.750000 -1.750000
|
||||
v -2.750000 1.000000 1.750000
|
||||
v -2.750000 1.000000 -1.750000
|
||||
vt 0.122449 0.827586
|
||||
vt 0.367347 0.827586
|
||||
vt 0.142857 0.862069
|
||||
vt 0.061224 0.655172
|
||||
vt 0.020408 0.931035
|
||||
vt 0.020408 0.620690
|
||||
vt 0.510204 0.896552
|
||||
vt 0.551020 0.620690
|
||||
vt 0.551020 0.931035
|
||||
vt 0.387755 0.896552
|
||||
vt 0.102041 0.913793
|
||||
vt 0.102041 0.896552
|
||||
vt 0.489796 0.482759
|
||||
vt 0.081633 0.500000
|
||||
vt 0.081633 0.482759
|
||||
vt 0.387755 0.896552
|
||||
vt 0.102041 0.913793
|
||||
vt 0.102041 0.896552
|
||||
vt 0.489796 0.500000
|
||||
vt 0.102041 0.551724
|
||||
vt 0.367347 0.879310
|
||||
vt 0.122449 0.879310
|
||||
vt 0.571429 0.413793
|
||||
vt 0.489796 0.137931
|
||||
vt 0.571429 0.068966
|
||||
vt 0.367347 0.879310
|
||||
vt 0.122449 0.879310
|
||||
vt 0.122449 0.827586
|
||||
vt 0.367347 0.827586
|
||||
vt 0.489796 -0.000000
|
||||
vt 0.163265 0.068966
|
||||
vt 0.081633 -0.000000
|
||||
vt 0.122449 0.827586
|
||||
vt 0.367347 0.827586
|
||||
vt 0.000000 0.068966
|
||||
vt 0.081633 0.344828
|
||||
vt 0.000000 0.413793
|
||||
vt 0.142857 0.896552
|
||||
vt 0.122449 0.879310
|
||||
vt 0.142857 0.879310
|
||||
vt 0.489796 0.482759
|
||||
vt 0.081633 0.500000
|
||||
vt 0.081633 0.482759
|
||||
vt 0.489796 0.500000
|
||||
vt 0.102041 0.551724
|
||||
vt 0.081633 0.500000
|
||||
vt 0.489796 0.500000
|
||||
vt 0.102041 0.551724
|
||||
vt 0.489796 0.482759
|
||||
vt 0.081633 0.482759
|
||||
vt 0.183673 0.948276
|
||||
vt 0.387755 0.982759
|
||||
vt 0.183673 0.982759
|
||||
vt 0.183673 0.913793
|
||||
vt 0.387755 0.948276
|
||||
vt 0.142857 0.948276
|
||||
vt 0.142857 0.931035
|
||||
vt 0.163265 0.931035
|
||||
vt 0.142857 0.913793
|
||||
vt 0.102041 0.896552
|
||||
vt 0.387755 0.896552
|
||||
vt 0.346939 0.913793
|
||||
vt 0.346939 0.896552
|
||||
vt 0.102041 1.000000
|
||||
vt 0.469388 1.000000
|
||||
vt 0.367347 0.879310
|
||||
vt 0.346939 0.879310
|
||||
vt 0.408163 0.931035
|
||||
vt 0.428571 0.948276
|
||||
vt 0.489796 0.482759
|
||||
vt 0.081633 0.500000
|
||||
vt 0.081633 0.482759
|
||||
vt 0.408163 0.413793
|
||||
vt 0.489796 0.500000
|
||||
vt 0.102041 0.551724
|
||||
vt 0.367347 0.879310
|
||||
vt 0.122449 0.827586
|
||||
vt 0.367347 0.827586
|
||||
vt 0.102041 0.896552
|
||||
vt 0.122449 0.879310
|
||||
vt 0.387755 0.896552
|
||||
vt 0.102041 0.913793
|
||||
vt 0.428571 0.586207
|
||||
vt 0.469388 0.551724
|
||||
vt 0.408163 0.068966
|
||||
vt 0.469388 0.827586
|
||||
vt 0.387755 0.879310
|
||||
vt 0.387755 0.827586
|
||||
vt 0.469388 0.896552
|
||||
vt 0.469388 0.913793
|
||||
vt 0.387755 0.913793
|
||||
vt 0.433673 0.965517
|
||||
vt 0.571429 0.551724
|
||||
vt 0.489796 0.551724
|
||||
vt 0.571429 0.482759
|
||||
vt 0.571429 0.500000
|
||||
vt 0.081633 0.137931
|
||||
vt 0.387755 0.827586
|
||||
vt 0.469388 0.879310
|
||||
vt 0.387755 0.879310
|
||||
vt 0.469388 0.896552
|
||||
vt 0.469388 0.913793
|
||||
vt 0.061224 0.896552
|
||||
vt 0.142857 0.965517
|
||||
vt 0.571429 0.500000
|
||||
vt 0.489796 0.551724
|
||||
vt 0.571429 0.482759
|
||||
vt 0.163265 0.413793
|
||||
vt 0.469388 0.879310
|
||||
vt 0.387755 0.827586
|
||||
vt 0.469388 0.827586
|
||||
vt 0.387755 0.879310
|
||||
vt 0.469388 0.896552
|
||||
vt 0.469388 0.913793
|
||||
vt 0.387755 0.913793
|
||||
vt 0.142857 0.586207
|
||||
vt 0.571429 0.551724
|
||||
vt 0.489796 0.551724
|
||||
vt 0.571429 0.482759
|
||||
vt 0.489796 0.344828
|
||||
vt 0.387755 0.879310
|
||||
vt 0.469388 0.827586
|
||||
vt 0.469388 0.879310
|
||||
vt 0.469388 0.896552
|
||||
vt 0.469388 0.913793
|
||||
vt 0.510204 0.655172
|
||||
vt 0.571429 0.551724
|
||||
vt 0.571429 0.500000
|
||||
vt 0.571429 0.482759
|
||||
vt 0.346939 0.862069
|
||||
vt 0.387755 0.913793
|
||||
vt 0.387755 0.913793
|
||||
vt 0.469388 0.551724
|
||||
vt 0.469388 0.551724
|
||||
vt 0.469388 0.551724
|
||||
vt 0.387755 0.913793
|
||||
vt 0.163265 0.913793
|
||||
vt 0.102041 0.913793
|
||||
vt 0.183673 0.965517
|
||||
vt 0.387755 0.965517
|
||||
vt 0.408163 0.913793
|
||||
vt 0.428571 0.931035
|
||||
vt 0.469388 0.879310
|
||||
vt 0.469388 0.827586
|
||||
vt 0.571429 0.551724
|
||||
vt 0.571429 0.500000
|
||||
vt 0.387755 0.827586
|
||||
vt 0.489796 0.551724
|
||||
vn 0.0000 0.0000 1.0000
|
||||
vn 0.0000 1.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn 0.0000 0.0000 -1.0000
|
||||
vn -1.0000 0.0000 0.0000
|
||||
vn 0.0000 0.3162 -0.9487
|
||||
vn 0.0000 -1.0000 0.0000
|
||||
vn -0.9487 0.3162 0.0000
|
||||
vn 0.9487 0.3162 0.0000
|
||||
vn 0.0000 0.3162 0.9487
|
||||
vn -0.7071 0.0000 0.7071
|
||||
vn 0.6396 0.4264 -0.6396
|
||||
vn 0.7071 0.0000 -0.7071
|
||||
vn 0.7071 0.0000 0.7071
|
||||
vn -0.6396 0.4264 -0.6396
|
||||
vn -0.7071 0.0000 -0.7071
|
||||
vn -0.6396 0.4264 0.6396
|
||||
vn 0.6396 0.4264 0.6396
|
||||
s off
|
||||
f 51/81/11 52/82/11 65/83/11
|
||||
f 107/84/12 44/85/12 47/86/12
|
||||
f 101/87/12 92/88/12 93/89/12
|
||||
f 106/90/13 107/91/13 105/92/13
|
||||
f 42/93/14 46/94/14 43/95/14
|
||||
f 98/96/15 101/97/15 99/98/15
|
||||
f 45/99/16 49/100/16 46/94/16
|
||||
f 96/101/12 99/98/12 97/102/12
|
||||
f 88/103/17 95/104/17 89/105/17
|
||||
f 103/106/12 105/92/12 104/107/12
|
||||
f 103/106/13 41/108/13 102/109/13
|
||||
f 43/110/17 51/111/17 42/112/17
|
||||
f 96/101/15 95/113/15 94/114/15
|
||||
f 56/115/17 41/116/17 59/117/17
|
||||
f 62/118/12 53/119/12 72/120/12
|
||||
f 89/121/13 90/122/13 88/123/13
|
||||
f 54/124/18 44/125/18 50/126/18
|
||||
f 91/127/19 92/128/19 90/122/19
|
||||
f 59/129/15 50/126/15 56/130/15
|
||||
f 70/131/11 69/132/11 68/133/11
|
||||
f 65/134/12 71/135/12 70/131/12
|
||||
f 68/136/13 66/137/13 62/138/13
|
||||
f 66/139/11 57/140/11 62/118/11
|
||||
f 58/141/11 67/142/11 63/143/11
|
||||
f 48/144/12 69/132/12 49/145/12
|
||||
f 55/146/12 63/143/12 73/147/12
|
||||
f 63/148/15 69/149/15 71/135/15
|
||||
f 75/150/11 76/151/11 74/152/11
|
||||
f 74/152/17 81/153/17 75/150/17
|
||||
f 77/154/20 78/155/20 76/151/20
|
||||
f 82/156/14 81/157/14 80/158/14
|
||||
f 82/156/12 85/159/12 83/160/12
|
||||
f 84/161/14 87/162/14 85/159/14
|
||||
f 87/163/12 78/155/12 79/164/12
|
||||
f 43/110/17 95/104/17 52/165/17
|
||||
f 95/166/21 55/167/21 52/168/21
|
||||
f 55/167/12 99/169/12 58/141/12
|
||||
f 58/141/21 101/170/21 61/171/21
|
||||
f 101/87/12 49/145/12 61/172/12
|
||||
f 91/127/22 49/173/22 93/174/22
|
||||
f 91/127/23 43/175/23 46/176/23
|
||||
f 56/115/17 51/111/17 102/177/17
|
||||
f 102/178/24 53/179/24 103/180/24
|
||||
f 106/90/12 53/179/12 57/181/12
|
||||
f 60/182/24 106/90/24 57/181/24
|
||||
f 48/144/12 108/183/12 60/184/12
|
||||
f 50/185/25 48/186/25 45/99/25
|
||||
f 56/187/26 45/99/26 42/93/26
|
||||
f 80/188/17 59/117/17 41/116/17
|
||||
f 104/189/23 80/190/23 41/191/23
|
||||
f 82/192/12 105/193/12 84/161/12
|
||||
f 84/161/23 107/194/23 86/195/23
|
||||
f 107/84/12 78/155/12 86/196/12
|
||||
f 54/124/27 78/197/27 47/198/27
|
||||
f 74/199/21 54/124/21 59/129/21
|
||||
f 94/200/17 75/150/17 81/153/17
|
||||
f 96/201/26 81/202/26 83/203/26
|
||||
f 98/96/12 83/203/12 85/204/12
|
||||
f 87/205/26 98/96/26 85/204/26
|
||||
f 79/164/12 100/206/12 87/163/12
|
||||
f 92/207/28 77/154/28 90/208/28
|
||||
f 77/154/24 88/209/24 90/208/24
|
||||
f 72/120/11 53/119/11 65/83/11
|
||||
f 53/119/11 51/81/11 65/83/11
|
||||
f 52/82/11 55/146/11 64/210/11
|
||||
f 55/146/11 73/147/11 64/210/11
|
||||
f 52/82/11 64/210/11 65/83/11
|
||||
f 107/84/12 108/183/12 44/85/12
|
||||
f 101/87/12 100/206/12 92/88/12
|
||||
f 106/90/13 108/211/13 107/91/13
|
||||
f 42/93/14 45/99/14 46/94/14
|
||||
f 98/96/15 100/212/15 101/97/15
|
||||
f 45/99/16 48/213/16 49/100/16
|
||||
f 96/101/12 98/96/12 99/98/12
|
||||
f 88/103/17 94/200/17 95/104/17
|
||||
f 103/106/12 106/90/12 105/92/12
|
||||
f 103/106/13 104/107/13 41/108/13
|
||||
f 43/110/17 52/165/17 51/111/17
|
||||
f 96/101/15 97/102/15 95/113/15
|
||||
f 56/115/17 102/177/17 41/116/17
|
||||
f 62/118/12 57/140/12 53/119/12
|
||||
f 89/121/13 91/127/13 90/122/13
|
||||
f 54/124/18 47/214/18 44/125/18
|
||||
f 91/127/19 93/215/19 92/128/19
|
||||
f 59/129/15 54/124/15 50/126/15
|
||||
f 70/131/11 71/135/11 69/132/11
|
||||
f 65/134/12 64/216/12 71/135/12
|
||||
f 72/217/13 65/134/13 62/138/13
|
||||
f 65/134/13 70/131/13 62/138/13
|
||||
f 70/131/13 68/136/13 62/138/13
|
||||
f 66/139/11 60/218/11 57/140/11
|
||||
f 58/141/11 61/171/11 67/142/11
|
||||
f 48/144/12 60/184/12 68/133/12
|
||||
f 60/184/12 66/219/12 68/133/12
|
||||
f 67/220/12 61/172/12 69/132/12
|
||||
f 61/172/12 49/145/12 69/132/12
|
||||
f 48/144/12 68/133/12 69/132/12
|
||||
f 55/146/12 58/141/12 63/143/12
|
||||
f 64/216/15 73/221/15 63/148/15
|
||||
f 63/148/15 67/222/15 69/149/15
|
||||
f 71/135/15 64/216/15 63/148/15
|
||||
f 75/150/11 77/154/11 76/151/11
|
||||
f 74/152/17 80/188/17 81/153/17
|
||||
f 77/154/20 79/164/20 78/155/20
|
||||
f 82/156/14 83/160/14 81/157/14
|
||||
f 82/156/12 84/161/12 85/159/12
|
||||
f 84/161/14 86/195/14 87/162/14
|
||||
f 87/163/12 86/196/12 78/155/12
|
||||
f 43/110/17 89/105/17 95/104/17
|
||||
f 95/166/21 97/223/21 55/167/21
|
||||
f 55/167/12 97/223/12 99/169/12
|
||||
f 58/141/21 99/169/21 101/170/21
|
||||
f 101/87/12 93/89/12 49/145/12
|
||||
f 91/127/22 46/176/22 49/173/22
|
||||
f 91/127/23 89/121/23 43/175/23
|
||||
f 56/115/17 42/112/17 51/111/17
|
||||
f 102/178/24 51/224/24 53/179/24
|
||||
f 106/90/12 103/180/12 53/179/12
|
||||
f 60/182/24 108/211/24 106/90/24
|
||||
f 48/144/12 44/85/12 108/183/12
|
||||
f 50/185/25 44/225/25 48/186/25
|
||||
f 56/187/26 50/185/26 45/99/26
|
||||
f 80/188/17 74/152/17 59/117/17
|
||||
f 104/189/23 82/192/23 80/190/23
|
||||
f 82/192/12 104/189/12 105/193/12
|
||||
f 84/161/23 105/193/23 107/194/23
|
||||
f 107/84/12 47/86/12 78/155/12
|
||||
f 54/124/27 76/226/27 78/197/27
|
||||
f 74/199/21 76/226/21 54/124/21
|
||||
f 94/200/17 88/103/17 75/150/17
|
||||
f 96/201/26 94/227/26 81/202/26
|
||||
f 98/96/12 96/201/12 83/203/12
|
||||
f 87/205/26 100/212/26 98/96/26
|
||||
f 79/164/12 92/88/12 100/206/12
|
||||
f 92/207/28 79/228/28 77/154/28
|
||||
f 77/154/24 75/150/24 88/209/24
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 15 KiB |
Loading…
x
Reference in New Issue
Block a user