diff --git a/src/main/java/com/hbm/entity/projectile/EntityBulletBase.java b/src/main/java/com/hbm/entity/projectile/EntityBulletBase.java index 4fb3bd64b..d3f079f3d 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBulletBase.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBulletBase.java @@ -250,6 +250,7 @@ public class EntityBulletBase extends Entity implements IProjectile { if (victim != null) { movement = new MovingObjectPosition(victim); + movement.hitVec.yCoord += victim.height * 0.5D; } /// ZONE 2 END /// @@ -264,10 +265,12 @@ public class EntityBulletBase extends Entity implements IProjectile { DamageSource damagesource = this.config.getDamage(this, shooter); if(!worldObj.isRemote) { - if(!config.doesPenetrate) + if(!config.doesPenetrate) { + this.setPosition(movement.hitVec.xCoord, movement.hitVec.yCoord, movement.hitVec.zCoord); onEntityImpact(victim); - else + } else { onEntityHurt(victim); + } } float damage = rand.nextFloat() * (config.dmgMax - config.dmgMin) + config.dmgMin; @@ -292,8 +295,10 @@ public class EntityBulletBase extends Entity implements IProjectile { boolean hRic = rand.nextInt(100) < config.HBRC; boolean doesRic = config.doesRicochet || hRic; - if(!config.isSpectral && !doesRic) + if(!config.isSpectral && !doesRic) { + this.setPosition(movement.hitVec.xCoord, movement.hitVec.yCoord, movement.hitVec.zCoord); this.onBlockImpact(movement.blockX, movement.blockY, movement.blockZ); + } if(doesRic) { @@ -342,10 +347,12 @@ public class EntityBulletBase extends Entity implements IProjectile { onRicochet(movement.blockX, movement.blockY, movement.blockZ); - } else { - if(!worldObj.isRemote) - onBlockImpact(movement.blockX, movement.blockY, movement.blockZ); - } + } else { + if(!worldObj.isRemote) { + this.setPosition(movement.hitVec.xCoord, movement.hitVec.yCoord, movement.hitVec.zCoord); + onBlockImpact(movement.blockX, movement.blockY, movement.blockZ); + } + } this.posX += (movement.hitVec.xCoord - this.posX) * 0.6; this.posY += (movement.hitVec.yCoord - this.posY) * 0.6; diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java index 60b5ad513..c7224887b 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java +++ b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java @@ -904,6 +904,22 @@ public class ItemRenderLibrary { GL11.glShadeModel(GL11.GL_FLAT); }}); + renderers.put(Item.getItemFromBlock(ModBlocks.turret_howard_damaged), new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -4.5, 0); + GL11.glScaled(4, 4, 4); + } + public void renderCommon() { + GL11.glTranslated(-0.75, 0, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.turret_base_rusted); ResourceManager.turret_chekhov.renderPart("Base"); + bindTexture(ResourceManager.turret_carriage_ciws_rusted); ResourceManager.turret_howard.renderPart("Carriage"); + bindTexture(ResourceManager.turret_howard_rusted); ResourceManager.turret_howard_damaged.renderPart("Body"); + bindTexture(ResourceManager.turret_howard_barrels_rusted); ResourceManager.turret_howard_damaged.renderPart("BarrelsTop"); + bindTexture(ResourceManager.turret_howard_barrels_rusted); ResourceManager.turret_howard_damaged.renderPart("BarrelsBottom"); + GL11.glShadeModel(GL11.GL_FLAT); + }}); + renderers.put(Item.getItemFromBlock(ModBlocks.machine_silex), new ItemRenderBase() { public void renderInventory() { GL11.glTranslated(0, -2.5, 0); diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java index dddec9e8c..71afb663c 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java @@ -21,6 +21,7 @@ import com.hbm.tileentity.TileEntityMachineBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.INpc; import net.minecraft.entity.boss.EntityDragon; import net.minecraft.entity.boss.EntityDragonPart; @@ -31,6 +32,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; @@ -495,12 +497,15 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple if(e.isDead || !e.isEntityAlive()) return false; + if(!hasThermalVision() && e instanceof EntityLivingBase && ((EntityLivingBase)e).isPotionActive(Potion.invisibility)) + return false; + Vec3 pos = this.getTurretPos(); Vec3 ent = this.getEntityPos(e); Vec3 delta = Vec3.createVectorHelper(ent.xCoord - pos.xCoord, ent.yCoord - pos.yCoord, ent.zCoord - pos.zCoord); double length = delta.lengthVector(); - if(length < this.getDecetorGrace()) + if(length < this.getDecetorGrace() || length > this.getDecetorRange() * 1.1) //the latter statement is only relevant for entities that have already been detected return false; delta = delta.normalize(); @@ -511,18 +516,6 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple if(pitchDeg < -this.getTurretDepression() || pitchDeg > this.getTurretElevation()) return false; - /*for(double i = 0; i < length; i += 0.25D) { - - double x = pos.xCoord + delta.xCoord * i; - double y = pos.yCoord + delta.yCoord * i; - double z = pos.zCoord + delta.zCoord * i; - - worldObj.spawnParticle("reddust", x, y, z, 0, 0, 0); - } - - worldObj.spawnParticle("cloud", pos.xCoord, pos.yCoord, pos.zCoord, 0, 0.1, 0); - worldObj.spawnParticle("flame", ent.xCoord, ent.yCoord, ent.zCoord, 0, 0.1, 0);*/ - return !Library.isObstructed(worldObj, ent.xCoord, ent.yCoord, ent.zCoord, pos.xCoord, pos.yCoord, pos.zCoord); } @@ -661,6 +654,14 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple public double getBarrelLength() { return 1.0D; } + + /** + * Whether the turret can detect invisible targets or not + * @return + */ + public boolean hasThermalVision() { + return true; + } /** * The pivot point of the turret, this position is used for LOS calculation and more diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java index a3bee012f..5f2b5b79a 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java @@ -106,7 +106,7 @@ public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFl for(int i = 1; i < 10; i++) { if(slots[i] != null && slots[i].getItem() == ModItems.ammo_fuel) { - if(this.tank.getTankType() == FluidType.DIESEL && this.tank.getFill() <= this.tank.getMaxFill()) { + if(this.tank.getTankType() == FluidType.DIESEL && this.tank.getFill() + 1000 <= this.tank.getMaxFill()) { this.tank.setFill(this.tank.getFill() + 1000); this.decrStackSize(i, 1); } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java index d4bb19655..3563a2ff9 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java @@ -9,6 +9,7 @@ import com.hbm.util.EntityDamageUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; @@ -36,11 +37,25 @@ public class TileEntityTurretHowardDamaged extends TileEntityTurretHoward { @Override public double getDecetorRange() { - return 64D; + return 16D; + } + + @Override + public double getDecetorGrace() { + return 5D; + } + + @Override + public boolean hasThermalVision() { + return false; } @Override public boolean entityAcceptableTarget(Entity e) { //will fire at any living entity + + if(e instanceof EntityPlayer && ((EntityPlayer)e).capabilities.isCreativeMode) + return false; + return e instanceof EntityLivingBase; } diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_teleporter.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_teleporter.png new file mode 100644 index 000000000..99b2af04c Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/machine/gui_teleporter.png differ