From 9b2826465c8880f24876cf705b5c939e5e9f2706 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 16 Jun 2023 13:53:42 +0200 Subject: [PATCH] brenda is coming --- .../java/com/hbm/entity/EntityMappings.java | 3 + .../com/hbm/entity/mob/EntityGlyphid.java | 89 +++++++++++++----- .../hbm/entity/mob/EntityGlyphidBehemoth.java | 60 ++++++++++++ .../hbm/entity/mob/EntityGlyphidBrawler.java | 60 ++++++++++++ .../hbm/entity/mob/EntityGlyphidBrenda.java | 60 ++++++++++++ src/main/java/com/hbm/main/ClientProxy.java | 3 + .../java/com/hbm/main/ResourceManager.java | 3 + .../hbm/render/entity/mob/RenderGlyphid.java | 9 +- .../assets/hbm/textures/armor/grenade_nan.png | Bin 203 -> 0 bytes .../hbm/textures/entity/glyphid_behemoth.png | Bin 0 -> 2508 bytes .../hbm/textures/entity/glyphid_brawler.png | Bin 0 -> 2474 bytes .../hbm/textures/entity/glyphid_brenda.png | Bin 0 -> 2270 bytes 12 files changed, 259 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/hbm/entity/mob/EntityGlyphidBehemoth.java create mode 100644 src/main/java/com/hbm/entity/mob/EntityGlyphidBrawler.java create mode 100644 src/main/java/com/hbm/entity/mob/EntityGlyphidBrenda.java delete mode 100644 src/main/resources/assets/hbm/textures/armor/grenade_nan.png create mode 100644 src/main/resources/assets/hbm/textures/entity/glyphid_behemoth.png create mode 100644 src/main/resources/assets/hbm/textures/entity/glyphid_brawler.png create mode 100644 src/main/resources/assets/hbm/textures/entity/glyphid_brenda.png diff --git a/src/main/java/com/hbm/entity/EntityMappings.java b/src/main/java/com/hbm/entity/EntityMappings.java index 04499718a..1f39d3317 100644 --- a/src/main/java/com/hbm/entity/EntityMappings.java +++ b/src/main/java/com/hbm/entity/EntityMappings.java @@ -239,6 +239,9 @@ public class EntityMappings { addMob(EntitySiegeUFO.class, "entity_meme_ufo", 0x303030, 0x800000); addMob(EntitySiegeCraft.class, "entity_meme_craft", 0x303030, 0x808000); addMob(EntityGlyphid.class, "entity_glyphid", 0x724A21, 0xD2BB72); + addMob(EntityGlyphidBrawler.class, "entity_glyphid_brawler", 0x273038, 0xD2BB72); + addMob(EntityGlyphidBehemoth.class, "entity_glyphid_behemoth", 0x267F00, 0xD2BB72); + addMob(EntityGlyphidBrenda.class, "entity_glyphid_brenda", 0x4FC0C0, 0xA0A0A0); addSpawn(EntityCreeperPhosgene.class, 5, 1, 1, EnumCreatureType.monster, BiomeGenBase.getBiomeGenArray()); addSpawn(EntityCreeperVolatile.class, 10, 1, 1, EnumCreatureType.monster, BiomeGenBase.getBiomeGenArray()); diff --git a/src/main/java/com/hbm/entity/mob/EntityGlyphid.java b/src/main/java/com/hbm/entity/mob/EntityGlyphid.java index 3fba43067..829b4c97a 100644 --- a/src/main/java/com/hbm/entity/mob/EntityGlyphid.java +++ b/src/main/java/com/hbm/entity/mob/EntityGlyphid.java @@ -4,6 +4,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import com.hbm.main.ResourceManager; + import net.minecraft.entity.Entity; import net.minecraft.entity.EnumCreatureAttribute; import net.minecraft.entity.SharedMonsterAttributes; @@ -18,6 +20,7 @@ import net.minecraft.entity.ai.EntityAIWatchClosest; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; public class EntityGlyphid extends EntityMob { @@ -32,7 +35,15 @@ public class EntityGlyphid extends EntityMob { this.tasks.addTask(8, new EntityAILookIdle(this)); this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true)); this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true)); - this.setSize(2F, 1F); + this.setSize(1.75F, 1F); + } + + public ResourceLocation getSkin() { + return ResourceManager.glyphid_tex; + } + + public double getScale() { + return 1.0D; } @Override @@ -45,8 +56,9 @@ public class EntityGlyphid extends EntityMob { @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(32D); + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(30D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(1D); + this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(5D); } @Override @@ -56,39 +68,64 @@ public class EntityGlyphid extends EntityMob { byte armor = this.dataWatcher.getWatchableObjectByte(17); if(armor != 0) { //if at least one bit of armor is present - int chance = amount < 10 ? 5 : amount < 20 ? 3 : 2; //chances of armor being broken off + + if(amount < getDamageThreshold()) return false; + + int chance = getArmorBreakChance(amount); //chances of armor being broken off if(this.rand.nextInt(chance) == 0 && amount > 1) { - List indices = Arrays.asList(0, 1, 2, 3, 4); - Collections.shuffle(indices); - - for(Integer i : indices) { - byte bit = (byte) (1 << i); - if((armor & bit) > 0) { //if this bit is present... - armor &= ~bit; //...remove it - armor = (byte) (armor & 0b11111); - this.dataWatcher.updateObject(17, armor); - amount = 0; - break; - } - } + breakOffArmor(); + amount = 0; } - amount -= 0.5; + amount -= getDamageThreshold(); + if(amount < 0) return false; } - int divisor = 1; - - for(int i = 0; i < 5; i++) { - if((armor & (1 << i)) > 0) { - divisor++; - } - } - - amount /= divisor; + amount = this.calculateDamage(amount); } return super.attackEntityFrom(source, amount); } + + public int getArmorBreakChance(float amount) { + return amount < 10 ? 5 : amount < 20 ? 3 : 2; + } + + public float calculateDamage(float amount) { + + byte armor = this.dataWatcher.getWatchableObjectByte(17); + int divisor = 1; + + for(int i = 0; i < 5; i++) { + if((armor & (1 << i)) > 0) { + divisor++; + } + } + + amount /= divisor; + + return amount; + } + + public float getDamageThreshold() { + return 0.5F; + } + + public void breakOffArmor() { + byte armor = this.dataWatcher.getWatchableObjectByte(17); + List indices = Arrays.asList(0, 1, 2, 3, 4); + Collections.shuffle(indices); + + for(Integer i : indices) { + byte bit = (byte) (1 << i); + if((armor & bit) > 0) { + armor &= ~bit; + armor = (byte) (armor & 0b11111); + this.dataWatcher.updateObject(17, armor); + break; + } + } + } @Override public boolean attackEntityAsMob(Entity victum) { diff --git a/src/main/java/com/hbm/entity/mob/EntityGlyphidBehemoth.java b/src/main/java/com/hbm/entity/mob/EntityGlyphidBehemoth.java new file mode 100644 index 000000000..f4d058ab2 --- /dev/null +++ b/src/main/java/com/hbm/entity/mob/EntityGlyphidBehemoth.java @@ -0,0 +1,60 @@ +package com.hbm.entity.mob; + +import com.hbm.main.ResourceManager; + +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +public class EntityGlyphidBehemoth extends EntityGlyphid { + + public EntityGlyphidBehemoth(World world) { + super(world); + this.setSize(2.25F, 1.25F); + } + + @Override + public ResourceLocation getSkin() { + return ResourceManager.glyphid_behemoth_tex; + } + + @Override + public double getScale() { + return 1.5D; + } + + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(100D); + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.8D); + this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(25D); + } + + @Override + public int getArmorBreakChance(float amount) { + return amount < 15 ? 10 : amount < 25 ? 5 : amount > 75 ? 1 : 3; + } + + @Override + public float calculateDamage(float amount) { + + byte armor = this.dataWatcher.getWatchableObjectByte(17); + int divisor = 1; + + for(int i = 0; i < 5; i++) { + if((armor & (1 << i)) > 0) { + divisor += 3; + } + } + + amount /= divisor; + + return amount; + } + + @Override + public float getDamageThreshold() { + return 2.5F; + } +} diff --git a/src/main/java/com/hbm/entity/mob/EntityGlyphidBrawler.java b/src/main/java/com/hbm/entity/mob/EntityGlyphidBrawler.java new file mode 100644 index 000000000..60f18e6ed --- /dev/null +++ b/src/main/java/com/hbm/entity/mob/EntityGlyphidBrawler.java @@ -0,0 +1,60 @@ +package com.hbm.entity.mob; + +import com.hbm.main.ResourceManager; + +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +public class EntityGlyphidBrawler extends EntityGlyphid { + + public EntityGlyphidBrawler(World world) { + super(world); + this.setSize(2F, 1.125F); + } + + @Override + public ResourceLocation getSkin() { + return ResourceManager.glyphid_brawler_tex; + } + + @Override + public double getScale() { + return 1.25D; + } + + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(50D); + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(1D); + this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(10D); + } + + @Override + public int getArmorBreakChance(float amount) { + return amount < 10 ? 10 : amount < 20 ? 5 : amount > 50 ? 1 : 3; + } + + @Override + public float calculateDamage(float amount) { + + byte armor = this.dataWatcher.getWatchableObjectByte(17); + int divisor = 1; + + for(int i = 0; i < 5; i++) { + if((armor & (1 << i)) > 0) { + divisor += 2; + } + } + + amount /= divisor; + + return amount; + } + + @Override + public float getDamageThreshold() { + return 1.0F; + } +} diff --git a/src/main/java/com/hbm/entity/mob/EntityGlyphidBrenda.java b/src/main/java/com/hbm/entity/mob/EntityGlyphidBrenda.java new file mode 100644 index 000000000..660d71afd --- /dev/null +++ b/src/main/java/com/hbm/entity/mob/EntityGlyphidBrenda.java @@ -0,0 +1,60 @@ +package com.hbm.entity.mob; + +import com.hbm.main.ResourceManager; + +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +public class EntityGlyphidBrenda extends EntityGlyphid { + + public EntityGlyphidBrenda(World world) { + super(world); + this.setSize(2.5F, 2F); + } + + @Override + public ResourceLocation getSkin() { + return ResourceManager.glyphid_brenda_tex; + } + + @Override + public double getScale() { + return 2D; + } + + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(250D); + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.8D); + this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(50D); + } + + @Override + public int getArmorBreakChance(float amount) { + return amount < 25 ? 100 : amount > 500 ? 1 : 10; + } + + @Override + public float calculateDamage(float amount) { + + byte armor = this.dataWatcher.getWatchableObjectByte(17); + int divisor = 1; + + for(int i = 0; i < 5; i++) { + if((armor & (1 << i)) > 0) { + divisor += 5; + } + } + + amount /= divisor; + + return amount; + } + + @Override + public float getDamageThreshold() { + return 10F; + } +} diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index ab05362d0..a9f2b5ca8 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -722,6 +722,9 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntitySiegeTunneler.class, new RenderSiegeTunneler()); RenderingRegistry.registerEntityRenderingHandler(EntityGhost.class, new RenderGhost()); RenderingRegistry.registerEntityRenderingHandler(EntityGlyphid.class, new RenderGlyphid()); + RenderingRegistry.registerEntityRenderingHandler(EntityGlyphidBrawler.class, new RenderGlyphid()); + RenderingRegistry.registerEntityRenderingHandler(EntityGlyphidBehemoth.class, new RenderGlyphid()); + RenderingRegistry.registerEntityRenderingHandler(EntityGlyphidBrenda.class, new RenderGlyphid()); //"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 })); RenderingRegistry.registerEntityRenderingHandler(EntityBSmokeFX.class, new MultiCloudRenderer(new Item[] { ModItems.b_smoke1, ModItems.b_smoke2, ModItems.b_smoke3, ModItems.b_smoke4, ModItems.b_smoke5, ModItems.b_smoke6, ModItems.b_smoke7, ModItems.b_smoke8 })); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index f889c98d1..1db20b3a6 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -660,6 +660,9 @@ public class ResourceManager { public static final ResourceLocation spider_tex = new ResourceLocation(RefStrings.MODID, "textures/entity/blockspider.png"); public static final ResourceLocation ufo_tex = new ResourceLocation(RefStrings.MODID, "textures/entity/ufo.png"); public static final ResourceLocation glyphid_tex = new ResourceLocation(RefStrings.MODID, "textures/entity/glyphid.png"); + public static final ResourceLocation glyphid_brawler_tex = new ResourceLocation(RefStrings.MODID, "textures/entity/glyphid_brawler.png"); + public static final ResourceLocation glyphid_behemoth_tex = new ResourceLocation(RefStrings.MODID, "textures/entity/glyphid_behemoth.png"); + public static final ResourceLocation glyphid_brenda_tex = new ResourceLocation(RefStrings.MODID, "textures/entity/glyphid_brenda.png"); //ZIRNOX public static final ResourceLocation zirnox_tex = new ResourceLocation(RefStrings.MODID, "textures/models/zirnox.png"); diff --git a/src/main/java/com/hbm/render/entity/mob/RenderGlyphid.java b/src/main/java/com/hbm/render/entity/mob/RenderGlyphid.java index 30915068e..c64649c77 100644 --- a/src/main/java/com/hbm/render/entity/mob/RenderGlyphid.java +++ b/src/main/java/com/hbm/render/entity/mob/RenderGlyphid.java @@ -2,6 +2,7 @@ package com.hbm.render.entity.mob; import org.lwjgl.opengl.GL11; +import com.hbm.entity.mob.EntityGlyphid; import com.hbm.main.ResourceManager; import net.minecraft.client.model.ModelBase; @@ -19,8 +20,9 @@ public class RenderGlyphid extends RenderLiving { } @Override - protected ResourceLocation getEntityTexture(Entity p_110775_1_) { - return ResourceManager.glyphid_tex; + protected ResourceLocation getEntityTexture(Entity entity) { + EntityGlyphid glyphid = (EntityGlyphid) entity; + return glyphid.getSkin(); } public static class ModelGlyphid extends ModelBase { @@ -41,6 +43,9 @@ public class RenderGlyphid extends RenderLiving { GL11.glEnable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_CULL_FACE); + double s = ((EntityGlyphid) entity).getScale(); + GL11.glScaled(s, s, s); + EntityLivingBase living = (EntityLivingBase) entity; byte armor = living.getDataWatcher().getWatchableObjectByte(17); //MainRegistry.proxy.displayTooltip("" + limbSwingAmount, 999); diff --git a/src/main/resources/assets/hbm/textures/armor/grenade_nan.png b/src/main/resources/assets/hbm/textures/armor/grenade_nan.png deleted file mode 100644 index b07dad82cb5fca8af25e193e3255f2af16ca356f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf`gu!Qs&#>`VeoYIb6Mw<&;$S)yGOnN diff --git a/src/main/resources/assets/hbm/textures/entity/glyphid_behemoth.png b/src/main/resources/assets/hbm/textures/entity/glyphid_behemoth.png new file mode 100644 index 0000000000000000000000000000000000000000..b59f6e2510b3fb89d1d635fa8acaa6edab768786 GIT binary patch literal 2508 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/entity/glyphid_brenda.png b/src/main/resources/assets/hbm/textures/entity/glyphid_brenda.png new file mode 100644 index 0000000000000000000000000000000000000000..b831b1a1fcd39d9308aa317d05669a96c812f98b GIT binary patch literal 2270 zcmV<42qE{0P)@-)o^U>T2C4@khDbuAz7K9o;)p19<3AFcjrp4Uetc^_<2 z1&}=a*F1eNcfeAF*S!YDzO0=c7>$#DmAJA$g&2dpMk zGNw^sDH2OmnDl|xLvf~gF#DJoW>!xXDp$d|a6UJa$ z`w+;AXY24Rh|7ASNTCWL>{cgBL6(nMJ0I_t#$h3ZQQPbL-ds5LAtz_@MMQ2{KEyMN zzV9dh?0jSOWBGi)1V~=JT{sj=l$DDLXAogMoXsM(U@$peK3%xOB+4L(lfVhdNz|7XzI-Co|{iwINyU;UtxtK zsYzCnE-!wX=^Siuu=tPnwKJv4Lj|PjEy?%%bgaK;=O?r4?-xII(Wz&ANm{9u(J0g+{sgG4im#sK69?iqrGka(VI78{#hoV&|+d z#Z#cwah`zdP+$z$A5;^QWRZs^>|xV&UDb7+h+Mtl;uXzX`SdK2fiYKI*ORw?h_w_L zGhxl!`LAvKr$n8dpUCHT-$X=qO4B@5XDl9^1k&7zl)2`ZvYNiOhyQCSkpHbZim$I< zR1f-o6p@MfvaeG${`LEB(O`N)pvHN1U7N278SKC<72tPybv=LYi#v&>3dC~gw;5=v zOrB-RF-!=w$cU+|q`c>=mMYXD5C3DZVm~A=<^M#8K;3oZcA}*G$GZdPDFw2H@b%x$GrvZAl8;Tw@q4RV4(hs=f3`s? z0{539)8nMrz;d3;R>Ufg?JD-cCYKEDP-%Hffu0h*!L@B$;c*roeKBEp{3db)1;$i% z3qZ_)D|r`z zDE+Q_O=NwUfE#WmlaLIzgNV5O5??>Kn zi`bj+*b1sEp<=0H_so?|l}$5d=0PUpW+6*~9(i0Q)y_>ukR5?VsP4afJL2jWJ2~-8 z81uOfE;1S?K7R9I^u7krbSfUqQCF%A-}_^0!X%ib(((g z?B1@7r#$^JdDg4KT=G&tbJc6k$8wy%1|}vfA~Vw!nX1tu&nl}yHkz>ark^J*m%IS! z)K0=Gy9PEQ^LL{Rk0_BT`M7{EiChQ&73wPVKLsmD4q}sJm0bgq!-UI=pV9ZCXs&1H zC$m-7+UxSfcwYio_fvag%Pe1sR6*wEd?*x|u!bh+6PXA$LnPSyS9te51o~I#O3U{T z0e2M^nfpFog}ra;tc4`?kxnT}0_i2EEh)_6Kn0%R#lE4-CGXh4;CfBW77_My3U=yN z$YGiPp%9F8aLVBQeRdl$RQk??KRmQ{BNk$@oXFu!_@*H1ILpgp@~(5&5IaN_@lUDI zFJirY{bJUUzKFkz@J?xtfqjGPCCDPsBdc`lbsg9zxL$(d16At~;ii!1LE}Piue>Cz z$yOi+xi=*=DS;JS2fJtyvfm3UylvQj0c^6bM5?7`oKzqxF7{QzF-Sy{tY{A$_Nc#4 sAF@o?+p~Jt*MVT%%Q>YE^uHAU0y`?k^