diff --git a/src/main/java/com/hbm/blocks/generic/BlockNTMFlower.java b/src/main/java/com/hbm/blocks/generic/BlockNTMFlower.java index b5e389ba3..5b4b330f7 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockNTMFlower.java +++ b/src/main/java/com/hbm/blocks/generic/BlockNTMFlower.java @@ -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) { } } diff --git a/src/main/java/com/hbm/blocks/network/BlockConveyorChute.java b/src/main/java/com/hbm/blocks/network/BlockConveyorChute.java index 3de9ba9f5..efa52f5a0 100644 --- a/src/main/java/com/hbm/blocks/network/BlockConveyorChute.java +++ b/src/main/java/com/hbm/blocks/network/BlockConveyorChute.java @@ -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; + } } diff --git a/src/main/java/com/hbm/blocks/network/BlockConveyorLift.java b/src/main/java/com/hbm/blocks/network/BlockConveyorLift.java index c150418ba..6bea6da24 100644 --- a/src/main/java/com/hbm/blocks/network/BlockConveyorLift.java +++ b/src/main/java/com/hbm/blocks/network/BlockConveyorLift.java @@ -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; + } } diff --git a/src/main/java/com/hbm/blocks/network/CraneExtractor.java b/src/main/java/com/hbm/blocks/network/CraneExtractor.java index 228d204ba..8301b7e5f 100644 --- a/src/main/java/com/hbm/blocks/network/CraneExtractor.java +++ b/src/main/java/com/hbm/blocks/network/CraneExtractor.java @@ -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; + } } diff --git a/src/main/java/com/hbm/blocks/network/CraneInserter.java b/src/main/java/com/hbm/blocks/network/CraneInserter.java index 87badfa35..106ee232f 100644 --- a/src/main/java/com/hbm/blocks/network/CraneInserter.java +++ b/src/main/java/com/hbm/blocks/network/CraneInserter.java @@ -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)); + } } diff --git a/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java b/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java new file mode 100644 index 000000000..4ea9d3c6d --- /dev/null +++ b/src/main/java/com/hbm/entity/effect/EntityNukeTorex.java @@ -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 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; + } +} diff --git a/src/main/java/com/hbm/entity/item/EntityMovingItem.java b/src/main/java/com/hbm/entity/item/EntityMovingItem.java index 406a9c483..cac247fb5 100644 --- a/src/main/java/com/hbm/entity/item/EntityMovingItem.java +++ b/src/main/java/com/hbm/entity/item/EntityMovingItem.java @@ -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; } diff --git a/src/main/java/com/hbm/entity/missile/EntityMinerRocket.java b/src/main/java/com/hbm/entity/missile/EntityMinerRocket.java index 7e9cb87d7..b32840bc2 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMinerRocket.java +++ b/src/main/java/com/hbm/entity/missile/EntityMinerRocket.java @@ -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) diff --git a/src/main/java/com/hbm/extprop/HbmPlayerProps.java b/src/main/java/com/hbm/extprop/HbmPlayerProps.java index 2e991b86e..d9e29cc43 100644 --- a/src/main/java/com/hbm/extprop/HbmPlayerProps.java +++ b/src/main/java/com/hbm/extprop/HbmPlayerProps.java @@ -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) { } diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index 8b9a13761..06b4a9c7e 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -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--; + } + } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java index 1ac9e7503..d4947437c 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java @@ -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) { diff --git a/src/main/java/com/hbm/items/ItemGenericPart.java b/src/main/java/com/hbm/items/ItemGenericPart.java index 3e87bb0ca..67e129cfd 100644 --- a/src/main/java/com/hbm/items/ItemGenericPart.java +++ b/src/main/java/com/hbm/items/ItemGenericPart.java @@ -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); } } diff --git a/src/main/java/com/hbm/items/armor/ArmorDNT.java b/src/main/java/com/hbm/items/armor/ArmorDNT.java index c71042018..d22034e78 100644 --- a/src/main/java/com/hbm/items/armor/ArmorDNT.java +++ b/src/main/java/com/hbm/items/armor/ArmorDNT.java @@ -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); } } diff --git a/src/main/java/com/hbm/items/tool/ItemWandD.java b/src/main/java/com/hbm/items/tool/ItemWandD.java index f7702c7f0..527f6d5cf 100644 --- a/src/main/java/com/hbm/items/tool/ItemWandD.java +++ b/src/main/java/com/hbm/items/tool/ItemWandD.java @@ -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); diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index e9f05f200..d974bc73d 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (4251)"; + public static final String VERSION = "1.0.27 BETA (4263)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index c5179acab..9b791ce17 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -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()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 00dd67d2f..5990c9698 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -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 }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index be6fb4dd1..e10071033 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -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); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index d88bbd324..62014fee6 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -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); } diff --git a/src/main/java/com/hbm/render/block/RenderConveyorChute.java b/src/main/java/com/hbm/render/block/RenderConveyorChute.java index 56c8ded27..d85681687 100644 --- a/src/main/java/com/hbm/render/block/RenderConveyorChute.java +++ b/src/main/java/com/hbm/render/block/RenderConveyorChute.java @@ -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); } diff --git a/src/main/java/com/hbm/render/block/RenderConveyorLift.java b/src/main/java/com/hbm/render/block/RenderConveyorLift.java index 45aac9ba2..badb6ee35 100644 --- a/src/main/java/com/hbm/render/block/RenderConveyorLift.java +++ b/src/main/java/com/hbm/render/block/RenderConveyorLift.java @@ -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 diff --git a/src/main/java/com/hbm/render/entity/effect/RenderTorex.java b/src/main/java/com/hbm/render/entity/effect/RenderTorex.java new file mode 100644 index 000000000..3fc1195ed --- /dev/null +++ b/src/main/java/com/hbm/render/entity/effect/RenderTorex.java @@ -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 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; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java index 949292459..e1d87946b 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java @@ -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; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index 93a10d9e3..88594df87 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -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) { diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java index 6556b3e8c..c91bd44dd 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java @@ -56,6 +56,7 @@ public class TileEntityCraneInserter extends TileEntityMachineBase implements IG if(ret == null || ret.stackSize != stack.stackSize) { slots[i] = ret; + this.markDirty(); break; } } diff --git a/src/main/java/com/hbm/util/ParticleUtil.java b/src/main/java/com/hbm/util/ParticleUtil.java index 8f898e607..0428ec19b 100644 --- a/src/main/java/com/hbm/util/ParticleUtil.java +++ b/src/main/java/com/hbm/util/ParticleUtil.java @@ -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)); + } } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index b7e48229b..26c150436 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -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 diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index c02675eb4..bcf9d71b3 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -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 diff --git a/src/main/resources/assets/hbm/textures/models/machines/furnace_iron.png b/src/main/resources/assets/hbm/textures/models/machines/furnace_iron.png new file mode 100644 index 000000000..ab2c6f558 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/machines/furnace_iron.png differ diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index c356e6427..e618d5f48 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -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": "",