diff --git a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeCraft.java b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeCraft.java index 8119b6b00..e37519a5d 100644 --- a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeCraft.java +++ b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeCraft.java @@ -2,6 +2,7 @@ package com.hbm.entity.mob.siege; import com.hbm.entity.mob.EntityUFOBase; import com.hbm.entity.projectile.EntitySiegeLaser; +import com.hbm.items.ModItems; import net.minecraft.entity.IEntityLivingData; import net.minecraft.entity.SharedMonsterAttributes; @@ -115,6 +116,8 @@ public class EntitySiegeCraft extends EntityUFOBase implements IBossDisplayData for(ItemStack drop : this.getTier().dropItem) { this.entityDropItem(drop.copy(), 0F); } + + this.entityDropItem(new ItemStack(ModItems.source, 50), 0F); } } } diff --git a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java index 58ad3603e..537363990 100644 --- a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java +++ b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java @@ -1,10 +1,24 @@ package com.hbm.entity.mob.siege; +import com.hbm.entity.projectile.EntitySiegeLaser; +import com.hbm.handler.SiegeOrchestrator; +import com.hbm.items.ModItems; + import api.hbm.entity.IRadiationImmune; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSource; +import net.minecraft.util.Vec3; import net.minecraft.world.World; public class EntitySiegeSkeleton extends EntityMob implements IRangedAttackMob, IRadiationImmune { @@ -14,7 +28,141 @@ public class EntitySiegeSkeleton extends EntityMob implements IRangedAttackMob, } @Override - public void attackEntityWithRangedAttack(EntityLivingBase p_82196_1_, float p_82196_2_) { + public boolean attackEntityFrom(DamageSource source, float damage) { + if(this.isEntityInvulnerable()) + return false; + + if(SiegeOrchestrator.isSiegeMob(source.getEntity())) + return false; + + SiegeTier tier = this.getTier(); + + if(tier.fireProof && source.isFireDamage()) { + this.extinguish(); + return false; + } + + if(tier.noFall && source == DamageSource.fall) + return false; + + //noFF can't be harmed by other mobs + if(tier.noFriendlyFire && source instanceof EntityDamageSource && !(((EntityDamageSource) source).getEntity() instanceof EntityPlayer)) + return false; + + damage -= tier.dt; + + if(damage < 0) { + worldObj.playSoundAtEntity(this, "random.break", 5F, 1.0F + rand.nextFloat() * 0.5F); + return false; + } + + damage *= (1F - tier.dr); + + return super.attackEntityFrom(source, damage); + } + + @Override + protected void entityInit() { + super.entityInit(); + this.getDataWatcher().addObject(12, (int) 0); + this.getDataWatcher().addObject(13, (byte) 0); + } + + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(40.0D); + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.23D); + this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(3.0D); + } + + public void setTier(SiegeTier tier) { + this.getDataWatcher().updateObject(12, tier.id); + + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).applyModifier(new AttributeModifier("Tier Speed Mod", tier.speedMod, 1)); + this.getEntityAttribute(SharedMonsterAttributes.attackDamage).applyModifier(new AttributeModifier("Tier Damage Mod", tier.damageMod, 1)); + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(tier.health); + this.setHealth(this.getMaxHealth()); + } + + public SiegeTier getTier() { + SiegeTier tier = SiegeTier.tiers[this.getDataWatcher().getWatchableObjectInt(12)]; + return tier != null ? tier : SiegeTier.CLAY; + } + + @Override + protected void addRandomArmor() { + super.addRandomArmor(); + this.setCurrentItemOrArmor(0, new ItemStack(ModItems.detonator_laser)); + } + + @Override + public void writeEntityToNBT(NBTTagCompound nbt) { + super.writeEntityToNBT(nbt); + nbt.setInteger("siegeTier", this.getTier().id); + } + + @Override + public void readEntityFromNBT(NBTTagCompound nbt) { + super.readEntityFromNBT(nbt); + this.setTier(SiegeTier.tiers[nbt.getInteger("siegeTier")]); + } + + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + this.setTier(SiegeTier.tiers[rand.nextInt(SiegeTier.getLength())]); + this.addRandomArmor(); + return super.onSpawnWithEgg(data); + } + + @Override + public void attackEntityWithRangedAttack(EntityLivingBase target, float f) { + + Vec3 vec = Vec3.createVectorHelper(target.posX - posY, target.posY + target.height * 0.5 - (posY + this.getEyeHeight()), target.posZ -posZ).normalize(); + + SiegeTier tier = this.getTier(); + + EntitySiegeLaser laser = new EntitySiegeLaser(worldObj, this); + laser.setThrowableHeading(vec.xCoord, vec.yCoord, vec.zCoord, 1F, 0.15F); + laser.setColor(0x808080); + laser.setDamage(tier.damageMod); + laser.setExplosive(tier.laserExplosive); + laser.setBreakChance(tier.laserBreak); + if(tier.laserIncendiary) laser.setIncendiary(); + worldObj.spawnEntityInWorld(laser); + this.playSound("hbm:weapon.ballsLaser", 2.0F, 1.0F); + } + + @Override + protected boolean isAIEnabled() { + return true; + } + + @Override + protected String getLivingSound() { + return "hbm:entity.siegeIdle"; + } + + @Override + protected String getHurtSound() { + return "hbm:entity.siegeHurt"; + } + + @Override + protected String getDeathSound() { + return "hbm:entity.siegeDeath"; + } + + @Override + protected void dropFewItems(boolean byPlayer, int fortune) { + + if(byPlayer) { + for(ItemStack drop : this.getTier().dropItem) { + this.entityDropItem(drop.copy(), 0F); + } + + this.entityDropItem(new ItemStack(ModItems.source, 3), 0F); + } } } diff --git a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeUFO.java b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeUFO.java index 3f77d3d53..15cee77f0 100644 --- a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeUFO.java +++ b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeUFO.java @@ -3,6 +3,7 @@ package com.hbm.entity.mob.siege; import com.hbm.entity.mob.EntityUFOBase; import com.hbm.entity.projectile.EntitySiegeLaser; import com.hbm.handler.SiegeOrchestrator; +import com.hbm.items.ModItems; import api.hbm.entity.IRadiationImmune; import net.minecraft.entity.IEntityLivingData; @@ -144,6 +145,8 @@ public class EntitySiegeUFO extends EntityUFOBase implements IRadiationImmune { for(ItemStack drop : this.getTier().dropItem) { this.entityDropItem(drop.copy(), 0F); } + + this.entityDropItem(new ItemStack(ModItems.source, 5), 0F); } } } diff --git a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeZombie.java b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeZombie.java index ac6e58a82..472655fe8 100644 --- a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeZombie.java +++ b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeZombie.java @@ -1,6 +1,7 @@ package com.hbm.entity.mob.siege; import com.hbm.handler.SiegeOrchestrator; +import com.hbm.items.ModItems; import api.hbm.entity.IRadiationImmune; import net.minecraft.entity.IEntityLivingData; @@ -129,6 +130,8 @@ public class EntitySiegeZombie extends EntityMob implements IRadiationImmune { for(ItemStack drop : this.getTier().dropItem) { this.entityDropItem(drop.copy(), 0F); } + + this.entityDropItem(new ItemStack(ModItems.source, 1), 0F); } } diff --git a/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java b/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java index 0e9f33531..551568953 100644 --- a/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java @@ -75,9 +75,9 @@ public class RefineryRecipes { public static void registerCracking() { cracking.put(Fluids.BITUMEN, new Quartet(Fluids.OIL, Fluids.PETROLEUM, bitumen_crack_oil, bitumen_crack_petro)); cracking.put(Fluids.SMEAR, new Quartet(Fluids.NAPHTHA, Fluids.PETROLEUM, smear_crack_napht, smear_crack_petro)); - cracking.put(Fluids.GAS, new Quartet(Fluids.PETROLEUM, Fluids.NONE, gas_crack_petro, 0)); + cracking.put(Fluids.GAS, new Quartet(Fluids.PETROLEUM, Fluids.NONE, gas_crack_petro, 0)); cracking.put(Fluids.DIESEL, new Quartet(Fluids.KEROSENE, Fluids.PETROLEUM, diesel_crack_kero, diesel_crack_petro)); - cracking.put(Fluids.KEROSENE, new Quartet(Fluids.PETROLEUM, Fluids.NONE, kero_crack_petro, 0)); + cracking.put(Fluids.KEROSENE, new Quartet(Fluids.PETROLEUM, Fluids.NONE, kero_crack_petro, 0)); } public static Quartet getFractions(FluidType oil) { diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 4f53e24bf..236f3783f 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -973,6 +973,7 @@ public class ModItems { public static Item coin_worm; public static Item coin_ufo; public static Item coin_siege; + public static Item source; public static Item rod_empty; public static Item rod; @@ -3434,6 +3435,7 @@ public class ModItems { coin_worm = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("coin_worm").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coin_worm"); coin_ufo = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("coin_ufo").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coin_ufo"); coin_siege = new ItemSiegeCoin().setUnlocalizedName("coin_siege").setCreativeTab(MainRegistry.consumableTab); + source = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("source").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":source"); recycled_ground = new Item().setUnlocalizedName("recycled_ground").setCreativeTab(null).setTextureName(RefStrings.MODID + ":recycled_ground"); recycled_rock = new Item().setUnlocalizedName("recycled_rock").setCreativeTab(null).setTextureName(RefStrings.MODID + ":recycled_rock"); @@ -7467,6 +7469,7 @@ public class ModItems { GameRegistry.registerItem(coin_worm, coin_worm.getUnlocalizedName()); GameRegistry.registerItem(coin_ufo, coin_ufo.getUnlocalizedName()); GameRegistry.registerItem(coin_siege, coin_siege.getUnlocalizedName()); + GameRegistry.registerItem(source, source.getUnlocalizedName()); GameRegistry.registerItem(medal_liquidator, medal_liquidator.getUnlocalizedName()); GameRegistry.registerItem(v1, v1.getUnlocalizedName()); GameRegistry.registerItem(protection_charm, protection_charm.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index b1fd6a2e4..964666e89 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -588,6 +588,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntitySiegeZombie.class, new RenderSiegeZombie()); RenderingRegistry.registerEntityRenderingHandler(EntitySiegeUFO.class, new RenderSiegeUFO()); RenderingRegistry.registerEntityRenderingHandler(EntitySiegeCraft.class, new RenderSiegeCraft()); + RenderingRegistry.registerEntityRenderingHandler(EntitySiegeSkeleton.class, new RenderSiegeSkeleton()); RenderingRegistry.registerEntityRenderingHandler(EntityGhost.class, new RenderGhost()); //"particles" RenderingRegistry.registerEntityRenderingHandler(EntitySmokeFX.class, new MultiCloudRenderer(new Item[] { ModItems.smoke1, ModItems.smoke2, ModItems.smoke3, ModItems.smoke4, ModItems.smoke5, ModItems.smoke6, ModItems.smoke7, ModItems.smoke8 })); diff --git a/src/main/java/com/hbm/render/entity/mob/RenderSiegeSkeleton.java b/src/main/java/com/hbm/render/entity/mob/RenderSiegeSkeleton.java new file mode 100644 index 000000000..932e739ec --- /dev/null +++ b/src/main/java/com/hbm/render/entity/mob/RenderSiegeSkeleton.java @@ -0,0 +1,40 @@ +package com.hbm.render.entity.mob; + +import com.hbm.entity.mob.siege.EntitySiegeSkeleton; +import com.hbm.entity.mob.siege.SiegeTier; +import com.hbm.lib.RefStrings; + +import net.minecraft.client.model.ModelSkeleton; +import net.minecraft.client.renderer.entity.RenderBiped; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.ResourceLocation; + +public class RenderSiegeSkeleton extends RenderBiped { + + public RenderSiegeSkeleton() { + super(new ModelSkeleton() { + + @Override + public void setLivingAnimations(EntityLivingBase entity, float f0, float f1, float f2) { + this.aimedBow = true; + } + }, 0.5F); + } + + @Override + protected ResourceLocation getEntityTexture(EntityLiving entity) { + return this.getEntityTexture((EntitySiegeSkeleton) entity); + } + + @Override + protected ResourceLocation getEntityTexture(Entity entity) { + return this.getEntityTexture((EntitySiegeSkeleton) entity); + } + + protected ResourceLocation getEntityTexture(EntitySiegeSkeleton entity) { + SiegeTier tier = entity.getTier(); + return new ResourceLocation(RefStrings.MODID + ":textures/entity/siege_" + tier.name + ".png"); + } +} diff --git a/src/main/resources/assets/hbm/textures/entity/siege_drill.png b/src/main/resources/assets/hbm/textures/entity/siege_drill.png index 46eb909a9..141b6716b 100644 Binary files a/src/main/resources/assets/hbm/textures/entity/siege_drill.png and b/src/main/resources/assets/hbm/textures/entity/siege_drill.png differ diff --git a/src/main/resources/assets/hbm/textures/items/source.png b/src/main/resources/assets/hbm/textures/items/source.png new file mode 100644 index 000000000..ec7b591f5 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/source.png differ diff --git a/src/main/resources/assets/hbm/textures/items/source.png.mcmeta b/src/main/resources/assets/hbm/textures/items/source.png.mcmeta new file mode 100644 index 000000000..02b390a2a --- /dev/null +++ b/src/main/resources/assets/hbm/textures/items/source.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + + } +}