From 44e1c47e1c0b6845e9026d1701dc2aaad93b396e Mon Sep 17 00:00:00 2001 From: WayofTime Date: Sat, 22 Oct 2016 16:11:30 -0400 Subject: [PATCH] Added an alchemy array, the Array of the Fast Miner --- changelog.txt | 1 + .../alchemyArray/AlchemyArrayEffectSigil.java | 47 +++++++++++++++++++ .../bloodmagic/api/iface/ISigil.java | 6 +++ .../bloodmagic/api/impl/ItemSigil.java | 14 ++++++ .../item/sigil/ItemSigilFastMiner.java | 36 ++++++++++++++ .../bloodmagic/registry/ModRecipes.java | 5 ++ 6 files changed, 109 insertions(+) create mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSigil.java diff --git a/changelog.txt b/changelog.txt index af5d913a..193bfe7d 100644 --- a/changelog.txt +++ b/changelog.txt @@ -23,6 +23,7 @@ Version 2.1.0-66 - Fixed the displayed Lesser Tartaric Gem recipe in the Guide (#947) - Fixed Dagger of Sacrifice one-shotting bosses. It now just doesn't work (#932) - Fixed controls re-binding after each startup (#922) +- Added an alchemy array, the Array of the Fast Miner ------------------------------------------------------ Version 2.1.0-65 diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSigil.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSigil.java new file mode 100644 index 00000000..20d22c40 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSigil.java @@ -0,0 +1,47 @@ +package WayofTime.bloodmagic.alchemyArray; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import WayofTime.bloodmagic.api.alchemyCrafting.AlchemyArrayEffect; +import WayofTime.bloodmagic.api.iface.ISigil; + +public class AlchemyArrayEffectSigil extends AlchemyArrayEffect +{ + private final ISigil sigil; + + public AlchemyArrayEffectSigil(String key, ISigil sigil) + { + super(key); + this.sigil = sigil; + } + + @Override + public boolean update(TileEntity tile, int ticksActive) + { + //TODO: Need particles. + if (sigil.hasArrayEffect()) + { + sigil.performArrayEffect(tile.getWorld(), tile.getPos()); + } + + return false; + } + + @Override + public void writeToNBT(NBTTagCompound tag) + { + + } + + @Override + public void readFromNBT(NBTTagCompound tag) + { + + } + + @Override + public AlchemyArrayEffect getNewCopy() + { + return new AlchemyArrayEffectSigil(key, sigil); + } +} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/api/iface/ISigil.java b/src/main/java/WayofTime/bloodmagic/api/iface/ISigil.java index 3673655d..ef3ad2a5 100644 --- a/src/main/java/WayofTime/bloodmagic/api/iface/ISigil.java +++ b/src/main/java/WayofTime/bloodmagic/api/iface/ISigil.java @@ -1,9 +1,15 @@ package WayofTime.bloodmagic.api.iface; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + /** * Used for all {@link WayofTime.bloodmagic.api.impl.ItemSigil} EXCEPT * Sigils of Holdings. */ public interface ISigil { + boolean performArrayEffect(World world, BlockPos pos); + + boolean hasArrayEffect(); } diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigil.java b/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigil.java index 99a57556..53bb0872 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigil.java +++ b/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigil.java @@ -5,6 +5,8 @@ import WayofTime.bloodmagic.api.iface.ISigil; import WayofTime.bloodmagic.api.util.helper.NBTHelper; import lombok.Getter; import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; /** * Base class for all (static) sigils. @@ -35,4 +37,16 @@ public class ItemSigil extends ItemBindable implements ISigil stack.getTagCompound().setBoolean(Constants.NBT.UNUSABLE, unusable); return stack; } + + @Override + public boolean performArrayEffect(World world, BlockPos pos) + { + return false; + } + + @Override + public boolean hasArrayEffect() + { + return false; + } } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java index f67186f7..831a331b 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java @@ -1,9 +1,14 @@ package WayofTime.bloodmagic.item.sigil; +import java.util.List; + +import WayofTime.bloodmagic.api.BloodMagicAPI; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.MobEffects; import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class ItemSigilFastMiner extends ItemSigilToggleableBase @@ -18,4 +23,35 @@ public class ItemSigilFastMiner extends ItemSigilToggleableBase { player.addPotionEffect(new PotionEffect(MobEffects.HASTE, 2, 0, true, false)); } + + @Override + public boolean performArrayEffect(World world, BlockPos pos) + { + double radius = 10; + int ticks = 600; + int potionPotency = 2; + + AxisAlignedBB bb = new AxisAlignedBB(pos).expandXyz(radius); + List playerList = world.getEntitiesWithinAABB(EntityPlayer.class, bb); + for (EntityPlayer player : playerList) + { + if (!player.isPotionActive(MobEffects.HASTE) || (player.isPotionActive(MobEffects.HASTE) && player.getActivePotionEffect(MobEffects.HASTE).getAmplifier() < potionPotency)) + { + player.addPotionEffect(new PotionEffect(MobEffects.HASTE, ticks, potionPotency)); + if (!player.capabilities.isCreativeMode) + { + player.hurtResistantTime = 0; + player.attackEntityFrom(BloodMagicAPI.getDamageSource(), 1.0F); + } + } + } + + return false; + } + + @Override + public boolean hasArrayEffect() + { + return true; + } } diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java index c776f247..8930806a 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java @@ -29,11 +29,13 @@ import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectAttractor; import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBinding; import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBounce; import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectMovement; +import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectSigil; import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectSkeletonTurret; import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectUpdraft; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.altar.EnumAltarTier; import WayofTime.bloodmagic.api.compress.CompressionRegistry; +import WayofTime.bloodmagic.api.iface.ISigil; import WayofTime.bloodmagic.api.recipe.AlchemyTableCustomRecipe; import WayofTime.bloodmagic.api.recipe.ShapedBloodOrbRecipe; import WayofTime.bloodmagic.api.recipe.ShapelessBloodOrbRecipe; @@ -300,6 +302,9 @@ public class ModRecipes AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.SLIME_BALL), new ItemStack(Items.REDSTONE), new AlchemyArrayEffectBounce("bounce"), new SingleAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/BounceArray.png"))); AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ARROW), new ItemStack(Items.FEATHER), new AlchemyArrayEffectSkeletonTurret("skeletonTurret"), new DualAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret1.png"), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret2.png"))); + + AlchemyArrayRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_FASTMINER), new ItemStack(Items.IRON_PICKAXE), new AlchemyArrayEffectSigil("fastMiner", (ISigil) ModItems.SIGIL_FAST_MINER), new SingleAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/FastMinerSigil.png"))); + } public static void addCompressionHandlers()