From 08a8f1dc13e743b1607f58bed6730664c64ce660 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Wed, 10 Dec 2014 11:01:03 -0500 Subject: [PATCH] Added Guardians --- .../AlchemicalWizardry.java | 18 +- .../BloodMagicConfiguration.java | 16 +- .../client/ClientProxy.java | 13 ++ .../client/renderer/RenderHelper.java | 23 ++- .../demonHoard/DemonPacketMinorGrunt.java | 75 ++++++-- .../demonVillage/demonHoard/DemonType.java | 2 +- .../demon/EntityMinorDemonGruntGuardian.java | 47 +++++ .../EntityMinorDemonGruntGuardianEarth.java | 54 ++++++ .../EntityMinorDemonGruntGuardianFire.java | 50 +++++ .../EntityMinorDemonGruntGuardianIce.java | 47 +++++ .../EntityMinorDemonGruntGuardianWind.java | 64 +++++++ .../tileEntity/TEDemonPortal.java | 5 +- .../common/renderer/mob/RenderGrunt.java | 27 --- .../mob/RenderMinorDemonGruntGuardian.java | 49 +++++ .../model/ModelMinorDemonGruntGuardian.java | 181 ++++++++++++++++++ .../assets/alchemicalwizardry/lang/en_US.lang | 12 +- .../textures/gui/container.png | Bin 321 -> 695 bytes .../textures/gui/container1.png | Bin 380 -> 526 bytes .../models/MinorDemonGruntGuardian_earth.png | Bin 0 -> 5790 bytes .../models/MinorDemonGruntGuardian_fire.png | Bin 0 -> 6144 bytes .../models/MinorDemonGruntGuardian_ice.png | Bin 0 -> 5839 bytes .../models/MinorDemonGruntGuardian_normal.png | Bin 0 -> 4971 bytes .../models/MinorDemonGruntGuardian_wind.png | Bin 0 -> 5808 bytes 23 files changed, 618 insertions(+), 65 deletions(-) create mode 100644 src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardian.java create mode 100644 src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianEarth.java create mode 100644 src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianFire.java create mode 100644 src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianIce.java create mode 100644 src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianWind.java delete mode 100644 src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderGrunt.java create mode 100644 src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderMinorDemonGruntGuardian.java create mode 100644 src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelMinorDemonGruntGuardian.java create mode 100644 src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_earth.png create mode 100644 src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_fire.png create mode 100644 src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_ice.png create mode 100644 src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_normal.png create mode 100644 src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_wind.png diff --git a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java index b01f006f..d3bd740f 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ b/src/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java @@ -72,6 +72,11 @@ import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.DemonPacketRe import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGrunt; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntEarth; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntFire; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardian; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianEarth; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianFire; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianIce; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianWind; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntIce; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntWind; import WayofTime.alchemicalWizardry.common.demonVillage.loot.DemonVillageLootRegistry; @@ -400,7 +405,11 @@ public class AlchemicalWizardry public static String entityMinorDemonGruntWindID = "AW017"; public static String entityMinorDemonGruntIceID = "AW018"; public static String entityMinorDemonGruntEarthID = "AW019"; - + public static String entityMinorDemonGruntGuardianID = "AW020"; + public static String entityMinorDemonGruntGuardianFireID = "AW021"; + public static String entityMinorDemonGruntGuardianWindID = "AW022"; + public static String entityMinorDemonGruntGuardianIceID = "AW023"; + public static String entityMinorDemonGruntGuardianEarthID = "AW024"; public static Fluid lifeEssenceFluid; @@ -412,6 +421,7 @@ public class AlchemicalWizardry @SidedProxy(clientSide = "WayofTime.alchemicalWizardry.client.ClientProxy", serverSide = "WayofTime.alchemicalWizardry.common.CommonProxy") public static CommonProxy proxy; + @EventHandler public void preInit(FMLPreInitializationEvent event) { @@ -863,6 +873,12 @@ public class AlchemicalWizardry EntityRegistry.registerModEntity(EntityMinorDemonGruntWind.class, "MinorDemonGruntWind", 36, this, 80, 3, true); EntityRegistry.registerModEntity(EntityMinorDemonGruntIce.class, "MinorDemonGruntIce", 37, this, 80, 3, true); EntityRegistry.registerModEntity(EntityMinorDemonGruntEarth.class, "MinorDemonGruntEarth", 38, this, 80, 3, true); + EntityRegistry.registerModEntity(EntityMinorDemonGruntGuardian.class, "MinorDemonGruntGuardian", 39, this, 80, 3, true); + EntityRegistry.registerModEntity(EntityMinorDemonGruntGuardianFire.class, "MinorDemonGruntGuardianFire", 40, this, 80, 3, true); + EntityRegistry.registerModEntity(EntityMinorDemonGruntGuardianWind.class, "MinorDemonGruntGuardianWind", 41, this, 80, 3, true); + EntityRegistry.registerModEntity(EntityMinorDemonGruntGuardianIce.class, "MinorDemonGruntGuardianIce", 42, this, 80, 3, true); + EntityRegistry.registerModEntity(EntityMinorDemonGruntGuardianEarth.class, "MinorDemonGruntGuardianEarth", 43, this, 80, 3, true); + ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST).addItem(new WeightedRandomChestContent(new ItemStack(ModItems.standardBindingAgent), 1, 3, this.standardBindingAgentDungeonChance / 5)); diff --git a/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java b/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java index dee7dc16..66d13256 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java +++ b/src/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java @@ -137,14 +137,14 @@ public class BloodMagicConfiguration AlchemicalWizardry.ritualDisabledFullStomach = config.get("Ritual Blacklist", "Requiem of the Satiated Stomach", false).getBoolean(false); String tempDemonConfigs = "Temp Demon Configs [2]"; - TEDemonPortal.buildingGridDelay = config.get(tempDemonConfigs, "Building Grid Delay", 25).getInt(); - TEDemonPortal.roadGridDelay = config.get(tempDemonConfigs, "Road Grid Delay", 10).getInt(); - TEDemonPortal.demonHoardDelay = config.get(tempDemonConfigs, "Demon Hoard Delay", 40).getInt(); - TEDemonPortal.demonRoadChance = (float)(config.get(tempDemonConfigs, "Demon Road Chance", 0.3f).getDouble()); - TEDemonPortal.demonHouseChance = (float)(config.get(tempDemonConfigs, "Demon House Chance", 0.6f).getDouble()); - TEDemonPortal.demonPortalChance = (float)(config.get(tempDemonConfigs, "Demon Portal Chance", 0.5f).getDouble()); - TEDemonPortal.demonHoardChance = (float)(config.get(tempDemonConfigs, "Demon Hoard Chance", 0.8f).getDouble()); - TEDemonPortal.portalTickRate = (float)(config.get(tempDemonConfigs, "Portal Tick Rate", 0.1f).getDouble()); +// TEDemonPortal.buildingGridDelay = config.get(tempDemonConfigs, "Building Grid Delay", 25).getInt(); +// TEDemonPortal.roadGridDelay = config.get(tempDemonConfigs, "Road Grid Delay", 10).getInt(); +// TEDemonPortal.demonHoardDelay = config.get(tempDemonConfigs, "Demon Hoard Delay", 40).getInt(); +// TEDemonPortal.demonRoadChance = (float)(config.get(tempDemonConfigs, "Demon Road Chance", 0.3f).getDouble()); +// TEDemonPortal.demonHouseChance = (float)(config.get(tempDemonConfigs, "Demon House Chance", 0.6f).getDouble()); +// TEDemonPortal.demonPortalChance = (float)(config.get(tempDemonConfigs, "Demon Portal Chance", 0.5f).getDouble()); +// TEDemonPortal.demonHoardChance = (float)(config.get(tempDemonConfigs, "Demon Hoard Chance", 0.8f).getDouble()); +// TEDemonPortal.portalTickRate = (float)(config.get(tempDemonConfigs, "Portal Tick Rate", 0.1f).getDouble()); DemonVillagePath.canGoDown = config.get(tempDemonConfigs, "canRoadGoDown", true).getBoolean(); DemonVillagePath.tunnelIfObstructed = config.get(tempDemonConfigs, "tunnelIfObstructed", false).getBoolean(); diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java b/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java index 4f32f78b..02464f00 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java +++ b/src/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java @@ -9,6 +9,11 @@ import WayofTime.alchemicalWizardry.common.CommonProxy; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGrunt; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntEarth; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntFire; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardian; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianEarth; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianFire; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianIce; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianWind; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntIce; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntWind; import WayofTime.alchemicalWizardry.common.entity.mob.EntityAirElemental; @@ -58,6 +63,7 @@ import WayofTime.alchemicalWizardry.common.renderer.mob.RenderFallenAngel; import WayofTime.alchemicalWizardry.common.renderer.mob.RenderIceDemon; import WayofTime.alchemicalWizardry.common.renderer.mob.RenderLowerGuardian; import WayofTime.alchemicalWizardry.common.renderer.mob.RenderMinorDemonGrunt; +import WayofTime.alchemicalWizardry.common.renderer.mob.RenderMinorDemonGruntGuardian; import WayofTime.alchemicalWizardry.common.renderer.mob.RenderShade; import WayofTime.alchemicalWizardry.common.renderer.mob.RenderSmallEarthGolem; import WayofTime.alchemicalWizardry.common.renderer.mob.RenderWingedFireDemon; @@ -68,6 +74,7 @@ import WayofTime.alchemicalWizardry.common.renderer.model.ModelFallenAngel; import WayofTime.alchemicalWizardry.common.renderer.model.ModelIceDemon; import WayofTime.alchemicalWizardry.common.renderer.model.ModelLowerGuardian; import WayofTime.alchemicalWizardry.common.renderer.model.ModelMinorDemonGrunt; +import WayofTime.alchemicalWizardry.common.renderer.model.ModelMinorDemonGruntGuardian; import WayofTime.alchemicalWizardry.common.renderer.model.ModelShade; import WayofTime.alchemicalWizardry.common.renderer.model.ModelSmallEarthGolem; import WayofTime.alchemicalWizardry.common.renderer.model.ModelWingedFireDemon; @@ -124,6 +131,12 @@ public class ClientProxy extends CommonProxy RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntIce.class, new RenderMinorDemonGrunt(new ModelMinorDemonGrunt(), 0.5F)); RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntWind.class, new RenderMinorDemonGrunt(new ModelMinorDemonGrunt(), 0.5F)); RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntEarth.class, new RenderMinorDemonGrunt(new ModelMinorDemonGrunt(), 0.5F)); + RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntGuardian.class, new RenderMinorDemonGruntGuardian(new ModelMinorDemonGruntGuardian(), 0.5F)); + RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntGuardianFire.class, new RenderMinorDemonGruntGuardian(new ModelMinorDemonGruntGuardian(), 0.5F)); + RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntGuardianIce.class, new RenderMinorDemonGruntGuardian(new ModelMinorDemonGruntGuardian(), 0.5F)); + RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntGuardianEarth.class, new RenderMinorDemonGruntGuardian(new ModelMinorDemonGruntGuardian(), 0.5F)); + RenderingRegistry.registerEntityRenderingHandler(EntityMinorDemonGruntGuardianWind.class, new RenderMinorDemonGruntGuardian(new ModelMinorDemonGruntGuardian(), 0.5F)); + ClientRegistry.bindTileEntitySpecialRenderer(TEAltar.class, new TEAltarRenderer()); ClientRegistry.bindTileEntitySpecialRenderer(TEPedestal.class, new RenderPedestal()); diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderHelper.java b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderHelper.java index 3607fdfd..d3b5d728 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderHelper.java +++ b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderHelper.java @@ -22,6 +22,7 @@ import WayofTime.alchemicalWizardry.api.alchemy.energy.IReagentHandler; import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RenderHelper @@ -61,10 +62,16 @@ public class RenderHelper GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); scaledResolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight); displayArmorStatus(mc); - renderTestHUD(mc); GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); } - + + ReagentStack reagentStack = new ReagentStack(ReagentRegistry.sanctusReagent, 1000); + int maxAmount = 3000; + + if(reagentStack != null && reagentStack.amount > 0) + { + renderTestHUD(mc, reagentStack, maxAmount); + } } return true; @@ -164,22 +171,24 @@ public class RenderHelper tessellator.draw(); } - private static void renderTestHUD(Minecraft mc) + private static void renderTestHUD(Minecraft mc, ReagentStack reagentStack, int maxAmount) { - Reagent reagent = ReagentRegistry.incendiumReagent; + Reagent reagent = reagentStack.reagent; int xSize = 32; int ySize = 32; - int x = (10 - xSize) / 2 * 8; + int amount = 256 * (maxAmount - reagentStack.amount) / maxAmount; + + int x = (16 - xSize) / 2 * 8; int y = (150 - ySize) / 2 * 8; ResourceLocation test2 = new ResourceLocation("alchemicalwizardry", "textures/gui/container1.png"); - GL11.glColor4f(reagent.getColourRed(), reagent.getColourGreen(), reagent.getColourBlue(), 0.5F); + GL11.glColor4f(reagent.getColourRed(), reagent.getColourGreen(), reagent.getColourBlue(), 1.0F); mc.getTextureManager().bindTexture(test2); GL11.glScalef(1f/8f, 1f/8f, 1f/8f); - drawTexturedModalRect(x, y, 0, 0, 256, 256); + drawTexturedModalRect(x, y + amount, 0, amount, 256, 256 - amount); ResourceLocation test = new ResourceLocation("alchemicalwizardry", "textures/gui/container.png"); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonPacketMinorGrunt.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonPacketMinorGrunt.java index 1aa75da8..cfd0ade8 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonPacketMinorGrunt.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonPacketMinorGrunt.java @@ -4,6 +4,11 @@ import net.minecraft.world.World; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGrunt; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntEarth; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntFire; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardian; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianEarth; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianFire; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianIce; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianWind; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntIce; import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntWind; import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal; @@ -26,26 +31,58 @@ public class DemonPacketMinorGrunt extends DemonHoardPacket public int summonDemons(TEDemonPortal teDemonPortal, World world, int x, int y, int z, DemonType type, int tier, boolean spawnGuardian) { EntityMinorDemonGrunt entity; - - switch(type) + { - case FIRE: - entity = new EntityMinorDemonGruntFire(world); - break; - case ICE: - entity = new EntityMinorDemonGruntIce(world); - break; - case WATER: - entity = new EntityMinorDemonGruntEarth(world); - break; - case WIND: - entity = new EntityMinorDemonGruntWind(world); - break; - case NORMAL: - default: - entity = new EntityMinorDemonGrunt(world); - break; - + switch(type) + { + case FIRE: + if(spawnGuardian) + { + entity = new EntityMinorDemonGruntGuardianFire(world); + }else + { + entity = new EntityMinorDemonGruntFire(world); + } + break; + case ICE: + if(spawnGuardian) + { + entity = new EntityMinorDemonGruntGuardianIce(world); + }else + { + entity = new EntityMinorDemonGruntIce(world); + } + break; + case EARTH: + if(spawnGuardian) + { + entity = new EntityMinorDemonGruntGuardianEarth(world); + }else + { + entity = new EntityMinorDemonGruntEarth(world); + } + break; + case WIND: + if(spawnGuardian) + { + entity = new EntityMinorDemonGruntGuardianWind(world); + }else + { + entity = new EntityMinorDemonGruntWind(world); + } + break; + case NORMAL: + default: + if(spawnGuardian) + { + entity = new EntityMinorDemonGruntGuardian(world); + }else + { + entity = new EntityMinorDemonGrunt(world); + } + break; + + } } entity.setPosition(x, y, z); diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonType.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonType.java index 4db1ec7a..75c5aed4 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonType.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/DemonType.java @@ -4,7 +4,7 @@ public enum DemonType { NORMAL, FIRE, - WATER, + EARTH, ICE, WIND } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardian.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardian.java new file mode 100644 index 00000000..65874cba --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardian.java @@ -0,0 +1,47 @@ +package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; + +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.common.entity.projectile.HolyProjectile; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +public class EntityMinorDemonGruntGuardian extends EntityMinorDemonGrunt +{ + public EntityMinorDemonGruntGuardian(World par1World) + { + super(par1World); + this.setDemonID(AlchemicalWizardry.entityMinorDemonGruntGuardianID); + } + + @Override + public boolean attackEntityAsMob(Entity par1Entity) + { + int i = this.isTamed() ? 25 : 25; + + if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) + { + return false; + } + + return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); + } + + /** + * Attack the specified entity using a ranged attack. + */ + @Override + public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) + { + if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) + { + return; + } + double xCoord; + double yCoord; + double zCoord; + HolyProjectile hol = new HolyProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 20, 600); + this.worldObj.spawnEntityInWorld(hol); + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianEarth.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianEarth.java new file mode 100644 index 00000000..84940ddd --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianEarth.java @@ -0,0 +1,54 @@ +package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.common.entity.projectile.ExplosionProjectile; + +public class EntityMinorDemonGruntGuardianEarth extends EntityMinorDemonGruntGuardian +{ + public EntityMinorDemonGruntGuardianEarth(World par1World) + { + super(par1World); + this.setDemonID(AlchemicalWizardry.entityMinorDemonGruntGuardianEarthID); + } + + @Override + public boolean attackEntityAsMob(Entity par1Entity) + { + int i = this.isTamed() ? 25 : 25; + + if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) + { + return false; + } + + if(par1Entity instanceof EntityLivingBase) + { + ((EntityLivingBase) par1Entity).addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 200, 4)); + } + + return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); + } + + /** + * Attack the specified entity using a ranged attack. + */ + @Override + public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) + { + if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) + { + return; + } + double xCoord; + double yCoord; + double zCoord; + ExplosionProjectile hol = new ExplosionProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 20, 600, false); + this.worldObj.spawnEntityInWorld(hol); + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianFire.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianFire.java new file mode 100644 index 00000000..ef2187cd --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianFire.java @@ -0,0 +1,50 @@ +package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.common.entity.projectile.FireProjectile; + +public class EntityMinorDemonGruntGuardianFire extends EntityMinorDemonGruntGuardian +{ + public EntityMinorDemonGruntGuardianFire(World par1World) + { + super(par1World); + this.setDemonID(AlchemicalWizardry.entityMinorDemonGruntGuardianFireID); + this.isImmuneToFire = true; + } + + @Override + public boolean attackEntityAsMob(Entity par1Entity) + { + int i = this.isTamed() ? 25 : 25; + + if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) + { + return false; + } + + par1Entity.setFire(15); + + return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); + } + + /** + * Attack the specified entity using a ranged attack. + */ + @Override + public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) + { + if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) + { + return; + } + double xCoord; + double yCoord; + double zCoord; + FireProjectile hol = new FireProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 20, 600); + this.worldObj.spawnEntityInWorld(hol); + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianIce.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianIce.java new file mode 100644 index 00000000..3a77ae69 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianIce.java @@ -0,0 +1,47 @@ +package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.common.entity.projectile.IceProjectile; + +public class EntityMinorDemonGruntGuardianIce extends EntityMinorDemonGruntGuardian +{ + public EntityMinorDemonGruntGuardianIce(World par1World) + { + super(par1World); + this.setDemonID(AlchemicalWizardry.entityMinorDemonGruntGuardianIceID); + } + + @Override + public boolean attackEntityAsMob(Entity par1Entity) + { + int i = this.isTamed() ? 25 : 25; + + if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) + { + return false; + } + + return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); + } + + /** + * Attack the specified entity using a ranged attack. + */ + @Override + public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) + { + if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) + { + return; + } + double xCoord; + double yCoord; + double zCoord; + IceProjectile hol = new IceProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 20, 600); + this.worldObj.spawnEntityInWorld(hol); + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianWind.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianWind.java new file mode 100644 index 00000000..0f267859 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/demonHoard/demon/EntityMinorDemonGruntGuardianWind.java @@ -0,0 +1,64 @@ +package WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.common.entity.projectile.WindGustProjectile; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; + +public class EntityMinorDemonGruntGuardianWind extends EntityMinorDemonGruntGuardian +{ + public EntityMinorDemonGruntGuardianWind(World par1World) + { + super(par1World); + this.setDemonID(AlchemicalWizardry.entityMinorDemonGruntGuardianWindID); + } + + @Override + public boolean attackEntityAsMob(Entity par1Entity) + { + int i = this.isTamed() ? 25 : 25; + + if(par1Entity instanceof IHoardDemon && ((IHoardDemon) par1Entity).isSamePortal(this)) + { + return false; + } + + if (par1Entity instanceof EntityPlayer) + { + SpellHelper.setPlayerSpeedFromServer((EntityPlayer) par1Entity, par1Entity.motionX, par1Entity.motionY + 4, par1Entity.motionZ); + } else if (par1Entity instanceof EntityLivingBase) + { + ((EntityLivingBase) par1Entity).motionY += 4.0D; + } + + return par1Entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float) i); + } + + @Override + public void onLivingUpdate() + { + super.onLivingUpdate(); + this.fallDistance = 0; + } + + /** + * Attack the specified entity using a ranged attack. + */ + @Override + public void attackEntityWithRangedAttack(EntityLivingBase par1EntityLivingBase, float par2) + { + if(par1EntityLivingBase instanceof IHoardDemon && ((IHoardDemon) par1EntityLivingBase).isSamePortal(this)) + { + return; + } + double xCoord; + double yCoord; + double zCoord; + WindGustProjectile hol = new WindGustProjectile(worldObj, this, par1EntityLivingBase, 1.8f, 0f, 20, 600); + this.worldObj.spawnEntityInWorld(hol); + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/TEDemonPortal.java b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/TEDemonPortal.java index 1fa12fff..fd150940 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/TEDemonPortal.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/demonVillage/tileEntity/TEDemonPortal.java @@ -46,7 +46,7 @@ public class TEDemonPortal extends TileEntity { public DemonType type = DemonType.FIRE; - public static boolean printDebug = false; + public static boolean printDebug = true; public static int limit = 100; @@ -576,6 +576,9 @@ public class TEDemonPortal extends TileEntity return 0; } + if(TEDemonPortal.printDebug) + System.out.println("Spawning Demons"); + return DemonPacketRegistry.spawnDemons(teDemonPortal, worldObj, xCoord + road.xCoord * 5, road.yCoord + 1, zCoord + road.zCoord * 5, type, tier, spawnGuardian); } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderGrunt.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderGrunt.java deleted file mode 100644 index 21ebbcfc..00000000 --- a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderGrunt.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.alchemicalWizardry.common.renderer.mob; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; -import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGrunt; - -public class RenderGrunt extends RenderLiving -{ - private static final ResourceLocation field_110833_a = new ResourceLocation("alchemicalwizardry", "textures/models/ShadeMob.png"); - - public RenderGrunt(ModelBase par1ModelBase, float par2) - { - super(par1ModelBase, par2); - } - - public ResourceLocation func_110832_a(EntityMinorDemonGrunt par1EntityShade) - { - return field_110833_a; - } - - public ResourceLocation getEntityTexture(Entity par1Entity) - { - return this.func_110832_a((EntityMinorDemonGrunt) par1Entity); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderMinorDemonGruntGuardian.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderMinorDemonGruntGuardian.java new file mode 100644 index 00000000..a2a70bb3 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/mob/RenderMinorDemonGruntGuardian.java @@ -0,0 +1,49 @@ +package WayofTime.alchemicalWizardry.common.renderer.mob; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardian; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianEarth; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianFire; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianIce; +import WayofTime.alchemicalWizardry.common.demonVillage.demonHoard.demon.EntityMinorDemonGruntGuardianWind; + +public class RenderMinorDemonGruntGuardian extends RenderLiving +{ + private static final ResourceLocation normalTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGruntGuardian_normal.png"); + private static final ResourceLocation fireTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGruntGuardian_fire.png"); + private static final ResourceLocation iceTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGruntGuardian_ice.png"); + private static final ResourceLocation windTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGruntGuardian_wind.png"); + private static final ResourceLocation earthTexture = new ResourceLocation("alchemicalwizardry", "textures/models/MinorDemonGruntGuardian_earth.png"); + + public RenderMinorDemonGruntGuardian(ModelBase par1ModelBase, float par2) + { + super(par1ModelBase, par2); + } + + public ResourceLocation func_110832_a(EntityMinorDemonGruntGuardian entity) + { + if(entity instanceof EntityMinorDemonGruntGuardianFire) + { + return fireTexture; + }else if(entity instanceof EntityMinorDemonGruntGuardianWind) + { + return windTexture; + }else if(entity instanceof EntityMinorDemonGruntGuardianIce) + { + return iceTexture; + }else if(entity instanceof EntityMinorDemonGruntGuardianEarth) + { + return earthTexture; + } + + return normalTexture; + } + + public ResourceLocation getEntityTexture(Entity entity) + { + return this.func_110832_a((EntityMinorDemonGruntGuardian) entity); + } +} \ No newline at end of file diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelMinorDemonGruntGuardian.java b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelMinorDemonGruntGuardian.java new file mode 100644 index 00000000..663d5db1 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelMinorDemonGruntGuardian.java @@ -0,0 +1,181 @@ +package WayofTime.alchemicalWizardry.common.renderer.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.MathHelper; + +public class ModelMinorDemonGruntGuardian extends ModelBase +{ + //fields + ModelRenderer head; + ModelRenderer chest; + ModelRenderer midrift; + ModelRenderer rightarm; + ModelRenderer leftarm; + ModelRenderer rightleg; + ModelRenderer leftleg; + ModelRenderer middle; + ModelRenderer helmet; + ModelRenderer leftClaw; + ModelRenderer rightClaw; + ModelRenderer leftShoulder; + ModelRenderer rightShoulder; + ModelRenderer bar1; + ModelRenderer bar2; + + public ModelMinorDemonGruntGuardian() + { + textureWidth = 128; + textureHeight = 64; + + head = new ModelRenderer(this, 0, 0); + head.addBox(-4F, -8F, -4F, 8, 8, 8); + head.setRotationPoint(0F, 0F, 0F); + head.setTextureSize(128, 64); + head.mirror = true; + setRotation(head, 0F, 0F, 0F); + chest = new ModelRenderer(this, 16, 16); + chest.addBox(-5F, 0F, -3.5F, 10, 7, 7); + chest.setRotationPoint(0F, 0F, 0F); + chest.setTextureSize(128, 64); + chest.mirror = true; + setRotation(chest, 0F, 0F, 0F); + midrift = new ModelRenderer(this, 16, 33); + midrift.addBox(-4F, 7F, -2F, 8, 5, 4); + midrift.setRotationPoint(0F, 0F, 0F); + midrift.setTextureSize(128, 64); + midrift.mirror = true; + setRotation(midrift, 0F, 0F, 0F); + rightarm = new ModelRenderer(this, 50, 16); + rightarm.mirror = true; + rightarm.addBox(-3F, -2F, -2F, 4, 12, 4); + rightarm.setRotationPoint(-6F, 2F, 0F); + rightarm.setTextureSize(128, 64); + rightarm.mirror = true; + setRotation(rightarm, 0F, 0F, 0F); + rightarm.mirror = false; + leftarm = new ModelRenderer(this, 50, 16); + leftarm.addBox(-1F, -2F, -2F, 4, 12, 4); + leftarm.setRotationPoint(6F, 2F, 0F); + leftarm.setTextureSize(128, 64); + leftarm.mirror = true; + setRotation(leftarm, 0F, 0F, 0F); + rightleg = new ModelRenderer(this, 0, 16); + rightleg.mirror = true; + rightleg.addBox(-2F, 0F, -2F, 4, 12, 4); + rightleg.setRotationPoint(-2F, 12F, 0F); + rightleg.setTextureSize(128, 64); + rightleg.mirror = true; + setRotation(rightleg, 0F, 0F, 0F); + rightleg.mirror = false; + leftleg = new ModelRenderer(this, 0, 16); + leftleg.addBox(-2F, 0F, -2F, 4, 12, 4); + leftleg.setRotationPoint(2F, 12F, 0F); + leftleg.setTextureSize(128, 64); + leftleg.mirror = true; + setRotation(leftleg, 0F, 0F, 0F); + middle = new ModelRenderer(this, 16, 43); + middle.addBox(-2F, 7F, -3F, 4, 3, 1); + middle.setRotationPoint(0F, 0F, 0F); + middle.setTextureSize(128, 64); + middle.mirror = true; + setRotation(middle, 0F, 0F, 0F); + helmet = new ModelRenderer(this, 67, 0); + helmet.addBox(-4.5F, -8.5F, -4.5F, 9, 9, 9); + helmet.setRotationPoint(0F, 0F, 0F); + helmet.setTextureSize(128, 64); + helmet.mirror = true; + setRotation(helmet, 0F, 0F, 0F); + leftClaw = new ModelRenderer(this, 67, 23); + leftClaw.addBox(1.5F, 6F, -2.5F, 2, 6, 5); + leftClaw.setRotationPoint(6F, 2F, 0F); + leftClaw.setTextureSize(128, 64); + leftClaw.mirror = true; + setRotation(leftClaw, 0F, 0F, 0F); + rightClaw = new ModelRenderer(this, 67, 23); + rightClaw.mirror = true; + rightClaw.addBox(-3.5F, 6F, -2.5F, 2, 6, 5); + rightClaw.setRotationPoint(-6F, 2F, 0F); + rightClaw.setTextureSize(128, 64); + rightClaw.mirror = true; + setRotation(rightClaw, 0F, 0F, 0F); + rightClaw.mirror = false; + leftShoulder = new ModelRenderer(this, 67, 35); + leftShoulder.addBox(-1F, -2.5F, -2.5F, 5, 4, 5); + leftShoulder.setRotationPoint(6F, 2F, 0F); + leftShoulder.setTextureSize(128, 64); + leftShoulder.mirror = true; + setRotation(leftShoulder, 0F, 0F, 0F); + rightShoulder = new ModelRenderer(this, 67, 35); + rightShoulder.mirror = true; + rightShoulder.addBox(-4F, -2.5F, -2.5F, 5, 4, 5); + rightShoulder.setRotationPoint(-6F, 2F, 0F); + rightShoulder.setTextureSize(128, 64); + rightShoulder.mirror = true; + setRotation(rightShoulder, 0F, 0F, 0F); + rightShoulder.mirror = false; + bar1 = new ModelRenderer(this, 67, 20); + bar1.addBox(-3F, 3F, 4F, 14, 1, 1); + bar1.setRotationPoint(0F, 0F, 0F); + bar1.setTextureSize(128, 64); + bar1.mirror = true; + setRotation(bar1, 0F, 0F, 0.7853982F); + bar2 = new ModelRenderer(this, 67, 20); + bar2.addBox(-11F, 3F, 4F, 14, 1, 1); + bar2.setRotationPoint(0F, 0F, 0F); + bar2.setTextureSize(128, 64); + bar2.mirror = true; + setRotation(bar2, 0F, 0F, -0.7853982F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + head.render(f5); + chest.render(f5); + midrift.render(f5); + rightarm.render(f5); + leftarm.render(f5); + rightleg.render(f5); + leftleg.render(f5); + middle.render(f5); + helmet.render(f5); + leftClaw.render(f5); + rightClaw.render(f5); + leftShoulder.render(f5); + rightShoulder.render(f5); + bar1.render(f5); + bar2.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + + this.head.rotateAngleX = f4 / (180F / (float) Math.PI); + this.head.rotateAngleY = f3 / (180F / (float) Math.PI); + + this.helmet.rotateAngleX = this.head.rotateAngleX; + this.helmet.rotateAngleY = this.head.rotateAngleY; + + this.leftleg.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; + this.rightleg.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 1.0F * f1; + this.rightarm.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 1.0F * f1; + this.leftarm.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1; + + this.leftClaw.rotateAngleX = this.leftarm.rotateAngleX; + this.leftShoulder.rotateAngleX = this.leftarm.rotateAngleX; + + this.rightClaw.rotateAngleX = this.rightarm.rotateAngleX; + this.rightShoulder.rotateAngleX = this.rightarm.rotateAngleX; + } +} \ No newline at end of file diff --git a/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang b/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang index 75a4c551..869bf546 100644 --- a/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang +++ b/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang @@ -221,4 +221,14 @@ entity.AWWayofTime.SmallEarthGolem.name=Small Earth Golem entity.AWWayofTime.WingedFireDemon.name=Winged Fire Demon entity.AWWayofTime.BileDemon.name=Bile Demon entity.AWWayofTime.LowerGuardian.name=Lower Guardian -entity.AWWayofTime.FallenAngel.name=Fallen Angel \ No newline at end of file +entity.AWWayofTime.FallenAngel.name=Fallen Angel +entity.AWWayofTime.MinorDemonGruntGuardian.name=Demon Grunt Guardian +entity.AWWayofTime.MinorDemonGruntGuardianWind.name=Wind Demon Grunt Guardian +entity.AWWayofTime.MinorDemonGruntGuardianFire.name=Fire Demon Grunt Guardian +entity.AWWayofTime.MinorDemonGruntGuardianIce.name=Ice Demon Grunt Guardian +entity.AWWayofTime.MinorDemonGruntGuardianEarth.name=Earth Demon Grunt Guardian +entity.AWWayofTime.MinorDemonGruntWind.name=Wind Demon Grunt +entity.AWWayofTime.MinorDemonGruntFire.name=Fire Demon Grunt +entity.AWWayofTime.MinorDemonGruntIce.name=Ice Demon Grunt +entity.AWWayofTime.MinorDemonGruntEarth.name=Earth Demon Grunt +entity.AWWayofTime.MinorDemonGrunt.name=Demon Grunt \ No newline at end of file diff --git a/src/main/resources/assets/alchemicalwizardry/textures/gui/container.png b/src/main/resources/assets/alchemicalwizardry/textures/gui/container.png index 6691bfe9af612085a0b441a01caef5f25cc24ebc..742d7b6975163864814ad3c3ec2c2507bac8e809 100644 GIT binary patch delta 596 zcmV-a0;~PO0=ET_DhbN~wg3R8Rp1wqGa&~J6BSBF?68qrD}MqTNkl1nOLe z*ohn2!LJ>A;3O|+`|f$~&vW;Rs$wD^9tnphl>YSbHS+GOnLSjs_T%ltsgIueXs&Zz zS5B4^PlEf*^F4y771{u+XIumC>mZix%Q}p0+hv`|B_e9UOr@TshBA zpNl<&!O@&B5ZyX}k)sm(kVbbyUz9Y0*k63xOA0opq5}XUMQdNR^G|0IE)3QnYs*RlT#ia-J7!nSZ3wDmsk;R5>>-zpZyc7zjna zD3bzTv;RIe)0aYzhb*9P1`7F=xWzQ-^E^*2%i`Hfm1fP@5gYabpe-SFuo3kHpl#?|1K5W1MgYq8y*w2ryI>;# zVIaEB@x@eRV^;sqE?8g7%er7OX6a`wFYAKEm^HQfS<90JsIQT*8WkS=G4!0000y{D6rGa&~6HVP+XqVbViD}Ml`Nkld0arudE_m*q zS5cr%fQg7P#%+G$%Qpb(5o5%0ee~rHGX)|7b=8IM0EZCTyaOTvOK?*HR_IG0z}D(b z3G9O>G}>H3S3H5Mz*XQXa22=;tW>b3Gs^vPYkGrEe#=Yjc}78^;SPSPn!xY6;}rrH VuM7o1;eP-C002ovPDHLkV1ji4UTy#Y diff --git a/src/main/resources/assets/alchemicalwizardry/textures/gui/container1.png b/src/main/resources/assets/alchemicalwizardry/textures/gui/container1.png index a62229e07b99b4184be81b62e65209d44d01e273..5834e8539b06a42b5168cd238a7f8e6cb83441a6 100644 GIT binary patch delta 426 zcmV;b0agC|0*(ZbDhbN~wg3R8Rp1wqGa&~J6bNPj7Os(7D}MoUNkl6)BPfTEDMhF4M7*ti2UIX5H7-KM-&C-gn>pFPvQGXOgRPgBM_|K%_{{v7}6_`2d z8IERvh!8>;2S8odD9iGgib(;i*Xy%hKt#~@eHsAQT5fACm>K5d4Xe5N-M0Mky}i{7 zq+wvOSO5S%pPz1?xpy*B&xQcxFe8G9kmtEcUWkTTFqur$KGY2Cc00MyfQo@{5GF|U UJ^HcI01E&B07*qoM6N<$f^8+hrvLx| delta 278 zcmV+x0qOpZ1pES!DhdAp{{a7>y{D6rGa&~7A0r@A&q0w}D}MmsNkld?JMF@c*1jZOilH)jjbyjr|{wDzMJpnvXxOoKt z$Qp#Iq8bGN#CLno{b-;B_r)r(*1~20R28LO(Zh%iC(L%jTrn28hKC6EXT_@8Jd$s2 z#m+g1NLwPgh)9yBPiIJHY`Xx6^U&XNdxNCLq%*czsut#<4@EvRsX}tjVIF#x>Wr}a c=CnG1JB(tw#d!BBZU6uP07*qoM6N<$g1>QsDgXcg diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_earth.png b/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_earth.png new file mode 100644 index 0000000000000000000000000000000000000000..2291a4dff14ee08162b9ecc078601a98f8c4f48e GIT binary patch literal 5790 zcmV;P7Gdd$P)f7v010qNS#tmY4#NNd4#NS*Z>VGd000McNliru-V6#3BnZ0zo&*2@7Ar|a zK~#9!?VV|`U00Rge{1hE+~Ey+ev*-_$phViBu!Dq*piSe8G&QKE^H=uY?@FNcRF;D zE(571Ra7MuPJeI)P<2z)xYCu-geDkcoCafzv9Pd=Y;4g@fNm;jELpN-+1B)iJD#)m zUionDz3)Eh4I1tDWLDL!d(Yi_pL@>TYp?ZR!(K<2hj!d1>aD@qz~s20?Ua#WK@gHC zFg~sfr$SQ=J`W5Ifd*wFw+tnLt$!JW3y6OB(EX~as20b@Nax)kQheV0&u(5c_iX0x zAeb0L4N;_&5=&wg5yh(^N)3ooP6N&e^|m1oLL`vSfBHp7K^0YH$Ie{<9YzoyeQYNo z1VYe7bwBgYP!>-z zhd+9vV2+@K5H2hRh%9VaBOUHH_|E-ZwbEb&{_uwtOa#G#jfHlwfM7(q?Ym_zM0$GL zt!&w}f$Of_KnQ`&8`raW<9eR@{0C88ToNFfuY>DjXs`4bAhk-S;GM$?NDRRN0(ECd zEo8alLZzR4;X|_shzpDX>bapT#jN|Fq@B+}1q7;6w!!UYHd zQMmdO_p)Q>lLg}6xSk(9QGDLgVTub11Gsho6`E~>bxJi>Vxu^Pn1B(X*=&>N0Wk#= zgrK;fM9~Gv0ELzV;JRx!AR=tuxW3aMeXWb+UUu9j>W#tMK<+J>Q__f@oo_S68;i3_ zZBocwV4xyI(NufrjL+s7@4TGUzV*wC%TMrw2k%oOf{36UlTfvo_wJ3n*ux>fLamW_uSZ+GLfMPtry46#DgrXhH z0vD9!-P?Mv-pZ9Jrd{{RZ?Jjedak~6I{54MIdS}KCPlY>)_&)c0SZwKSq{H7V5vBmj0ip1A-h9&ya_zr+K$0YuO1UKEa!IcH z%(vy*4Q~}=1Y_VG*KGn|;~#&E=2dsj_!~QR?wSIS-PONoX6bX@R6y6x&nF;vfsgMh zQ7RYKVV*mT2w%OS$uox(pDU%L(An!(8*ckv8Rr6VT=e%&`O@2JZWhqJ3day!75TZ(3ihP=%}SyqCy|3=9rZuhmdhtg&QyM%%R+92}z2s1rpI z)*4AmWonb-Z2I&A3b1v{CVcSdv^atER7JnP^hX`@@|7|s zAWchb*m`3DFu!}hcH;yhMf9-yTSai`$?4KSgm>Qff%6XnT|1Dg(8vU13p=*m&hTC- zB|`3|bei`Ws#Bgm4S_f^G#YKJ6~q_>rJN`Y50yC3Xe;ZMO@)iAsj_Zm5iX8dSb>u* zH{2osyPtT3+TT%1|^PTa+hPHh**_Iy-u1=oqIM! zzx|>6RS>Sbc0<7oz&l?-GxDS#`r&u)(>P8FhmHo`^ZpMJM={n4k+mE=bi6m_ufOpX z1$gg=J~HD4KmN#H_hjDAyKmu=4}Kn1IP}d=vgy+goc6_Dd;NP)`H$K0QLAKuZZ5+u z_r{13j0mMt%;6)Gvz}}B6OYhrG{~K!)ogOn=qRmb6GVukm^{zPT}EUhssjTw>J8#J zqE@dlI=Yl*qe;D9V`yl&Cjl0XD>wv2H4w!qs!FAt_Qbzux^I8BiJy&LxbKs%u$xoR z7{nWfhs)Dc*t}znAQ!hon+y*RXaPY;Kao%&}=oq96gTno{=X%OErI)+zWYtAO_KZJq^AM!PCxN zAr@tJb$|f+`HvIf0&zoLXgmBiahL*E<;1`EHB1%w;*Xb+q z$J-xd?D#Q^H4F?4Qc6?C$0taV7!lL6kgTz^+bu+dJkJ?kvV?Z4jfl`{HHnjiYp=g~ zVKYEC7-SFz9{z)AlN&HpqJUE9Qc#??r~y>4cDkuI6CEELFD598sI}@CV~DKneLu2f zc*co7@%Z@IIDfL$=-S)<3{_?S|N0~T=^uQ#H@@{(#UK5vBfihVEiTP=R(O^dYd>h$ zJ*~at>H0s%IY(j>TCGf5t&FF){cdqxe|*1mEu`QBA_nL39!_x1Q7V@(#xOj*WZ_Ey z@z6%ez3Ig2145DAi&HWmFy7*Apw$wZZBHyvt{NgUza!_D_k6VXdHDxEkIOR-ee+Ws znq{KrqkUidH?!i|x2!Dmd1^himy~!|Ahwi~z*|=c>J%RecXn`s@$`pF~*Q2DXn%3V+^VR4S^&{$@6UCGr&`aI@t^a-n?QemjBfAP{itm zZp{844=Gt)uqN;~6UBF%<^Xr;JO2GNk-l{FA^?u`P5je8{af0Per{ey_~ktxW$o=> z1f5E}{N+6#?TyQiL1O|kAE=BfG?lg(k~{tfK1r}0k6y(Zf)9+1kKse0{Lt?+acH^- z@WE55RC^5YqbHuEynCAhyz8z&b(%n|teiB4N5iRX%BZV=FZ^mFWdbZWA@;`(&Wz&(5R z7OVfSKF-?Pz6ca50N~j@d%5EB%g84^xdZ1Q&kczvK0p%39o;QFe)szTc+Y=)6i|#c z9BUf#%%2n#lD_QD%^TM<_^x+IyVb(`0>g+1Ns@GYB%a820I@2~W&`J3&)>hG8K6kw zgg37!z!9oQ16-q6{pk`Rt_W|vL}@w8xnbZQpBiO2IfhfcCpjbY`7zQE;| zUCRFF5BA1B_uT$opB#Zih)P1K6=-HqUTJ82{lmn+_jPRFWVActy7uK;kkn$!wr3f1 zy?*U>i{L%P9iRPOH!8q8|HDI)WrZ79M6i*iR4Vl(ld2*J)#^acC$OLyAgT(jmh#I( zQ-8qQ)(F|K;hE<{A+J%cTwb`1szY$c_lueT+D&bob3}8PgFElOg^S<+Ul9%b_HVtu z0BZmDA4uYu7w-GSDKWuim#*yr!8NN__C8;F>6%`jq2)p&7)nVX22y8ebi&uW{>uk@ zW?vrQ(YtQ!9TNgWuQSsapiBJ@qi)j2x4-*{Zr-?_MzhsxTe4(GnvDi&snit$XizHE z>cVG$+rL+u7VZt|fhM4Q;b%ppI*udwyQy%nwM97iw(q2T>$d5WU*xq-R}C-U|0$N; z{GX=anzg)e-zU!PjU@2*2Sc9)0B;ykoS(`&?3#Vu$v)8x>{6@MB8d}{B;~Q4Pxdl( zx``bfOwjx8eeZpD$2~k1B?L&4bm4mfM@OpKAJ6aK*x`c*40E*~J>Hbrynq0o**W$_!_UI;n_S4A75^1+vIOoW-j3iBoY{bCeAaA;Q^TK9;<;$wt%Cv~*iz&d7 z2)PSDAdL-kwI3gAE{KGV70ZWpri7JhwE`iKImcY>`wkrK-N$1OeUs6p%cxCGl9p1A z9UD`Caw(N&tF6nIzfN9!@g)VQR?5-^f;O@=>UAoWD$eCps#UJqc>Tgw0WTh|Ul4nE z54|`(<9!@CTAy>=Ozo9wmD=Pa&gH}*=IL#>00`>x*oj4oXUK)GC=*8cX- zd`FgyjBw=0VXU!Ks{=IZb^Ib=0$Dm*oipdJ2LfklKXC;u6b9J+uZ6LuC8`KX=GpXR zSrilUic0_ubLaelnWueW((z`2S0*QfsH3CLgibX?{Az}D&(04J$+VrIC&n_s_^#abc!)MWBfOBz@pde^(^4I+HKRc<|y|h(fK&( z+BK`E9bbO=rKdEm%P{AH`m=uq<1+`WCxX7NB$!DZ^l$2XHFo;GDh$vM(zKHSAu@BR zr1{#Q+ zP~-NG7{(gKX4KdQZusi_Qs8t|z}0u&+k0QEz5zK`lRuxCcRpOaeGKr%8~(iZtN!mE zyfvCuyLjtY7FYegMU4R#0$n_!w1d#D!$1jMsgf(NNe0OCj7^_@px95hK?Kx&H27YzN)|JZv{$l&V7fthibK3jEsz&)5M6s{a2z*CnP2myKvNyMuD-WJsMSHG|4=9 zYS4OMFb!mB#6=~?Kl;z7e!rKkS*mGTZ1)bKNQjx3Xb?1T>Dm=oYiYGIqR7mh6S?c} z8Azx(F*k>$QqI7wK!VuUProjvrzi!V){Ipzq0A&?i&1#Bds)1!a2mSHIJ zlp=6JQGa?Mu-(oH!IOnRtCdl&w@A_wsK=PXk!_73%W}rYYYYulX|>vfprmQMXc*wE zfw<|@G$L8OTO zMc(5S+!@9JoO6Uw=twc$x`zc59Urd|MV3-2ACn8{MRQTHgRxr%Mn%2IOr>fAfuN=n5IS`!(0%$xP$h{Yj4?EtEo^5) zNS+5mXfrrap0xIQx>KyqK5{Y zF#~8vGLp5L_qvmn*69fc73~V+7iv=ns@m<#!GrnQTOngcA#7S!>C?5)^`Z#1u7?($scT zLP4(?E8x|j#A>ywbHgd8opg|cJD3LG1wDZNr03+o{52seKK(jslkv36Ks%e<^NSmO73()X# zTDm6$di4P#YfuDZ4AvH}$VM0g&UqTmoLa2~0R{#tuRTZ5D@aYCR(HZss?@wNxrWj%FZ=2fhyLH`{?3|J7iqba;+(_#K&h0{Y_*FbSCL_$TIm#p^2BjO9LF>2{tG@9 z@QUj!VF@t4_qbg(TGfBpvbH|9XDqhQ)hZK7?8gpgr7|&H6D4M*$`7YN`wtwu5FdQI z_!%Hc4DF0VjgY!8J#^>=fO~EqIW(B~@jw0X%acIQ=1gK+{hv=9dY0eNYm@HSx-$OF czc4rbef7v010qNS#tmY4#NNd4#NS*Z>VGd000McNliru-V6#394+UY_P7857mZ0o zK~#9!?VW3|UDbWqfB&`C-us+;?n4hujlsO^B-1bXkao<7NV)=ng25DH1I`Fp;08C? z#gl|KLo;KKX~|5>q~oSdV&SPx0Aq?R$As{(kwKsb$ke!LKXg2GiUb&$ha{x?IIq3e zTK|67=bZcC+=q|^S1SLRGiN{6+Gp?mf4|ld7Jz3qiUw=&HZn10XnSS(h#&~5i;Rsa zBbm@tLntCc!=OEaHt&ZySmzIDul}%b#=*RZ&%*+4USihY*A(pWa1` zkr?%)dY%O_lqbT4cLzrA4Y&@quempJ(YFIZ1+|7?4L&cq!P!V+m0AjkaO%M{?(Y)8 z_8q%R;)qI&ku8^RLBFc#SCuW7Z#lUMz*%_ibGAeMh7daszu92~zPNn=;~-kFiO`M~ z5R51rAFFaI!rCjZW!;(!xoGW$#26V}y^7J*t5|)-r_l~|$iEe~@7>OQ|LeXb{VZ;w z0X|M`2c<^y_> z`jeLc>V=^yCDub!vd(r?!2*Sc>wh#1K)aP=j1XhQ8iSE=>S=(^_pV2`PO|}~B!f&- zdw+SwUvk$^?^@E&v!Is#yWh21lL(1$XhM((Lqkdt4M_r<9?eLSl8%B`j45A|sN!Sf z;Gy~{WeNQFk*$irj$M07i+}YhcI+;<*R5Fvz$GtSd+K-rz8yh@X4_!BQcIM?C|)5U zVnk>*+Z07a3|MQ4QSni6?$q-FrgP0jYcE7Z7+t-pb3zuwQ%g$)JhM?W7(=j;B3N>- zWR9MnZ*wIWLt>S7VHnFJgU(QK<+FZoL!D?0!M4f!&KC{F;;rI?yzTt@drq=Afq;l` z@#t@N^nIxVM%S#GsSi#T0x$@gLI?(HBB`^aHsB+KXs|J2Qf1veGxhn?pS1)vBt$d? z?Ki)7URif{|M?J?%*%M{@xM`xI%UZVh%p`4uXO(ePy`g7-uWEs)|4t>boHv9eemOd zvUOfc5F^NA(z%%SYzbBE*$^Uz^;dlQgfoZB6Cptvy|;^q*m3hLg%{Kbz5&~=wrqH) zMB-zgGE~}%PYhVwdByE@E8&9-_&IE{y->{N?MBeXK!?D{$UmG z;|w?OuHT-d$Q8*97MSc@-vs!b2aA$(ZV;lD=a&}ZrT1MLbtRYXd}J&C^Apzyz~Gjj zar4c;#lC%qIsg1`^}USWGKjtTW_E3RSOr+WZVe#@bVi;)da7dWw4+`3^4)SKoP>zg zh;_o3c2zKDN`z^IXp|eC9E1--*xvE;PX~Fd^z$`NjSnH`rX5x8zPL#tkR%`>GWuX? z13Y?-B~644_j(%4jd5_%0Fs53Uv+P+=k$zVLh%5L6=}D3w$wJYQ1TBo6w;Yws|{Nza&|JfqO{P7}2DSx~OZ&Ev+#}BmJ?06c$r9Hws z@vr7>zp(wWt(qih8PL(l6`#J2#3fiOIBVJe+Tq@uhrf590$g?7=Dv5jbKAo`I=*1T zRXlLlpQ8%bf8h^#e%r%GeY0yfT(#&o^307^$s^rbhO57uAVx4ER4NGv4o=8YAb?{G z)E>JEn0+8dMK$7*3{_>In)UR1V5ToW7vkrFjW_?{yBy{eGyw^Qk&)_*Q1$yT2LW^| zTtozoIzzv!9vwwqu;Hp6r_aUl)5jc7XhtDPAVDz*lap<{4~PiWikpMGOL$@THtLg; zv|24hgu$U9+N~BLMs~P_7$YGRSnEi$l;C4&1^4j-I9Js?{);!TPm6cM5rL?iYn=r+bcyYQu0l)2SGmmp^EFGv8UL~6T$#0pgt znP?j}JW#N0qwR>iz0Y-?_g)M2Tt%I+GKhedQ&lm<*dE(x^8&5 zFWIjjy%1H!drzfW!5G8H$g-s`0VF^hr3j{ztB(j}buV7YL&OA2u#r|vXto21K(%IY zX5m!sW!G))ZQsA;&+$dh^E?fa!z~p>CL4+&un1w4J8>7NJ@RbW0S>r zCB!nE9lc-zz5RtC?Ycn!=3n(U8biPsgK9)$Buz7lB47Fhu=@V4rRsTdQ_{=juf8WT zm8&m{J0HK=kk#p0}n^(LAjd93BWMHL2Q)!DKz3HzBX^IttbB+OPh#_)h>_J{dVl$!`dsaEeFjZ0jkw1Aq2!2jJ1SN^zL&>6Tr5s3}WEYha#8UU(7i9&I!jOs*BBV*u(cQwwI{NtMd$t3Lv4*#rh9aNeT^n7!iu6Cs zF9A$9O{_|@*}!{`F-zaNbjEO&tw=M6>Y0YdgPTY` z`yh52GTQAH#uz5=xf;nVwrYF!!d#GdbJuf70O=HXs49X`s}1&I0!x|zTuo@Tl*^`Z z|DMlT@)5)6J)Umhbo=!N4Ah3%lFckqG@S8?Ch{}ZB-U;nj_mK^wh z{(&?}*m(0FEQ$!uJNKNPA$azO&+KiVd+yo2F~c7e8qrWmBMFdsL!*>U1%-Fu`capB2ut}GuQNgO;iRrYOdS@ym0k&GW~oQeFhu5BihZ2saOaqnMDrBIEvY`pmo zj_-q{aQS`H8&Q-;uMvEhsypnueO+YFb_3_q|J_QRZed5iW5!rQ2!s$wvoe2@rrFYu z1g>0O)A`c9VCGE+A3EHWxuSpo*#bfD`NjqBeN;6`k}Rl9AN`Ee>FMTX+xF7Wo1Pfy zd++ycXcL?zDtz*RLcZLma%Xh)DxFOb{UpH0H(Z4Go+8glvkYe)gF{37=Ep{twggCA z8Sl4NI`MwRT1(OC3CoiC&(8(fBC{RyjkC@zx?<$>J8FF!Q);yV5*yLX5xkNlWlke8 z!VOOvYPEr~PK`r-uY1WSu8}7n{l0d$0iAtp$L>AE5J{4RBF}Nw;eA1#x0k*Oc>Tbs z(Yf>5>tlVN@14`s_&SGljf^4h8IuEM9RCMxpM4#5;;dRsy_nVDh-?{JGM&i%sv&zTP`k355#A2ohs28~9G)D|dd4J8rvm%J4gd z;J5^<_wL=tOE0~$V0F*)+aBhE4OjKXcj4t%UghOie%agqzc23P)mMLYO!uTJon}=- zYL6``(~Sc5>+m`0ZGhu(k*H;va~JvF`{rM9&a5%tzx(TaxI+Z-#eFl%qR%<|EM9)) z)fwvatg}9J%#_`&_Q{W-^`MLVu9)Asda8NjeFEq}x4dh*-L&temwPe%y?bB6rO7uNcC6&&8LY*p)7R^o79>UAAR%hSm7gX2X$&kS0Q6BbVL3 zuoO6&vhcN6Udzr$w)VdJ!FyTm{jL!}7x@dhc_$*oJB1zc;Nv^8+`n z=g2po+F!hn@)KwTzE`mKEps~X^PAS6`9XkhKDGb#SwofsN8U&Gakc@Td+Jeq@PrT; z92_FXK=6TPv(YPuYPDM|U%s4wx_ZNLyXn9G7otrsq$ZYKIBLjTzYd z(0XJji{zPOMaAOFviClM2(z#&KX#1X|-~kGxOF&?t1Qj z%L}`=X?=21JKe@Iz1uihM7QyQH(%GRQk71(u`DSGkftfkMgwaNje4ExK$WTt;GCn? zYW3>nk0-P|G=pFejs#1^LZi(7t?Xw1Do!Y(Fi}`0TSA&kUpt`P=U@hsq>i!iI?fsp z7^tRHswoXX!7#wtrkJqVIrZA&RdG&u z{f&utZgWJz5Gl&w0@exW%2?nN*0e zlydD>+hkexv*R8wIhM)Z7sL?BiyT!Y&vWv2`H8Ajt7%z-7t4ISF@iIKKgLvY5zD36 zLNru-q-dgrN;F0gDYJhr1iXTOhj{?+Ju#L#QjDSd9|!=4$0l*kQmLfmc_2>f08&*Z zCmV0OUMDtEB44C~SX0&wDi~`ztA%#njR@9RVvJO)HElNQl4X@&Us4j_n(J>UxsRzO z<+@zIP@&1`rwuPyT{It*9gN*&U{o}S^joSn5{YU$38BSHf$qP5L{-wnVT_^CY+^3fms9c1*+iWT#nx@&L4}NIL zNPrKl94vd`q^uay$PBLU7Me_7UBp^T5tOKOYUm@r@a4-mit3_@E7#O*#&RiIgJLLC zz}@VhNSO_cDmaOx=IB&F2$2v~MI2%TYYj>jo&c=Xy-xN?VLuVjdRlDdJ%(j7HhTB zlBMOMgD4sUY2x}4#Ui7Ai6T@azHJ$p?oza+*e{o=Rn?y8?gtsj><{#aS>{q#v-T$Myq zV*Ip~Lx>R$zB$|AYaPoypJ7n)AULbNzqBc4W&f-Z@{SEqvr5AoK6Al} zv|~9Qs4V7p4ji0lI45yF6&5uhrd%^A%Pe7p#8k3?y*_j#?opxO_3LJ zQW3z3fYfTW<%LG*R3e3l4H1`?hLsP7A_(;y3N0xh5B+-<=M|048Y5th^i^Trdzy`c zJdbEp1_vt?bHqDTRom?rF$B^yo!5H`AyBDQW^@~)P^%4g)@l0xn*f$qogT=nVu5CR z=3m;lsMNAJ<1cNZ3O+(3$WiH@7)#d;z*&PL7-O)u{5b0{ru6X}&4S6v7DN~v9GLT( z-R0?|(`?dRJlcqmq$wek#-DSJqR4v$dm_7yPc{N*0+V$wWC@5BRxT5AgwvNRD^3$) zA=DCKMJ2KdWjG;t)U#TY}9CM;Xl z-%D$?T4+?#G(!~?DP4fBrJol$!Iz=nyq#mM#TcvIZe!aqE>1+Z@kx~qzHH0nflaH= zNQ$EJo4<8Nv7#MhprP3dXAc$U|NKA*Kl!D5<0C8MIS1>q|G(~hYu{%sI4wz%Bq3fa~EVS~&9PrAkZyh&-s|<%*VX7()V=TV#QmIrl%PKN<Az06m{GO>FJkyI*_py}svx zT8+tx3A`^Pi3w?z(rUISikwEhA(d(s>#R;pOh~m_rQK?&wN~DZZsU`V0KWOu{sW!O zUJc;yf9LSNzCoVMEx8(iu3=ZHRu~=`=|uoz4AO43NRkv^cv-f5`Mc6>{Qm%3rqG%e Sa>^C}0000f7v010qNS#tmY4#NNd4#NS*Z>VGd000McNliru-V6#3A|TlBk$3Uu!bZp`z#Es*E#KM3;2nk6DI_=I-sZ`3?Xfm<@jZg1R=bSzC zhjZ_J_ddNz6TBx_Rk!Xvckg}fId`qS)_)CqA7L8WahC+A6;^vjM--_IESxV0LTo%E zBZ2ve&{;~=d%xj2679Z+AR2oJ-O3lHjo&4e!k8E zPHC(T)JKKPdTJHHn6Y->8J|rv-a0w0ea*M$R-9n#555%n=2_8t`nKEAOzFmTI569nqEyHAD;O<6Kp?>OoqJflqA&rgmM`t$gRM_}Z%QO6stBYNCks6+ z5klx;2oc4a8-M+R3zEqqAtJEuORa&1=N_(*TOk<1HsPr+R=D|*f{9OVEaMH>NTH?} z?}Cs;!VMkfKl@MxFNzz#Txb3LO`d(YHoMHb_w3m9%79((r`0Q#0f8MmU*@5EHo>(w z!J`{_=$=hH1l<4V#-2HtXngm)t5+_wmneh$uAZR-TXkc6ALKD z18mz=?!^&`c2KiiQ9g9frrxVJb7c(IZ2QSmtXjU5t*>n!oZ+25pUZ0)#vt5+;TD59OW-Mn6Q z9o!;u97&~Il5)8udk$@tmCJrbloFJJ8?IkbXoCIEa{r?nC;W{ayY`F$$nNZ4F|qc! zU?!mJ=jW#&x1QhKQ=(KZyu&=VC=s5w71n*FiOU0}xUktTZmM$Evt_LHL{ZV-*}yk` ztxlc=BvELf-Z{T=aLZTg#mxCy2_K5~*~NJ2y{}raw3wj*w!XF*W0cf}hG^95gb>h5 zljRwyO&J=RN3+?$7=zYIl2V!a=mu%|N`%=ffe5afV z+5B5NRD-9T37_6xMg)>l+zaf8Vt~O)75|Hbfc2i>2m6NrkAAF$E){WtEDhZ9)dB-N z@#P9}B;5RmjRFXMt;+g8v$Mt!?AY?xp&QNf-lMgWlP8WdJiG|!97(B!caAto$kLPm zwA*c>C?a@IZgXnY8flghyeCOYEL(F^A@ol_5xRK-ks^E8{jDOo^va+%5Mk|2zj5I~ zpiMn_5Sp2wbm7OQX@+xwQY_?l%%(Y)5yDucFL+O66wPLe)`BR75Gcoirh`i4X{Lc~ ze^4&c#Xe9?0^1%gaVpnD@$5>RtX_Y+0Q_+G^VCO2an2#4Fvj4VLn(!`4(EzjoFqiX z5PTqtB66FfjUftwW}`upjGcQjM8EBsCxReczj9e248YoV(2YFphhBX8dm)PABA^pI zH~#u>5}63C1*0{G4xi|a`Tk%1c>uWeH$OAs1@C;uBboXyuphPH@B90s#o%CEk-2FVQW|Q1n+N~Cs3=h+8 zwLpZ(MC5r+ZZnKFRBJVwjV4iKs5j~i4=w;t#`wwTv)AAE4u?5~5P>+w{Q2bp6E^KwrO5NFhYPx@x|sbIL2%yVoFjxl zmSx0I-0Pnt3C(7G?&Siy6)qw|@ZmJ|e?~KQ$@<<*pKQkW_c@=`@nYYc zM1*o_+7t-ZS_s|Hb|(SmJwXMO(m0o+mBxFA*17?FCh zSepZd2Qb=b7M_5aT9x)Q_Vs-SFj~=SwK2wU?T4?P(lng$jMuRCOHH1Bu!af_V~YQ@ zZ50N`C;n^ev@tJytq50haV9NiCIBCN?(?{kkUJPz_s8V9rQU2|qKKo%PGFs5;VXYg zHGiAj3AqO^3JD&426F4YBh7807G-jC&=rXB$I}XcD(rNcL!^bW@{Fd6oByEBQ(vw0 z!qIK3alkEKsUs5bLF2;UOniCU4>)<^I7%yOwINDL!pO)e;y6M?^*ki4G-=vKM9A}; z`3n}1wo^oecDqFs$E;j;+w2yAZZb$A)VBPG0p@xX72^pMwiE)^X@UZRp!J}uHxZpU zIZ`ml80zf?N-2!iz3&$;m_H$-#~+_KIRZaQ!(+R@NeF>Yueg`*|KoRiWBo&RfSR02Xb!xr8|3{ zzxCqRv3bTlAN%~IjGm6}UcO;cJiF!LGR|uf?Wn&Mh~^7KnsN-!KUg8SqO7eHd%P7? z-|>JpF%d)a=Fx7q`mXa?an3=f{=b_xR!R}a3GK9vQi>2f!F%F3A9$BTw9IgRmu`~Uu)FWj+lT0yw= zm+s`Tm%jyJtnl*I6&rfv^5f7v1)1|yh6A($sVL$Ne~OD^bSI)$(F*T8Cr3`=yr=xk zy_`Bcr~;gKR4Ub;0KByO6&|{0Qvmq8W4mPZ)F|aj89XGVgm$}4xm+$Hhf1Mz;U><7 z0#WnS@0Ae+H$Bqg#;**j&!_)mf)k;1iLma07Pmh#C=`$XrwaV%Cnr7m7w*_N!0fKN z9Z>@|caHu04;B{>fgn%GatF>NCU{(u& zsS53O;MTs`zvGb#*?h&ijg8)S&puEF1=V@5;kgn3-?=%(T8o*&9bCC&J%6(8ez@YokH>K1)$-u+5gwR|bfR=d}>V8J|THJc=* zQdbEOe4tXT&VB*-)Uzd`$Z+|p%WyW}gJboc;tyK1tgzWpWVnZ+UMyYfA{~6!QwdMr zHOTy;u5C~=+`H!U{IBQ#Xbi4t&1bLw-1)tc7;gV^W8k|dzFfgN)u-AEw{QHh8)vH9 z?KW`~6UPbLcfHc9)ae#>bTC2hyE|_EWG6g4mL&v;<7D_CH^j;*7=z zxa~W6@AtQEew;;@UPi0gq|s~*h)1^ow4W9(Tp(%M##&3BWyDE>(T3X45Wo1Vt7f+b zhztYy{6Ii!P2O1(mPAvxPfF7vk2@6)L)e4dJgv8)%Ac~5dMx=z_ zenC;KR*E_`j`i6^(^LPKT(UrpA3qrY%B4hBEngZw@PVI`H{X0K08}ew$d{Gn7 z!3WmnWLY}On4thk2R(oH&J_~TBSZZinTeBk67C&+1md4Q>?x2 z7XI$o?%sF*_w5~|?RGIKvW%ouBFnP^K+c6w@cBOBbdkYxN%)*CX}b2uca!eJ>k$w)D_Fo4EhcjXmIZG0}Mm zR`1=rkNx`(PFvlx^S~BXE?M8}-=zZw-{8Q(pZ1P_^7>xhc;jd1bWI^hXR)dx*5{U# z=|%x3TH!O->AZLWK7bH<%>RpB--N|i4)poUm%jy9Uct@-Tlh(*f0vdlzLEn6-x$DM zS6=zSbC&FGwNG{qE6}^l@2dG#uWg3qOWzlOe(IKY_02!_?LW|q;qTqM9}`DY^e=>9 z-~I!5?;da|(AU)j1Lk0YCE@SJO5b-y0Qx~%=u|+6OuSXnbnWLA+zeFvoEruhp9~rg z4kzk6SLnPjVmxy9-uH?jthIdXlNWZUi!JxnKDhqt^#Rnl?K6s#O(BkiNPE^lHoX=& zQxmZDwavZvxf&ZV=ZpFMZeD*Sj4_6t&woE$h!Afd%?Abqpp`0&_f(TGZdvyE3+AjH z_x_#*fwPe=TNp^akT#%Jf_G}mmG`6o;N<)4KF=U<&$b_6oy9pvtu}=B z4rd*$R5UcTi-jB_+#8{@cv&_v*!qLXs5Ay}b`;Eu1>l#0Sq+OD;!iO}m|8jGD40a@U@JmWx^g z#Bofk*+gqav(cbjDN~jT#+ZS6`SVF_3oR!ogp*EF($Fljf5YAEU&#o$7e;eUy)DF< zOpF7%C29Tikwl`{FmkGa(Fz1A<(N`ACiuX}NWHg{R2&&4a()DmpXq>VF0C6 z!Q{Sr`A^<<2U+eqV(L2xKl1hTbKWLeJ0NS%4}sRojrC0qXc`7spQ-jTd_H>C|OV5BIH55Qi4d4{WH#C z1K6|716XVEzOa#^6y0Ya0Gt@9V~nO$ipesE?^^*BLZDu6zBe?$Z+z;vi`mE6mU7)$ zKV6~8WsByWQ*}|Xg0Z^|OpxG2CfcgjU zYV2+)m&6Kd$MzI52CQ?%K03ux84yMAjwFe2p0lbh+Hzkl3TcayIIO6FZD9Jde_9t? z(S{JF-ja5bvhR#XrPr2KGMecKsE6LkF@bYupXLD&dBz7 zPj7!fqZI)`DTUU>%V>jAV6CIs%Bk1e;GtHly!Qe@?;y2+dcz9yl0e-F!wZCFOHRxF z8SSZ=z_A>LOVG#zkH30k#>pV1gecOzN5g0(SX%(tTD6Q10oB-&uU+C81nOu-4+7r&LO4wbNpgE2F4YE1gZD98qM5qG&?ff6?ax-f^2H zEC5FKozPbfSHq82FKL|Idot4d>y=Y+3l9&)ZsdQw{Prl&^Eu;4SN~%7;n#Ve-kY>x%@xu6|H9Pt Z{{fhBf7v010qNS#tmY4#NNd4#NS*Z>VGd000McNliru-V6#3853KLA65VW68K3( zK~#9!?VbCR9Y=M?Kc~BA=05f%tpMAS^|Av=<)GSxW)2D@1=W6S`^$ zWn_E;G%9nYWg?9n`g#;L5Iy_EqpGT?R>#Ij|F1!$`hMWU_ph60Hmi3KOah_?=agD% zNv$HH1U0zKfGG7W;*HSG4P_LZK)L$m*BwPwRF%U=Ujpbeg7CxVjuK-eMqO9Wv+4*H ziC|C+;QHKNL_q|C3Th3(8hlaB24^FQRhlUz!p5Va*}uR9&p!V`#T-$IF|Mn}ajSN) z5LFOSqFO=(9|dc{2z=q$24DYhi&DW_A&-{S28<{VJl+82Hy#s+aB%-#L?Fhz7n^ngIy8!`(;>DiE^iVCn)+6$=a#$teW zX{bxY1PD>dBmzoQg9SbZV29OZ35+N00 zuBZxSfHFdofEZA%#DujLW58I0s1i4z5r|fUeE8_gmBqhr56{0)eLuK=&$@e@RY%C@ z5me~r2J4k(q9jJ~3JDP-Lbsb!mJu-(6U3l<`YhEaPWUL`Lx7Z&0=NGG-?}J>>e&}oK3n%!&WxSiEj1hPKu|+M zL{re^&L6ZZ5?Hn!){fis%oC5QMjaS(A|S@}UB7CeE89;%;khF(ad3a70uJokGq4YS z@ZIlR)Djd^0cq96bbu$QDhp18h~dyjK5^9<$rXu^pcsUp0;clwtw8Aob%O6eEMcxA z)KVxCs5!+a26K_~g9^ne?Q2TC$H?KMFOTT;VLG^fFQ6Pg@*;QLc?SpY+{@u3FAY?{ z0wXMZUrGztJ-B}l^d-pQBQGu6??M;jD%k*|e!d}iXt#vCEks}80Dp7*HXeSlNwaAv zfj@h$&R-wD9V6fj_#lW^x-B!n2|%j$rPp85zLx30{yiMrzo$R&{h2Ff#1T~GeJ`Nq+$K40+xTs69aE$}|_Fj7xFzn~ITi~NInM4vRgbY;RZ-4U@%J(ZJmRbt` z_D5Z;d4)oSqVMT-J5UBCpA+7@X%QzF!4ZI{FrF;7uTh+*n#D(7=D_|vpjrVxeI~g7 zzI&zH?N&2L3`&K9-nsX8F-BAbK6Kaq0Vwo?XOAp`$B6LFd%FW1pq4J;0H67O9q%JaQuPmB`SKkt%0iK>!U61dPP^4YRk6lWlm)rZ86TgZ(`n$5!Mn}Yx&S!`zs?bMyxY3bN(FD(_083P?jam zxxUdBan9krr`PKufRBNCy-u&!#af56R`wqHXk}o2?@?8BXt0&L58N^EBu4fBz&5-F zDj<)PDs&3L*h)9&c|izDEfq>XI>4%nNT0??;tZWmj5|?1D z;H>5Jne&5l9{ct;6yRf@`pmNb@R6q<8}RY*6R#3u9Qe$)@7{IU|LmRjeC(26%;7(^ zN)cJeW%&5NCWsM?2(?z z$GZS?3Yvff!{lUrM1`$-t}&ElF|Z33M0GX$J%SKoB!qyfQWOPgk`DT3Sw^SRT7R*C zg$x%FL8D$E{?`k2qmU#FFo;$w$NPYYP_L~T0>OI^x&Up*{^W?LQH-&KP-2ZG#(=f9 zGV)Y$E+NmmWVJdWto>-{1z^2P5<-jvY_rqJ$@2m+hV>NaOqO5}X=-UUYcv{_db<<` z@WJB}hqV?}B~6kF9Tce7n-oQX_W_qA?YHf^vNPURy1fhrqXFltciQs? zN1%~G85ZGavjm>LUdi3^)E5Y~D#ky1&sQi*Ppi|#B?)KWIgby4O)viy&GIeEAe0fJ z7(^rXGWa&eKwkPvEM5hEPfTP!HV0Il)@R}=H+XJ)Gba*kH7jWGsi?cn!KQB-kl zp{nfIek-!B|sjOJP5rKBt}F9XOuK5MTmq#D5KKp37t;B zw?k!Qnbm=ug#ntJoFuE&5P|9G>B}1YVcLG{Hg;^kby<713O5^4t90LtP*%tFw8~dB z0Ya%{CR}hlB28Sv_{78rLYHNUxPDr+NEHrNRg5vDX@>6uMXC{vku=RH%VHh4fewf( z#PU-m1cRCiy$OXF`<>rn)6^vAXJ*+lz4-#h81AULX6a(_#AU* zMnyn~fkvZAuh$*M>lI*fdQ#@+=BYR85Fx8&^m;w&^?HRI8iTQwo46hlL|x~+R;gTL zi?RC7sYnRQSPDUe+GZgyl-4W+l(tu_K)1_^46u?U_+{wWvE%ICy^HPJwsP{d(|``7 zz$?d&bKCA+l=FeogZEIDhE$XgAx)CL?iMDerl{9zv|AlOG1hRdYbc9wK~QKoz5Bqv zJ&cbxCGYhJp|W8_gfvb27)ij{zCo-?x7)#ck1=cCx^z_%CsnLoE8U(=S$wC8+GSHh z(hx{tvSyi|hge2xsgTrGzVK=@`f~b-F&sO7g5A4zj{JVV5FeEJfBRB$z+){Art zsBblN9(jo5PaeVcZI7}j$@3n@7+PQZIFeax-NF#csjB38j~D{<16K3%Z3U>SN>NlW zu!vxtrB0TyUE!011}_p~0^w}(!*H~4L8 zYC^i54q2_XAOz5;G@8w|&j6qPer+V4A2smp`*JMsz;~+$8g4fRtgXVq4}Le}-ya+u z{3@?))X)3C?YsHkpZ$E%T(g$jcJCy{c*Vq|OIZvz+ek8eOsqVDRouV@>h*f0NlKb# zJa_cMG_R#G{3;#ZjzkFo(llH946rnwZ;bHC$I^bdH&h{&i-dz$Lg(^+%q3gJ>%UmP z;JuHkCP|W2x#aN&oQ{N>b2|t>KlIe(1&dZf41D9BoZv2W15ssSa*}SRGcwQ%Iekmh zz+zOyR9L{e1A-FANIYLrthJQ=T&^s+c>79}T_W6bv3}NFI@I{N=bOtWtTdYq5*yLX z5xkNlRZJr>!e@VIXf_)VBk<0UUUUQTzj^bNoI5vD>Hk_L2lnmJn{Ilayz$1H3earS zrO0z)h*eHN-#+lZq$u*W&j4?{-QEyuc+b2syXM=kdNIiHm7V z3x56ZOi$8;yw|HHMNyE|Y7}Kr8IbEi0$k|}{;C0>%SrmU7Bn+6H+Y`uE$`vYH{YUO zuaC5kH5)RuX%lD9zKu1OW^;^AyIr}A*Bb+D1p45CKN#^smwKfu{Jt*f1_P`@ml`5| zH$%EN7~m??g8R49s-NW+hg>%daHW$zmR@fy*aRyr7261OMNpVy$BuL2#K~W}|EniY z@#@Lf2FJg6SVFg+ty|K@7TVLS5KZA zv9q>qyJbzisHK3=MxkF>ye_8#UOo95F~$Lgf9%)^T$-@G&j2gY!rFn`hSm&ROBHaX za{||cVR%)Hz@-TryDu~7vzA5wa)#i=e%tU2Fg!!Gp8+8&)Jj{eeXY{PtpD}y5nPdh zSgHnwqkP_b?*7B8Tj}D-&yU@5@0VJ?vekG!s(>qI1Dt;S4T_>**HDc9TDfyietzsX z?)_5hr#BFbcgYQ`#CzNz;OO;5SHuV`%YtoNZ>iSPtwDPD(AM_=Ghcn?ba`XQuc8t7 zZqc!G=DomAA3n78CV;O#bNY=XT{ZzTH-`Hv8G+ZDe)8v{T`#1jD$d+fL*^ngUHgt} z$aGo+%FLkc$aoehGRNkc=L3It>Cd}s`xeczYPoleinYSrT!*NUojY#ET1&52;GDT= zPUO*-{zo>n1b8>7=b;+}gD?{;H4B}t0d#tPPH;fY31t-KOG~RKq{VX8oflKmhA9I{ zQpfCE8)pp&H0mj}dWuG6cD6OBB$XzPu`$QoT$_458{|)3S2n=4rZNhKNLg8*SSO&P zYXMt5!-NaeTvho@!{vE+d0rA@poo!Pub|!Tk!Cf}fH4)2ZH=KQN@izUOiVQC^>SiV zvMgCQ@6xPW1~646)0&TzU9?n*RpxKC7SM%&*M*vdmrve%V&Ab5W2ovHR!nq$wuN(+ zS}mn00&!>skgC#Zb#6$2t4*;gw%RWPqoP4%x#ewsvJ_Ur;;QFjr7aJ3C;-KM^pq~mN;jaoA2CUfNMxM8WYR!eIPq)AmGw%aKwiik#KY^+8Z*54jU>x}_6)t$bbS;Yd~d~{127nNof zN4B(yD)>pAKcNNIX08n6RpNvnuM9Ri&~w8g(AHP z%T<231Uh-@+;x%Nu1*xz3I$&8fO3g#kb}e+N(BAZ1bOA pIP(fO==!9G4{c3uyoHO?{{wOjThYk^Wtsp0002ovPDHLkV1oBAcPRh> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_wind.png b/src/main/resources/assets/alchemicalwizardry/textures/models/MinorDemonGruntGuardian_wind.png new file mode 100644 index 0000000000000000000000000000000000000000..9d713d0f8f1a04f0f23aa4af621ec61ba98288a5 GIT binary patch literal 5808 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