From 7b67070c654c71f811cb106792940052324f6c16 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sat, 29 Sep 2018 16:49:47 -0700 Subject: [PATCH] Minor refactoring --- .../bloodmagic/api/impl/BloodMagicAPI.java | 2 +- .../api/impl/BloodMagicCorePlugin.java | 2 +- .../bloodmagic/block/BlockBloodRune.java | 2 +- .../bloodmagic/block/BlockDemonDecor.java | 6 ++--- .../core/RegistrarBloodMagicBlocks.java | 2 +- .../core/RegistrarBloodMagicLivingArmor.java | 2 +- .../bloodmagic/core/altar/AltarComponent.java | 1 - .../bloodmagic/core/altar/AltarTier.java | 2 +- .../bloodmagic/core/altar/AltarUpgrades.java | 3 +-- .../bloodmagic/core/altar/AltarUtil.java | 2 -- .../core/{type => altar}/BloodRunes.java | 2 +- .../core/{type => altar}/ComponentType.java | 2 +- .../core/altar/IAltarManipulator.java | 12 +++++++++ .../core/living/LivingStatusWatcher.java | 25 ++++++++++++++++--- .../bloodmagic/core/living/LivingUpgrade.java | 2 +- .../bloodmagic/core/living/LivingUtil.java | 1 + .../bloodmagic/core/network/Binding.java | 2 +- .../SoulNetworkEventHandler.java} | 8 ++---- .../LivingEquipmentEvent.java | 4 ++- .../bloodmagic/item/ItemLivingArmor.java | 12 ++++----- 20 files changed, 59 insertions(+), 35 deletions(-) rename src/main/java/com/wayoftime/bloodmagic/core/{type => altar}/BloodRunes.java (90%) rename src/main/java/com/wayoftime/bloodmagic/core/{type => altar}/ComponentType.java (80%) rename src/main/java/com/wayoftime/bloodmagic/core/{handler/GenericEventHandler.java => network/SoulNetworkEventHandler.java} (85%) rename src/main/java/com/wayoftime/bloodmagic/{core/living => event}/LivingEquipmentEvent.java (91%) diff --git a/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicAPI.java b/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicAPI.java index da12da7a..1a581e1d 100644 --- a/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicAPI.java +++ b/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicAPI.java @@ -3,7 +3,7 @@ package com.wayoftime.bloodmagic.api.impl; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; import com.wayoftime.bloodmagic.api.IBloodMagicAPI; -import com.wayoftime.bloodmagic.core.type.ComponentType; +import com.wayoftime.bloodmagic.core.altar.ComponentType; import com.wayoftime.bloodmagic.core.util.BMLog; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicCorePlugin.java b/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicCorePlugin.java index ccd6465d..5a909067 100644 --- a/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicCorePlugin.java +++ b/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicCorePlugin.java @@ -7,7 +7,7 @@ import com.wayoftime.bloodmagic.api.IBloodMagicPlugin; import com.wayoftime.bloodmagic.api.IBloodMagicRecipeRegistrar; import com.wayoftime.bloodmagic.core.RegistrarBloodMagicBlocks; import com.wayoftime.bloodmagic.core.RegistrarBloodMagicRecipes; -import com.wayoftime.bloodmagic.core.type.ComponentType; +import com.wayoftime.bloodmagic.core.altar.ComponentType; import net.minecraft.block.Block; import net.minecraft.block.properties.IProperty; import net.minecraft.block.state.BlockStateContainer; diff --git a/src/main/java/com/wayoftime/bloodmagic/block/BlockBloodRune.java b/src/main/java/com/wayoftime/bloodmagic/block/BlockBloodRune.java index 58807ebb..94c7ff7a 100644 --- a/src/main/java/com/wayoftime/bloodmagic/block/BlockBloodRune.java +++ b/src/main/java/com/wayoftime/bloodmagic/block/BlockBloodRune.java @@ -1,6 +1,6 @@ package com.wayoftime.bloodmagic.block; -import com.wayoftime.bloodmagic.core.type.BloodRunes; +import com.wayoftime.bloodmagic.core.altar.BloodRunes; import net.minecraft.block.material.Material; public class BlockBloodRune extends BlockMundane { diff --git a/src/main/java/com/wayoftime/bloodmagic/block/BlockDemonDecor.java b/src/main/java/com/wayoftime/bloodmagic/block/BlockDemonDecor.java index 7799c9f8..41eb4112 100644 --- a/src/main/java/com/wayoftime/bloodmagic/block/BlockDemonDecor.java +++ b/src/main/java/com/wayoftime/bloodmagic/block/BlockDemonDecor.java @@ -1,7 +1,7 @@ package com.wayoftime.bloodmagic.block; import com.wayoftime.bloodmagic.BloodMagic; -import com.wayoftime.bloodmagic.core.type.DemonWillType; +import com.wayoftime.bloodmagic.core.will.DemonWill; import net.minecraft.block.material.Material; import net.minecraft.client.resources.I18n; import net.minecraft.client.util.ITooltipFlag; @@ -15,9 +15,9 @@ import java.util.List; public class BlockDemonDecor extends BlockMundane { - private final DemonWillType type; + private final DemonWill type; - public BlockDemonDecor(Material material, String decorType, DemonWillType type) { + public BlockDemonDecor(Material material, String decorType, DemonWill type) { super(material, decorType + "_" + type.getName()); setTranslationKey(BloodMagic.MODID + ":" + decorType); diff --git a/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicBlocks.java b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicBlocks.java index 1fd28310..8c234ca5 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicBlocks.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicBlocks.java @@ -6,7 +6,7 @@ import com.wayoftime.bloodmagic.block.BlockBloodAltar; import com.wayoftime.bloodmagic.block.BlockBloodRune; import com.wayoftime.bloodmagic.block.BlockMundane; import com.wayoftime.bloodmagic.client.render.TESRBloodAltar; -import com.wayoftime.bloodmagic.core.type.BloodRunes; +import com.wayoftime.bloodmagic.core.altar.BloodRunes; import com.wayoftime.bloodmagic.tile.TileBloodAltar; import net.minecraft.block.Block; import net.minecraft.block.material.Material; diff --git a/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicLivingArmor.java b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicLivingArmor.java index 2ce63e79..262ec531 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicLivingArmor.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicLivingArmor.java @@ -23,7 +23,7 @@ import java.util.stream.Collectors; /* * TODO - See checklist * - [-] Upgrades (Names pulled from 2.0 class names) - * - [-] Arrow Protect + * - [x] Arrow Protect * - [-] Arrow Shot * - [-] Critical Strike * - [ ] Digging diff --git a/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarComponent.java b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarComponent.java index 3fc574e6..79f77c01 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarComponent.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarComponent.java @@ -1,6 +1,5 @@ package com.wayoftime.bloodmagic.core.altar; -import com.wayoftime.bloodmagic.core.type.ComponentType; import net.minecraft.util.math.BlockPos; public class AltarComponent { diff --git a/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarTier.java b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarTier.java index 004e5eff..9fb6c42c 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarTier.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarTier.java @@ -7,7 +7,7 @@ import net.minecraft.util.math.BlockPos; import java.util.List; import java.util.function.Consumer; -import static com.wayoftime.bloodmagic.core.type.ComponentType.*; +import static com.wayoftime.bloodmagic.core.altar.ComponentType.*; public enum AltarTier { diff --git a/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUpgrades.java b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUpgrades.java index 1c7fa858..8ea6b3b1 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUpgrades.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUpgrades.java @@ -1,12 +1,11 @@ package com.wayoftime.bloodmagic.core.altar; import com.google.common.collect.Maps; -import com.wayoftime.bloodmagic.core.type.BloodRunes; import net.minecraftforge.fluids.Fluid; import java.util.EnumMap; -import static com.wayoftime.bloodmagic.core.type.BloodRunes.*; +import static com.wayoftime.bloodmagic.core.altar.BloodRunes.*; public class AltarUpgrades { diff --git a/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUtil.java b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUtil.java index 9ed310a0..26fe81d1 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUtil.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUtil.java @@ -5,7 +5,6 @@ import com.wayoftime.bloodmagic.api.impl.BloodMagicAPI; import com.wayoftime.bloodmagic.block.BlockBloodRune; import com.wayoftime.bloodmagic.core.RegistrarBloodMagic; import com.wayoftime.bloodmagic.core.RegistrarBloodMagicBlocks; -import com.wayoftime.bloodmagic.core.type.ComponentType; import com.wayoftime.bloodmagic.core.util.BooleanResult; import com.wayoftime.bloodmagic.event.SacrificeEvent; import com.wayoftime.bloodmagic.tile.TileBloodAltar; @@ -18,7 +17,6 @@ import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraft.world.WorldServer; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fluids.FluidStack; diff --git a/src/main/java/com/wayoftime/bloodmagic/core/type/BloodRunes.java b/src/main/java/com/wayoftime/bloodmagic/core/altar/BloodRunes.java similarity index 90% rename from src/main/java/com/wayoftime/bloodmagic/core/type/BloodRunes.java rename to src/main/java/com/wayoftime/bloodmagic/core/altar/BloodRunes.java index d24ab6e0..9c10a8c1 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/type/BloodRunes.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/altar/BloodRunes.java @@ -1,4 +1,4 @@ -package com.wayoftime.bloodmagic.core.type; +package com.wayoftime.bloodmagic.core.altar; import net.minecraft.util.IStringSerializable; diff --git a/src/main/java/com/wayoftime/bloodmagic/core/type/ComponentType.java b/src/main/java/com/wayoftime/bloodmagic/core/altar/ComponentType.java similarity index 80% rename from src/main/java/com/wayoftime/bloodmagic/core/type/ComponentType.java rename to src/main/java/com/wayoftime/bloodmagic/core/altar/ComponentType.java index b96205a8..212283ae 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/type/ComponentType.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/altar/ComponentType.java @@ -1,4 +1,4 @@ -package com.wayoftime.bloodmagic.core.type; +package com.wayoftime.bloodmagic.core.altar; public enum ComponentType { diff --git a/src/main/java/com/wayoftime/bloodmagic/core/altar/IAltarManipulator.java b/src/main/java/com/wayoftime/bloodmagic/core/altar/IAltarManipulator.java index 9b92ddeb..22ca8db8 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/altar/IAltarManipulator.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/altar/IAltarManipulator.java @@ -5,8 +5,20 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +/** + * Allows items to interact with the altar via right click without being inserted. + */ public interface IAltarManipulator { + /** + * Allows an item to decide whether or not it should be inserted into the altar. + * + * @param player The player interacting with the altar + * @param stack The ItemStack being tested + * @param world The World the altar is in + * @param pos The position in the world of the altar + * @return false if the item should be inserted, true if not. + */ default boolean tryManipulate(EntityPlayer player, ItemStack stack, World world, BlockPos pos) { return true; } diff --git a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingStatusWatcher.java b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingStatusWatcher.java index 0de0c644..e71a0ec4 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingStatusWatcher.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingStatusWatcher.java @@ -39,18 +39,35 @@ public class LivingStatusWatcher { if (!(event.getEntity() instanceof EntityPlayer)) return; + handleFallDamage(event); + handleProjectileDamage(event); + } + + private static void handleFallDamage(LivingHurtEvent event) { if (event.getSource() != DamageSource.FALL) return; EntityPlayer player = (EntityPlayer) event.getEntity(); - LivingStats stats = LivingUtil.applyNewExperience(player, RegistrarBloodMagicLivingArmor.UPGRADE_JUMP, 1); + LivingStats stats = LivingStats.fromPlayer(player); if (stats == null) return; int level = stats.getLevel(RegistrarBloodMagicLivingArmor.UPGRADE_JUMP.getKey()); double fallBonus = RegistrarBloodMagicLivingArmor.UPGRADE_JUMP.getBonusValue("fall", level).doubleValue(); - float oldAmount = event.getAmount(); - float newAmount = oldAmount * Math.max(1F - (float) fallBonus, 0F); - event.setAmount(newAmount); + event.setAmount(event.getAmount() * Math.max(1F - (float) fallBonus, 0F)); + } + + private static void handleProjectileDamage(LivingHurtEvent event) { + if (!event.getSource().isProjectile()) + return; + + EntityPlayer player = (EntityPlayer) event.getEntity(); + LivingStats stats = LivingUtil.applyNewExperience(player, RegistrarBloodMagicLivingArmor.UPGRADE_ARROW_PROTECT, 1); + if (stats == null) + return; + + int level = stats.getLevel(RegistrarBloodMagicLivingArmor.UPGRADE_ARROW_PROTECT.getKey()); + double damageBonus = RegistrarBloodMagicLivingArmor.UPGRADE_ARROW_PROTECT.getBonusValue("arrow_protect", level).doubleValue(); + event.setAmount(event.getAmount() * Math.max(1F - (float) damageBonus, 0F)); } } diff --git a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUpgrade.java b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUpgrade.java index 2adc7d93..f4e68b96 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUpgrade.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUpgrade.java @@ -141,7 +141,7 @@ public class LivingUpgrade { } public interface IArmorProvider { - double getProtection(EntityPlayer player, DamageSource source, int level); + double getProtection(EntityPlayer player, LivingStats stats, DamageSource source, int level); } public static class Level { diff --git a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUtil.java b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUtil.java index 1780227a..5c74d8fc 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUtil.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUtil.java @@ -1,5 +1,6 @@ package com.wayoftime.bloodmagic.core.living; +import com.wayoftime.bloodmagic.event.LivingEquipmentEvent; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.text.TextComponentTranslation; diff --git a/src/main/java/com/wayoftime/bloodmagic/core/network/Binding.java b/src/main/java/com/wayoftime/bloodmagic/core/network/Binding.java index 61d7ff65..0e8ae5ce 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/network/Binding.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/network/Binding.java @@ -66,7 +66,7 @@ public class Binding implements INBTSerializable { return null; NBTBase bindingTag = stack.getTagCompound().getTag("binding"); - if (bindingTag == null || bindingTag.getId() != 10 || bindingTag.isEmpty()) // Make sure it's both a tag compound and that it has actual data. + if (bindingTag.getId() != 10 || bindingTag.isEmpty()) // Make sure it's both a tag compound and that it has actual data. return null; Binding binding = new Binding(); diff --git a/src/main/java/com/wayoftime/bloodmagic/core/handler/GenericEventHandler.java b/src/main/java/com/wayoftime/bloodmagic/core/network/SoulNetworkEventHandler.java similarity index 85% rename from src/main/java/com/wayoftime/bloodmagic/core/handler/GenericEventHandler.java rename to src/main/java/com/wayoftime/bloodmagic/core/network/SoulNetworkEventHandler.java index 65990c64..50288193 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/handler/GenericEventHandler.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/network/SoulNetworkEventHandler.java @@ -1,10 +1,6 @@ -package com.wayoftime.bloodmagic.core.handler; +package com.wayoftime.bloodmagic.core.network; import com.wayoftime.bloodmagic.BloodMagic; -import com.wayoftime.bloodmagic.core.network.Binding; -import com.wayoftime.bloodmagic.core.network.BloodOrb; -import com.wayoftime.bloodmagic.core.network.IBloodOrb; -import com.wayoftime.bloodmagic.core.network.SoulNetwork; import com.wayoftime.bloodmagic.event.BindingEvent; import com.wayoftime.bloodmagic.item.IBindable; import net.minecraft.entity.player.EntityPlayer; @@ -16,7 +12,7 @@ import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @Mod.EventBusSubscriber(modid = BloodMagic.MODID) -public class GenericEventHandler { +public class SoulNetworkEventHandler { @SubscribeEvent public static void onItemUse(PlayerInteractEvent.RightClickItem event) { diff --git a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingEquipmentEvent.java b/src/main/java/com/wayoftime/bloodmagic/event/LivingEquipmentEvent.java similarity index 91% rename from src/main/java/com/wayoftime/bloodmagic/core/living/LivingEquipmentEvent.java rename to src/main/java/com/wayoftime/bloodmagic/event/LivingEquipmentEvent.java index 4d50d354..318d4e70 100644 --- a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingEquipmentEvent.java +++ b/src/main/java/com/wayoftime/bloodmagic/event/LivingEquipmentEvent.java @@ -1,5 +1,7 @@ -package com.wayoftime.bloodmagic.core.living; +package com.wayoftime.bloodmagic.event; +import com.wayoftime.bloodmagic.core.living.LivingStats; +import com.wayoftime.bloodmagic.core.living.LivingUpgrade; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.fml.common.eventhandler.Cancelable; import net.minecraftforge.fml.common.eventhandler.Event; diff --git a/src/main/java/com/wayoftime/bloodmagic/item/ItemLivingArmor.java b/src/main/java/com/wayoftime/bloodmagic/item/ItemLivingArmor.java index a057f5b8..7af6a6c7 100644 --- a/src/main/java/com/wayoftime/bloodmagic/item/ItemLivingArmor.java +++ b/src/main/java/com/wayoftime/bloodmagic/item/ItemLivingArmor.java @@ -35,6 +35,7 @@ import java.util.Map; public class ItemLivingArmor extends ItemArmor implements ILivingContainer, ISpecialArmor, IBindable { public static final ArmorMaterial MATERIAL = EnumHelper.addArmorMaterial("living", "living", 100, new int[]{1, 2, 3, 4}, 3, SoundEvents.ITEM_ARMOR_EQUIP_IRON, 2.0F); + private static final int MAX_ABSORPTION = 100000; public ItemLivingArmor(EntityEquipmentSlot slot) { super(MATERIAL, 0, slot); @@ -78,7 +79,6 @@ public class ItemLivingArmor extends ItemArmor implements ILivingContainer, ISpe double armorReduction; double damageAmount = 0.25; double armorPenetrationReduction = 0; - int maxAbsorption = 100000; if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_FEET || armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_HEAD) damageAmount = 3d / 20d * 0.6; @@ -91,22 +91,22 @@ public class ItemLivingArmor extends ItemArmor implements ILivingContainer, ISpe armorReduction = 0.24 / 0.64; // This values puts it at iron level if (!LivingUtil.hasFullSet((EntityPlayer) player)) - return new ArmorProperties(-1, damageAmount * armorReduction, maxAbsorption); + return new ArmorProperties(-1, damageAmount * armorReduction, MAX_ABSORPTION); LivingStats stats = getLivingStats(armor); double protection = 1.0D; if (stats != null) for (Map.Entry entry : stats.getUpgrades().entrySet()) if (entry.getKey().getArmorProvider() != null) - protection *= 1 - entry.getKey().getArmorProvider().getProtection((EntityPlayer) player, source, entry.getKey().getLevel(entry.getValue())); + protection *= 1 - entry.getKey().getArmorProvider().getProtection((EntityPlayer) player, stats, source, entry.getKey().getLevel(entry.getValue())); armorReduction += (1 - protection) * (1 - armorReduction); damageAmount *= armorReduction; - return new ArmorProperties(-1, source.isUnblockable() ? 1 - protection : damageAmount, maxAbsorption); + return new ArmorProperties(-1, source.isUnblockable() ? 1 - protection : damageAmount, MAX_ABSORPTION); } else if (source.isUnblockable()) - return new ArmorProperties(-1, damageAmount * armorPenetrationReduction, maxAbsorption); + return new ArmorProperties(-1, damageAmount * armorPenetrationReduction, MAX_ABSORPTION); - return new ArmorProperties(-1, damageAmount, maxAbsorption); + return new ArmorProperties(-1, damageAmount, MAX_ABSORPTION); } @Override