From 2bb242e6fbbe818ca1b7a069f0fcbd9f3b5a8e4a Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Wed, 21 Oct 2020 22:23:54 +0100 Subject: [PATCH] Add flamecatcher spell, and addItemExtras hook for SpellConjuration --- .../wizardry/client/ClientProxy.java | 2 + .../client/WizardryClientEventHandler.java | 5 +- .../projectile/EntityFlamecatcherArrow.java | 71 ++++++ .../wizardry/item/ItemFlamecatcher.java | 220 ++++++++++++++++++ .../electroblob/wizardry/registry/Spells.java | 2 + .../wizardry/registry/WizardryEntities.java | 1 + .../wizardry/registry/WizardryItems.java | 2 + .../wizardry/registry/WizardrySounds.java | 3 + .../wizardry/spell/Flamecatcher.java | 43 ++++ .../wizardry/spell/SpellConjuration.java | 22 +- .../assets/ebwizardry/lang/en_gb.lang | 4 + .../assets/ebwizardry/lang/en_us.lang | 4 + .../ebwizardry/models/item/flamecatcher.json | 105 +++++++++ .../models/item/flamecatcher_conjuring_0.json | 6 + .../models/item/flamecatcher_conjuring_1.json | 6 + .../models/item/flamecatcher_conjuring_2.json | 6 + .../models/item/flamecatcher_conjuring_3.json | 6 + .../models/item/flamecatcher_conjuring_4.json | 6 + .../models/item/flamecatcher_conjuring_5.json | 6 + .../models/item/flamecatcher_conjuring_6.json | 6 + .../models/item/flamecatcher_conjuring_7.json | 6 + .../models/item/flamecatcher_pulling_0.json | 6 + .../models/item/flamecatcher_pulling_1.json | 6 + .../models/item/flamecatcher_pulling_2.json | 6 + .../resources/assets/ebwizardry/sounds.json | 4 + .../ebwizardry/spells/flamecatcher.json | 26 +++ .../textures/entity/flamecatcher_arrow.png | Bin 0 -> 2303 bytes .../items/flamecatcher_conjuring_0.png | Bin 0 -> 1598 bytes .../items/flamecatcher_conjuring_1.png | Bin 0 -> 1574 bytes .../items/flamecatcher_conjuring_2.png | Bin 0 -> 1599 bytes .../items/flamecatcher_conjuring_3.png | Bin 0 -> 1601 bytes .../items/flamecatcher_conjuring_4.png | Bin 0 -> 1636 bytes .../items/flamecatcher_conjuring_5.png | Bin 0 -> 1612 bytes .../items/flamecatcher_conjuring_6.png | Bin 0 -> 1638 bytes .../items/flamecatcher_conjuring_7.png | Bin 0 -> 1661 bytes .../textures/items/flamecatcher_pulling_0.png | Bin 0 -> 5685 bytes .../items/flamecatcher_pulling_0.png.mcmeta | 12 + .../textures/items/flamecatcher_pulling_1.png | Bin 0 -> 5612 bytes .../items/flamecatcher_pulling_1.png.mcmeta | 12 + .../textures/items/flamecatcher_pulling_2.png | Bin 0 -> 6202 bytes .../items/flamecatcher_pulling_2.png.mcmeta | 12 + .../textures/items/flamecatcher_standby.png | Bin 0 -> 4905 bytes .../items/flamecatcher_standby.png.mcmeta | 12 + .../textures/spells/flamecatcher.png | Bin 0 -> 6011 bytes 44 files changed, 622 insertions(+), 6 deletions(-) create mode 100644 src/main/java/electroblob/wizardry/entity/projectile/EntityFlamecatcherArrow.java create mode 100644 src/main/java/electroblob/wizardry/item/ItemFlamecatcher.java create mode 100644 src/main/java/electroblob/wizardry/spell/Flamecatcher.java create mode 100644 src/main/resources/assets/ebwizardry/models/item/flamecatcher.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_0.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_1.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_2.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_3.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_4.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_5.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_6.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_7.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/flamecatcher_pulling_0.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/flamecatcher_pulling_1.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/flamecatcher_pulling_2.json create mode 100644 src/main/resources/assets/ebwizardry/spells/flamecatcher.json create mode 100644 src/main/resources/assets/ebwizardry/textures/entity/flamecatcher_arrow.png create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_0.png create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_1.png create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_2.png create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_3.png create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_4.png create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_5.png create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_6.png create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_7.png create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_pulling_0.png create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_pulling_0.png.mcmeta create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_pulling_1.png create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_pulling_1.png.mcmeta create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_pulling_2.png create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_pulling_2.png.mcmeta create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_standby.png create mode 100644 src/main/resources/assets/ebwizardry/textures/items/flamecatcher_standby.png.mcmeta create mode 100644 src/main/resources/assets/ebwizardry/textures/spells/flamecatcher.png diff --git a/src/main/java/electroblob/wizardry/client/ClientProxy.java b/src/main/java/electroblob/wizardry/client/ClientProxy.java index 95a72691..151e3e30 100644 --- a/src/main/java/electroblob/wizardry/client/ClientProxy.java +++ b/src/main/java/electroblob/wizardry/client/ClientProxy.java @@ -766,6 +766,8 @@ public class ClientProxy extends CommonProxy { new ResourceLocation(Wizardry.MODID, "textures/entity/dart.png"), false, 8.0, 2.0, 16, 5, true)); RenderingRegistry.registerEntityRenderingHandler(EntityIceLance.class, manager -> new RenderMagicArrow(manager, new ResourceLocation(Wizardry.MODID, "textures/entity/ice_lance.png"), false, 16.0, 3.0, 22, 5, true)); + RenderingRegistry.registerEntityRenderingHandler(EntityFlamecatcherArrow.class, manager -> new RenderMagicArrow(manager, + new ResourceLocation(Wizardry.MODID, "textures/entity/flamecatcher_arrow.png"), false, 8, 2.0, 16, 5, true)); RenderingRegistry.registerEntityRenderingHandler(EntityForceArrow.class, RenderForceArrow::new); diff --git a/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java b/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java index d5d62f29..7f3cd6c2 100644 --- a/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java +++ b/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java @@ -4,6 +4,7 @@ import electroblob.wizardry.client.renderer.overlay.RenderBlinkEffect; import electroblob.wizardry.data.DispenserCastingData; import electroblob.wizardry.data.SpellEmitterData; import electroblob.wizardry.item.ItemArtefact; +import electroblob.wizardry.item.ItemFlamecatcher; import electroblob.wizardry.item.ItemSpectralBow; import electroblob.wizardry.item.ItemWand; import electroblob.wizardry.potion.PotionSlowTime; @@ -164,7 +165,9 @@ public final class WizardryClientEventHandler { public static void onFOVUpdateEvent(FOVUpdateEvent event){ // Bow zoom. Taken directly from AbstractClientPlayer so it works exactly like vanilla. - if(event.getEntity().isHandActive() && event.getEntity().getActiveItemStack().getItem() instanceof ItemSpectralBow){ + if(event.getEntity().isHandActive() && + (event.getEntity().getActiveItemStack().getItem() instanceof ItemSpectralBow + || event.getEntity().getActiveItemStack().getItem() instanceof ItemFlamecatcher)){ int maxUseTicks = event.getEntity().getItemInUseMaxCount(); diff --git a/src/main/java/electroblob/wizardry/entity/projectile/EntityFlamecatcherArrow.java b/src/main/java/electroblob/wizardry/entity/projectile/EntityFlamecatcherArrow.java new file mode 100644 index 00000000..d45ea22b --- /dev/null +++ b/src/main/java/electroblob/wizardry/entity/projectile/EntityFlamecatcherArrow.java @@ -0,0 +1,71 @@ +package electroblob.wizardry.entity.projectile; + +import electroblob.wizardry.registry.Spells; +import electroblob.wizardry.registry.WizardrySounds; +import electroblob.wizardry.spell.Spell; +import electroblob.wizardry.util.ParticleBuilder; +import electroblob.wizardry.util.ParticleBuilder.Type; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class EntityFlamecatcherArrow extends EntityMagicArrow { + + public static final float SPEED = 3; + + /** Creates a new magic missile in the given world. */ + public EntityFlamecatcherArrow(World world){ + super(world); + } + + @Override public double getDamage(){ return Spells.flamecatcher.getProperty(Spell.DAMAGE).floatValue(); } + + @Override public int getLifetime(){ return (int)(Spells.flamecatcher.getProperty(Spell.RANGE).floatValue() / SPEED); } + + @Override public boolean doGravity(){ return false; } // Zero gravity arrows! + + @Override public boolean doDeceleration(){ return false; } + + @Override + public void onEntityHit(EntityLivingBase entityHit){ + entityHit.setFire(Spells.flamecatcher.getProperty(Spell.BURN_DURATION).intValue()); + this.playSound(WizardrySounds.ENTITY_FLAMECATCHER_ARROW_HIT, 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + if(this.world.isRemote) ParticleBuilder.create(Type.FLASH).pos(posX, posY, posZ).clr(0xff6d00).spawn(world); + } + + @Override + public void onBlockHit(RayTraceResult hit){ + if(this.world.isRemote){ + // Gets a position slightly away from the block hit so the particle doesn't get cut in half by the block face + Vec3d vec = hit.hitVec.add(new Vec3d(hit.sideHit.getDirectionVec()).scale(0.15)); + ParticleBuilder.create(Type.FLASH).pos(vec).clr(0xff6d00).fade(0.85f, 0.5f, 0.8f).spawn(world); + } + } + + @Override + public void tickInAir(){ + + if(this.world.isRemote){ + + ParticleBuilder.create(Type.MAGIC_FIRE, rand, posX, posY, posZ, 0.03, false) + .time(20 + rand.nextInt(10)).spawn(world); + + if(this.ticksExisted > 1){ // Don't spawn particles behind where it started! + double x = posX - motionX / 2; + double y = posY - motionY / 2; + double z = posZ - motionZ / 2; + ParticleBuilder.create(Type.MAGIC_FIRE, rand, x, y, z, 0.03, false) + .time(20 + rand.nextInt(10)).spawn(world); + } + } + } + + @Override + protected void entityInit(){ + if(world != null && world.isRemote){ + ParticleBuilder.create(Type.FLASH).entity(this).time(this.getLifetime()).scale(1.5f).clr(0xffb800).spawn(world); + } + } + +} \ No newline at end of file diff --git a/src/main/java/electroblob/wizardry/item/ItemFlamecatcher.java b/src/main/java/electroblob/wizardry/item/ItemFlamecatcher.java new file mode 100644 index 00000000..b9d7e99b --- /dev/null +++ b/src/main/java/electroblob/wizardry/item/ItemFlamecatcher.java @@ -0,0 +1,220 @@ +package electroblob.wizardry.item; + +import electroblob.wizardry.Wizardry; +import electroblob.wizardry.entity.projectile.EntityFlamecatcherArrow; +import electroblob.wizardry.registry.Spells; +import electroblob.wizardry.registry.WizardrySounds; +import electroblob.wizardry.spell.Flamecatcher; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.IItemPropertyGetter; +import net.minecraft.item.ItemBow; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nullable; + +public class ItemFlamecatcher extends ItemBow implements IConjuredItem { + + private static final float DRAW_TIME = 10; + + public ItemFlamecatcher(){ + super(); + setMaxDamage(1200); + setNoRepair(); + setCreativeTab(null); + this.addPropertyOverride(new ResourceLocation("pull"), new IItemPropertyGetter(){ + @SideOnly(Side.CLIENT) + public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn){ + if(entityIn == null){ + return 0.0F; + }else{ + ItemStack itemstack = entityIn.getActiveItemStack(); + return itemstack.getItem() == ItemFlamecatcher.this + ? (float)(stack.getMaxItemUseDuration() - entityIn.getItemInUseCount()) / DRAW_TIME : 0; + } + } + }); + this.addPropertyOverride(new ResourceLocation("pulling"), new IItemPropertyGetter(){ + @SideOnly(Side.CLIENT) + public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn){ + return entityIn != null && entityIn.isHandActive() && entityIn.getActiveItemStack() == stack ? 1 : 0; + } + }); + addAnimationPropertyOverrides(); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.EPIC; + } + + @Override + @SideOnly(Side.CLIENT) + // Why does this still exist? Item models deal with this now, right? + public boolean isFull3D(){ + return true; + } + + @Override + public int getMaxDamage(ItemStack stack){ + return this.getMaxDamageFromNBT(stack, Spells.flamecatcher); + } + + @Override + // This method allows the code for the item's timer to be greatly simplified by damaging it directly from + // onUpdate() and removing the workaround that involved WizardData and all sorts of crazy stuff. + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged){ + + if(!oldStack.isEmpty() || !newStack.isEmpty()){ + // We only care about the situation where we specifically want the animation NOT to play. + if(oldStack.getItem() == newStack.getItem() && !slotChanged) + // This code should only run on the client side, so using Minecraft is ok. + // Why the heck was this here? + //&& !net.minecraft.client.Minecraft.getMinecraft().player.isHandActive()) + return false; + } + + return super.shouldCauseReequipAnimation(oldStack, newStack, slotChanged); + } + + // Copied fixes from ItemWand made possible by recently-added Forge hooks + + @Override + public boolean canContinueUsing(ItemStack oldStack, ItemStack newStack){ + // Ignore durability changes + if(ItemStack.areItemsEqualIgnoreDurability(oldStack, newStack)) return true; + return super.canContinueUsing(oldStack, newStack); + } + + @Override + public boolean shouldCauseBlockBreakReset(ItemStack oldStack, ItemStack newStack){ + // Ignore durability changes + if(ItemStack.areItemsEqualIgnoreDurability(oldStack, newStack)) return false; + return super.shouldCauseBlockBreakReset(oldStack, newStack); + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean selected){ + int damage = stack.getItemDamage(); + if(damage > stack.getMaxDamage()) entity.replaceItemInInventory(slot, ItemStack.EMPTY); + stack.setItemDamage(damage + 1); + } + + // The following two methods re-route the displayed durability through the proxies in order to override the pausing + // of the item timer when the bow is being pulled. + + @Override + public double getDurabilityForDisplay(ItemStack stack){ + return Wizardry.proxy.getConjuredBowDurability(stack); + } + + public double getDefaultDurabilityForDisplay(ItemStack stack){ + return super.getDurabilityForDisplay(stack); + } + + @Override + public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand){ + + ItemStack stack = player.getHeldItem(hand); + + int shotsLeft = stack.getTagCompound().getInteger(Flamecatcher.SHOTS_REMAINING_NBT_KEY); + if(shotsLeft == 0) return ActionResult.newResult(EnumActionResult.PASS, stack); + + ActionResult ret = net.minecraftforge.event.ForgeEventFactory.onArrowNock(stack, world, player, hand, + true); + + if(ret != null) return ret; + + player.setActiveHand(hand); + + return ActionResult.newResult(EnumActionResult.SUCCESS, stack); + + } + + @Override + public boolean getIsRepairable(ItemStack stack, ItemStack stack2){ + return false; + } + + @Override + public int getItemEnchantability(){ + return 0; + } + + @Override + public boolean isEnchantable(ItemStack stack){ + return false; + } + + @Override + public boolean isBookEnchantable(ItemStack stack, ItemStack book){ + return false; + } + + // Cannot be dropped + @Override + public boolean onDroppedByPlayer(ItemStack item, EntityPlayer player){ + return false; + } + +// @Override +// public void onUsingTick(ItemStack stack, EntityLivingBase player, int count){ +// // player.getItemInUseMaxCount() is named incorrectly; you only have to look at the method to see what it really +// // does. +// if(stack.getItemDamage() + player.getItemInUseMaxCount() > stack.getMaxDamage()) +// player.replaceItemInInventory(player.getActiveHand() == EnumHand.MAIN_HAND ? 98 : 99, ItemStack.EMPTY); +// } + + @Override + public void onPlayerStoppedUsing(ItemStack stack, World world, EntityLivingBase entity, int timeLeft){ + // Decreases the timer by the amount it should have been decreased while the bow was in use. + if(!world.isRemote) stack.setItemDamage(stack.getItemDamage() + (this.getMaxItemUseDuration(stack) - timeLeft)); + + if(entity instanceof EntityPlayer){ + + EntityPlayer player = (EntityPlayer)entity; + + int charge = this.getMaxItemUseDuration(stack) - timeLeft; + charge = net.minecraftforge.event.ForgeEventFactory.onArrowLoose(stack, world, (EntityPlayer)entity, charge, true); + if(charge < 0) return; + + if(stack.getTagCompound() != null){ + int shotsLeft = stack.getTagCompound().getInteger(Flamecatcher.SHOTS_REMAINING_NBT_KEY); + stack.getTagCompound().setInteger(Flamecatcher.SHOTS_REMAINING_NBT_KEY, shotsLeft - 1); + if(shotsLeft == 0 && !world.isRemote){ + stack.setItemDamage(getMaxDamage(stack) - getAnimationFrames()); + } + } + + float velocity = (float)charge / DRAW_TIME; + velocity = (velocity * velocity + velocity * 2) / 3; + + if(velocity > 1) velocity = 1; + + if((double)velocity >= 0.1D){ + + if(!world.isRemote){ + EntityFlamecatcherArrow arrow = new EntityFlamecatcherArrow(world); + arrow.aim(player, EntityFlamecatcherArrow.SPEED * velocity); + world.spawnEntity(arrow); + } + + world.playSound(null, player.posX, player.posY, player.posZ, + WizardrySounds.ITEM_FLAMECATCHER_SHOOT, WizardrySounds.SPELLS, 1, 1); + + world.playSound(null, player.posX, player.posY, player.posZ, + WizardrySounds.ITEM_FLAMECATCHER_FLAME, WizardrySounds.SPELLS, 1, 1); + } + } + } + +} diff --git a/src/main/java/electroblob/wizardry/registry/Spells.java b/src/main/java/electroblob/wizardry/registry/Spells.java index bbc15c90..cee38c17 100644 --- a/src/main/java/electroblob/wizardry/registry/Spells.java +++ b/src/main/java/electroblob/wizardry/registry/Spells.java @@ -253,6 +253,7 @@ public final class Spells { public static final Spell radiant_totem = placeholder(); public static final Spell firestorm = placeholder(); + public static final Spell flamecatcher = placeholder(); public static final Spell zombie_apocalypse = placeholder(); public static final Spell boulder = placeholder(); public static final Spell celestial_smite = placeholder(); @@ -472,6 +473,7 @@ public final class Spells { registry.register(new RadiantTotem()); registry.register(new Firestorm()); + registry.register(new Flamecatcher()); registry.register(new ZombieApocalypse()); registry.register(new Boulder()); registry.register(new CelestialSmite()); diff --git a/src/main/java/electroblob/wizardry/registry/WizardryEntities.java b/src/main/java/electroblob/wizardry/registry/WizardryEntities.java index 12b3df17..d5568de0 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryEntities.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryEntities.java @@ -112,6 +112,7 @@ public class WizardryEntities { registry.register(createEntry(EntityForceArrow.class, "force_arrow", TrackingType.PROJECTILE).build()); registry.register(createEntry(EntityDart.class, "dart", TrackingType.PROJECTILE).build()); registry.register(createEntry(EntityIceLance.class, "ice_lance", TrackingType.PROJECTILE).build()); + registry.register(createEntry(EntityFlamecatcherArrow.class, "flamecatcher_arrow", TrackingType.PROJECTILE).build()); // Directionless projectiles registry.register(createEntry(EntityFirebomb.class, "firebomb", TrackingType.PROJECTILE).build()); diff --git a/src/main/java/electroblob/wizardry/registry/WizardryItems.java b/src/main/java/electroblob/wizardry/registry/WizardryItems.java index 440c1d84..ec8ea516 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryItems.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryItems.java @@ -212,6 +212,7 @@ public final class WizardryItems { public static final Item spectral_boots = placeholder(); public static final Item lightning_hammer = placeholder(); + public static final Item flamecatcher = placeholder(); public static final Item ring_condensing = placeholder(); public static final Item ring_siphoning = placeholder(); @@ -583,6 +584,7 @@ public final class WizardryItems { registerItem(registry, "spectral_boots", new ItemSpectralArmour(ArmorMaterial.IRON, 1, EntityEquipmentSlot.FEET)); registerItem(registry, "lightning_hammer", new ItemLightningHammer()); + registerItem(registry, "flamecatcher", new ItemFlamecatcher()); registerItem(registry, "ring_condensing", new ItemArtefact(EnumRarity.RARE, ItemArtefact.Type.RING)); registerItem(registry, "ring_siphoning", new ItemArtefact(EnumRarity.UNCOMMON, ItemArtefact.Type.RING)); diff --git a/src/main/java/electroblob/wizardry/registry/WizardrySounds.java b/src/main/java/electroblob/wizardry/registry/WizardrySounds.java index e1610825..81295678 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardrySounds.java +++ b/src/main/java/electroblob/wizardry/registry/WizardrySounds.java @@ -43,6 +43,8 @@ public final class WizardrySounds { public static final SoundEvent ITEM_PURIFYING_ELIXIR_DRINK = createSound("item.purifying_elixir.drink"); public static final SoundEvent ITEM_MANA_FLASK_USE = createSound("item.mana_flask.use"); public static final SoundEvent ITEM_MANA_FLASK_RECHARGE = createSound("item.mana_flask.recharge"); + public static final SoundEvent ITEM_FLAMECATCHER_SHOOT = createSound("item.flamecatcher.shoot"); + public static final SoundEvent ITEM_FLAMECATCHER_FLAME = createSound("item.flamecatcher.flame"); public static final SoundEvent ENTITY_BLACK_HOLE_AMBIENT = createSound("entity.black_hole.ambient"); public static final SoundEvent ENTITY_BLACK_HOLE_VANISH = createSound("entity.black_hole.vanish"); @@ -124,6 +126,7 @@ public final class WizardrySounds { public static final SoundEvent ENTITY_FIREBOMB_THROW = createSound("entity.firebomb.throw"); public static final SoundEvent ENTITY_FIREBOMB_SMASH = createSound("entity.firebomb.smash"); public static final SoundEvent ENTITY_FIREBOMB_FIRE = createSound("entity.firebomb.fire"); + public static final SoundEvent ENTITY_FLAMECATCHER_ARROW_HIT = createSound("entity.flamecatcher_arrow.hit"); public static final SoundEvent ENTITY_FORCE_ARROW_HIT = createSound("entity.force_arrow.hit"); public static final SoundEvent ENTITY_FORCE_ORB_HIT = createSound("entity.force_orb.hit"); public static final SoundEvent ENTITY_FORCE_ORB_HIT_BLOCK = createSound("entity.force_orb.hit_block"); diff --git a/src/main/java/electroblob/wizardry/spell/Flamecatcher.java b/src/main/java/electroblob/wizardry/spell/Flamecatcher.java new file mode 100644 index 00000000..fb2035fe --- /dev/null +++ b/src/main/java/electroblob/wizardry/spell/Flamecatcher.java @@ -0,0 +1,43 @@ +package electroblob.wizardry.spell; + +import electroblob.wizardry.registry.WizardryItems; +import electroblob.wizardry.util.ParticleBuilder; +import electroblob.wizardry.util.ParticleBuilder.Type; +import electroblob.wizardry.util.SpellModifiers; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.world.World; + +public class Flamecatcher extends SpellConjuration { + + public static final String SHOT_COUNT = "shot_count"; + public static final String SHOTS_REMAINING_NBT_KEY = "shotsRemaining"; + + public Flamecatcher(){ + super("flamecatcher", WizardryItems.flamecatcher); + addProperties(RANGE, SHOT_COUNT, DAMAGE, BURN_DURATION); + } + + @Override + protected void addItemExtras(EntityPlayer caster, ItemStack stack, SpellModifiers modifiers){ + if(stack.getTagCompound() == null) stack.setTagCompound(new NBTTagCompound()); + stack.getTagCompound().setInteger(SHOTS_REMAINING_NBT_KEY, (int)(getProperty(SHOT_COUNT).intValue() * modifiers.get(SpellModifiers.POTENCY))); + } + + @Override + protected void spawnParticles(World world, EntityLivingBase caster, SpellModifiers modifiers){ + + ParticleBuilder.create(Type.BUFF).entity(caster).clr(0xff6d00).spawn(world); + + for(int i=0; i<10; i++){ + double x = caster.posX + world.rand.nextDouble() * 2 - 1; + double y = caster.posY + caster.getEyeHeight() - 0.5 + world.rand.nextDouble(); + double z = caster.posZ + world.rand.nextDouble() * 2 - 1; + world.spawnParticle(EnumParticleTypes.FLAME, x, y, z, 0, 0, 0); + } + } + +} diff --git a/src/main/java/electroblob/wizardry/spell/SpellConjuration.java b/src/main/java/electroblob/wizardry/spell/SpellConjuration.java index 55eed416..91ab8b59 100644 --- a/src/main/java/electroblob/wizardry/spell/SpellConjuration.java +++ b/src/main/java/electroblob/wizardry/spell/SpellConjuration.java @@ -83,17 +83,29 @@ public class SpellConjuration extends Spell { ItemStack stack = new ItemStack(item); + if(InventoryUtils.doesPlayerHaveItem(caster, item)) return false; + IConjuredItem.setDurationMultiplier(stack, modifiers.get(WizardryItems.duration_upgrade)); IConjuredItem.setDamageMultiplier(stack, modifiers.get(SpellModifiers.POTENCY)); - - if(InventoryUtils.doesPlayerHaveItem(caster, item)) return false; - + + addItemExtras(caster, stack, modifiers); + if(caster.getHeldItemMainhand().isEmpty()){ caster.setHeldItem(EnumHand.MAIN_HAND, stack); - return true; }else{ - return caster.inventory.addItemStackToInventory(stack); + if(!caster.inventory.addItemStackToInventory(stack)) return false; } + + return true; } + /** + * Called directly before the conjured item is added to the inventory to perform additional behaviour (such + * as NBT modification). Does nothing by default. + * @param caster The player that cast this spell + * @param stack The item stack being conjured + * @param modifiers The modifiers this spell was cast with + */ + protected void addItemExtras(EntityPlayer caster, ItemStack stack, SpellModifiers modifiers){} + } diff --git a/src/main/resources/assets/ebwizardry/lang/en_gb.lang b/src/main/resources/assets/ebwizardry/lang/en_gb.lang index be9ae190..0e8d0898 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_gb.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_gb.lang @@ -260,6 +260,7 @@ item.ebwizardry\:spectral_leggings.name=Spectral Leggings item.ebwizardry\:spectral_boots.name=Spectral Boots item.ebwizardry\:lightning_hammer.name=Lightning Hammer +item.ebwizardry\:flamecatcher.name=Flamecatcher item.ebwizardry\:generic.disabled=This item has been disabled in the config @@ -621,6 +622,7 @@ entity.ebwizardry\:ice_lance.name=Magic entity.ebwizardry\:smoke_bomb.name=Magic entity.ebwizardry\:ice_spike.name=Magic entity.ebwizardry\:combustion_rune.name=Magic +entity.ebwizardry\:flamecatcher_arrow.name=Magic entity.ebwizardry\:black_hole.name=Black Hole entity.ebwizardry\:shield.name=Shield @@ -825,6 +827,7 @@ spell.ebwizardry\:fire_sigil=Fire Sigil spell.ebwizardry\:fireskin=Fireskin spell.ebwizardry\:firestorm=Firestorm spell.ebwizardry\:fire_breath=Fire Breath +spell.ebwizardry\:flamecatcher=Flamecatcher spell.ebwizardry\:flame_ray=Flame Ray spell.ebwizardry\:flaming_axe=Flaming Axe spell.ebwizardry\:flaming_weapon=Flaming Weapon @@ -1013,6 +1016,7 @@ spell.ebwizardry\:fire_sigil.desc=Places a magical fire trap on the ground which spell.ebwizardry\:fireskin.desc=Cloaks the caster in flames for 30 seconds, causing anything that attacks them to catch fire. spell.ebwizardry\:firestorm.desc="Purge the land and purge the soil!\nTrees shall burn and lakes shall boil!\nTorch the wood and scorch the stone!\nAll bow before the infernal throne!" spell.ebwizardry\:fire_breath.desc="I am the dragon." +spell.ebwizardry\:flamecatcher.desc=It is said that in times of need, Flamecatcher offers her power to worthy pyromancers, only to vanish back into the night once her deed is done. spell.ebwizardry\:flame_ray.desc=Creates a stream of flames in the direction you are pointing which sets on fire and continually damages targets. spell.ebwizardry\:flaming_axe.desc=Creates a flaming axe which sets enemies on fire when hit. Lasts for 30 seconds. spell.ebwizardry\:flaming_weapon.desc=Temporarily imbues the first weapon on the caster's hotbar with the power of flame, causing it to set fire to its victims. The magic wears off after 45 seconds. diff --git a/src/main/resources/assets/ebwizardry/lang/en_us.lang b/src/main/resources/assets/ebwizardry/lang/en_us.lang index af2ab928..b7533fe4 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_us.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_us.lang @@ -260,6 +260,7 @@ item.ebwizardry\:spectral_leggings.name=Spectral Leggings item.ebwizardry\:spectral_boots.name=Spectral Boots item.ebwizardry\:lightning_hammer.name=Lightning Hammer +item.ebwizardry\:flamecatcher.name=Flamecatcher item.ebwizardry\:generic.disabled=This item has been disabled in the config @@ -621,6 +622,7 @@ entity.ebwizardry\:ice_lance.name=Magic entity.ebwizardry\:smoke_bomb.name=Magic entity.ebwizardry\:ice_spike.name=Magic entity.ebwizardry\:combustion_rune.name=Magic +entity.ebwizardry\:flamecatcher_arrow.name=Magic entity.ebwizardry\:black_hole.name=Black Hole entity.ebwizardry\:shield.name=Shield @@ -825,6 +827,7 @@ spell.ebwizardry\:fire_sigil=Fire Sigil spell.ebwizardry\:fireskin=Fireskin spell.ebwizardry\:firestorm=Firestorm spell.ebwizardry\:fire_breath=Fire Breath +spell.ebwizardry\:flamecatcher=Flamecatcher spell.ebwizardry\:flame_ray=Flame Ray spell.ebwizardry\:flaming_axe=Flaming Axe spell.ebwizardry\:flaming_weapon=Flaming Weapon @@ -1013,6 +1016,7 @@ spell.ebwizardry\:fire_sigil.desc=Places a magical fire trap on the ground which spell.ebwizardry\:fireskin.desc=Cloaks the caster in flames for 30 seconds, causing anything that attacks them to catch fire. spell.ebwizardry\:firestorm.desc="Purge the land and purge the soil!\nTrees shall burn and lakes shall boil!\nTorch the wood and scorch the stone!\nAll bow before the infernal throne!" spell.ebwizardry\:fire_breath.desc="I am the dragon." +spell.ebwizardry\:flamecatcher.desc=It is said that in times of need, Flamecatcher offers her power to worthy pyromancers, only to vanish back into the night once her deed is done. spell.ebwizardry\:flame_ray.desc=Creates a stream of flames in the direction you are pointing which sets on fire and continually damages targets. spell.ebwizardry\:flaming_axe.desc=Creates a flaming axe which sets enemies on fire when hit. Lasts for 30 seconds. spell.ebwizardry\:flaming_weapon.desc=Temporarily imbues the first weapon on the caster's hotbar with the power of flame, causing it to set fire to its victims. The magic wears off after 45 seconds. diff --git a/src/main/resources/assets/ebwizardry/models/item/flamecatcher.json b/src/main/resources/assets/ebwizardry/models/item/flamecatcher.json new file mode 100644 index 00000000..a2337094 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/flamecatcher.json @@ -0,0 +1,105 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "ebwizardry:items/flamecatcher_standby" + }, + "display": { + "thirdperson_righthand": { + "rotation": [ -80, 260, -40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "thirdperson_lefthand": { + "rotation": [ -80, -280, 40 ], + "translation": [ -1, -2, 2.5 ], + "scale": [ 0.9, 0.9, 0.9 ] + }, + "firstperson_righthand": { + "rotation": [ 0, -90, 25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 90, -25 ], + "translation": [ 1.13, 3.2, 1.13], + "scale": [ 0.68, 0.68, 0.68 ] + } + }, + "overrides": [ + { + "predicate": { + "pulling": 1 + }, + "model": "ebwizardry:item/flamecatcher_pulling_0" + }, + { + "predicate": { + "pulling": 1, + "pull": 0.65 + }, + "model": "ebwizardry:item/flamecatcher_pulling_1" + }, + { + "predicate": { + "pulling": 1, + "pull": 0.9 + }, + "model": "ebwizardry:item/flamecatcher_pulling_2" + }, + { + "predicate": { + "conjuring": 1 + }, + "model": "ebwizardry:item/flamecatcher_conjuring_0" + }, + { + "predicate": { + "conjuring": 1, + "conjure": 0.125 + }, + "model": "ebwizardry:item/flamecatcher_conjuring_1" + }, + { + "predicate": { + "conjuring": 1, + "conjure": 0.25 + }, + "model": "ebwizardry:item/flamecatcher_conjuring_2" + }, + { + "predicate": { + "conjuring": 1, + "conjure": 0.375 + }, + "model": "ebwizardry:item/flamecatcher_conjuring_3" + }, + { + "predicate": { + "conjuring": 1, + "conjure": 0.5 + }, + "model": "ebwizardry:item/flamecatcher_conjuring_4" + }, + { + "predicate": { + "conjuring": 1, + "conjure": 0.625 + }, + "model": "ebwizardry:item/flamecatcher_conjuring_5" + }, + { + "predicate": { + "conjuring": 1, + "conjure": 0.75 + }, + "model": "ebwizardry:item/flamecatcher_conjuring_6" + }, + { + "predicate": { + "conjuring": 1, + "conjure": 0.875 + }, + "model": "ebwizardry:item/flamecatcher_conjuring_7" + } + ] +} diff --git a/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_0.json b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_0.json new file mode 100644 index 00000000..bb2a7ef2 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_0.json @@ -0,0 +1,6 @@ +{ + "parent": "item/bow", + "textures": { + "layer0": "ebwizardry:items/flamecatcher_conjuring_0" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_1.json b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_1.json new file mode 100644 index 00000000..26ab48e9 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_1.json @@ -0,0 +1,6 @@ +{ + "parent": "item/bow", + "textures": { + "layer0": "ebwizardry:items/flamecatcher_conjuring_1" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_2.json b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_2.json new file mode 100644 index 00000000..6ab25cd2 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_2.json @@ -0,0 +1,6 @@ +{ + "parent": "item/bow", + "textures": { + "layer0": "ebwizardry:items/flamecatcher_conjuring_2" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_3.json b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_3.json new file mode 100644 index 00000000..dd041724 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_3.json @@ -0,0 +1,6 @@ +{ + "parent": "item/bow", + "textures": { + "layer0": "ebwizardry:items/flamecatcher_conjuring_3" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_4.json b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_4.json new file mode 100644 index 00000000..5e980ed4 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_4.json @@ -0,0 +1,6 @@ +{ + "parent": "item/bow", + "textures": { + "layer0": "ebwizardry:items/flamecatcher_conjuring_4" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_5.json b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_5.json new file mode 100644 index 00000000..bd32f65c --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_5.json @@ -0,0 +1,6 @@ +{ + "parent": "item/bow", + "textures": { + "layer0": "ebwizardry:items/flamecatcher_conjuring_5" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_6.json b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_6.json new file mode 100644 index 00000000..6669564e --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_6.json @@ -0,0 +1,6 @@ +{ + "parent": "item/bow", + "textures": { + "layer0": "ebwizardry:items/flamecatcher_conjuring_6" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_7.json b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_7.json new file mode 100644 index 00000000..80bbd6d5 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_conjuring_7.json @@ -0,0 +1,6 @@ +{ + "parent": "item/bow", + "textures": { + "layer0": "ebwizardry:items/flamecatcher_conjuring_7" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/flamecatcher_pulling_0.json b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_pulling_0.json new file mode 100644 index 00000000..528b5b65 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_pulling_0.json @@ -0,0 +1,6 @@ +{ + "parent": "item/bow", + "textures": { + "layer0": "ebwizardry:items/flamecatcher_pulling_0" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/flamecatcher_pulling_1.json b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_pulling_1.json new file mode 100644 index 00000000..ae4d8fa2 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_pulling_1.json @@ -0,0 +1,6 @@ +{ + "parent": "item/bow", + "textures": { + "layer0": "ebwizardry:items/flamecatcher_pulling_1" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/flamecatcher_pulling_2.json b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_pulling_2.json new file mode 100644 index 00000000..ce385d5b --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/flamecatcher_pulling_2.json @@ -0,0 +1,6 @@ +{ + "parent": "item/bow", + "textures": { + "layer0": "ebwizardry:items/flamecatcher_pulling_2" + } +} diff --git a/src/main/resources/assets/ebwizardry/sounds.json b/src/main/resources/assets/ebwizardry/sounds.json index 0b177cdf..92d3bc4c 100644 --- a/src/main/resources/assets/ebwizardry/sounds.json +++ b/src/main/resources/assets/ebwizardry/sounds.json @@ -14,6 +14,8 @@ "item.purifying_elixir.drink": {"category": "player", "sounds": ["ebwizardry:buff_large"]}, "item.mana_flask.use": {"category": "player", "sounds": ["item/bottle/fill1", "item/bottle/fill2", "item/bottle/fill3", "item/bottle/fill4"]}, "item.mana_flask.recharge": {"category": "player", "sounds": ["ebwizardry:conjure"]}, + "item.flamecatcher.shoot": {"category": "player", "sounds": ["fireworks/launch1"]}, + "item.flamecatcher.flame": {"category": "player", "sounds": ["ebwizardry:combust"]}, "entity.black_hole.ambient": {"category": "spells", "sounds": ["portal/portal"]}, "entity.black_hole.vanish": {"category": "spells", "sounds": ["portal/trigger"]}, @@ -95,6 +97,7 @@ "entity.firebomb.throw": {"category": "spells", "sounds": ["random/bow"]}, "entity.firebomb.smash": {"category": "spells", "sounds": ["random/glass1", "random/glass2", "random/glass3"]}, "entity.firebomb.fire": {"category": "spells", "sounds": ["ebwizardry:combust"]}, + "entity.flamecatcher_arrow.hit": {"category": "spells", "sounds": ["damage/hit1", "damage/hit2", "damage/hit3"]}, "entity.force_arrow.hit": {"category": "spells", "sounds": ["fireworks/blast1"]}, "entity.force_orb.hit": {"category": "spells", "sounds": ["damage/hit1", "damage/hit2", "damage/hit3"]}, "entity.force_orb.hit_block": {"category": "spells", "sounds": ["fireworks/blast1"]}, @@ -184,6 +187,7 @@ "spell.fire_breath.start": {"category": "spells", "sounds": ["ebwizardry:flames_start"]}, "spell.fire_breath.loop": {"category": "spells", "sounds": ["ebwizardry:flames_loop"]}, "spell.fire_breath.end": {"category": "spells", "sounds": ["ebwizardry:flames_end"]}, + "spell.flamecatcher": {"category": "spells", "sounds": ["ebwizardry:buff"]}, "spell.flame_ray.start": {"category": "spells", "sounds": ["ebwizardry:flames_start"]}, "spell.flame_ray.loop": {"category": "spells", "sounds": ["ebwizardry:flames_loop"]}, "spell.flame_ray.end": {"category": "spells", "sounds": ["ebwizardry:flames_end"]}, diff --git a/src/main/resources/assets/ebwizardry/spells/flamecatcher.json b/src/main/resources/assets/ebwizardry/spells/flamecatcher.json new file mode 100644 index 00000000..e35c2093 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/spells/flamecatcher.json @@ -0,0 +1,26 @@ +{ + "enabled": { + "book": true, + "scroll": true, + "wands": true, + "npcs": true, + "dispensers": true, + "commands": true, + "treasure": true, + "trades": true, + "looting": true + }, + "tier": "master", + "element": "fire", + "type": "utility", + "cost": 100, + "chargeup": 20, + "cooldown": 150, + "base_properties": { + "item_lifetime": 600, + "range": 40, + "shot_count": 5, + "damage": 16, + "burn_duration": 15 + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/textures/entity/flamecatcher_arrow.png b/src/main/resources/assets/ebwizardry/textures/entity/flamecatcher_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..db64d4b836938cf85ab18d01383c57e81baef963 GIT binary patch literal 2303 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANOq@l_!aB|(Yh3I#>^X_+~x z3MG{VsS2qTnQ06R6}R3_kDex@&FA`G(v`n)x&Tl6^C;V9xw`y`536o|-&T8j{<#%i zN*)4}&RuLQ_-+5+?p=J%qGPW%W$3OIIj_F`PSW#bzpg*O$~OP~_rFJ;tIxClx_i64 zQf#N$Ub)kC$I5>_t!;X?yuRjLxs|;2S3{9M%a=}GoAdqrj$aa9AFs;KOTRv^(zc%C z`Op5(hQD>!=%0`DJSOyJ>5E5xik17i*G`K2fA`mqKFuTfww?RtskF*JKezX8o#(yV zcch+ zV(?L0$6D^E_Y4aroGMu^s`oU0$MtH{bzU99N5nGt*1dG%o_J>7gu`66b2j8#A3kza z#(d3J!(*QJ)~;9U)%Ck1AGA$-&We>wp9Zl`<;?1Q_v4xOj@R3E-{YA&H9R4OM}qsz zk9S4(ul}fCpS`fSXP4rSU(>YzbREmQWANn7>_7&gbCZL2{@gqL_W|kuj5k=CiY~`+ zZutGt$WUcZv3Ben;m1ePpT{p1EU{(t5X|O2*TTZIuSI1c%X-5sjwc(N{EvU0Q6!@v z;PQy;U4yUJQI(@JF3(*2u&-Ar{;mhNgNK%9~1p=ek-iv)*j2TqR$) zWMX@dQOT8yZu2jsKhxaoGq-fx&G4Aaz<;ZCN>{Jj_KQzi>+PP@>1%ht+xELLTYYZL zlPQar&nx>SoyEUuejs=Jgx}Ry4mHnGoc7+L*1b3HYQ9?2$xewh1+ij=LQ@un5|cAE zyq50H=L{C_(&Xw~Aa>+HfhZev9C^ND|C)S5o_ENzzGntixOf0NX$4!-S^ zOL|U*n!Q{1mQUFIhVRoOEyW8D>L7>>?R{$Q>y&ck%0Gy1br<=yLPF}nx}aBF3+%#X zC?Dly^4ixP^(?qaeA4xXsY$#A$a4=Dp42M8@*(?OqY$30!gJT`Vs^0$`rUTQxV*tC;MTIR+rmLFS6_2}xu(Ko zqWkI7FWC9|MGu-doVa=}$J~-hbw%sB2!a0DnhJZiGwhy~eLP&}P1%0WTUsY~S&OV$ zaI8yK&UxSMmHpxqURQZ26`H@_m*A$IbJ4>&Cg*PogW3A)LKp9TnsE2{3E6cMf3t+> zTsy(N!{No}O?BQmT-zpF<}J8g7OVc?=-W>l6WF%S>{X0?wc*y5M^i6wJmYx8k9msD=O2dIi>OGp>aG12^w z`i@(7GZQbjH=TZ?ziw%%-gUpW?A8+Jt&H-I*50%^(f8Bg>bzS$O+OZ#yIy=VVH4A0 zy+pQ4yt=EGnQAQY6nK-Gs+Sd+E;A+OnTJE^;zbo1HN{~?SL{?|WENdxI(_eV8k0Jk z;gpq+S|p6+f)wZ8RxaDSSew>UP0+}nD z_o&@^uP~#xDzJQ7(Wxuivo1crD}8Fmr72;rqo3T_bnn^KwQuUS?=<^X*V=U8?H@M} z{r~yD?Ri=c^R4UHEAh2lBqCqhE?Vf2P49-?%8g4cZx2imrC+ZT{OAKIz=v$7d(b&a!RKsg^!;**{|Ok-px%ZzXeXF5UIN(R+S0ho@kv zaBa=44xxPItkyNJL(3n}oshbCpNw&q(RF1jch9Y-K6VGcb$hYsT4}0>WvSwpOr^=Q zHzhy6w|$9k3DfbCVG`q4QZ$N93>_H0-rYka}eW8R`C2H*QnUHe;8TfIKJ zP5Z?34I8F5Z#?JHURD0S&bfC-{QQj9+)2s#51!5L<8?Z>y5Ppbyc@2c)A~1jj@xR> znz?Rz_Wc!R&-K=8841;A-i`nJVfEW^=aXDVZFaudbM#a3u{-ZSJnLU*-}X=9S4clc zY4Ly7X*z`(FP;~zVqjokOY(MiVYtD-z`)>etp7O!0|RG)M`SSrgPt-7Ggd6MFJoX} zU@!6Xb!C6TB`P9s%z9ZvhJk@m(bL5-B;xSfDI2{G2Z*%o4|d8uy0JT&iSZ@3ilmGT z_o4?Ej+Vc;V*cXM74;noKUidAtT<+tmWk#&6l_?$<7A=7rE8ZQJF6VuZJ*6>j?1UQXm37ybgv|#FjQw$e>id~#)a3^KLqF-iW zH|LreDQxztnf&ioUBGP5RhBDzwzhjr@LbGt&cQ7EM-)>qLuORtj(yD98%wH1_xon= zRNdhi9OC|>r)ZZKlkCoQ56%U$UW*D5&DK5lV_m1s`T8>(V&=s#6zs2fpkWj9??s8V z&0d>Jw{QP1N%;8d%mdKI;Vst04^a$KK&b;;YB_kDI!{zavH5*-qz>(}K+ z+dICK6F!nxSvO5v^S0lOHonuh75b<0N=57EIOj~8Qx<>JR{!SdvTyyVvn-~*uhnK) zY{hX?>>-nM(UZ^dqs^QhcvUYe7-ZNUsi)$^Hht{;jsPU{G& zCUmnd2;VR>uxpVA+ljJGA)0~9&0agP>P21dSzxw|;kzQYj@m4y2b>2M2bdq4xcU)8 z7*|Ac$Jv+MXG0#7u*|p*zUGiCNz6KPgSz6IwIyjPqNA{dTIEM$yah21QK)E(>o3} zd^^%-lWFMI(U8nw&pA(en_4qt(YcTy**gZ+6NJx1NEf#(TUVIYIWfwiCHXv4mXi8} z)V0okI(R!4KDiP3bk1kLn1YL{=kHZL-z#ok6e1+1?YF0crE?M!yL8M4M<))$B^gS} ztvg>VULldxqnUV-g{Ek3xgfNjl0=_eslJ&lgHPwenhFXw-D z@6)n5e+BcOi56!Cd{>_l+`Q}T9rt^7iEEctF8-jBG3QX@%4dB?*jmLVac17}+`sN> zzgmg+;>4oKO(m+a0k5l77|_F_%JA)bA)IAK2=k+jeu?EUz`*vpiL6J#uHs zh2M@8-@k2|W7Uzpw(e0+pT$315@$T+@}@h?$~vbH@=u>;`7Z8ihud7S8&zfj#Ve(Q zWu}G|T%TzxDX#r!$Fr-v3m?C^b0@_9@y_SFG#3ZGRn&bD(W`28E+kb?HCASmtNoqh z585`QpO=-lIs#H&Y44Y|S*uN-@Gi97JK+1Jx1rH{Tg6tU z`m&_kik@TdwOH@*pwczRG-Q?)v*g2#PY!x``ySe8{A5Gg-`~ua78z~WaGuHGNTl|C z+id>HO;Ntw*Sx=)>}z~>a^j6UmGfqmSF`)v-5(QvmnZ&>Qq;6Wht|IO_cMRx&H6Dx zb>8OY73&3lty}E%U*vXi>znP4P5UERJ@dFFJebnu^&h+nPb~Nz@>k&U^sT>6J>{3% zf8>R-<^HaKud)%7?P?CC#>sthx2RbEE+MXYsja*BxXa8On z&cMLHmgMd3!f=Cufq}u{SpRbd1_sUokH}&M25w;xW@MN(M}mQYfxX1j*OmPVm#7GX zp<289ItB)Yjh-%!Ar_~P1|8&WHsG<@6%w}M3a6Dz+?qptQ-8f&Eu_3ehr#DyfB2Hu zhy5BkgjQ%>4SI6q++E9yjPY*Ef0l^2DDS))wXtlX*a265e}>+i-_xIn9gsbsyY$#b z7WRg(Ig&49ix*$AzGSVqLD+zE+1$qClfLvV6kFuA>YCNIa;Kzgte04r?UIl0&AFg; z((%KSX0=mXdgrWtoi>M@-e*}BQ4slU`}Ql=Z%j^JW9i@DP%oGtT^?t(s3Lhb$g`fV KelF{r5}E*sf7@;V literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_1.png b/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc4013af4f41cc5e66b78045ec0b0ec8f01a6b7 GIT binary patch literal 1574 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-epH1-lmsP~D-;yvr)B1( zDwI?fq$;FVWTr7NRNOinmb*z=o#)Sa%_0^R#-_&~BDb2K_;{J;%#HKszpXQ$y{h6A zGlyblp5n1D`|Ei=i`Sib)bm-&nd{)A=aanWT7S>a4%g`6jaIZt z*z)wr{N!?lF9&YD{CS$iAh`Pf?!$RKV#i-(m)~Sn5IuA6%Fd~a*^e@5JdF_hpz%+x z)^=WtdQ!LO0`m=#A3~fvB~I`aUD3F_pl-`lEvJ$@kr$1^AK0Y^P7w}g@PG8oxjA%_ ziL&6DkPT`ApGCQ4>n=ZBAJp>P?LtbE;i0bl{z|n!bDtZT9P^1)lGa}%Aby_3MPl;K zpKW3s3pW~mW#4x^`Q4{u_XM>QF320W=NR1HCNR=oSG1Xi)rKs&P&t=Kg#wJC2F-vwl^45q-@>C69;$M38dcf9Wv$FE;EP422 z`-Ll8ZUmj4YZbI|_q*yBx03yB`JddH@UTrj@kNJnZ_UPSk$+D~*&2MGXL@Um@3A`z zmz!Tx2($IQprc+_#CGh4pv3i)3_`Qi)6FIo+svFj=jIU$k$DHDetP;XJ}DtlGWQ1m zt{uA#zfUuNeAj)?N9|{4mb~*fNLMSJz4QGZ+r+g`AG=L#UQo%UzATK5OIoDrjLhdf zlk0Yy%Iiw>rL}us?<&e}|6<#BjPK2~|EoLXY`S6m?UmQElr#9UrTvu}Yi8&u^gZw|fu=Y0Hs;Zl^ z$#$upyr8-Hk!u^ag*j9m+FN_(i<<48Lnrs7t$31J>Eal5ZL<8zy&ks~r%miN)8Fv+ zqNDcKT%W>_s-v;Ts}1$So)l_lOFTYsvy$U-&9TqUGnVQ|NKan5VY`6zikY@c<^IeQ zm1^9-V2;)N$*pdSxW6t+JK5Rxy7Bs~X+|mGkHPZuDj|Sa>3Ut{LXFUKHuMEdH$4*mi_HV zyRX^s*QL8$zw-C!N9UxPui5hwe`l0$n6syh=g{d6J8g;kuZ|vEw3F-T`N!mv)hE2yI=z1N!q_7G?mnBl9v}CdT4QPbf153@=jO!Nh#MB?4o4ap z^Kl)G{Wo<&m;O7c&;Ks{{QB*GT1VT#@+_nO3~vm%I-)*2{Kde)z?S6g?!s_`fq{X+ z;aLB31_lPs0*}aI1_o|n5N2eUHAjMhfq}im)7O>#374n{gQ`vJooVviW`BKohFMZ7EXG4IDs!JOda4^J32_#JwAbEAn?v-8EXz7- teqL5AHtf$^)vt2ezMD)Ae${^x|A5v0WkNuTXHNsjtDdfYF6*2UngGQ<@Tvd+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_2.png b/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8df96747d2b18d3bc256bb91488f8a963084b016 GIT binary patch literal 1599 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-d8$GpN`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsG((k1l$n!Sgp=bTi8lXQ9&%BTLH-PS0;X=(l~cU!GClUa=kNN&Y_nuAo$JhG)lK0LDPdTCf#^}M zZ zb|!Ng+S2wkb#h&^Ir8pPYhUT*jd7|+PxUT%$#IM$eoyro_e1k-rY|&1dm$9LcSBQr z9-G3Q8E4L#Z*k!0?aj3LU@P}o!2DZd1V7tj#?491H>ag8a;fUpt^e?5p?I!AS*x|@ zZ8iqMYkdW6HWC|r?1UzZK5yZ$(E4%m!=0ZGxFi-x#3~yf=>5)9bmi>UkG&TbzFria zG(}86(6*Y<)I(%~sFTYdkANcqeRgcZ$xk!_le=cxviF_QvB?e*(|267p<{*0$ycTs zAz^`6mssw65_l--k&0TTmu9-otVFBFuX%dsbZhTx5#kotj0!p_`Y_nJck1epwJV=J zo0aeJ|Cq1OVowg%DyC9}{#o4qCeu_nA z3w%8KCW=fu*VuQ^#@{}FX<*d-(!!*wBBAXJv3uVn6nPd;omAL$rt`+ss!NOIb*^5S zwq?S}Z&TW8D()Qmuf3nxu~x==1L(!Z|e?a}47Sz;G6 zJ~Q2xlijj!Td!u&((pN@dG$TbqJ?)(Nv-00a_+3}XWM!1iE-JAfo!+8*-Bqzi7(8X zw|OU@#*fRBmn=TxeSQ{incuxTHq#B}|N7lpy+bdTy~<$mPJ^JkhHb@_Av&eE9jDh= zisoLoefhdz`Tu9P9K`p3m%hOtbHhhQG=ZQ&?CCA@7h`#QcG~>~2ix0)8W>lX$Gi7CMx_fxd zp|9ne&f6?scww7Bgw*9dqOv;8y?P12w{z{cV2< zJ=V9W>%7>nbmb36+{tfWIFDD?8h;VsKT~cX&p-2@jE;u>^4!nsE$TDQTC3a_J0h#m z`&LG;V#n%&=v}4?A_bCBv*r{u{I%@gcgXNvl>Bo=$JH~wzKmIsD8ESK>aW|PpH6?v zI>mO#E{KLHVldOeI z))fy11_rhyZ+91l8w?B#3=YTopEEEpa29w(7Bet#3xhBt!>l`%Bv zg{`GFA9D|8U|`td>Eak-ar)>aN3KH#A};ZJL)Ix&F!4_eUH?dy#e7|hjAM1J|Slns>=0RVOKR Qe*?(Bp00i_>zopr07X6f3IG5A literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_3.png b/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_3.png new file mode 100644 index 0000000000000000000000000000000000000000..9d0eff4dd6bc25e47ec3315004adcacd3ec253ae GIT binary patch literal 1601 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-MXN$0N`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsG((&zxD!50i-`{R$Pv5PtYo@KS-&dWGKUaO1rMiqq&$R0X z-_Fi=74H+#$V)c+gi{!O-YnRDj) zMsbV9tO7SBug|>kNP4+g+ERO6 z=FWS5WL(y)dAIwpv-p*~S@YF4MQrRp-~9eqhLv0V?$dUMf-k=Dy}PaG%YldoUUt)5 z_cX;j#P^v$49(ei=p}E4*q*BaO6=$PK3&ncyr6E&R4tz`>#QAL$F$y8_l=AxnySuH zx6fn_Lt9!zqc3X~&nD~Kh0gg_UqXX2@>u-b1>7P&J~W*#SpU?Pwb#&j`iWOBwQoF4 zV>r~)dFM|Pcf*AncD(KN{nu@d^wu&=YfP}Xv*t#^w$x6I#&;W!vY+GGm#}xE_8re# zVhrMrD>iyvot2fh zuF(0{_8Uh`a#ud}lU;bFmfyDQ<*nfJ%p1)reh9kB7?muU=zqm*)%g_{S$BS4anUVT z=^4M>&c$q-PWZB%EfP{ob2wAU^vFoi!C`mj%+OEwe4nVLnOUm17C7`CVp)FCg@@yp zpB|6Z#@))_#mt5O^cNJbpI|J!%f4~W%nP|s>>hpN%+i%t=aOeQt24)Lt4+X-0~buK z&wlp#_4L}GjDsIctk;#S)Yx8Da6j3!EMfb*{hMB_+Bx0Sc+Ps!x|rq#XVVt=*&WGY zm^nd4Su?QeO9{`j%3u4Yx@E3?{piS-Cn`BiyQ)qde6r}7mg-}XnZgUTzb+U=q$SU z>}gJQ$%Ufa+si$s#uZ-MxmSW+`_Yc6rXjK?=626~mTu86^!QS%i{!;^xi>kE6(8MM zIs0sBLu39l71`9ds%vYu7k^56=G$7C{a*apL#C~~FYfg``{Pl1T;kl*z=f|iHS7H} z(Ymp&deZ9x^WSH8HtOy9{#uzo=8PGOy2#FTKW7C9-OV}zvhjsuS1+!)AQM+;8F)`oe$f++U60Eabd|b#`aHDz_R%smpnpPAHKS$Yqwm~t zTb~(nwr+E^^XfKv@8YiJ`Rd`B^>X2dypyFYB(v;`E+x!#DqQn^a`m%sai4y2eeSLL z81=>ZropTEua8#mU9W4JKkd(oxzWEFqWP-N1hD%b|MDR2x85LJ&(gjr*rQYT=Xn_kM_-bI)`4yy>F6xqhy@SGh2~bLuu$n-gDuW)XkWx;mcSSK2GxF04wem3qGVe!7O1 z>A$@*-;17Df4f^j)0*<L?z3ha5)-Q*SS0OwsbrD6;ph3{_EOG}>A$RQ6;Jlu=Uecb`%m`|2FDdy Ua`kVg-UE5m)78&qol`;+0H-1T@&Et; literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_4.png b/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_4.png new file mode 100644 index 0000000000000000000000000000000000000000..49b2b8c5033305ccee98da5960e8557d60c67917 GIT binary patch literal 1636 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-wW>lQN`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsG((&z+>K&hz)YW)VvZL+9fUkyE9g{HQe9k^8-3kMZW&t9G1b zYl#wi@7dt{|M~mGe}|4+hCOc1@G*?4srhs=wdBgW^I0c%mLyyn5OCeyYXb2naiXfFFtOVh@@X_>MFbFsYqXRjZVpPQH*^NCejtsd5K`s^A< ziOD;Ea_b5>B_~Vq)$|{?dD2^}FzsN1MM9X4!R<{xQyjkEdDNWV7PsNvjj8Wca-|tu zKFA927)orIXc3^IeU4MGAmqbj!JWzPxg-_{#3&md;4Nmce6=ipk8;V2T@R*7M00n{ zP*qyM_LOPU9{v;ZAG>5uH8z_own(UCcqqE}*|kY5KC;t2HSwd6N>_*1q%~{en%zW0 zeP>Pf?$Om*GUJGfujW&p<&w*c@147FV&{%SN2doQOWry$i>{n?;{tVy_IrC zzN#plH)-N*&RMrTXUu6de9qZ(I)#Drty+56$!hbNv*+A=5+HK0(UfcQ9Jk4a1~064 z8oYS&?%bW|dp;lTKRR1`Y|hLpe>tC>S(0b`ed2cUHCt=uXw(RptS(5(s!T|3cDnw? zp2Y;$_1b&tLuylUn*UPF#JNx_Tn_g{znO)TWz+YyMO_nrXCqq4w7)Sy|a3 zC!Ux-eyAZYXl{Sw+Ky>q4poPC)}Hxt%(kv=^3OR7Cry94uxHB}^ST}14rTVway7fP z=fF01cHQgS3|&`#>Dqkm?exM8O8wE1&Q}|6?QF^1cl`4K-qfE=m5VLyA8pICN?7st zjLMuH)?ECqPKI}`AJEvm_m)uQgMY=*UT?G)z1y)oYJ2A+_e-I1p-(w?sojaP_k8hg+Wa)N7XmDS-%ZZ_2%H^vvC`w+#Wi+IzOOi3FZrhN zY5s(*eK9-laJW8A($=@Qp7zPied}qzx|EtJ$1)QH-S73~2+!HKUL{%e_FDcO6Kp3P zTh-L~nKAmVxc7ORD+}%@ed^E%y3Mz1iCj=-wbAP}#b<9z=dr|wu6k)5SJ2w_pIf%@ooOr_uSU`)%V9H>zV)7W#41p^VrusqxR^{ zR_^1s5|)Zeb(-inPpi_-UQ{(F_V3b1f0RG3GuO@E&2tqJ?T_Pc&Lc!B-UzM8CA_xH8ExwdD2+nnjVZyYC@ zYm}-jdMDL&!}I;tZ_-D9#ccU+@7#1d>rnmodd4y>g-r`&G!`&0Ft8O)L(Mto7Im=TOBMP^f2sTPiH-U=~4CrwwUCsS4AsbKY7SK@s(A$?G?)R z^6Q4DZU$VZdkdTc$`Q0%(|8D+eaQo)P{=h%1|62Dl=KALRR}g(00`j(}tDnm{ Hr-UW|3?v%P literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_5.png b/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_5.png new file mode 100644 index 0000000000000000000000000000000000000000..5d308b6519504d9cd4813ad63e23a9b074c1d4ef GIT binary patch literal 1612 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 Ib4q9e06Oy*1poj5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_7.png b/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_conjuring_7.png new file mode 100644 index 0000000000000000000000000000000000000000..9374f0a51ba0f91b16be2e3fedfb8027584cec86 GIT binary patch literal 1661 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 Cth5UN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_pulling_0.png.mcmeta b/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_pulling_0.png.mcmeta new file mode 100644 index 00000000..eb5c833c --- /dev/null +++ b/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_pulling_0.png.mcmeta @@ -0,0 +1,12 @@ +{ + "animation": { + + "frametime": 2, + + "frames": [ +0, + 1, 2, 3, 4, 5, 6, 7] + + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_pulling_1.png b/src/main/resources/assets/ebwizardry/textures/items/flamecatcher_pulling_1.png new file mode 100644 index 0000000000000000000000000000000000000000..811fec212aa5ed0bd607330e84ecb665108b99fd GIT binary patch literal 5612 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 Q4M2(A)78&qol`;+0N92B|(Yh3I#>^X_+~x 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 literal 0 HcmV?d00001