From af7600b47ffb0fd7e435372a08988c0eccced008 Mon Sep 17 00:00:00 2001 From: Andromander Date: Sat, 10 Mar 2018 11:30:44 +1000 Subject: [PATCH] Malachite Guard. WIP --- .../androsa/gaiadimension/GaiaDimension.java | 2 + .../gaiadimension/GaiaEntityNames.java | 1 + .../entity/boss/GDMalachiteGuard.java | 51 +++++++ .../model/ModelMalachiteGuard.java | 142 ++++++++++++++++++ .../gaiadimension/proxy/ClientProxy.java | 4 + .../renderer/EntityRenderMalachiteGuard.java | 21 +++ .../textures/model/malachiteguard.png | Bin 0 -> 7545 bytes 7 files changed, 221 insertions(+) create mode 100644 src/main/java/androsa/gaiadimension/entity/boss/GDMalachiteGuard.java create mode 100644 src/main/java/androsa/gaiadimension/model/ModelMalachiteGuard.java create mode 100644 src/main/java/androsa/gaiadimension/renderer/EntityRenderMalachiteGuard.java create mode 100644 src/main/resources/assets/gaiadimension/textures/model/malachiteguard.png diff --git a/src/main/java/androsa/gaiadimension/GaiaDimension.java b/src/main/java/androsa/gaiadimension/GaiaDimension.java index a59e40967..dea2c3adb 100644 --- a/src/main/java/androsa/gaiadimension/GaiaDimension.java +++ b/src/main/java/androsa/gaiadimension/GaiaDimension.java @@ -49,6 +49,7 @@ public class GaiaDimension public static DimensionType dimType; public static int backupdimensionID = -258; + public static final EnumCreatureAttribute GAIAN = EnumHelper.addCreatureAttribute("GAIAN"); public static final EnumCreatureAttribute CORRUPT = EnumHelper.addCreatureAttribute("CORRUPT"); @Instance(MODID) @@ -92,5 +93,6 @@ private void registerCreatures() { GaiaEntities.registerEntity(GaiaEntityNames.SPELLBOUND_ELEMENTAL, androsa.gaiadimension.entity.GDSpellElement.class, id++, 0xFFFF00, 0x0000FF); GaiaEntities.registerEntity(GaiaEntityNames.BLUE_HOWLITE_WOLF, androsa.gaiadimension.entity.boss.GDBlueHowliteWolf.class, id++, 0x00FF00, 0xFF00FF); + GaiaEntities.registerEntity(GaiaEntityNames.MALACHITE_GUARD, androsa.gaiadimension.entity.boss.GDMalachiteGuard.class, id++, 0x0000FF, 0x00FF00); } } diff --git a/src/main/java/androsa/gaiadimension/GaiaEntityNames.java b/src/main/java/androsa/gaiadimension/GaiaEntityNames.java index f3ab5e8c5..da9380334 100644 --- a/src/main/java/androsa/gaiadimension/GaiaEntityNames.java +++ b/src/main/java/androsa/gaiadimension/GaiaEntityNames.java @@ -7,6 +7,7 @@ public class GaiaEntityNames { public static final ResourceLocation SPELLBOUND_ELEMENTAL = prefix("spellbound_elemental"); public static final ResourceLocation BLUE_HOWLITE_WOLF = prefix("blue_howlite_wolf"); + public static final ResourceLocation MALACHITE_GUARD = prefix("malachite_guard"); private static ResourceLocation prefix(String path) { return new ResourceLocation(GaiaDimension.MODID, path); diff --git a/src/main/java/androsa/gaiadimension/entity/boss/GDMalachiteGuard.java b/src/main/java/androsa/gaiadimension/entity/boss/GDMalachiteGuard.java new file mode 100644 index 000000000..de7d421a0 --- /dev/null +++ b/src/main/java/androsa/gaiadimension/entity/boss/GDMalachiteGuard.java @@ -0,0 +1,51 @@ +package androsa.gaiadimension.entity.boss; + +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; + +public class GDMalachiteGuard extends EntityMob { + + public GDMalachiteGuard(World world) { + super(world); + + this.setSize(0.8F, 3.0F); + } + + @Override + protected final void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(200.0D); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6); + } + + @Override + protected void initEntityAI() { + super.initEntityAI(); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(3, new EntityAILookIdle(this)); + this.tasks.addTask(1, new EntityAIWander(this, 0.5D)); + } + + @Override + public void onUpdate() { + super.onUpdate(); + if (!world.isRemote && world.getDifficulty() == EnumDifficulty.PEACEFUL) { + this.setDead(); + } + } + //Keep this commented out until later +/* + @Override + public boolean isNonBoss() { + return false; + } +*/ +} diff --git a/src/main/java/androsa/gaiadimension/model/ModelMalachiteGuard.java b/src/main/java/androsa/gaiadimension/model/ModelMalachiteGuard.java new file mode 100644 index 000000000..0b1c2c991 --- /dev/null +++ b/src/main/java/androsa/gaiadimension/model/ModelMalachiteGuard.java @@ -0,0 +1,142 @@ +package androsa.gaiadimension.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +/** + * ModelMalachiteGuard - Undefined + * Created using Tabula 7.0.0 + */ +public class ModelMalachiteGuard extends ModelBase { + public ModelRenderer legR; + public ModelRenderer legL; + public ModelRenderer hips; + public ModelRenderer waist; + public ModelRenderer shoulderR; + public ModelRenderer torso; + public ModelRenderer shoulderL; + public ModelRenderer head; + public ModelRenderer footR; + public ModelRenderer footL; + public ModelRenderer upperArmR; + public ModelRenderer lowerArmR; + public ModelRenderer neck; + public ModelRenderer upperArmL; + public ModelRenderer lowerArmL; + public ModelRenderer helmet; + public ModelRenderer bladeR; + public ModelRenderer bladeL; + + public ModelMalachiteGuard() { + this.textureWidth = 128; + this.textureHeight = 64; + //head + this.head = new ModelRenderer(this, 17, 9); + this.head.setRotationPoint(0.0F, -20.0F, 0.0F); + this.head.addBox(-3.5F, -7.0F, -3.5F, 7, 7, 7, 0.0F); + //helmet + this.helmet = new ModelRenderer(this, 20, 23); + this.helmet.setRotationPoint(0.0F, 0.0F, 0.0F); + this.helmet.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, 0.0F); + //right helmet blade + this.bladeR = new ModelRenderer(this, 8, 35); + this.bladeR.setRotationPoint(-4.1F, -6.0F, 0.0F); + this.bladeR.addBox(0.0F, -7.0F, 0.0F, 0, 7, 4, 0.0F); + this.setRotateAngle(bladeR, -1.0471975511965976F, 0.0F, 0.0F); + //left helmet blade + this.bladeL = new ModelRenderer(this, 0, 35); + this.bladeL.setRotationPoint(4.1F, -6.0F, 0.0F); + this.bladeL.addBox(0.0F, -7.0F, 0.0F, 0, 7, 4, 0.0F); + this.setRotateAngle(bladeL, -1.0471975511965976F, 0.0F, 0.0F); + //neck + this.neck = new ModelRenderer(this, 65, 12); + this.neck.setRotationPoint(0.0F, -4.0F, 0.0F); + this.neck.addBox(-1.5F, 0.0F, -1.0F, 3, 4, 2, 0.0F); + //torso + this.torso = new ModelRenderer(this, 88, 0); + this.torso.setRotationPoint(0.0F, -16.0F, 0.0F); + this.torso.addBox(-6.0F, 0.0F, -2.5F, 12, 6, 5, 0.0F); + //right shoulder + this.shoulderR = new ModelRenderer(this, 70, 0); + this.shoulderR.setRotationPoint(-6.0F, -14.5F, 0.0F); + this.shoulderR.addBox(-5.0F, -2.0F, -2.0F, 5, 2, 4, 0.0F); + //right upper arm + this.upperArmR = new ModelRenderer(this, 99, 11); + this.upperArmR.setRotationPoint(-2.5F, 0.0F, 0.0F); + this.upperArmR.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, 0.0F); + //right lower arm + this.lowerArmR = new ModelRenderer(this, 107, 11); + this.lowerArmR.setRotationPoint(0.0F, 8.0F, 0.0F); + this.lowerArmR.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, 0.0F); + //left shoulder + this.shoulderL = new ModelRenderer(this, 66, 6); + this.shoulderL.setRotationPoint(6.0F, -14.5F, 0.0F); + this.shoulderL.addBox(0.0F, -2.0F, -2.0F, 5, 2, 4, 0.0F); + //left upper arm + this.upperArmL = new ModelRenderer(this, 0, 13); + this.upperArmL.setRotationPoint(2.5F, 0.0F, 0.0F); + this.upperArmL.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, 0.0F); + //left lower arm + this.lowerArmL = new ModelRenderer(this, 4, 19); + this.lowerArmL.setRotationPoint(0.0F, 8.0F, 0.0F); + this.lowerArmL.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, 0.0F); + //waist + this.waist = new ModelRenderer(this, 58, 0); + this.waist.setRotationPoint(0.0F, -10.0F, 0.0F); + this.waist.addBox(-2.0F, 0.0F, -1.0F, 4, 5, 2, 0.0F); + //hips + this.hips = new ModelRenderer(this, 24, 0); + this.hips.setRotationPoint(0.0F, -5.0F, -2.5F); + this.hips.addBox(-6.0F, 0.0F, 0.0F, 12, 4, 5, 0.0F); + //left leg + this.legR = new ModelRenderer(this, 0, 0); + this.legR.setRotationPoint(-4.5F, -1.0F, 0.0F); + this.legR.addBox(-1.5F, 0.0F, -1.5F, 3, 10, 3, 0.0F); + //right foot + this.footR = new ModelRenderer(this, 45, 9); + this.footR.setRotationPoint(0.0F, 10.0F, 0.0F); + this.footR.addBox(-2.5F, 0.0F, -2.5F, 5, 15, 5, 0.0F); + //left leg + this.legL = new ModelRenderer(this, 12, 0); + this.legL.setRotationPoint(4.5F, -1.0F, 0.0F); + this.legL.addBox(-1.5F, 0.0F, -1.5F, 3, 10, 3, 0.0F); + //left foot + this.footL = new ModelRenderer(this, 79, 11); + this.footL.setRotationPoint(0.0F, 10.0F, 0.0F); + this.footL.addBox(-2.5F, 0.0F, -2.5F, 5, 15, 5, 0.0F); + + //kiddiewinkles + this.head.addChild(this.helmet); + this.upperArmL.addChild(this.lowerArmL); + this.helmet.addChild(this.bladeL); + this.shoulderR.addChild(this.upperArmR); + this.shoulderL.addChild(this.upperArmL); + this.torso.addChild(this.neck); + this.legR.addChild(this.footR); + this.helmet.addChild(this.bladeR); + this.legL.addChild(this.footL); + this.upperArmR.addChild(this.lowerArmR); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { + this.head.render(f5); + this.waist.render(f5); + this.shoulderR.render(f5); + this.hips.render(f5); + this.legR.render(f5); + this.legL.render(f5); + this.torso.render(f5); + this.shoulderL.render(f5); + } + + /** + * This is a helper function from Tabula to set the rotation of model parts + */ + public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src/main/java/androsa/gaiadimension/proxy/ClientProxy.java b/src/main/java/androsa/gaiadimension/proxy/ClientProxy.java index fb532ae9b..e4a1349d9 100644 --- a/src/main/java/androsa/gaiadimension/proxy/ClientProxy.java +++ b/src/main/java/androsa/gaiadimension/proxy/ClientProxy.java @@ -3,11 +3,14 @@ import androsa.gaiadimension.entity.GDHowliteWolf; import androsa.gaiadimension.entity.GDSpellElement; import androsa.gaiadimension.entity.boss.GDBlueHowliteWolf; +import androsa.gaiadimension.entity.boss.GDMalachiteGuard; import androsa.gaiadimension.model.ModelBlueHowliteWolf; import androsa.gaiadimension.model.ModelHowliteWolf; +import androsa.gaiadimension.model.ModelMalachiteGuard; import androsa.gaiadimension.model.ModelSpellElement; import androsa.gaiadimension.renderer.EntityRenderBlueHowliteWolf; import androsa.gaiadimension.renderer.EntityRenderHowliteWolf; +import androsa.gaiadimension.renderer.EntityRenderMalachiteGuard; import androsa.gaiadimension.renderer.EntityRenderSpellElement; import net.minecraft.world.World; import net.minecraftforge.fml.client.FMLClientHandler; @@ -22,6 +25,7 @@ public void doPreLoadRegistration() { RenderingRegistry.registerEntityRenderingHandler(GDSpellElement.class, m -> new EntityRenderSpellElement(m, new ModelSpellElement(), 0.0F)); RenderingRegistry.registerEntityRenderingHandler(GDBlueHowliteWolf.class, m -> new EntityRenderBlueHowliteWolf(m, new ModelBlueHowliteWolf(), 1.2F)); + RenderingRegistry.registerEntityRenderingHandler(GDMalachiteGuard.class, m -> new EntityRenderMalachiteGuard(m, new ModelMalachiteGuard(), 1.0F)); } @Override public void doOnLoadRegistration() { diff --git a/src/main/java/androsa/gaiadimension/renderer/EntityRenderMalachiteGuard.java b/src/main/java/androsa/gaiadimension/renderer/EntityRenderMalachiteGuard.java new file mode 100644 index 000000000..1c8f97970 --- /dev/null +++ b/src/main/java/androsa/gaiadimension/renderer/EntityRenderMalachiteGuard.java @@ -0,0 +1,21 @@ +package androsa.gaiadimension.renderer; + +import androsa.gaiadimension.GaiaDimension; +import androsa.gaiadimension.entity.boss.GDMalachiteGuard; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.util.ResourceLocation; + +public class EntityRenderMalachiteGuard extends RenderLiving { + private static final ResourceLocation textureLoc = new ResourceLocation(GaiaDimension.MODEL_DIR + "malachiteguard.png"); + + public EntityRenderMalachiteGuard(RenderManager manager, ModelBase model, float shadowSize) { + super(manager, model, shadowSize); + } + + @Override + protected ResourceLocation getEntityTexture(GDMalachiteGuard par1Entity) { + return textureLoc; + } +} diff --git a/src/main/resources/assets/gaiadimension/textures/model/malachiteguard.png b/src/main/resources/assets/gaiadimension/textures/model/malachiteguard.png new file mode 100644 index 0000000000000000000000000000000000000000..30e450ce36859b2b4e9ce8f712b11767e4811d7c GIT binary patch literal 7545 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 P00000NkvXXu0mjf%o>Bb literal 0 HcmV?d00001