mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
and all that jazz
This commit is contained in:
parent
debb9449cb
commit
8c1275206c
@ -1,11 +1,13 @@
|
||||
package com.hbm.blocks.generic;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import com.hbm.blocks.BlockEnumMulti;
|
||||
import com.hbm.blocks.ITooltipProvider;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.IGrowable;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
@ -17,7 +19,7 @@ import net.minecraftforge.common.EnumPlantType;
|
||||
import net.minecraftforge.common.IPlantable;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class BlockNTMFlower extends BlockEnumMulti implements IPlantable, ITooltipProvider {
|
||||
public class BlockNTMFlower extends BlockEnumMulti implements IPlantable, IGrowable, ITooltipProvider {
|
||||
|
||||
public BlockNTMFlower() {
|
||||
super(Material.plants, EnumFlowerType.class, true, true);
|
||||
@ -97,6 +99,24 @@ public class BlockNTMFlower extends BlockEnumMulti implements IPlantable, IToolt
|
||||
return meta;
|
||||
}
|
||||
|
||||
/* grow condition */
|
||||
@Override
|
||||
public boolean func_149851_a(World world, int x, int y, int z, boolean b) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/* chance */
|
||||
@Override
|
||||
public boolean func_149852_a(World p_149852_1_, Random p_149852_2_, int p_149852_3_, int p_149852_4_, int p_149852_5_) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/* grow */
|
||||
@Override
|
||||
public void func_149853_b(World world, Random rand, int x, int y, int z) {
|
||||
this.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { }
|
||||
}
|
||||
|
||||
@ -2,7 +2,11 @@ package com.hbm.blocks.network;
|
||||
|
||||
import api.hbm.conveyor.IConveyorBelt;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
@ -46,4 +50,18 @@ public class BlockConveyorChute extends BlockConveyor {
|
||||
public int getRenderType() {
|
||||
return renderID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { }
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
|
||||
return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,7 +2,11 @@ package com.hbm.blocks.network;
|
||||
|
||||
import api.hbm.conveyor.IConveyorBelt;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
@ -10,8 +14,11 @@ public class BlockConveyorLift extends BlockConveyor {
|
||||
|
||||
@Override
|
||||
public ForgeDirection getTravelDirection(World world, int x, int y, int z, Vec3 itemPos, double speed) {
|
||||
|
||||
boolean bottom = !(world.getBlock(x, y - 1, z) instanceof IConveyorBelt);
|
||||
boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom;
|
||||
|
||||
if(Math.abs(itemPos.xCoord - (x + 0.5)) < 0.05 && Math.abs(itemPos.zCoord - (z + 0.5)) < 0.05) {
|
||||
if(!top) {
|
||||
return ForgeDirection.DOWN;
|
||||
}
|
||||
|
||||
@ -20,18 +27,51 @@ public class BlockConveyorLift extends BlockConveyor {
|
||||
|
||||
@Override
|
||||
public Vec3 getClosestSnappingPosition(World world, int x, int y, int z, Vec3 itemPos) {
|
||||
|
||||
if(world.getBlock(x, y - 1, z) instanceof IConveyorBelt || itemPos.yCoord > y + 0.25) {
|
||||
|
||||
boolean bottom = !(world.getBlock(x, y - 1, z) instanceof IConveyorBelt);
|
||||
boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom;
|
||||
|
||||
if(!top) {
|
||||
return Vec3.createVectorHelper(x + 0.5, itemPos.yCoord, z + 0.5);
|
||||
} else {
|
||||
return super.getClosestSnappingPosition(world, x, y, z, itemPos);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
|
||||
|
||||
boolean bottom = !(world.getBlock(x, y - 1, z) instanceof IConveyorBelt);
|
||||
boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom;
|
||||
|
||||
if(top)
|
||||
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
|
||||
else
|
||||
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
|
||||
|
||||
boolean bottom = !(world.getBlock(x, y - 1, z) instanceof IConveyorBelt);
|
||||
boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom;
|
||||
|
||||
if(top)
|
||||
return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 0.5, z + 1);
|
||||
else
|
||||
return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1);
|
||||
}
|
||||
|
||||
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
|
||||
|
||||
@Override
|
||||
public int getRenderType() {
|
||||
return renderID;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -44,4 +44,9 @@ public class CraneExtractor extends BlockCraneBase {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConnectRedstone(IBlockAccess world, int x, int y, int z, int side) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,6 +10,7 @@ import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.inventory.ISidedInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@ -135,6 +136,7 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock {
|
||||
|
||||
stack.stackSize += amount;
|
||||
toAdd.stackSize -= amount;
|
||||
inv.markDirty();
|
||||
|
||||
if(toAdd.stackSize == 0) {
|
||||
return null;
|
||||
@ -154,6 +156,7 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock {
|
||||
newStack.stackSize = amount;
|
||||
inv.setInventorySlotContents(index, newStack);
|
||||
toAdd.stackSize -= amount;
|
||||
inv.markDirty();
|
||||
|
||||
if(toAdd.stackSize == 0) {
|
||||
return null;
|
||||
@ -177,4 +180,14 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasComparatorInputOverride() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getComparatorInputOverride(World world, int x, int y, int z, int side) {
|
||||
return Container.calcRedstoneFromInventory((TileEntityCraneInserter)world.getTileEntity(x, y, z));
|
||||
}
|
||||
}
|
||||
|
||||
261
src/main/java/com/hbm/entity/effect/EntityNukeTorex.java
Normal file
261
src/main/java/com/hbm/entity/effect/EntityNukeTorex.java
Normal file
@ -0,0 +1,261 @@
|
||||
package com.hbm.entity.effect;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
/*
|
||||
* Toroidial Convection Simulation Explosion Effect
|
||||
* Tor Ex
|
||||
*/
|
||||
public class EntityNukeTorex extends Entity {
|
||||
|
||||
public double coreHeight = 3;
|
||||
public double convectionHeight = 3;
|
||||
public double torusWidth = 3;
|
||||
public double rollerSize = 1;
|
||||
public double heat = 1;
|
||||
public ArrayList<Cloudlet> cloudlets = new ArrayList();
|
||||
public static int cloudletLife = 200;
|
||||
|
||||
public EntityNukeTorex(World world) {
|
||||
super(world);
|
||||
this.ignoreFrustumCheck = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void entityInit() { }
|
||||
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
this.ticksExisted++;
|
||||
|
||||
int maxAge = 90 * 20;
|
||||
|
||||
if(worldObj.isRemote) {
|
||||
|
||||
double range = (torusWidth - rollerSize) * 0.25;
|
||||
|
||||
if(this.ticksExisted + cloudletLife * 2 < maxAge) {
|
||||
for(int i = 0; i < 20; i++) {
|
||||
double y = posY + rand.nextGaussian() - 3; //this.ticksExisted < 60 ? this.posY + this.coreHeight : posY + rand.nextGaussian() - 3;
|
||||
Cloudlet cloud = new Cloudlet(posX + rand.nextGaussian() * range, y, posZ + rand.nextGaussian() * range, (float)(rand.nextDouble() * 2D * Math.PI), 0);
|
||||
cloudlets.add(cloud);
|
||||
}
|
||||
}
|
||||
|
||||
int cloudCount = ticksExisted * 3;
|
||||
if(ticksExisted < 200) {
|
||||
for(int i = 0; i < cloudCount; i++) {
|
||||
Vec3 vec = Vec3.createVectorHelper(ticksExisted + rand.nextDouble(), 0, 0);
|
||||
float rot = (float) (Math.PI * 2 * rand.nextDouble());
|
||||
vec.rotateAroundY(rot);
|
||||
this.cloudlets.add(new Cloudlet(vec.xCoord + posX, worldObj.getHeightValue((int) (vec.xCoord + posX) + 2, (int) (vec.zCoord + posZ)), vec.zCoord + posZ, rot, 0));
|
||||
}
|
||||
}
|
||||
|
||||
for(Cloudlet cloud : cloudlets) {
|
||||
cloud.update();
|
||||
}
|
||||
|
||||
coreHeight += 0.15;
|
||||
torusWidth += 0.05;
|
||||
rollerSize = torusWidth * 0.35;
|
||||
convectionHeight = coreHeight + rollerSize;
|
||||
|
||||
int maxHeat = 50;
|
||||
heat = maxHeat - Math.pow((maxHeat * this.ticksExisted) / maxAge, 1);
|
||||
|
||||
cloudlets.removeIf(x -> x.isDead);
|
||||
}
|
||||
|
||||
if(!worldObj.isRemote && this.ticksExisted > maxAge) {
|
||||
this.setDead();
|
||||
}
|
||||
}
|
||||
|
||||
public class Cloudlet {
|
||||
|
||||
public double posX;
|
||||
public double posY;
|
||||
public double posZ;
|
||||
public double prevPosX;
|
||||
public double prevPosY;
|
||||
public double prevPosZ;
|
||||
public double motionX;
|
||||
public double motionY;
|
||||
public double motionZ;
|
||||
public int age;
|
||||
public float angle;
|
||||
public boolean isDead = false;
|
||||
float rangeMod = 1.0F;
|
||||
public float colorMod = 1.0F;
|
||||
public Vec3 color;
|
||||
public Vec3 prevColor;
|
||||
|
||||
public Cloudlet(double posX, double posY, double posZ, float angle, int age) {
|
||||
this.posX = posX;
|
||||
this.posY = posY;
|
||||
this.posZ = posZ;
|
||||
this.age = age;
|
||||
this.angle = angle;
|
||||
this.rangeMod = 0.3F + rand.nextFloat() * 0.7F;
|
||||
this.colorMod = 0.8F + rand.nextFloat() * 0.2F;
|
||||
|
||||
this.updateColor();
|
||||
}
|
||||
|
||||
private void update() {
|
||||
|
||||
age++;
|
||||
|
||||
if(age > cloudletLife) {
|
||||
this.isDead = true;
|
||||
}
|
||||
|
||||
this.prevPosX = this.posX;
|
||||
this.prevPosY = this.posY;
|
||||
this.prevPosZ = this.posZ;
|
||||
|
||||
Vec3 simPos = Vec3.createVectorHelper(EntityNukeTorex.this.posX - this.posX, 0, EntityNukeTorex.this.posZ - this.posZ);
|
||||
double simPosX = EntityNukeTorex.this.posX + simPos.lengthVector();
|
||||
double simPosZ = EntityNukeTorex.this.posZ + 0D;
|
||||
|
||||
Vec3 convection = getConvectionMotion(simPosX, simPosZ);
|
||||
Vec3 lift = getLiftMotion(simPosX, simPosZ);
|
||||
|
||||
double factor = MathHelper.clamp_double((this.posY - EntityNukeTorex.this.posY) / EntityNukeTorex.this.coreHeight, 0, 1);
|
||||
this.motionX = convection.xCoord * factor + lift.xCoord * (1D - factor);
|
||||
this.motionY = convection.yCoord * factor + lift.yCoord * (1D - factor);
|
||||
this.motionZ = convection.zCoord * factor + lift.zCoord * (1D - factor);
|
||||
|
||||
if(EntityNukeTorex.this.ticksExisted > 45 * 20) {
|
||||
int timeLeft = 1600 - EntityNukeTorex.this.ticksExisted;
|
||||
double scaled = Math.max((double) timeLeft / 900D, 0);
|
||||
this.motionX *= scaled;
|
||||
this.motionY *= scaled;
|
||||
this.motionZ *= scaled;
|
||||
}
|
||||
|
||||
this.posX += this.motionX;
|
||||
this.posY += this.motionY;
|
||||
this.posZ += this.motionZ;
|
||||
|
||||
this.updateColor();
|
||||
}
|
||||
|
||||
/* simulated on a 2D-plane along the X/Y axis */
|
||||
private Vec3 getConvectionMotion(double simPosX, double simPosZ) {
|
||||
|
||||
if(simPosX > EntityNukeTorex.this.posX + torusWidth * 2)
|
||||
return Vec3.createVectorHelper(0, 0, 0);
|
||||
|
||||
/* the position of the torus' outer ring center */
|
||||
Vec3 torusPos = Vec3.createVectorHelper(
|
||||
(EntityNukeTorex.this.posX + torusWidth),
|
||||
(EntityNukeTorex.this.posY + coreHeight),
|
||||
EntityNukeTorex.this.posZ);
|
||||
|
||||
/* the difference between the cloudlet and the torus' ring center */
|
||||
Vec3 delta = Vec3.createVectorHelper(torusPos.xCoord - simPosX, torusPos.yCoord - this.posY, torusPos.zCoord - simPosZ);
|
||||
|
||||
|
||||
/* the distance this cloudlet wants to achieve to the torus' ring center */
|
||||
double roller = EntityNukeTorex.this.rollerSize * this.rangeMod;
|
||||
/* the distance between this cloudlet and the torus' outer ring perimeter */
|
||||
double dist = delta.lengthVector() / roller - 1D;
|
||||
|
||||
/* euler function based on how far the cloudlet is away from the perimeter */
|
||||
double func = 1D - Math.pow(Math.E, -dist); // [0;1]
|
||||
/* just an approximation, but it's good enough */
|
||||
float angle = (float) (func * Math.PI * 0.5D); // [0;90°]
|
||||
|
||||
/* vector going from the ring center in the direction of the cloudlet, stopping at the perimeter */
|
||||
Vec3 rot = Vec3.createVectorHelper(-delta.xCoord / dist, -delta.yCoord / dist, -delta.zCoord / dist);
|
||||
/* rotate by the approximate angle */
|
||||
rot.rotateAroundZ(angle);
|
||||
|
||||
/* the direction from the cloudlet to the target position on the perimeter */
|
||||
Vec3 motion = Vec3.createVectorHelper(
|
||||
torusPos.xCoord + rot.xCoord - simPosX,
|
||||
torusPos.yCoord + rot.yCoord - this.posY,
|
||||
torusPos.zCoord + rot.zCoord - simPosZ);
|
||||
|
||||
motion = motion.normalize();
|
||||
motion.rotateAroundY(this.angle);
|
||||
|
||||
return motion;
|
||||
}
|
||||
|
||||
private Vec3 getLiftMotion(double simPosX, double simPosZ) {
|
||||
double scale = MathHelper.clamp_double(1D - (simPosX - (EntityNukeTorex.this.posX + torusWidth)), 0, 1);
|
||||
|
||||
Vec3 motion = Vec3.createVectorHelper(EntityNukeTorex.this.posX - this.posX, (EntityNukeTorex.this.posY + convectionHeight) - this.posY, EntityNukeTorex.this.posZ - this.posZ);
|
||||
|
||||
motion = motion.normalize();
|
||||
motion.xCoord *= scale;
|
||||
motion.yCoord *= scale;
|
||||
motion.zCoord *= scale;
|
||||
|
||||
return motion;
|
||||
}
|
||||
|
||||
private void updateColor() {
|
||||
this.prevColor = this.color;
|
||||
|
||||
double exX = EntityNukeTorex.this.posX;
|
||||
double exY = EntityNukeTorex.this.posY + EntityNukeTorex.this.coreHeight;
|
||||
double exZ = EntityNukeTorex.this.posZ;
|
||||
|
||||
double distX = exX - posX;
|
||||
double distY = exY - posY;
|
||||
double distZ = exZ - posZ;
|
||||
|
||||
double distSq = distX * distX + distY * distY + distZ * distZ;
|
||||
distSq /= EntityNukeTorex.this.heat;
|
||||
double dist = Math.sqrt(distSq);
|
||||
|
||||
dist = Math.max(dist, 1);
|
||||
double col = 2D / dist;
|
||||
//col *= col;
|
||||
|
||||
this.color = Vec3.createVectorHelper(
|
||||
Math.max(col * 2, 0.25),
|
||||
Math.max(col * 1.5, 0.25),
|
||||
Math.max(col * 0.5, 0.25)
|
||||
);
|
||||
}
|
||||
|
||||
public Vec3 getInterpPos(float interp) {
|
||||
return Vec3.createVectorHelper(
|
||||
prevPosX + (posX - prevPosX) * interp,
|
||||
prevPosY + (posY - prevPosY) * interp,
|
||||
prevPosZ + (posZ - prevPosZ) * interp);
|
||||
}
|
||||
|
||||
public Vec3 getInterpColor(float interp) {
|
||||
return Vec3.createVectorHelper(
|
||||
prevColor.xCoord + (color.xCoord - prevColor.xCoord) * interp,
|
||||
prevColor.yCoord + (color.yCoord - prevColor.yCoord) * interp,
|
||||
prevColor.zCoord + (color.zCoord - prevColor.zCoord) * interp);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void readEntityFromNBT(NBTTagCompound nbt) { }
|
||||
|
||||
@Override
|
||||
protected void writeEntityToNBT(NBTTagCompound nbt) { }
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean isInRangeToRenderDist(double distance) {
|
||||
return distance < 25000;
|
||||
}
|
||||
}
|
||||
@ -35,7 +35,7 @@ public class EntityMovingItem extends Entity implements IConveyorItem {
|
||||
|
||||
public EntityMovingItem(World p_i1582_1_) {
|
||||
super(p_i1582_1_);
|
||||
this.setSize(0.5F, 0.5F);
|
||||
this.setSize(0.375F, 0.375F);
|
||||
this.noClip = true;
|
||||
}
|
||||
|
||||
|
||||
@ -66,11 +66,8 @@ public class EntityMinerRocket extends Entity {
|
||||
}
|
||||
}
|
||||
|
||||
if(dataWatcher.getWatchableObjectInt(16) != 1) {
|
||||
|
||||
if(ticksExisted % 2 == 0) {
|
||||
ParticleUtil.spawnGasFlame(worldObj, posX, posY - 0.5, posZ, 0.0, -1.0, 0.0);
|
||||
}
|
||||
if(dataWatcher.getWatchableObjectInt(16) != 1 && !worldObj.isRemote && ticksExisted % 2 == 0) {
|
||||
ParticleUtil.spawnGasFlame(worldObj, posX, posY - 0.5, posZ, 0.0, -1.0, 0.0);
|
||||
}
|
||||
|
||||
if(dataWatcher.getWatchableObjectInt(16) == 2 && posY > 300)
|
||||
|
||||
@ -28,6 +28,9 @@ public class HbmPlayerProps implements IExtendedEntityProperties {
|
||||
public int totalDashCount = 0;
|
||||
public int stamina = 0;
|
||||
|
||||
public static final int plinkCooldownLength = 10;
|
||||
public int plinkCooldown = 0;
|
||||
|
||||
public HbmPlayerProps(EntityPlayer player) {
|
||||
this.player = player;
|
||||
}
|
||||
@ -103,6 +106,15 @@ public class HbmPlayerProps implements IExtendedEntityProperties {
|
||||
public int getDashCount() {
|
||||
return this.totalDashCount;
|
||||
}
|
||||
|
||||
public static void plink(EntityPlayer player, String sound, float volume, float pitch) {
|
||||
HbmPlayerProps props = HbmPlayerProps.getData(player);
|
||||
|
||||
if(props.plinkCooldown <= 0) {
|
||||
player.worldObj.playSoundAtEntity(player, sound, volume, pitch);
|
||||
props.plinkCooldown = props.plinkCooldownLength;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Entity entity, World world) { }
|
||||
|
||||
@ -83,8 +83,9 @@ public class EntityEffectHandler {
|
||||
handleRadiation(entity);
|
||||
handleDigamma(entity);
|
||||
handleLungDisease(entity);
|
||||
|
||||
|
||||
handleDashing(entity);
|
||||
handlePlinking(entity);
|
||||
}
|
||||
|
||||
private static void handleContamination(EntityLivingBase entity) {
|
||||
@ -517,4 +518,15 @@ public class EntityEffectHandler {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private static void handlePlinking(Entity entity) {
|
||||
|
||||
if(entity instanceof EntityPlayer) {
|
||||
EntityPlayer player = (EntityPlayer)entity;
|
||||
HbmPlayerProps props = HbmPlayerProps.getData(player);
|
||||
|
||||
if(props.plinkCooldown > 0)
|
||||
props.plinkCooldown--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -239,7 +239,7 @@ public class GUIRBMKConsole extends GuiScreen {
|
||||
|
||||
drawTexturedModalRect(guiLeft + x, guiTop + y, tX, tY, size, size);
|
||||
|
||||
int h = (int)Math.ceil((col.data.getDouble("heat") - 20) * 10 / col.data.getDouble("maxHeat"));
|
||||
int h = Math.min((int)Math.ceil((col.data.getDouble("heat") - 20) * 10 / col.data.getDouble("maxHeat")), 10);
|
||||
drawTexturedModalRect(guiLeft + x, guiTop + y + size - h, 0, 192 - h, 10, h);
|
||||
|
||||
switch(col.type) {
|
||||
|
||||
@ -9,20 +9,20 @@ import net.minecraft.util.IIcon;
|
||||
|
||||
public class ItemGenericPart extends ItemEnumMulti {
|
||||
|
||||
public static enum EnumPartTpe {
|
||||
public static enum EnumPartType {
|
||||
PISTON_PNEUMATIC("piston_pneumatic"),
|
||||
PISTON_HYDRAULIC("piston_hydraulic"),
|
||||
PISTON_ELECTRIC("piston_electric");
|
||||
|
||||
private String texName;
|
||||
|
||||
private EnumPartTpe(String texName) {
|
||||
private EnumPartType(String texName) {
|
||||
this.texName = texName;
|
||||
}
|
||||
}
|
||||
|
||||
public ItemGenericPart() {
|
||||
super(EnumPartTpe.class, true, true);
|
||||
super(EnumPartType.class, true, true);
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@ -32,7 +32,7 @@ public class ItemGenericPart extends ItemEnumMulti {
|
||||
this.icons = new IIcon[enums.length];
|
||||
|
||||
for(int i = 0; i < icons.length; i++) {
|
||||
EnumPartTpe num = (EnumPartTpe)enums[i];
|
||||
EnumPartType num = (EnumPartType)enums[i];
|
||||
this.icons[i] = reg.registerIcon(RefStrings.MODID + ":" + num.texName);
|
||||
}
|
||||
}
|
||||
|
||||
@ -141,7 +141,9 @@ public class ArmorDNT extends ArmorFSBPowered {
|
||||
return;
|
||||
}
|
||||
|
||||
e.worldObj.playSoundAtEntity(e, "random.break", 5F, 1.0F + e.getRNG().nextFloat() * 0.5F);
|
||||
//e.worldObj.playSoundAtEntity(e, "random.break", 5F, 1.0F + e.getRNG().nextFloat() * 0.5F);
|
||||
HbmPlayerProps.plink(player, "random.break", 0.5F, 1.0F + e.getRNG().nextFloat() * 0.5F);
|
||||
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@ package com.hbm.items.tool;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.entity.effect.EntityNukeTorex;
|
||||
import com.hbm.entity.mob.siege.EntitySiegeTunneler;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.special.ItemKitCustom;
|
||||
@ -30,6 +31,10 @@ public class ItemWandD extends Item {
|
||||
|
||||
if(pos != null) {
|
||||
|
||||
EntityNukeTorex torex = new EntityNukeTorex(world);
|
||||
torex.setPositionAndRotation(pos.blockX, pos.blockY + 1, pos.blockZ, 0, 0);
|
||||
world.spawnEntityInWorld(torex);
|
||||
|
||||
/*EntitySiegeTunneler tunneler = new EntitySiegeTunneler(world);
|
||||
tunneler.setPosition(pos.blockX, pos.blockY + 1, pos.blockZ);
|
||||
tunneler.onSpawnWithEgg(null);
|
||||
@ -37,7 +42,7 @@ public class ItemWandD extends Item {
|
||||
|
||||
//CellularDungeonFactory.meteor.generate(world, x, y, z, world.rand);
|
||||
|
||||
int r = 5;
|
||||
/*int r = 5;
|
||||
|
||||
int x = pos.blockX;
|
||||
int y = pos.blockY;
|
||||
@ -49,7 +54,7 @@ public class ItemWandD extends Item {
|
||||
world.getBlock(i, j, k).updateTick(world, i, j, k, world.rand);
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
//new Bunker().generate(world, world.rand, x, y, z);
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ package com.hbm.lib;
|
||||
public class RefStrings {
|
||||
public static final String MODID = "hbm";
|
||||
public static final String NAME = "Hbm's Nuclear Tech Mod";
|
||||
public static final String VERSION = "1.0.27 BETA (4251)";
|
||||
public static final String VERSION = "1.0.27 BETA (4263)";
|
||||
//HBM's Beta Naming Convention:
|
||||
//V T (X)
|
||||
//V -> next release version
|
||||
|
||||
@ -624,6 +624,7 @@ public class ClientProxy extends ServerProxy {
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityDeathBlast.class, new RenderDeathBlast());
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityNukeExplosionAdvanced.class, new RenderSnowball(ModItems.energy_ball));
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntitySpear.class, new RenderSpear());
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityNukeTorex.class, new RenderTorex());
|
||||
//minecarts
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityMinecartTest.class, new RenderMinecartTest());
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityMinecartCrate.class, new RenderMinecart());
|
||||
|
||||
@ -16,7 +16,7 @@ import static com.hbm.inventory.OreDictManager.*;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.ItemEnums.EnumLegendaryType;
|
||||
import com.hbm.items.ItemEnums.EnumPlantType;
|
||||
import com.hbm.items.ItemGenericPart.EnumPartTpe;
|
||||
import com.hbm.items.ItemGenericPart.EnumPartType;
|
||||
import com.hbm.items.machine.ItemBattery;
|
||||
import com.hbm.items.special.ItemCircuitStarComponent.CircuitComponentType;
|
||||
import com.hbm.items.special.ItemHolotapeImage.EnumHoloImage;
|
||||
@ -237,10 +237,12 @@ public class CraftingManager {
|
||||
addRecipeAuto(new ItemStack(ModItems.ducttape, 6), new Object[] { "FSF", "SPS", "FSF", 'F', Items.string, 'S', KEY_SLIME, 'P', Items.paper });
|
||||
|
||||
addRecipeAuto(new ItemStack(ModBlocks.conveyor, 16), new Object[] { "LLL", "I I", "LLL", 'L', Items.leather, 'I', IRON.ingot() });
|
||||
addRecipeAuto(new ItemStack(ModBlocks.conveyor, 16), new Object[] { "RSR", "I I", "RSR", 'I', IRON.ingot(), 'R', DictFrame.fromOne(ModItems.plant_item, EnumPlantType.ROPE), 'S', IRON.plate() });
|
||||
addRecipeAuto(new ItemStack(ModBlocks.conveyor, 64), new Object[] { "LLL", "I I", "LLL", 'L', RUBBER.ingot(), 'I', IRON.ingot() });
|
||||
addRecipeAuto(new ItemStack(ModBlocks.conveyor_double, 3), new Object[] { "CPC", "CPC", "CPC", 'C', ModBlocks.conveyor, 'P', IRON.plate() });
|
||||
addRecipeAuto(new ItemStack(ModBlocks.conveyor_triple, 3), new Object[] { "CPC", "CPC", "CPC", 'C', ModBlocks.conveyor_double, 'P', STEEL.plate() });
|
||||
addRecipeAuto(new ItemStack(ModBlocks.conveyor_chute, 3), new Object[] { "IGI", "IGI", "ICI" , 'I', IRON.ingot(), 'G', ModBlocks.steel_grate, 'C', ModBlocks.conveyor });
|
||||
addRecipeAuto(new ItemStack(ModBlocks.conveyor_lift, 3), new Object[] { "IGI", "IGI", "ICI" , 'I', IRON.ingot(), 'G', ModBlocks.chain, 'C', ModBlocks.conveyor });
|
||||
|
||||
//addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_difurnace_off), 1), new Object[] { "T T", "PHP", "TFT", 'T', W.ingot(), 'P', ModItems.board_copper, 'H', Blocks.hopper, 'F', Blocks.furnace });
|
||||
addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_uf6_tank), 1), new Object[] { "WTW", "WTW", "SRS", 'S', IRON.plate(), 'W', ModItems.coil_tungsten, 'T', ModItems.tank_steel, 'W', ModItems.coil_tungsten,'R', MINGRADE.ingot() });
|
||||
@ -770,7 +772,14 @@ public class CraftingManager {
|
||||
addRecipeAuto(new ItemStack(ModItems.upgrade_crystallizer, 1), new Object[] { "PHP", "CUC", "DTD", 'P', new ItemStack(ModItems.fluid_barrel_full, 1, Fluids.ACID.getID()), 'H', ModItems.circuit_targeting_tier4, 'C', ModBlocks.barrel_steel, 'U', ModItems.upgrade_centrifuge, 'D', ModItems.motor, 'T', ModBlocks.machine_transformer });
|
||||
addRecipeAuto(new ItemStack(ModItems.upgrade_screm, 1), new Object[] { "SUS", "SCS", "SUS", 'S', STEEL.plate(), 'U', ModItems.upgrade_template, 'C', ModItems.crystal_xen });
|
||||
addRecipeAuto(new ItemStack(ModItems.upgrade_gc_speed, 1), new Object[] {"GNG", "RUR", "GMG", 'R', RUBBER.ingot(), 'M', ModItems.motor, 'G', ModItems.coil_gold, 'N', TCALLOY.ingot(), 'U', ModItems.upgrade_template});
|
||||
|
||||
|
||||
addRecipeAuto(new ItemStack(ModItems.upgrade_stack, 1, 0), new Object[] { " C ", "PUP", " C ", 'C', ModItems.circuit_aluminium, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'U', ModItems.upgrade_template });
|
||||
addRecipeAuto(new ItemStack(ModItems.upgrade_stack, 1, 1), new Object[] { " C ", "PUP", " C ", 'C', ModItems.circuit_copper, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_HYDRAULIC), 'U', new ItemStack(ModItems.upgrade_stack, 1, 0) });
|
||||
addRecipeAuto(new ItemStack(ModItems.upgrade_stack, 1, 2), new Object[] { " C ", "PUP", " C ", 'C', ModItems.circuit_red_copper, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_ELECTRIC), 'U', new ItemStack(ModItems.upgrade_stack, 1, 1) });
|
||||
addRecipeAuto(new ItemStack(ModItems.upgrade_ejector, 1, 0), new Object[] { " C ", "PUP", " C ", 'C', ModItems.plate_copper, 'P', ModItems.motor, 'U', ModItems.upgrade_template });
|
||||
addRecipeAuto(new ItemStack(ModItems.upgrade_ejector, 1, 1), new Object[] { " C ", "PUP", " C ", 'C', ModItems.plate_gold, 'P', ModItems.motor, 'U', new ItemStack(ModItems.upgrade_ejector, 1, 0) });
|
||||
addRecipeAuto(new ItemStack(ModItems.upgrade_ejector, 1, 2), new Object[] { " C ", "PUP", " C ", 'C', ModItems.plate_saturnite, 'P', ModItems.motor, 'U', new ItemStack(ModItems.upgrade_ejector, 1, 1) });
|
||||
|
||||
addRecipeAuto(new ItemStack(ModItems.mech_key, 1), new Object[] { "MCM", "MKM", "MMM", 'M', ModItems.ingot_meteorite_forged, 'C', ModItems.coin_maskman, 'K', ModItems.key });
|
||||
addRecipeAuto(new ItemStack(ModItems.spawn_ufo, 1), new Object[] { "MMM", "DCD", "MMM", 'M', ModItems.ingot_meteorite, 'D', DNT.ingot(), 'C', ModItems.coin_worm });
|
||||
|
||||
@ -917,9 +926,9 @@ public class CraftingManager {
|
||||
addShapelessAuto(new ItemStack(ModItems.canister_full, 1, Fluids.BIOFUEL.getID()), new Object[] { ModItems.canister_biofuel });
|
||||
addShapelessAuto(new ItemStack(ModItems.canister_full, 1, Fluids.ETHANOL.getID()), new Object[] { ModItems.canister_ethanol });
|
||||
|
||||
addRecipeAuto(DictFrame.fromOne(ModItems.part_generic, EnumPartTpe.PISTON_PNEUMATIC, 4), new Object[] { " I ", "CPC", " I ", 'I', IRON.ingot(), 'C', CU.ingot(), 'P', IRON.plate() });
|
||||
addRecipeAuto(DictFrame.fromOne(ModItems.part_generic, EnumPartTpe.PISTON_HYDRAULIC, 4), new Object[] { " I ", "CPC", " I ", 'I', STEEL.ingot(), 'C', TI.ingot(), 'P', Fluids.LUBRICANT.getDict(1000) });
|
||||
addRecipeAuto(DictFrame.fromOne(ModItems.part_generic, EnumPartTpe.PISTON_ELECTRIC, 4), new Object[] { " I ", "CPC", " I ", 'I', TCALLOY.ingot(), 'C', ANY_PLASTIC.ingot(), 'P', ModItems.motor });
|
||||
addRecipeAuto(DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC, 4), new Object[] { " I ", "CPC", " I ", 'I', IRON.ingot(), 'C', CU.ingot(), 'P', IRON.plate() });
|
||||
addRecipeAuto(DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_HYDRAULIC, 4), new Object[] { " I ", "CPC", " I ", 'I', STEEL.ingot(), 'C', TI.ingot(), 'P', Fluids.LUBRICANT.getDict(1000) });
|
||||
addRecipeAuto(DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_ELECTRIC, 4), new Object[] { " I ", "CPC", " I ", 'I', TCALLOY.ingot(), 'C', ANY_PLASTIC.ingot(), 'P', ModItems.motor });
|
||||
|
||||
Object[] craneCasing = new Object[] {
|
||||
Blocks.stonebrick, 1,
|
||||
@ -931,7 +940,7 @@ public class CraftingManager {
|
||||
Object casing = craneCasing[i * 2];
|
||||
int amount = (int) craneCasing[i * 2 + 1];
|
||||
addRecipeAuto(new ItemStack(ModBlocks.crane_inserter, amount), new Object[] { "CCC", "C C", "CBC", 'C', casing, 'B', ModBlocks.conveyor });
|
||||
addRecipeAuto(new ItemStack(ModBlocks.crane_extractor, amount), new Object[] { "CCC", "CPC", "CBC", 'C', casing, 'B', ModBlocks.conveyor, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartTpe.PISTON_PNEUMATIC) });
|
||||
addRecipeAuto(new ItemStack(ModBlocks.crane_extractor, amount), new Object[] { "CCC", "CPC", "CBC", 'C', casing, 'B', ModBlocks.conveyor, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) });
|
||||
}
|
||||
|
||||
addShapelessAuto(DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER1), new Object[] { ModItems.ingot_chainsteel, ASBESTOS.ingot(), ModItems.gem_alexandrite });
|
||||
|
||||
@ -501,6 +501,7 @@ public class MainRegistry {
|
||||
EntityRegistry.registerModEntity(EntityMagnusCartus.class, "entity_ntm_cart_chungoid", 174, this, 250, 1, false);
|
||||
EntityRegistry.registerModEntity(EntityMinecartPowder.class, "entity_ntm_cart_powder", 175, this, 250, 1, false);
|
||||
EntityRegistry.registerModEntity(EntityMinecartSemtex.class, "entity_ntm_cart_semtex", 176, this, 250, 1, false);
|
||||
EntityRegistry.registerModEntity(EntityNukeTorex.class, "entity_effect_torex", 177, this, 250, 1, false);
|
||||
|
||||
EntityRegistry.registerGlobalEntityID(EntityNuclearCreeper.class, "entity_mob_nuclear_creeper", EntityRegistry.findGlobalUniqueEntityId(), 0x204131, 0x75CE00);
|
||||
EntityRegistry.registerGlobalEntityID(EntityTaintedCreeper.class, "entity_mob_tainted_creeper", EntityRegistry.findGlobalUniqueEntityId(), 0x813b9b, 0xd71fdd);
|
||||
|
||||
@ -907,7 +907,7 @@ public class ModEventHandler {
|
||||
EntityPlayer player = (EntityPlayer) e;
|
||||
|
||||
if(ArmorUtil.checkArmor(player, ModItems.euphemium_helmet, ModItems.euphemium_plate, ModItems.euphemium_legs, ModItems.euphemium_boots)) {
|
||||
e.worldObj.playSoundAtEntity(e, "random.break", 5F, 1.0F + e.getRNG().nextFloat() * 0.5F);
|
||||
HbmPlayerProps.plink(player, "random.break", 0.5F, 1.0F + e.getRNG().nextFloat() * 0.5F);
|
||||
event.setCanceled(true);
|
||||
}
|
||||
|
||||
|
||||
@ -64,8 +64,8 @@ public class RenderConveyorChute implements ISimpleBlockRenderingHandler {
|
||||
double maxOuter = 1.0;
|
||||
double minInner = 0.25;
|
||||
double maxInner = 0.75;
|
||||
double glassMin = 0.1875;
|
||||
double glassMax = 0.8175;
|
||||
double glassMin = 0.125;
|
||||
double glassMax = 0.875;
|
||||
|
||||
renderer.setRenderBounds(minOuter, 0.0, minOuter, minInner, 1.0, minInner); standardBundle(tessellator, ModBlocks.concrete_smooth, 0, renderer);
|
||||
renderer.setRenderBounds(maxInner, 0.0, minOuter, maxOuter, 1.0, minInner); standardBundle(tessellator, ModBlocks.concrete_smooth, 0, renderer);
|
||||
@ -78,7 +78,6 @@ public class RenderConveyorChute implements ISimpleBlockRenderingHandler {
|
||||
renderer.setRenderBounds(glassMin, 0.25, minInner, glassMin, 1.0, maxInner); standardBundle(tessellator, ModBlocks.steel_grate, 2, renderer);
|
||||
renderer.setRenderBounds(glassMax, 0.25, minInner, glassMax, 1.0, maxInner); standardBundle(tessellator, ModBlocks.steel_grate, 2, renderer);
|
||||
renderer.setRenderBounds(minInner, 0.25, glassMin, maxInner, 1.0, glassMin); standardBundle(tessellator, ModBlocks.steel_grate, 2, renderer);
|
||||
renderer.setRenderBounds(minInner, 0.25, glassMax, maxInner, 1.0, glassMax); standardBundle(tessellator, ModBlocks.steel_grate, 2, renderer);
|
||||
|
||||
tessellator.draw();
|
||||
|
||||
@ -205,8 +204,8 @@ public class RenderConveyorChute implements ISimpleBlockRenderingHandler {
|
||||
renderer.setRenderBounds(minOuter, 0.0, maxInner, minInner, 1.0, maxOuter); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setRenderBounds(maxInner, 0.0, maxInner, maxOuter, 1.0, maxOuter); renderer.renderStandardBlock(block, x, y, z);
|
||||
|
||||
double glassMin = 0.1875;
|
||||
double glassMax = 0.8175;
|
||||
double glassMin = 0.125;
|
||||
double glassMax = 0.875;
|
||||
|
||||
renderer.setOverrideBlockTexture(iconGlass);
|
||||
if(!nX && (!belt || meta != 5)) { renderer.setRenderBounds(glassMin, belt ? 0.25 : 0.0, minInner, glassMin, 1.0, maxInner); renderer.renderStandardBlock(block, x, y, z); }
|
||||
|
||||
@ -1,10 +1,15 @@
|
||||
package com.hbm.render.block;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.blocks.network.BlockConveyorLift;
|
||||
|
||||
import api.hbm.conveyor.IConveyorBelt;
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
public class RenderConveyorLift implements ISimpleBlockRenderingHandler {
|
||||
@ -16,12 +21,156 @@ public class RenderConveyorLift implements ISimpleBlockRenderingHandler {
|
||||
|
||||
@Override
|
||||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
|
||||
return false;
|
||||
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
|
||||
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
|
||||
tessellator.setColorOpaque_F(1, 1, 1);
|
||||
|
||||
boolean isBottom = false;
|
||||
boolean isTop = false;
|
||||
|
||||
IIcon iconConcrete = ModBlocks.concrete_smooth.getIcon(0, 0);
|
||||
IIcon iconIron = Blocks.iron_block.getIcon(0, 0);
|
||||
IIcon iconBelt = block.getIcon(0, 0);
|
||||
|
||||
|
||||
if(y > 0) {
|
||||
Block below = world.getBlock(x, y - 1, z);
|
||||
if(!(below instanceof IConveyorBelt)) {
|
||||
|
||||
renderer.setOverrideBlockTexture(iconBelt);
|
||||
|
||||
if(meta != 5) {
|
||||
renderer.uvRotateTop = 1;
|
||||
renderer.uvRotateBottom = 1;
|
||||
renderer.setRenderBounds(0.0D, 0.0D, 0.25D, 0.25D, 0.25D, 0.75D); renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
if(meta != 4) {
|
||||
renderer.uvRotateTop = 2;
|
||||
renderer.uvRotateBottom = 2;
|
||||
renderer.setRenderBounds(0.75D, 0.0D, 0.25D, 1.0D, 0.25D, 0.75D); renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
if(meta != 3) {
|
||||
renderer.uvRotateTop = 3;
|
||||
renderer.uvRotateBottom = 0;
|
||||
renderer.setRenderBounds(0.25D, 0.0D, 0.0D, 0.75D, 0.25D, 0.25D); renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
if(meta != 2) {
|
||||
renderer.uvRotateTop = 0;
|
||||
renderer.uvRotateBottom = 3;
|
||||
renderer.setRenderBounds(0.25D, 0.0D, 0.75D, 0.75D, 0.25D, 1.0D); renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
|
||||
renderer.uvRotateTop = 0;
|
||||
renderer.uvRotateBottom = 0;
|
||||
|
||||
renderer.clearOverrideBlockTexture();
|
||||
|
||||
isBottom = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(y < 255) {
|
||||
Block above = world.getBlock(x, y + 1, z);
|
||||
isTop = !(above instanceof IConveyorBelt) && !isBottom;
|
||||
}
|
||||
|
||||
double minOuter = 0.0;
|
||||
double maxOuter = 1.0;
|
||||
double minInner = 0.25;
|
||||
double maxInner = 0.75;
|
||||
|
||||
renderer.setOverrideBlockTexture(iconConcrete);
|
||||
|
||||
if(!isTop) {
|
||||
if(meta == 2) {
|
||||
renderer.setRenderBounds(minOuter, 0.0, minOuter, minInner, 1.0, minInner); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setRenderBounds(maxInner, 0.0, minOuter, maxOuter, 1.0, minInner); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setRenderBounds(minOuter, 0.0, maxInner, maxOuter, 1.0, maxOuter); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setOverrideBlockTexture(iconBelt);
|
||||
renderer.uvRotateTop = 3;
|
||||
renderer.setRenderBounds(minInner, 0.0, maxInner - 0.125, maxInner, 1.0, maxInner); renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
if(meta == 3) {
|
||||
renderer.setRenderBounds(minOuter, 0.0, minOuter, maxOuter, 1.0, minInner); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setRenderBounds(minOuter, 0.0, maxInner, minInner, 1.0, maxOuter); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setRenderBounds(maxInner, 0.0, maxInner, maxOuter, 1.0, maxOuter); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setOverrideBlockTexture(iconBelt);
|
||||
renderer.uvRotateTop = 0;
|
||||
renderer.setRenderBounds(minInner, 0.0, minInner, maxInner, 1.0, minInner + 0.125); renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
if(meta == 4) {
|
||||
renderer.setRenderBounds(minOuter, 0.0, minOuter, minInner, 1.0, minInner); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setRenderBounds(minOuter, 0.0, maxInner, minInner, 1.0, maxOuter); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setRenderBounds(maxInner, 0.0, minOuter, maxOuter, 1.0, maxOuter); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setOverrideBlockTexture(iconBelt);
|
||||
renderer.uvRotateTop = 1;
|
||||
renderer.setRenderBounds(maxInner - 0.125, 0.0, minInner, maxInner, 1.0, maxInner); renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
if(meta == 5) {
|
||||
renderer.setRenderBounds(maxInner, 0.0, minOuter, maxOuter, 1.0, minInner); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setRenderBounds(maxInner, 0.0, maxInner, maxOuter, 1.0, maxOuter); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setRenderBounds(minOuter, 0.0, minOuter, minInner, 1.0, maxOuter); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setOverrideBlockTexture(iconBelt);
|
||||
renderer.uvRotateTop = 2;
|
||||
renderer.setRenderBounds(minInner, 0.0, minInner, minInner + 0.125, 1.0, maxInner); renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
} else {
|
||||
if(meta == 2 || meta == 3) {
|
||||
renderer.setRenderBounds(minOuter, 0.0, minOuter, minInner, 0.5, maxOuter); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setRenderBounds(maxInner, 0.0, minOuter, maxOuter, 0.5, maxOuter); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.clearOverrideBlockTexture();
|
||||
|
||||
if(meta == 2) {
|
||||
renderer.uvRotateTop = 3;
|
||||
renderer.uvRotateWest = 3;
|
||||
renderer.setRenderBounds(minInner, 0.0, maxInner - 0.125, maxInner, 0.25, maxOuter); renderer.renderStandardBlock(block, x, y, z);
|
||||
} else {
|
||||
renderer.uvRotateTop = 0;
|
||||
renderer.uvRotateEast = 3;
|
||||
renderer.setRenderBounds(minInner, 0.0, minOuter, maxInner, 0.25, minInner + 0.125); renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
if(meta == 4 || meta == 5) {
|
||||
renderer.setRenderBounds(minOuter, 0.0, minOuter, maxOuter, 0.5, minInner); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.setRenderBounds(minOuter, 0.0, maxInner, maxOuter, 0.5, maxOuter); renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.clearOverrideBlockTexture();
|
||||
|
||||
if(meta == 4) {
|
||||
renderer.uvRotateTop = 1;
|
||||
renderer.uvRotateSouth = 3;
|
||||
renderer.setRenderBounds(maxInner - 0.125, 0.0, minInner, maxOuter, 0.25, maxInner); renderer.renderStandardBlock(block, x, y, z);
|
||||
} else {
|
||||
renderer.uvRotateTop = 2;
|
||||
renderer.uvRotateNorth = 3;
|
||||
renderer.setRenderBounds(minOuter, 0.0, minInner, minInner + 0.125, 0.25, maxInner); renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
renderer.uvRotateTop = 0;
|
||||
renderer.uvRotateBottom = 0;
|
||||
renderer.uvRotateNorth = 0;
|
||||
renderer.uvRotateSouth = 0;
|
||||
renderer.uvRotateEast = 0;
|
||||
renderer.uvRotateWest = 0;
|
||||
|
||||
if(isBottom) {
|
||||
renderer.setOverrideBlockTexture(iconIron);
|
||||
renderer.setRenderBounds(0.25 + (meta == 5 ? 0.125 : 0), 0, 0.25 + (meta == 3 ? 0.125 : 0), 0.75 - (meta == 4 ? 0.125 : 0), 0.25, 0.75 - (meta == 2 ? 0.125 : 0)); renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
|
||||
renderer.clearOverrideBlockTexture();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender3DInInventory(int modelId) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
113
src/main/java/com/hbm/render/entity/effect/RenderTorex.java
Normal file
113
src/main/java/com/hbm/render/entity/effect/RenderTorex.java
Normal file
@ -0,0 +1,113 @@
|
||||
package com.hbm.render.entity.effect;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.entity.effect.EntityNukeTorex;
|
||||
import com.hbm.entity.effect.EntityNukeTorex.Cloudlet;
|
||||
import com.hbm.lib.RefStrings;
|
||||
import com.hbm.main.MainRegistry;
|
||||
|
||||
import net.minecraft.client.renderer.ActiveRenderInfo;
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.renderer.entity.Render;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.Vec3;
|
||||
|
||||
public class RenderTorex extends Render {
|
||||
|
||||
private static final ResourceLocation cloudlet = new ResourceLocation(RefStrings.MODID + ":textures/particle/particle_base.png");
|
||||
|
||||
@Override
|
||||
public void doRender(Entity entity, double x, double y, double z, float f0, float interp) {
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslated(x, y, z);
|
||||
EntityNukeTorex cloud = (EntityNukeTorex)entity;
|
||||
cloudletWrapper(cloud, interp);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
private Comparator cloudSorter = new Comparator() {
|
||||
|
||||
@Override
|
||||
public int compare(Object arg0, Object arg1) {
|
||||
Cloudlet first = (Cloudlet) arg0;
|
||||
Cloudlet second = (Cloudlet) arg1;
|
||||
EntityPlayer player = MainRegistry.proxy.me();
|
||||
double dist1 = player.getDistanceSq(first.posX, first.posY, first.posZ);
|
||||
double dist2 = player.getDistanceSq(second.posX, second.posY, second.posZ);
|
||||
|
||||
return dist1 > dist2 ? -1 : dist1 == dist2 ? 0 : 1;
|
||||
}
|
||||
};
|
||||
|
||||
private void cloudletWrapper(EntityNukeTorex cloud, float interp) {
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
|
||||
// To prevent particles cutting off before fully fading out
|
||||
GL11.glAlphaFunc(GL11.GL_GREATER, 0);
|
||||
GL11.glDisable(GL11.GL_ALPHA_TEST);
|
||||
GL11.glDepthMask(false);
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
|
||||
bindTexture(cloudlet);
|
||||
|
||||
Tessellator tess = Tessellator.instance;
|
||||
tess.startDrawingQuads();
|
||||
|
||||
ArrayList<Cloudlet> cloudlets = new ArrayList(cloud.cloudlets);
|
||||
cloudlets.sort(cloudSorter);
|
||||
|
||||
for(Cloudlet cloudlet : cloudlets) {
|
||||
Vec3 vec = cloudlet.getInterpPos(interp);
|
||||
tessellateCloudlet(tess, vec.xCoord - cloud.posX, vec.yCoord - cloud.posY, vec.zCoord - cloud.posZ, cloudlet, interp);
|
||||
}
|
||||
|
||||
tess.draw();
|
||||
|
||||
GL11.glDepthMask(true);
|
||||
GL11.glEnable(GL11.GL_ALPHA_TEST);
|
||||
RenderHelper.enableStandardItemLighting();
|
||||
GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);
|
||||
GL11.glDisable(GL11.GL_BLEND);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
private void tessellateCloudlet(Tessellator tess, double posX, double posY, double posZ, Cloudlet cloud, float interp) {
|
||||
|
||||
float alpha = 1F - ((float)cloud.age / (float)EntityNukeTorex.cloudletLife);
|
||||
float scale = 1F + ((float)cloud.age / (float)EntityNukeTorex.cloudletLife) * 5;
|
||||
|
||||
float f1 = ActiveRenderInfo.rotationX;
|
||||
float f2 = ActiveRenderInfo.rotationZ;
|
||||
float f3 = ActiveRenderInfo.rotationYZ;
|
||||
float f4 = ActiveRenderInfo.rotationXY;
|
||||
float f5 = ActiveRenderInfo.rotationXZ;
|
||||
|
||||
//Random rand = new Random((long) ((posX * 5 + posY * 25 + posZ * 125) * 1000D));
|
||||
|
||||
float brightness = 0.75F * cloud.colorMod;
|
||||
Vec3 color = cloud.getInterpColor(interp);
|
||||
tess.setColorRGBA_F((float)color.xCoord * brightness, (float)color.yCoord * brightness, (float)color.zCoord * brightness, alpha);
|
||||
|
||||
tess.addVertexWithUV((double) (posX - f1 * scale - f3 * scale), (double) (posY - f5 * scale), (double) (posZ - f2 * scale - f4 * scale), 1, 1);
|
||||
tess.addVertexWithUV((double) (posX - f1 * scale + f3 * scale), (double) (posY + f5 * scale), (double) (posZ - f2 * scale + f4 * scale), 1, 0);
|
||||
tess.addVertexWithUV((double) (posX + f1 * scale + f3 * scale), (double) (posY + f5 * scale), (double) (posZ + f2 * scale + f4 * scale), 0, 0);
|
||||
tess.addVertexWithUV((double) (posX + f1 * scale - f3 * scale), (double) (posY - f5 * scale), (double) (posZ + f2 * scale - f4 * scale), 0, 1);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getEntityTexture(Entity p_110775_1_) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -64,17 +64,17 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM
|
||||
rod.updateHeat(worldObj, slots[0], 1.0D);
|
||||
this.heat += rod.provideHeat(worldObj, slots[0], heat, 1.0D);
|
||||
|
||||
if(this.heat > this.maxHeat() && !RBMKDials.getMeltdownsDisabled(worldObj)) {
|
||||
this.meltdown();
|
||||
return;
|
||||
}
|
||||
|
||||
if(!this.hasLid()) {
|
||||
ChunkRadiationManager.proxy.incrementRad(worldObj, xCoord, yCoord, zCoord, (float) ((this.fluxFast + this.fluxSlow) * 0.05F));
|
||||
}
|
||||
|
||||
super.updateEntity();
|
||||
|
||||
if(this.heat > this.maxHeat() && !RBMKDials.getMeltdownsDisabled(worldObj)) {
|
||||
this.meltdown();
|
||||
return;
|
||||
}
|
||||
|
||||
//for spreading, we want the buffered flux to be 0 because we want to know exactly how much gets reflected back
|
||||
this.fluxFast = 0;
|
||||
this.fluxSlow = 0;
|
||||
|
||||
@ -55,7 +55,16 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I
|
||||
}
|
||||
}
|
||||
|
||||
if(worldObj.getTotalWorldTime() % delay == 0) {
|
||||
boolean powered = false;
|
||||
|
||||
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
||||
if(this.worldObj.isBlockIndirectlyGettingPowered(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ)) {
|
||||
powered = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(worldObj.getTotalWorldTime() % delay == 0 && !powered) {
|
||||
int amount = 1;
|
||||
|
||||
if(slots[18] != null && slots[18].getItem() == ModItems.upgrade_stack) {
|
||||
|
||||
@ -56,6 +56,7 @@ public class TileEntityCraneInserter extends TileEntityMachineBase implements IG
|
||||
|
||||
if(ret == null || ret.stackSize != stack.stackSize) {
|
||||
slots[i] = ret;
|
||||
this.markDirty();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.hbm.util;
|
||||
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.packet.AuxParticlePacketNT;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
|
||||
@ -16,6 +17,14 @@ public class ParticleUtil {
|
||||
data.setDouble("mX", mX);
|
||||
data.setDouble("mY", mY);
|
||||
data.setDouble("mZ", mZ);
|
||||
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x, y, z), new TargetPoint(world.provider.dimensionId, x, y, z, 150));
|
||||
|
||||
if(world.isRemote) {
|
||||
data.setDouble("posX", x);
|
||||
data.setDouble("posY", y);
|
||||
data.setDouble("posZ", z);
|
||||
MainRegistry.proxy.effectNT(data);
|
||||
} else {
|
||||
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x, y, z), new TargetPoint(world.provider.dimensionId, x, y, z, 150));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -216,6 +216,8 @@ container.bombMulti=Mehrzweckbombe
|
||||
container.centrifuge=Zentrifuge
|
||||
container.chemplant=Chemiewerk
|
||||
container.compactLauncher=Kompakt-Startrampe
|
||||
container.craneExtractor=Förderband-Auswerfer
|
||||
container.craneInserter=Förderband-Einsetzer
|
||||
container.crateDesh=Deshkiste
|
||||
container.crateIron=Eisenkiste
|
||||
container.crateSteel=Stahlkiste
|
||||
@ -2768,6 +2770,9 @@ item.upgrade_crystallizer.name=Kristallisiererupgrade
|
||||
item.upgrade_effect_1.name=Effektupgrade Mk.I
|
||||
item.upgrade_effect_2.name=Effektupgrade Mk.II
|
||||
item.upgrade_effect_3.name=Effektupgrade Mk.III
|
||||
item.upgrade_ejector_1.name=Auswurfupgrade Mk.I
|
||||
item.upgrade_ejector_2.name=Auswurfupgrade Mk.II
|
||||
item.upgrade_ejector_3.name=Auswurfupgrade Mk.III
|
||||
item.upgrade_fortune_1.name=Glückupgrade Mk.I
|
||||
item.upgrade_fortune_2.name=Glückupgrade Mk.II
|
||||
item.upgrade_fortune_3.name=Glückupgrade Mk.III
|
||||
@ -2786,6 +2791,9 @@ item.upgrade_smelter.name=Ofenupgrade
|
||||
item.upgrade_speed_1.name=Geschwindigkeitsupgrade Mk.I
|
||||
item.upgrade_speed_2.name=Geschwindigkeitsupgrade Mk.II
|
||||
item.upgrade_speed_3.name=Geschwindigkeitsupgrade Mk.III
|
||||
item.upgrade_stack_1.name=Stapelupgrade Mk.I
|
||||
item.upgrade_stack_2.name=Stapelupgrade Mk.II
|
||||
item.upgrade_stack_3.name=Stapelupgrade Mk.III
|
||||
item.upgrade_template.name=Maschinenupgrade-Vorlage
|
||||
item.v1.name=V1
|
||||
item.volcanic_pickaxe.name=Geschmolzene Spitzhacke
|
||||
@ -3115,7 +3123,13 @@ tile.concrete_smooth.name=Beton
|
||||
tile.concrete_super.name=Super Beton
|
||||
tile.concrete_super_broken.name=Schimmliger Schutt
|
||||
tile.conveyor.name=Förderband
|
||||
tile.conveyor_chute.name=Förderschütte
|
||||
tile.conveyor_double.name=Zweispuriges Förderband
|
||||
tile.conveyor_lift.name=Kettenaufzug
|
||||
tile.conveyor_triple.name=Dreispuriges Förderband
|
||||
tile.corium_block.name=Corium
|
||||
tile.crane_extractor.name=Förderband-Auswerfer
|
||||
tile.crane_inserter.name=Förderband-Einsetzer
|
||||
tile.crashed_bomb.name=Blindgänger
|
||||
tile.crate.name=Vorratskiste
|
||||
tile.crate_ammo.name=Sternenmetallkiste
|
||||
|
||||
@ -392,6 +392,8 @@ container.bombMulti=Multi Purpose Bomb
|
||||
container.centrifuge=Centrifuge
|
||||
container.chemplant=Chemical Plant
|
||||
container.compactLauncher=Compact Launch Pad
|
||||
container.craneExtractor=Conveyor Extractor
|
||||
container.craneInserter=Conveyor Inserter
|
||||
container.crateDesh=Desh Crate
|
||||
container.crateIron=Iron Crate
|
||||
container.crateSteel=Steel Crate
|
||||
@ -3147,6 +3149,9 @@ item.upgrade_crystallizer.name=Crystallizer Upgrade
|
||||
item.upgrade_effect_1.name=Effectiveness Upgrade Mk.I
|
||||
item.upgrade_effect_2.name=Effectiveness Upgrade Mk.II
|
||||
item.upgrade_effect_3.name=Effectiveness Upgrade Mk.III
|
||||
item.upgrade_ejector_1.name=Ejection Speed Upgrade Mk.I
|
||||
item.upgrade_ejector_2.name=Ejection Speed Upgrade Mk.II
|
||||
item.upgrade_ejector_3.name=Ejection Speed Upgrade Mk.III
|
||||
item.upgrade_fortune_1.name=Fortune Upgrade Mk.I
|
||||
item.upgrade_fortune_2.name=Fortune Upgrade Mk.II
|
||||
item.upgrade_fortune_3.name=Fortune Upgrade Mk.III
|
||||
@ -3166,6 +3171,9 @@ item.upgrade_smelter.name=Smelter Upgrade
|
||||
item.upgrade_speed_1.name=Speed Upgrade Mk.I
|
||||
item.upgrade_speed_2.name=Speed Upgrade Mk.II
|
||||
item.upgrade_speed_3.name=Speed Upgrade Mk.III
|
||||
item.upgrade_stack_1.name=Stack Ejection Upgrade Mk.I
|
||||
item.upgrade_stack_2.name=Stack Ejection Upgrade Mk.II
|
||||
item.upgrade_stack_3.name=Stack Ejection Upgrade Mk.III
|
||||
item.upgrade_template.name=Machine Upgrade Template
|
||||
item.v1.name=V1
|
||||
item.volcanic_pickaxe.name=Molten Pickaxe
|
||||
@ -3507,7 +3515,13 @@ tile.concrete_smooth.name=Concrete
|
||||
tile.concrete_super.name=Über Concrete
|
||||
tile.concrete_super_broken.name=Moldy Debris
|
||||
tile.conveyor.name=Conveyor Belt
|
||||
tile.conveyor_chute.name=Conveyor Chute
|
||||
tile.conveyor_double.name=Double-Lane Conveyor Belt
|
||||
tile.conveyor_lift.name=Conveyor Chain Lift
|
||||
tile.conveyor_triple.name=Triple-Lane Conveyor Belt
|
||||
tile.corium_block.name=Corium
|
||||
tile.crane_extractor.name=Conveyor Ejector
|
||||
tile.crane_inserter.name=Conveyor Inserter
|
||||
tile.crashed_bomb.name=Dud
|
||||
tile.crate.name=Supply Crate
|
||||
tile.crate_ammo.name=Starmetal Crate
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 797 B |
@ -3,7 +3,7 @@
|
||||
"modid": "hbm",
|
||||
"name": "Hbm's Nuclear Tech",
|
||||
"description": "A mod that adds weapons, nuclear themed stuff and machines",
|
||||
"version":"1.0.27_X4251",
|
||||
"version":"1.0.27_X4263",
|
||||
"mcversion": "1.7.10",
|
||||
"url": "",
|
||||
"updateUrl": "",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user