From 0287066b81b0f7bd58642c85c730fa3184e7b6e4 Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 26 Jan 2022 23:36:06 +0100 Subject: [PATCH] siege skeleton --- .../entity/mob/siege/EntitySiegeCraft.java | 3 + .../entity/mob/siege/EntitySiegeSkeleton.java | 150 +++++++++++++++++- .../hbm/entity/mob/siege/EntitySiegeUFO.java | 3 + .../entity/mob/siege/EntitySiegeZombie.java | 3 + .../inventory/recipes/RefineryRecipes.java | 4 +- src/main/java/com/hbm/items/ModItems.java | 3 + src/main/java/com/hbm/main/ClientProxy.java | 1 + .../entity/mob/RenderSiegeSkeleton.java | 40 +++++ .../hbm/textures/entity/siege_drill.png | Bin 679 -> 681 bytes .../assets/hbm/textures/items/source.png | Bin 0 -> 287 bytes .../hbm/textures/items/source.png.mcmeta | 5 + 11 files changed, 209 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/hbm/render/entity/mob/RenderSiegeSkeleton.java create mode 100644 src/main/resources/assets/hbm/textures/items/source.png create mode 100644 src/main/resources/assets/hbm/textures/items/source.png.mcmeta 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 46eb909a973c83fefe395ae36b131f1aa86e9565..141b6716b3a8e17c3edc53cd2165b758527046b1 100644 GIT binary patch delta 640 zcmV-`0)PFd1*rv)G=E@8L_t(|ob6iCZNnfCeOTTg3*;;6e?PiI7O1*HRdoemg{sO9 z{jah^H>k2hXP_Smc1#>&I46fOPl|+rGj|U-E}VfgNWd7+PXY!Rp|*t(!z5rdAOHYc z*_GRCF_m)nKm~*uZ;{JNs3?ZyKtino1>F963N08>`@49sRex@c8EoIX&%8dP;v75$ z6au&v;D#_nPcF8yTjAUDZu^^H^#ODO0D(_)e1|p021nMx`Pvz=_$^Q?r^0=9;cK58 zswSq707W(xR6v{|IT#O|`G63Eaxot0IR%tQz-{O5Po0d#p8|ydZUwke2;f$L8-)OF z1-LPL0_1Bqj(;(~-DkJm#q0^7A`1ep&9ZOyflLUXAR7YQ*&Z|dKt=?_A}a#ytdE_2 zATt7DKu?V^L%loCAD4A{cU^w*E1(d-tpGO)0o)33qY%KY05>{!>SHs-;v|<^f8cl@ zARfl&3YtJDBuyTgQol!k5t$%q2vCn5Gq* zjFbPs|bpVzXHRL&=ViM2L%75HQBTSQ3&aAjGg35|Ymh z_3ing_IaT!P#-2=0ZJ*OlrjKJOnGX3d`Nx^+!~7~;L-;~ob%5(-YI-Ri}iZl)Kkh9 zzCG`@hl0EUtnqGnDue_%F#%D#0uqkx^$x;!#KlH~YYWlH_GXbrnX aDEtqqi0Je0_Ln{Y0000O z`ciIZ)lkYk0tFCee1%jzq2L&j0tuxF6ma|7A+!)g>F?sf+JCq;)Y-mspJii4AvyRM zkO`1hKpKjekzB3yWrc6eyY25vGzRbq02IFH_>Rh$>TpyAIA6OUX1@eV<5alME`04% zLs6gUBfyaz3ko34kQ9su&SF4_L8%xIwCn=LBjC16_vcQ=?011ofV2YA$OK3$AdO6b zv;xvdiU7R<(SIJKH~s(NCPhFDk|DsI^}b$^3<0r7f`D7I-Ny@(Ab^9(6X2U=U;E?< z;DVnT6NdS4o^&e8AgzEjG6B*GNFx&Z+SS=V#Q6?|*n zZ4U+811jU)@=yplR>_5#!Z+@i_rmfm`JoIMC9@9 z;Il;)eUcXoF4wRA%J%>O002ovPDHLkV1m7mcx3