From 5411e3fa3ffc36df606f47d9e21e5c132414708c Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 17 Jun 2023 18:29:57 +0200 Subject: [PATCH] glyphid bombardier, train collisions --- .../java/com/hbm/entity/EntityMappings.java | 3 + .../com/hbm/entity/mob/EntityGlyphid.java | 4 +- .../hbm/entity/mob/EntityGlyphidBehemoth.java | 2 +- .../hbm/entity/mob/EntityGlyphidBlaster.java | 80 ++++++++++++++ .../entity/mob/EntityGlyphidBombardier.java | 101 ++++++++++++++++++ .../hbm/entity/mob/EntityGlyphidBrawler.java | 2 +- .../hbm/entity/mob/EntityGlyphidBrenda.java | 23 +++- .../hbm/entity/projectile/EntityAcidBomb.java | 60 +++++++++++ .../hbm/entity/train/EntityRailCarBase.java | 68 ++++++++++-- src/main/java/com/hbm/main/ClientProxy.java | 4 + .../java/com/hbm/main/ResourceManager.java | 2 + src/main/resources/assets/hbm/lang/de_DE.lang | 4 + src/main/resources/assets/hbm/lang/en_US.lang | 4 + .../hbm/textures/entity/glyphid_blaster.png | Bin 0 -> 2428 bytes .../textures/entity/glyphid_bombardier.png | Bin 0 -> 2507 bytes 15 files changed, 346 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/hbm/entity/mob/EntityGlyphidBlaster.java create mode 100644 src/main/java/com/hbm/entity/mob/EntityGlyphidBombardier.java create mode 100644 src/main/java/com/hbm/entity/projectile/EntityAcidBomb.java create mode 100644 src/main/resources/assets/hbm/textures/entity/glyphid_blaster.png create mode 100644 src/main/resources/assets/hbm/textures/entity/glyphid_bombardier.png diff --git a/src/main/java/com/hbm/entity/EntityMappings.java b/src/main/java/com/hbm/entity/EntityMappings.java index 1f39d3317..c50d13566 100644 --- a/src/main/java/com/hbm/entity/EntityMappings.java +++ b/src/main/java/com/hbm/entity/EntityMappings.java @@ -211,6 +211,7 @@ public class EntityMappings { addEntity(EntitySawblade.class, "entity_stray_saw", 1000); addEntity(EntityChemical.class, "entity_chemthrower_splash", 1000); addEntity(EntityMist.class, "entity_mist", 250, false); + addEntity(EntityAcidBomb.class, "entity_acid_bomb", 1000); addEntity(EntityItemWaste.class, "entity_item_waste", 100); addEntity(EntityItemBuoyant.class, "entity_item_buoyant", 100); @@ -242,6 +243,8 @@ public class EntityMappings { addMob(EntityGlyphidBrawler.class, "entity_glyphid_brawler", 0x273038, 0xD2BB72); addMob(EntityGlyphidBehemoth.class, "entity_glyphid_behemoth", 0x267F00, 0xD2BB72); addMob(EntityGlyphidBrenda.class, "entity_glyphid_brenda", 0x4FC0C0, 0xA0A0A0); + addMob(EntityGlyphidBombardier.class, "entity_glyphid_bombardier", 0xDDD919, 0xDBB79D); + addMob(EntityGlyphidBlaster.class, "entity_glyphid_blaster", 0xD83737, 0xDBB79D); 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 829b4c97a..92fd49785 100644 --- a/src/main/java/com/hbm/entity/mob/EntityGlyphid.java +++ b/src/main/java/com/hbm/entity/mob/EntityGlyphid.java @@ -78,7 +78,7 @@ public class EntityGlyphid extends EntityMob { } amount -= getDamageThreshold(); - if(amount < 0) return false; + if(amount < 0) return true; } amount = this.calculateDamage(amount); @@ -141,7 +141,7 @@ public class EntityGlyphid extends EntityMob { if(!this.worldObj.isRemote) { this.setBesideClimbableBlock(this.isCollidedHorizontally); - if(worldObj.getTotalWorldTime() % 100 == 0) { + if(worldObj.getTotalWorldTime() % 200 == 0) { this.swingItem(); } } diff --git a/src/main/java/com/hbm/entity/mob/EntityGlyphidBehemoth.java b/src/main/java/com/hbm/entity/mob/EntityGlyphidBehemoth.java index f4d058ab2..bf3215059 100644 --- a/src/main/java/com/hbm/entity/mob/EntityGlyphidBehemoth.java +++ b/src/main/java/com/hbm/entity/mob/EntityGlyphidBehemoth.java @@ -33,7 +33,7 @@ public class EntityGlyphidBehemoth extends EntityGlyphid { @Override public int getArmorBreakChance(float amount) { - return amount < 15 ? 10 : amount < 25 ? 5 : amount > 75 ? 1 : 3; + return amount < 20 ? 10 : amount < 100 ? 5 : amount > 200 ? 1 : 3; } @Override diff --git a/src/main/java/com/hbm/entity/mob/EntityGlyphidBlaster.java b/src/main/java/com/hbm/entity/mob/EntityGlyphidBlaster.java new file mode 100644 index 000000000..5e922ab49 --- /dev/null +++ b/src/main/java/com/hbm/entity/mob/EntityGlyphidBlaster.java @@ -0,0 +1,80 @@ +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 EntityGlyphidBlaster extends EntityGlyphidBombardier { + + public EntityGlyphidBlaster(World world) { + super(world); + this.setSize(2F, 1.125F); + } + + @Override + public ResourceLocation getSkin() { + return ResourceManager.glyphid_blaster_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 < 25 ? 5 : amount > 100 ? 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; + } + + @Override + public float getBombDamage() { + return 10F; + } + + @Override + public int getBombCount() { + return 20; + } + + @Override + public float getSpreadMult() { + return 0.75F; + } + + @Override + public double getV0() { + return 1.25D; + } +} diff --git a/src/main/java/com/hbm/entity/mob/EntityGlyphidBombardier.java b/src/main/java/com/hbm/entity/mob/EntityGlyphidBombardier.java new file mode 100644 index 000000000..61750f0ee --- /dev/null +++ b/src/main/java/com/hbm/entity/mob/EntityGlyphidBombardier.java @@ -0,0 +1,101 @@ +package com.hbm.entity.mob; + +import com.hbm.entity.projectile.EntityAcidBomb; +import com.hbm.main.ResourceManager; + +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public class EntityGlyphidBombardier extends EntityGlyphid { + + public EntityGlyphidBombardier(World world) { + super(world); + } + + public ResourceLocation getSkin() { + return ResourceManager.glyphid_bombardier_tex; + } + + protected Entity lastTarget; + protected double lastX; + protected double lastY; + protected double lastZ; + + @Override + public void onUpdate() { + super.onUpdate(); + + if(!this.worldObj.isRemote) { + + Entity e = this.getEntityToAttack(); + + if(this.ticksExisted % 20 == 0 && e != null) { + this.lastTarget = e; + this.lastX = e.posX; + this.lastY = e.posY; + this.lastZ = e.posZ; + } + + if(this.ticksExisted % 20 == 1 && e != null) { + + boolean topAttack = rand.nextBoolean(); + + double velX = e.posX - lastX; + double velY = e.posY - lastY; + double velZ = e.posZ - lastZ; + + if(this.lastTarget != e || Vec3.createVectorHelper(velX, velY, velZ).lengthVector() > 30) { + velX = velY = velZ = 0; + } + + int prediction = topAttack ? 60 : 20; + Vec3 delta = Vec3.createVectorHelper(e.posX - posX + velX * prediction, (e.posY + e.height / 2) - (posY + 1) + velY * prediction, e.posZ - posZ + velZ * prediction); + double len = delta.lengthVector(); + if(len < 3) return; + double targetYaw = -Math.atan2(delta.xCoord, delta.zCoord); + + double x = Math.sqrt(delta.xCoord * delta.xCoord + delta.zCoord * delta.zCoord); + double y = delta.yCoord; + double v0 = getV0(); + double v02 = v0 * v0; + double g = 0.04D; + double upperLower = topAttack ? 1 : -1; + double targetPitch = Math.atan((v02 + Math.sqrt(v02*v02 - g*(g*x*x + 2*y*v02)) * upperLower) / (g*x)); + + if(!Double.isNaN(targetPitch)) { + + Vec3 fireVec = Vec3.createVectorHelper(v0, 0, 0); + fireVec.rotateAroundZ((float) -targetPitch); + fireVec.rotateAroundY((float) -(targetYaw + Math.PI * 0.5)); + + for(int i = 0; i < getBombCount(); i++) { + EntityAcidBomb bomb = new EntityAcidBomb(worldObj, posX, posY + 1, posZ); + bomb.setThrowableHeading(fireVec.xCoord, fireVec.yCoord, fireVec.zCoord, (float) v0, i * getSpreadMult()); + bomb.damage = getBombDamage(); + worldObj.spawnEntityInWorld(bomb); + } + + this.swingItem(); + } + } + } + } + + public float getBombDamage() { + return 1.5F; + } + + public int getBombCount() { + return 10; + } + + public float getSpreadMult() { + return 1F; + } + + public double getV0() { + return 1D; + } +} diff --git a/src/main/java/com/hbm/entity/mob/EntityGlyphidBrawler.java b/src/main/java/com/hbm/entity/mob/EntityGlyphidBrawler.java index 60f18e6ed..749230a42 100644 --- a/src/main/java/com/hbm/entity/mob/EntityGlyphidBrawler.java +++ b/src/main/java/com/hbm/entity/mob/EntityGlyphidBrawler.java @@ -33,7 +33,7 @@ public class EntityGlyphidBrawler extends EntityGlyphid { @Override public int getArmorBreakChance(float amount) { - return amount < 10 ? 10 : amount < 20 ? 5 : amount > 50 ? 1 : 3; + return amount < 10 ? 10 : amount < 25 ? 5 : amount > 100 ? 1 : 3; } @Override diff --git a/src/main/java/com/hbm/entity/mob/EntityGlyphidBrenda.java b/src/main/java/com/hbm/entity/mob/EntityGlyphidBrenda.java index 660d71afd..309ac38fb 100644 --- a/src/main/java/com/hbm/entity/mob/EntityGlyphidBrenda.java +++ b/src/main/java/com/hbm/entity/mob/EntityGlyphidBrenda.java @@ -3,6 +3,8 @@ package com.hbm.entity.mob; import com.hbm.main.ResourceManager; import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; @@ -11,6 +13,7 @@ public class EntityGlyphidBrenda extends EntityGlyphid { public EntityGlyphidBrenda(World world) { super(world); this.setSize(2.5F, 2F); + this.isImmuneToFire = true; } @Override @@ -33,7 +36,7 @@ public class EntityGlyphidBrenda extends EntityGlyphid { @Override public int getArmorBreakChance(float amount) { - return amount < 25 ? 100 : amount > 500 ? 1 : 10; + return amount < 25 ? 100 : amount > 1000 ? 1 : 10; } @Override @@ -57,4 +60,22 @@ public class EntityGlyphidBrenda extends EntityGlyphid { public float getDamageThreshold() { return 10F; } + + @Override + public void setDead() { + if(!this.worldObj.isRemote && this.getHealth() <= 0.0F) { + for(int i = 0; i < 12; ++i) { + EntityGlyphid glyphid = new EntityGlyphid(worldObj); + glyphid.setLocationAndAngles(this.posX, this.posY + 0.5D, this.posZ, rand.nextFloat() * 360.0F, 0.0F); + glyphid.addPotionEffect(new PotionEffect(Potion.resistance.id, 5 * 60 * 20, 2)); + glyphid.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 5 * 60 * 20, 0)); + glyphid.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 5 * 60 * 20, 4)); + glyphid.addPotionEffect(new PotionEffect(Potion.field_76444_x.id, 5 * 60 * 20, 19)); + this.worldObj.spawnEntityInWorld(glyphid); + glyphid.moveEntity(rand.nextGaussian(), 0, rand.nextGaussian()); + } + } + + super.setDead(); + } } diff --git a/src/main/java/com/hbm/entity/projectile/EntityAcidBomb.java b/src/main/java/com/hbm/entity/projectile/EntityAcidBomb.java new file mode 100644 index 000000000..8a688df2d --- /dev/null +++ b/src/main/java/com/hbm/entity/projectile/EntityAcidBomb.java @@ -0,0 +1,60 @@ +package com.hbm.entity.projectile; + +import com.hbm.entity.mob.EntityGlyphid; +import com.hbm.lib.ModDamageSource; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class EntityAcidBomb extends EntityThrowableInterp { + + public float damage = 1.5F; + + public EntityAcidBomb(World world) { + super(world); + } + + public EntityAcidBomb(World world, double x, double y, double z) { + super(world, x, y, z); + } + + @Override + protected void onImpact(MovingObjectPosition mop) { + + if(worldObj.isRemote) return; + + if(mop.typeOfHit == mop.typeOfHit.ENTITY) { + + if(!(mop.entityHit instanceof EntityGlyphid)) { + mop.entityHit.attackEntityFrom(ModDamageSource.acid, damage); + this.setDead(); + } + } + + if(mop.typeOfHit == mop.typeOfHit.BLOCK) + this.setDead(); + } + + @Override + public double getGravityVelocity() { + return 0.04D; + } + + @Override + protected float getAirDrag() { + return 1.0F; + } + + @Override + public void writeEntityToNBT(NBTTagCompound nbt) { + super.writeEntityToNBT(nbt); + nbt.setFloat("damage", damage); + } + + @Override + public void readEntityFromNBT(NBTTagCompound nbt) { + super.readEntityFromNBT(nbt); + this.damage = nbt.getFloat("damage"); + } +} diff --git a/src/main/java/com/hbm/entity/train/EntityRailCarBase.java b/src/main/java/com/hbm/entity/train/EntityRailCarBase.java index afd7b25ab..37f77f79f 100644 --- a/src/main/java/com/hbm/entity/train/EntityRailCarBase.java +++ b/src/main/java/com/hbm/entity/train/EntityRailCarBase.java @@ -132,7 +132,7 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { data.setString("type", "debug"); data.setInteger("color", 0x0000ff); data.setFloat("scale", 1.5F); - data.setString("text", id); + data.setString("text", id + " (#" + train.ltuIndex + ")"); PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, train.posX, train.posY + 1, train.posZ), new TargetPoint(this.dimension, train.posX, train.posY + 1, train.posZ, 50)); } } @@ -180,9 +180,6 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { } } else { - - PacketDispatcher.wrapper.sendToAllAround(new PlayerInformPacket(ChatBuilder.start("" + this.rotationPitch).color(EnumChatFormatting.RED).flush(), 1), - new TargetPoint(dimension, posX, posY + 1, posZ, 50)); if(this.coupledFront != null && this.coupledFront.isDead) { this.coupledFront = null; @@ -319,7 +316,7 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { for(LogicalTrainUnit ltu : ltus) { - double speed = ltu.getTotalSpeed(); + double speed = ltu.getTotalSpeed() + ltu.pushForce; if(Math.abs(speed) < 0.001) speed = 0; @@ -346,6 +343,10 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { } else { ltu.setRenderPos(train, frontPos, backPos); } + + //ltu.pushForce *= 0.95; + ltu.pushForce = 0; + ltu.collideTrain(speed); continue; } @@ -355,6 +356,12 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { } else { ltu.moveTrainByApproach(speed); } + + if(ltu.trains.length != 1) { + //ltu.pushForce *= 0.95; + ltu.pushForce = 0; + ltu.collideTrain(speed); + } } } @@ -540,6 +547,7 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { public static class LogicalTrainUnit { + protected double pushForce; protected EntityRailCarBase trains[]; /** Assumes that the train is an endpoint, i.e. that only one coupling is in use */ @@ -742,7 +750,6 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { /** Determines the "front" wagon based on the movement and moves it, then moves all other wagons towards that */ public void moveTrainByApproach(double speed) { boolean forward = speed < 0; - double origSpeed = speed; speed = Math.abs(speed); EntityRailCarBase previous = null; @@ -798,6 +805,55 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay { current.motionY = current.rotationPitch / 360D; current.velocityChanged = true; } + + public void collideTrain(double speed) { + EntityRailCarBase collidingTrain = speed > 0 ? trains[0] : trains[trains.length - 1]; + List intersect = collidingTrain.worldObj.getEntitiesWithinAABB(EntityRailCarBase.class, collidingTrain.boundingBox.expand(1, 1, 1)); + EntityRailCarBase collidesWith = null; + + for(EntityRailCarBase train : intersect) { + if(train.ltu != null && train.ltu != this) { + collidesWith = train; + break; + } + } + + if(collidesWith == null) return; + + Vec3 delta = Vec3.createVectorHelper(collidingTrain.posX - collidesWith.posX, 0, collidingTrain.posZ - collidesWith.posZ); + double totalSpan = collidingTrain.getCollisionSpan() + collidesWith.getCollisionSpan(); + double diff = delta.lengthVector(); + if(diff > totalSpan) return; + double push = (totalSpan - diff); + + //PacketDispatcher.wrapper.sendToAllAround(new PlayerInformPacket(ChatBuilder.start("" + collidesWith.ltuIndex + " " + collidingTrain.ltuIndex).color(EnumChatFormatting.RED).flush(), 1), + // new TargetPoint(collidingTrain.dimension, collidingTrain.posX, collidingTrain.posY + 1, collidingTrain.posZ, 50)); + + EntityRailCarBase[][] whatever = new EntityRailCarBase[][] {{collidingTrain, collidesWith}, {collidesWith, collidingTrain}}; + for(EntityRailCarBase[] array : whatever) { + LogicalTrainUnit ltu = array[0].ltu; + if(ltu.trains.length == 1) { + Vec3 rot = Vec3.createVectorHelper(0, 0, array[0].getCollisionSpan()); + rot.rotateAroundX((float) (array[0].rotationPitch * Math.PI / 180D)); + rot.rotateAroundY((float) (-array[0].rotationYaw * Math.PI / 180)); + Vec3 forward = Vec3.createVectorHelper(array[1].posX - (array[0].posX + rot.xCoord), 0, array[1].posZ - (array[0].posZ + rot.zCoord)); + Vec3 backward = Vec3.createVectorHelper(array[1].posX - (array[0].posX - rot.xCoord), 0, array[1].posZ - (array[0].posZ - rot.zCoord)); + + if(forward.lengthVector() > backward.lengthVector()) { + ltu.pushForce += push; + } else { + ltu.pushForce -= push; + } + } else { + + if(array[0].ltuIndex < ltu.trains.length / 2) { + ltu.pushForce -= push; + } else { + ltu.pushForce += push; + } + } + } + } } @Override diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index a9f2b5ca8..f171c9f71 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -19,6 +19,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; +import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -587,6 +588,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntitySawblade.class, new RenderSawblade()); RenderingRegistry.registerEntityRenderingHandler(EntityChemical.class, new RenderChemical()); RenderingRegistry.registerEntityRenderingHandler(EntityMist.class, new RenderMist()); + RenderingRegistry.registerEntityRenderingHandler(EntityAcidBomb.class, new RenderSnowball(Items.slime_ball)); //grenades RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeGeneric.class, new RenderSnowball(ModItems.grenade_generic)); RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeStrong.class, new RenderSnowball(ModItems.grenade_strong)); @@ -725,6 +727,8 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntityGlyphidBrawler.class, new RenderGlyphid()); RenderingRegistry.registerEntityRenderingHandler(EntityGlyphidBehemoth.class, new RenderGlyphid()); RenderingRegistry.registerEntityRenderingHandler(EntityGlyphidBrenda.class, new RenderGlyphid()); + RenderingRegistry.registerEntityRenderingHandler(EntityGlyphidBombardier.class, new RenderGlyphid()); + RenderingRegistry.registerEntityRenderingHandler(EntityGlyphidBlaster.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 1db20b3a6..9f3b71fdb 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -663,6 +663,8 @@ public class ResourceManager { 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"); + public static final ResourceLocation glyphid_bombardier_tex = new ResourceLocation(RefStrings.MODID, "textures/entity/glyphid_bombardier.png"); + public static final ResourceLocation glyphid_blaster_tex = new ResourceLocation(RefStrings.MODID, "textures/entity/glyphid_blaster.png"); //ZIRNOX public static final ResourceLocation zirnox_tex = new ResourceLocation(RefStrings.MODID, "textures/models/zirnox.png"); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index a92874167..6ea95cce7 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -505,6 +505,10 @@ digamma.title=DIGAMMA-DIAGNOSEGERÄT entity.entity_cyber_crab.name=Cyber-Krabbe entity.entity_elder_one.name=Quackos der Älteste entity.entity_fucc_a_ducc.name=Ente +entity.entity_glyphid.name=Glyphid +entity.entity_glyphid_behemoth.name=Glyphid-Behemoth +entity.entity_glyphid_brawler.name=Glyphid-Schläger +entity.entity_glyphid_brenda.name=Brenda entity.entity_ntm_fbi.name=FBI Agent entity.entity_ntm_radiation_blaze.name=Kernschmelze-Elementar entity.hbm.entity_ntm_ufo.name=Marsianisches Invasionsschiff diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index a7feb2556..cec6b2cbc 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -951,6 +951,10 @@ digamma.title=DIGAMMA DIAGNOSTIC entity.entity_cyber_crab.name=Cyber Crab entity.entity_elder_one.name=Quackos The Elder One entity.entity_fucc_a_ducc.name=Duck +entity.entity_glyphid.name=Glyphid +entity.entity_glyphid_behemoth.name=Glyphid Behemoth +entity.entity_glyphid_brawler.name=Glyphid Brawler +entity.entity_glyphid_brenda.name=Brenda entity.entity_ntm_fbi.name=FBI Agent entity.entity_ntm_radiation_blaze.name=Meltdown Elemental entity.hbm.entity_ntm_ufo.name=Martian Invasion Ship diff --git a/src/main/resources/assets/hbm/textures/entity/glyphid_blaster.png b/src/main/resources/assets/hbm/textures/entity/glyphid_blaster.png new file mode 100644 index 0000000000000000000000000000000000000000..f99440f7b127789cd9a8ba4341b7f2291880616a GIT binary patch literal 2428 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