Merge pull request #709 from Arcaratus/1.9

Improved the API and internal workings
This commit is contained in:
Nick Ignoffo 2016-04-12 18:37:05 -07:00
commit 81e9452a21
28 changed files with 389 additions and 340 deletions

View file

@ -0,0 +1,15 @@
package WayofTime.bloodmagic.api.iface;
import net.minecraft.item.ItemStack;
/**
* Interface used for any item that can store LP in itself
*/
public interface IItemLPContainer
{
int getCapacity();
void setStoredLP(ItemStack stack, int lp);
int getStoredLP(ItemStack stack);
}

View file

@ -5,5 +5,5 @@ import WayofTime.bloodmagic.api.soul.EnumDemonWillType;
public interface IMultiWillTool public interface IMultiWillTool
{ {
public EnumDemonWillType getCurrentType(ItemStack stack); EnumDemonWillType getCurrentType(ItemStack stack);
} }

View file

@ -6,7 +6,7 @@ import WayofTime.bloodmagic.api.soul.EnumDemonWillType;
public interface ISentientSwordEffectProvider public interface ISentientSwordEffectProvider
{ {
public boolean applyOnHitEffect(EnumDemonWillType type, ItemStack swordStack, ItemStack providerStack, EntityLivingBase attacker, EntityLivingBase target); boolean applyOnHitEffect(EnumDemonWillType type, ItemStack swordStack, ItemStack providerStack, EntityLivingBase attacker, EntityLivingBase target);
public boolean providesEffectForWill(EnumDemonWillType type); boolean providesEffectForWill(EnumDemonWillType type);
} }

View file

@ -1,6 +1,8 @@
package WayofTime.bloodmagic.api.impl; package WayofTime.bloodmagic.api.impl;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.iface.IActivatable; import WayofTime.bloodmagic.api.iface.IActivatable;
import WayofTime.bloodmagic.api.util.helper.NBTHelper;
import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api.util.helper.NetworkHelper;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
@ -18,30 +20,27 @@ import net.minecraft.world.World;
*/ */
public class ItemSigilToggleable extends ItemSigil implements IActivatable public class ItemSigilToggleable extends ItemSigil implements IActivatable
{ {
private boolean toggleable;
public ItemSigilToggleable(int lpUsed) public ItemSigilToggleable(int lpUsed)
{ {
super(lpUsed); super(lpUsed);
setToggleable();
}
public void setToggleable()
{
this.toggleable = true;
} }
@Override
public boolean getActivated(ItemStack stack) public boolean getActivated(ItemStack stack)
{ {
return stack.getItemDamage() > 0; return stack != null && NBTHelper.checkNBT(stack).getTagCompound().getBoolean(Constants.NBT.ACTIVATED);
} }
@Override
public ItemStack setActivatedState(ItemStack stack, boolean activated) public ItemStack setActivatedState(ItemStack stack, boolean activated)
{ {
if (this.toggleable) if (stack != null)
stack.setItemDamage(activated ? 1 : 0); {
NBTHelper.checkNBT(stack).getTagCompound().setBoolean(Constants.NBT.ACTIVATED, activated);
return stack;
}
return stack; return null;
} }
@Override @Override

View file

@ -86,7 +86,7 @@ public class BindableHelper
* Deprecated. * Deprecated.
* *
* Now handled automatically with * Now handled automatically with
* {@link WayofTime.bloodmagic.util.handler.EventHandler#interactEvent(PlayerInteractEvent)} * {@link WayofTime.bloodmagic.util.handler.EventHandler#onInteract(PlayerInteractEvent.RightClickItem)}}
* *
* @param stack * @param stack
* - The ItemStack to bind * - The ItemStack to bind
@ -105,7 +105,7 @@ public class BindableHelper
* Deprecated. * Deprecated.
* *
* Now handled automatically with * Now handled automatically with
* {@link WayofTime.bloodmagic.util.handler.EventHandler#interactEvent(PlayerInteractEvent)} * {@link WayofTime.bloodmagic.util.handler.EventHandler#onInteract(PlayerInteractEvent.RightClickItem)}}
* *
* @param stack * @param stack
* - The ItemStack to bind * - The ItemStack to bind
@ -145,7 +145,7 @@ public class BindableHelper
* Deprecated. * Deprecated.
* *
* Now handled automatically with * Now handled automatically with
* {@link WayofTime.bloodmagic.util.handler.EventHandler#interactEvent(PlayerInteractEvent)} * {@link WayofTime.bloodmagic.util.handler.EventHandler#onInteract(PlayerInteractEvent.RightClickItem)}}
* *
* @param stack * @param stack
* - ItemStack to check * - ItemStack to check

View file

@ -0,0 +1,152 @@
package WayofTime.bloodmagic.api.util.helper;
import WayofTime.bloodmagic.api.altar.IBloodAltar;
import WayofTime.bloodmagic.api.iface.IItemLPContainer;
import WayofTime.bloodmagic.api.iface.IUpgradeTrainer;
import WayofTime.bloodmagic.api.livingArmour.LivingArmourHandler;
import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade;
import WayofTime.bloodmagic.item.ItemUpgradeTome;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class ItemHelper
{
// IItemLPContainer
public static class LPContainer
{
/**
* Attempts to fill an altar with the contained LP
*
* @param altar
* - The altar in question
* @param itemStack
* - The {@link IItemLPContainer} ItemStack filling the altar
* @param world
* - The world
* @param altarPos
* - The position of the altar
*
* @return Whether or not the altar was filled (or at least attempted)
*/
public static boolean tryAndFillAltar(IBloodAltar altar, ItemStack itemStack, World world, BlockPos altarPos)
{
if (itemStack.getItem() instanceof IItemLPContainer)
{
if (!altar.isActive())
{
IItemLPContainer fillable = (IItemLPContainer) itemStack.getItem();
int amount = fillable.getStoredLP(itemStack);
if (amount > 0)
{
int filledAmount = altar.fillMainTank(amount);
amount -= filledAmount;
fillable.setStoredLP(itemStack, amount);
world.notifyBlockUpdate(altarPos, world.getBlockState(altarPos), world.getBlockState(altarPos), 3);
return true;
}
}
}
return false;
}
/**
* Adds the given LP into the {@link IItemLPContainer}'s storage
*
* @param stack
* - The item in question
* @param toAdd
* - How much LP should be added to the item
* @param maxCapacity
* - The item's maximum holding capacity
*
* @return Whether or not LP was added to the item
*/
public static boolean addLPToItem(ItemStack stack, int toAdd, int maxCapacity)
{
if (stack.getItem() instanceof IItemLPContainer)
{
IItemLPContainer fillable = (IItemLPContainer) stack.getItem();
stack = NBTHelper.checkNBT(stack);
if (toAdd < 0)
toAdd = 0;
if (toAdd > maxCapacity)
toAdd = maxCapacity;
fillable.setStoredLP(stack, Math.min(fillable.getStoredLP(stack) + toAdd, maxCapacity));
return true;
}
return false;
}
}
public static class LivingUpgrades
{
public static LivingArmourUpgrade getUpgrade(ItemStack stack)
{
if (stack.getItem() instanceof ItemUpgradeTome || stack.getItem() instanceof IUpgradeTrainer)
{
String key = getKey(stack);
int level = getLevel(stack);
return LivingArmourHandler.generateUpgradeFromKey(key, level);
}
return null;
}
public static void setKey(ItemStack stack, String key)
{
if (stack.getItem() instanceof ItemUpgradeTome || stack.getItem() instanceof IUpgradeTrainer)
{
NBTHelper.checkNBT(stack);
NBTTagCompound tag = stack.getTagCompound();
tag.setString("key", key);
}
}
public static String getKey(ItemStack stack)
{
if (stack.getItem() instanceof ItemUpgradeTome || stack.getItem() instanceof IUpgradeTrainer)
{
NBTHelper.checkNBT(stack);
NBTTagCompound tag = stack.getTagCompound();
return tag.getString("key");
}
return "";
}
public static void setLevel(ItemStack stack, int level)
{
if (stack.getItem() instanceof ItemUpgradeTome || stack.getItem() instanceof IUpgradeTrainer)
{
NBTHelper.checkNBT(stack);
NBTTagCompound tag = stack.getTagCompound();
tag.setInteger("level", level);
}
}
public static int getLevel(ItemStack stack)
{
if (stack.getItem() instanceof ItemUpgradeTome || stack.getItem() instanceof IUpgradeTrainer)
{
NBTHelper.checkNBT(stack);
NBTTagCompound tag = stack.getTagCompound();
return tag.getInteger("level");
}
return 0;
}
}
}

View file

@ -25,25 +25,25 @@ public class NetworkHelper
/** /**
* Gets the SoulNetwork for the player. * Gets the SoulNetwork for the player.
* *
* @param name * @param uuid
* - The name of the SoulNetwork owner - this is UUID.toString(). * - The UUID of the SoulNetwork owner - this is UUID.toString().
* *
* @return - The SoulNetwork for the given name. * @return - The SoulNetwork for the given name.
*/ */
public static SoulNetwork getSoulNetwork(String name) public static SoulNetwork getSoulNetwork(String uuid)
{ {
World world = DimensionManager.getWorld(0); World world = DimensionManager.getWorld(0);
if (world == null || world.getMapStorage() == null) //Hack-ish way to fix the lava crystal. if (world == null || world.getMapStorage() == null) //Hack-ish way to fix the lava crystal.
{ {
return new SoulNetwork(name); return new SoulNetwork(uuid);
} }
SoulNetwork network = (SoulNetwork) world.getMapStorage().loadData(SoulNetwork.class, name); SoulNetwork network = (SoulNetwork) world.getMapStorage().loadData(SoulNetwork.class, uuid);
if (network == null) if (network == null)
{ {
network = new SoulNetwork(name); network = new SoulNetwork(uuid);
world.getMapStorage().setData(name, network); world.getMapStorage().setData(uuid, network);
} }
return network; return network;

View file

@ -1,16 +1,12 @@
package WayofTime.bloodmagic.api.util.helper; package WayofTime.bloodmagic.api.util.helper;
import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.Constants;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.MobEffects; import net.minecraft.init.MobEffects;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect; import net.minecraft.potion.PotionEffect;
import net.minecraft.server.MinecraftServer;
import net.minecraftforge.common.UsernameCache; import net.minecraftforge.common.UsernameCache;
import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.common.util.FakePlayer;
import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.FMLCommonHandler;
@ -73,6 +69,14 @@ public class PlayerHelper
return stack.getTagCompound().getString(Constants.NBT.OWNER_NAME); return stack.getTagCompound().getString(Constants.NBT.OWNER_NAME);
} }
/**
* Checks whether or not the given player is an "actual" player
*
* @param player
* - The player in question
*
* @return If the player is fake or not
*/
public static boolean isFakePlayer(EntityPlayer player) public static boolean isFakePlayer(EntityPlayer player)
{ {
return player != null && (player instanceof FakePlayer || knownFakePlayers.contains(player.getClass().getCanonicalName())); return player != null && (player instanceof FakePlayer || knownFakePlayers.contains(player.getClass().getCanonicalName()));

View file

@ -2,6 +2,7 @@ package WayofTime.bloodmagic.api.util.helper;
import WayofTime.bloodmagic.api.altar.IBloodAltar; import WayofTime.bloodmagic.api.altar.IBloodAltar;
import WayofTime.bloodmagic.registry.ModPotions; import WayofTime.bloodmagic.registry.ModPotions;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.potion.Potion; import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect; import net.minecraft.potion.PotionEffect;
@ -42,6 +43,14 @@ public class PlayerSacrificeHelper
return true; return true;
} }
/**
* Sacrifices a player's health while the player is under the influence of incense
*
* @param player
* - The player sacrificing
*
* @return Whether or not the health sacrificing succeeded
*/
public static boolean sacrificePlayerHealth(EntityPlayer player) public static boolean sacrificePlayerHealth(EntityPlayer player)
{ {
if (player.isPotionActive(soulFrayId)) if (player.isPotionActive(soulFrayId))
@ -79,17 +88,24 @@ public class PlayerSacrificeHelper
return 1 + amount * scalingOfSacrifice; return 1 + amount * scalingOfSacrifice;
} }
public static boolean findAndFillAltar(World world, EntityPlayer player, int amount) /**
* Finds the nearest {@link IBloodAltar} and attempts to fill it
*
* @param world
* - The world
* @param sacrificingEntity
* - The entity having the sacrifice done on (can be {@link EntityPlayer} for self-sacrifice)
* @param amount
* - The amount of which the altar should be filled
*
* @return Whether the altar is found and (attempted) filled
*/
public static boolean findAndFillAltar(World world, EntityLivingBase sacrificingEntity, int amount)
{ {
int posX = (int) Math.round(player.posX - 0.5f); IBloodAltar altarEntity = getAltar(world, sacrificingEntity.getPosition());
int posY = (int) player.posY;
int posZ = (int) Math.round(player.posZ - 0.5f);
IBloodAltar altarEntity = getAltar(world, new BlockPos(posX, posY, posZ));
if (altarEntity == null) if (altarEntity == null)
{
return false; return false;
}
altarEntity.sacrificialDaggerCall(amount, false); altarEntity.sacrificialDaggerCall(amount, false);
altarEntity.startCycle(); altarEntity.startCycle();
@ -97,6 +113,16 @@ public class PlayerSacrificeHelper
return true; return true;
} }
/**
* Gets the nearest {@link IBloodAltar}
*
* @param world
* - The world
* @param blockPos
* - The position of where the check should be in (in a 2 block radius from this)
*
* @return The nearest altar, if no altar is found, then this will return null
*/
public static IBloodAltar getAltar(World world, BlockPos blockPos) public static IBloodAltar getAltar(World world, BlockPos blockPos)
{ {
TileEntity tileEntity; TileEntity tileEntity;
@ -107,7 +133,7 @@ public class PlayerSacrificeHelper
{ {
for (int k = -2; k <= 1; k++) for (int k = -2; k <= 1; k++)
{ {
tileEntity = world.getTileEntity(new BlockPos(i + blockPos.getX(), k + blockPos.getY(), j + blockPos.getZ())); tileEntity = world.getTileEntity(blockPos.add(i, j, k));
if (tileEntity instanceof IBloodAltar) if (tileEntity instanceof IBloodAltar)
{ {

View file

@ -12,6 +12,7 @@ import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.OreDictionary;
import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.livingArmour.LivingArmourHandler; import WayofTime.bloodmagic.api.livingArmour.LivingArmourHandler;
import WayofTime.bloodmagic.api.util.helper.ItemHelper.LivingUpgrades;
import WayofTime.bloodmagic.compat.jei.alchemyArray.AlchemyArrayCraftingCategory; import WayofTime.bloodmagic.compat.jei.alchemyArray.AlchemyArrayCraftingCategory;
import WayofTime.bloodmagic.compat.jei.alchemyArray.AlchemyArrayCraftingRecipeHandler; import WayofTime.bloodmagic.compat.jei.alchemyArray.AlchemyArrayCraftingRecipeHandler;
import WayofTime.bloodmagic.compat.jei.alchemyArray.AlchemyArrayCraftingRecipeMaker; import WayofTime.bloodmagic.compat.jei.alchemyArray.AlchemyArrayCraftingRecipeMaker;
@ -26,7 +27,6 @@ import WayofTime.bloodmagic.compat.jei.forge.TartaricForgeRecipeHandler;
import WayofTime.bloodmagic.compat.jei.forge.TartaricForgeRecipeMaker; import WayofTime.bloodmagic.compat.jei.forge.TartaricForgeRecipeMaker;
import WayofTime.bloodmagic.compat.jei.orb.ShapedOrbRecipeHandler; import WayofTime.bloodmagic.compat.jei.orb.ShapedOrbRecipeHandler;
import WayofTime.bloodmagic.compat.jei.orb.ShapelessOrbRecipeHandler; import WayofTime.bloodmagic.compat.jei.orb.ShapelessOrbRecipeHandler;
import WayofTime.bloodmagic.item.ItemUpgradeTome;
import WayofTime.bloodmagic.registry.ModBlocks; import WayofTime.bloodmagic.registry.ModBlocks;
import WayofTime.bloodmagic.registry.ModItems; import WayofTime.bloodmagic.registry.ModItems;
@ -65,8 +65,8 @@ public class BloodMagicPlugin extends BlankModPlugin
for (int i = 0; i < maxLevel - 1; i++) for (int i = 0; i < maxLevel - 1; i++)
{ {
ItemStack stack = new ItemStack(ModItems.upgradeTome); ItemStack stack = new ItemStack(ModItems.upgradeTome);
ItemUpgradeTome.setKey(stack, key); LivingUpgrades.setKey(stack, key);
ItemUpgradeTome.setLevel(stack, i); LivingUpgrades.setLevel(stack, i);
jeiHelper.getItemBlacklist().addItemToBlacklist(stack); jeiHelper.getItemBlacklist().addItemToBlacklist(stack);
} }
} }

View file

@ -1,7 +1,6 @@
package WayofTime.bloodmagic.item; package WayofTime.bloodmagic.item;
import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.impl.ItemBindable; import WayofTime.bloodmagic.api.impl.ItemBindable;
import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.api.util.helper.NBTHelper;
import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
@ -29,7 +28,7 @@ public class ItemBindableBase extends ItemBindable
{ {
NBTHelper.checkNBT(stack); NBTHelper.checkNBT(stack);
if (!Strings.isNullOrEmpty(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID))) if (!Strings.isNullOrEmpty(getOwnerUUID(stack)))
tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack))); tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack)));
} }
} }

View file

@ -65,16 +65,16 @@ public class ItemBloodOrb extends ItemBindableBase implements IBloodOrb, IBindab
return super.onItemRightClick(stack, world, player, hand); return super.onItemRightClick(stack, world, player, hand);
} }
if (Strings.isNullOrEmpty(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID))) if (Strings.isNullOrEmpty(getOwnerUUID(stack)))
return super.onItemRightClick(stack, world, player, hand); return super.onItemRightClick(stack, world, player, hand);
if (world.isRemote) if (world.isRemote)
return super.onItemRightClick(stack, world, player, hand); return super.onItemRightClick(stack, world, player, hand);
if (stack.getTagCompound().getString(Constants.NBT.OWNER_UUID).equals(PlayerHelper.getUsernameFromPlayer(player))) if (getOwnerUUID(stack).equals(PlayerHelper.getUsernameFromPlayer(player)))
NetworkHelper.setMaxOrb(NetworkHelper.getSoulNetwork(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID)), getOrbLevel(stack.getItemDamage())); NetworkHelper.setMaxOrb(NetworkHelper.getSoulNetwork(getOwnerUUID(stack)), getOrbLevel(stack.getItemDamage()));
NetworkHelper.getSoulNetwork(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID)).addLifeEssence(200, getMaxEssence(stack.getItemDamage())); NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).addLifeEssence(200, getMaxEssence(stack.getItemDamage()));
NetworkHelper.getSoulNetwork(player).hurtPlayer(player, 200); NetworkHelper.getSoulNetwork(player).hurtPlayer(player, 200);
return super.onItemRightClick(stack, world, player, hand); return super.onItemRightClick(stack, world, player, hand);
} }

View file

@ -26,7 +26,6 @@ import net.minecraftforge.fml.common.eventhandler.Event;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.BlockStack;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.ItemStackWrapper; import WayofTime.bloodmagic.api.ItemStackWrapper;
import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api.util.helper.NetworkHelper;
import WayofTime.bloodmagic.client.IMeshProvider; import WayofTime.bloodmagic.client.IMeshProvider;

View file

@ -26,7 +26,6 @@ import net.minecraftforge.fml.common.eventhandler.Event;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.BlockStack;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.ItemStackWrapper; import WayofTime.bloodmagic.api.ItemStackWrapper;
import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api.util.helper.NetworkHelper;
import WayofTime.bloodmagic.client.IMeshProvider; import WayofTime.bloodmagic.client.IMeshProvider;
@ -84,7 +83,7 @@ public class ItemBoundPickaxe extends ItemBoundTool implements IMeshProvider
boolean silkTouch = EnchantmentHelper.getEnchantmentLevel(Enchantments.silkTouch, stack) > 0; boolean silkTouch = EnchantmentHelper.getEnchantmentLevel(Enchantments.silkTouch, stack) > 0;
int fortuneLvl = EnchantmentHelper.getEnchantmentLevel(Enchantments.fortune, stack); int fortuneLvl = EnchantmentHelper.getEnchantmentLevel(Enchantments.fortune, stack);
int range = (int) (charge / 6); //Charge is a max of 30 - want 5 to be the max int range = (charge / 6); //Charge is a max of 30 - want 5 to be the max
HashMultiset<ItemStackWrapper> drops = HashMultiset.create(); HashMultiset<ItemStackWrapper> drops = HashMultiset.create();

View file

@ -25,7 +25,6 @@ import net.minecraftforge.fml.common.eventhandler.Event;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
import WayofTime.bloodmagic.api.BlockStack; import WayofTime.bloodmagic.api.BlockStack;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.ItemStackWrapper; import WayofTime.bloodmagic.api.ItemStackWrapper;
import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api.util.helper.NetworkHelper;
import WayofTime.bloodmagic.client.IMeshProvider; import WayofTime.bloodmagic.client.IMeshProvider;

View file

@ -97,7 +97,7 @@ public class ItemBoundSword extends ItemSword implements IBindable, IActivatable
tooltip.add(TextHelper.localize("tooltip.BloodMagic." + (getActivated(stack) ? "activated" : "deactivated"))); tooltip.add(TextHelper.localize("tooltip.BloodMagic." + (getActivated(stack) ? "activated" : "deactivated")));
if (!Strings.isNullOrEmpty(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID))) if (!Strings.isNullOrEmpty(getOwnerUUID(stack)))
tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack))); tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack)));
} }
@ -113,20 +113,6 @@ public class ItemBoundSword extends ItemSword implements IBindable, IActivatable
return multimap; return multimap;
} }
public boolean getActivated(ItemStack stack)
{
NBTHelper.checkNBT(stack);
return stack.getTagCompound().getBoolean(Constants.NBT.ACTIVATED);
}
public ItemStack setActivatedState(ItemStack stack, boolean activated)
{
NBTHelper.checkNBT(stack);
stack.getTagCompound().setBoolean(Constants.NBT.ACTIVATED, activated);
return stack;
}
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public ItemMeshDefinition getMeshDefinition() public ItemMeshDefinition getMeshDefinition()
@ -169,4 +155,24 @@ public class ItemBoundSword extends ItemSword implements IBindable, IActivatable
{ {
return stack != null ? NBTHelper.checkNBT(stack).getTagCompound().getString(Constants.NBT.OWNER_UUID) : null; return stack != null ? NBTHelper.checkNBT(stack).getTagCompound().getString(Constants.NBT.OWNER_UUID) : null;
} }
// IActivatable
@Override
public boolean getActivated(ItemStack stack)
{
return stack != null && NBTHelper.checkNBT(stack).getTagCompound().getBoolean(Constants.NBT.ACTIVATED);
}
@Override
public ItemStack setActivatedState(ItemStack stack, boolean activated)
{
if (stack != null)
{
NBTHelper.checkNBT(stack).getTagCompound().setBoolean(Constants.NBT.ACTIVATED, activated);
return stack;
}
return null;
}
} }

View file

@ -190,7 +190,7 @@ public class ItemBoundTool extends ItemTool implements IBindable, IActivatable
NBTHelper.checkNBT(stack); NBTHelper.checkNBT(stack);
if (!Strings.isNullOrEmpty(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID))) if (!Strings.isNullOrEmpty(getOwnerUUID(stack)))
tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack))); tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack)));
super.addInformation(stack, player, tooltip, advanced); super.addInformation(stack, player, tooltip, advanced);
@ -258,13 +258,18 @@ public class ItemBoundTool extends ItemTool implements IBindable, IActivatable
@Override @Override
public boolean getActivated(ItemStack stack) public boolean getActivated(ItemStack stack)
{ {
return NBTHelper.checkNBT(stack).getTagCompound().getBoolean(Constants.NBT.ACTIVATED); return stack != null && NBTHelper.checkNBT(stack).getTagCompound().getBoolean(Constants.NBT.ACTIVATED);
} }
@Override @Override
public ItemStack setActivatedState(ItemStack stack, boolean activated) public ItemStack setActivatedState(ItemStack stack, boolean activated)
{ {
NBTHelper.checkNBT(stack).getTagCompound().setBoolean(Constants.NBT.ACTIVATED, activated); if (stack != null)
return stack; {
NBTHelper.checkNBT(stack).getTagCompound().setBoolean(Constants.NBT.ACTIVATED, activated);
return stack;
}
return null;
} }
} }

View file

@ -9,11 +9,7 @@ import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.SoundEvents; import net.minecraft.init.SoundEvents;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
@ -21,9 +17,8 @@ import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.ConfigHandler; import WayofTime.bloodmagic.ConfigHandler;
import WayofTime.bloodmagic.api.BloodMagicAPI; import WayofTime.bloodmagic.api.BloodMagicAPI;
import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.DamageSourceBloodMagic;
import WayofTime.bloodmagic.api.altar.IBloodAltar;
import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.client.IVariantProvider;
import WayofTime.bloodmagic.api.util.helper.PlayerSacrificeHelper;
public class ItemDaggerOfSacrifice extends Item implements IVariantProvider public class ItemDaggerOfSacrifice extends Item implements IVariantProvider
{ {
@ -57,11 +52,11 @@ public class ItemDaggerOfSacrifice extends Item implements IVariantProvider
if (BloodMagicAPI.getEntitySacrificeValues().containsKey(entityName)) if (BloodMagicAPI.getEntitySacrificeValues().containsKey(entityName))
lifeEssence = BloodMagicAPI.getEntitySacrificeValues().get(entityName); lifeEssence = BloodMagicAPI.getEntitySacrificeValues().get(entityName);
if (findAndFillAltar(attacker.worldObj, target, lifeEssence)) if (PlayerSacrificeHelper.findAndFillAltar(attacker.worldObj, target, lifeEssence))
{ {
target.worldObj.playSound(null, target.posX, target.posY, target.posZ, SoundEvents.block_fire_extinguish, SoundCategory.BLOCKS, 0.5F, 2.6F + (target.worldObj.rand.nextFloat() - target.worldObj.rand.nextFloat()) * 0.8F); target.worldObj.playSound(null, target.posX, target.posY, target.posZ, SoundEvents.block_fire_extinguish, SoundCategory.BLOCKS, 0.5F, 2.6F + (target.worldObj.rand.nextFloat() - target.worldObj.rand.nextFloat()) * 0.8F);
target.setHealth(-1); target.setHealth(-1);
target.onDeath(new DamageSourceBloodMagic()); target.onDeath(BloodMagicAPI.getDamageSource());
} }
return false; return false;
@ -74,39 +69,4 @@ public class ItemDaggerOfSacrifice extends Item implements IVariantProvider
ret.add(new ImmutablePair<Integer, String>(0, "type=normal")); ret.add(new ImmutablePair<Integer, String>(0, "type=normal"));
return ret; return ret;
} }
public boolean findAndFillAltar(World world, EntityLivingBase sacrifice, int amount)
{
IBloodAltar bloodAltar = findBloodAltar(world, sacrifice.getPosition());
if (bloodAltar != null)
{
bloodAltar.sacrificialDaggerCall(amount, true);
bloodAltar.startCycle();
return true;
}
return false;
}
public IBloodAltar findBloodAltar(World world, BlockPos blockPos)
{
TileEntity tileEntity;
for (int i = -2; i <= 2; i++)
{
for (int j = -2; j <= 2; j++)
{
for (int k = -2; k <= 1; k++)
{
tileEntity = world.getTileEntity(blockPos.add(i, k, j));
if ((tileEntity instanceof IBloodAltar))
return (IBloodAltar) tileEntity;
}
}
}
return null;
}
} }

View file

@ -13,12 +13,7 @@ import net.minecraft.item.EnumAction;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ActionResult; import net.minecraft.util.*;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumHand;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
@ -31,7 +26,6 @@ import org.apache.commons.lang3.tuple.Pair;
import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.api.BloodMagicAPI; import WayofTime.bloodmagic.api.BloodMagicAPI;
import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.altar.IBloodAltar;
import WayofTime.bloodmagic.api.event.SacrificeKnifeUsedEvent; import WayofTime.bloodmagic.api.event.SacrificeKnifeUsedEvent;
import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.api.util.helper.NBTHelper;
import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
@ -154,7 +148,7 @@ public class ItemSacrificialDagger extends Item implements IVariantProvider
return super.onItemRightClick(stack, world, player, hand); return super.onItemRightClick(stack, world, player, hand);
// TODO - Check if SoulFray is active // TODO - Check if SoulFray is active
findAndFillAltar(world, player, lpAdded); PlayerSacrificeHelper.findAndFillAltar(world, player, lpAdded);
return super.onItemRightClick(stack, world, player, hand); return super.onItemRightClick(stack, world, player, hand);
} }
@ -168,42 +162,6 @@ public class ItemSacrificialDagger extends Item implements IVariantProvider
return ret; return ret;
} }
protected void findAndFillAltar(World world, EntityPlayer player, int amount)
{
BlockPos pos = player.getPosition();
IBloodAltar altarEntity = getAltar(world, pos);
if (altarEntity == null)
return;
altarEntity.sacrificialDaggerCall(amount, false);
altarEntity.startCycle();
}
public IBloodAltar getAltar(World world, BlockPos pos)
{
TileEntity tileEntity;
for (int i = -2; i <= 2; i++)
{
for (int j = -2; j <= 2; j++)
{
for (int k = -2; k <= 1; k++)
{
BlockPos newPos = pos.add(i, j, k);
tileEntity = world.getTileEntity(newPos);
if (tileEntity instanceof IBloodAltar)
{
return (IBloodAltar) tileEntity;
}
}
}
}
return null;
}
@Override @Override
public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5)
{ {

View file

@ -4,7 +4,7 @@ import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.livingArmour.LivingArmourHandler; import WayofTime.bloodmagic.api.livingArmour.LivingArmourHandler;
import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade; import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade;
import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.api.util.helper.ItemHelper.LivingUpgrades;
import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.client.IVariantProvider;
import WayofTime.bloodmagic.item.armour.ItemLivingArmour; import WayofTime.bloodmagic.item.armour.ItemLivingArmour;
import WayofTime.bloodmagic.livingArmour.LivingArmour; import WayofTime.bloodmagic.livingArmour.LivingArmour;
@ -14,13 +14,11 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHand;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
@ -47,7 +45,8 @@ public class ItemUpgradeTome extends Item implements IVariantProvider
{ {
return super.onItemRightClick(stack, world, player, hand); return super.onItemRightClick(stack, world, player, hand);
} }
LivingArmourUpgrade upgrade = ItemUpgradeTome.getUpgrade(stack);
LivingArmourUpgrade upgrade = LivingUpgrades.getUpgrade(stack);
if (upgrade == null) if (upgrade == null)
{ {
return super.onItemRightClick(stack, world, player, hand); return super.onItemRightClick(stack, world, player, hand);
@ -83,8 +82,8 @@ public class ItemUpgradeTome extends Item implements IVariantProvider
for (int i = 0; i < maxLevel; i++) for (int i = 0; i < maxLevel; i++)
{ {
ItemStack stack = new ItemStack(this); ItemStack stack = new ItemStack(this);
setKey(stack, key); LivingUpgrades.setKey(stack, key);
setLevel(stack, i); LivingUpgrades.setLevel(stack, i);
list.add(stack); list.add(stack);
} }
} }
@ -98,52 +97,12 @@ public class ItemUpgradeTome extends Item implements IVariantProvider
return ret; return ret;
} }
public static LivingArmourUpgrade getUpgrade(ItemStack stack)
{
String key = getKey(stack);
int level = getLevel(stack);
return LivingArmourHandler.generateUpgradeFromKey(key, level);
}
public static void setKey(ItemStack stack, String key)
{
NBTHelper.checkNBT(stack);
NBTTagCompound tag = stack.getTagCompound();
tag.setString("key", key);
}
public static String getKey(ItemStack stack)
{
NBTHelper.checkNBT(stack);
NBTTagCompound tag = stack.getTagCompound();
return tag.getString("key");
}
public static void setLevel(ItemStack stack, int level)
{
NBTHelper.checkNBT(stack);
NBTTagCompound tag = stack.getTagCompound();
tag.setInteger("level", level);
}
public static int getLevel(ItemStack stack)
{
NBTHelper.checkNBT(stack);
NBTTagCompound tag = stack.getTagCompound();
return tag.getInteger("level");
}
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced) public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced)
{ {
// tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.BloodMagic.livingArmour")))); // tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.BloodMagic.livingArmour"))));
LivingArmourUpgrade upgrade = ItemUpgradeTome.getUpgrade(stack); LivingArmourUpgrade upgrade = LivingUpgrades.getUpgrade(stack);
if (upgrade != null) if (upgrade != null)
{ {
tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.livingArmour.upgrade.level", TextHelper.localize(upgrade.getUnlocalizedName()), upgrade.getUpgradeLevel() + 1)); tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.livingArmour.upgrade.level", TextHelper.localize(upgrade.getUnlocalizedName()), upgrade.getUpgradeLevel() + 1));

View file

@ -5,14 +5,13 @@ import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.iface.IUpgradeTrainer; import WayofTime.bloodmagic.api.iface.IUpgradeTrainer;
import WayofTime.bloodmagic.api.livingArmour.LivingArmourHandler; import WayofTime.bloodmagic.api.livingArmour.LivingArmourHandler;
import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade; import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade;
import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.api.util.helper.ItemHelper.LivingUpgrades;
import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.client.IVariantProvider;
import WayofTime.bloodmagic.util.helper.TextHelper; import WayofTime.bloodmagic.util.helper.TextHelper;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.ImmutablePair;
@ -43,41 +42,17 @@ public class ItemUpgradeTrainer extends Item implements IUpgradeTrainer, IVarian
{ {
String key = entry.getKey(); String key = entry.getKey();
ItemStack stack = new ItemStack(this); ItemStack stack = new ItemStack(this);
setKey(stack, key); LivingUpgrades.setKey(stack, key);
list.add(stack); list.add(stack);
} }
} }
public static LivingArmourUpgrade getUpgrade(ItemStack stack)
{
String key = getKey(stack);
int level = 0;
return LivingArmourHandler.generateUpgradeFromKey(key, level);
}
public static void setKey(ItemStack stack, String key)
{
NBTHelper.checkNBT(stack);
NBTTagCompound tag = stack.getTagCompound();
tag.setString("key", key);
}
public static String getKey(ItemStack stack)
{
NBTHelper.checkNBT(stack);
NBTTagCompound tag = stack.getTagCompound();
return tag.getString("key");
}
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced) public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced)
{ {
// tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.BloodMagic.livingArmour")))); // tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.BloodMagic.livingArmour"))));
LivingArmourUpgrade upgrade = ItemUpgradeTrainer.getUpgrade(stack); LivingArmourUpgrade upgrade = LivingUpgrades.getUpgrade(stack);
if (upgrade != null) if (upgrade != null)
{ {
tooltip.add(TextHelper.localize(upgrade.getUnlocalizedName())); tooltip.add(TextHelper.localize(upgrade.getUnlocalizedName()));
@ -88,7 +63,7 @@ public class ItemUpgradeTrainer extends Item implements IUpgradeTrainer, IVarian
public List<String> getTrainedUpgrades(ItemStack stack) public List<String> getTrainedUpgrades(ItemStack stack)
{ {
List<String> keyList = new ArrayList<String>(); List<String> keyList = new ArrayList<String>();
String key = getKey(stack); String key = LivingUpgrades.getKey(stack);
if (!key.isEmpty()) if (!key.isEmpty())
{ {
@ -106,7 +81,7 @@ public class ItemUpgradeTrainer extends Item implements IUpgradeTrainer, IVarian
return false; return false;
} }
setKey(stack, keys.get(0)); LivingUpgrades.setKey(stack, keys.get(0));
return true; return true;
} }

View file

@ -3,9 +3,11 @@ package WayofTime.bloodmagic.item.gear;
import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.altar.IAltarManipulator; import WayofTime.bloodmagic.api.altar.IAltarManipulator;
import WayofTime.bloodmagic.api.altar.IBloodAltar;
import WayofTime.bloodmagic.api.iface.IItemLPContainer;
import WayofTime.bloodmagic.api.util.helper.ItemHelper.LPContainer;
import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.api.util.helper.NBTHelper;
import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.client.IVariantProvider;
import WayofTime.bloodmagic.tile.TileAltar;
import WayofTime.bloodmagic.util.helper.TextHelper; import WayofTime.bloodmagic.util.helper.TextHelper;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.inventory.EntityEquipmentSlot;
@ -23,7 +25,7 @@ import org.apache.commons.lang3.tuple.Pair;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class ItemPackSacrifice extends ItemArmor implements IAltarManipulator, IVariantProvider public class ItemPackSacrifice extends ItemArmor implements IAltarManipulator, IItemLPContainer, IVariantProvider
{ {
public final int CAPACITY = 10000; // Max LP storage public final int CAPACITY = 10000; // Max LP storage
@ -52,23 +54,10 @@ public class ItemPackSacrifice extends ItemArmor implements IAltarManipulator, I
{ {
TileEntity tile = world.getTileEntity(position.getBlockPos()); TileEntity tile = world.getTileEntity(position.getBlockPos());
if (!(tile instanceof TileAltar)) if (!(tile instanceof IBloodAltar))
return super.onItemRightClick(stack, world, player, EnumHand.MAIN_HAND); return super.onItemRightClick(stack, world, player, EnumHand.MAIN_HAND);
TileAltar altar = (TileAltar) tile; LPContainer.tryAndFillAltar((IBloodAltar) tile, stack, world, position.getBlockPos());
if (!altar.isActive())
{
int amount = this.getStoredLP(stack);
if (amount > 0)
{
int filledAmount = altar.fillMainTank(amount);
amount -= filledAmount;
setStoredLP(stack, amount);
world.notifyBlockUpdate(position.getBlockPos(), world.getBlockState(position.getBlockPos()), world.getBlockState(position.getBlockPos()), 3);
}
}
} }
} }
@ -98,28 +87,26 @@ public class ItemPackSacrifice extends ItemArmor implements IAltarManipulator, I
return ret; return ret;
} }
public void addLP(ItemStack stack, int toAdd) // IFillable
@Override
public int getCapacity()
{ {
stack = NBTHelper.checkNBT(stack); return this.CAPACITY;
if (toAdd < 0)
toAdd = 0;
if (toAdd > CAPACITY)
toAdd = CAPACITY;
setStoredLP(stack, Math.min(getStoredLP(stack) + toAdd, CAPACITY));
}
public void setStoredLP(ItemStack stack, int lp)
{
stack = NBTHelper.checkNBT(stack);
stack.getTagCompound().setInteger(Constants.NBT.STORED_LP, lp);
} }
@Override
public int getStoredLP(ItemStack stack) public int getStoredLP(ItemStack stack)
{ {
stack = NBTHelper.checkNBT(stack); return stack != null ? NBTHelper.checkNBT(stack).getTagCompound().getInteger(Constants.NBT.STORED_LP) : 0;
return stack.getTagCompound().getInteger(Constants.NBT.STORED_LP); }
@Override
public void setStoredLP(ItemStack stack, int lp)
{
if (stack != null)
{
NBTHelper.checkNBT(stack).getTagCompound().setInteger(Constants.NBT.STORED_LP, lp);
}
} }
} }

View file

@ -3,10 +3,12 @@ package WayofTime.bloodmagic.item.gear;
import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.altar.IAltarManipulator; import WayofTime.bloodmagic.api.altar.IAltarManipulator;
import WayofTime.bloodmagic.api.altar.IBloodAltar;
import WayofTime.bloodmagic.api.iface.IItemLPContainer;
import WayofTime.bloodmagic.api.util.helper.ItemHelper.LPContainer;
import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.api.util.helper.NBTHelper;
import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import WayofTime.bloodmagic.api.util.helper.NetworkHelper;
import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.client.IVariantProvider;
import WayofTime.bloodmagic.tile.TileAltar;
import WayofTime.bloodmagic.util.helper.TextHelper; import WayofTime.bloodmagic.util.helper.TextHelper;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.inventory.EntityEquipmentSlot;
@ -24,15 +26,23 @@ import org.apache.commons.lang3.tuple.Pair;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class ItemPackSelfSacrifice extends ItemArmor implements IAltarManipulator, IVariantProvider public class ItemPackSelfSacrifice extends ItemArmor implements IAltarManipulator, IItemLPContainer, IVariantProvider
{ {
/** How much LP per half heart */ /**
* How much LP per half heart
*/
public final int CONVERSION = 100; public final int CONVERSION = 100;
/** Max LP storage */ /**
* Max LP storage
*/
public final int CAPACITY = 10000; public final int CAPACITY = 10000;
/** How often the pack syphons */ /**
* How often the pack syphons
*/
public final int INTERVAL = 20; public final int INTERVAL = 20;
/** How much health is required for the pack to syphon (0 - 1) */ /**
* How much health is required for the pack to syphon (0 - 1)
*/
public final float HEALTHREQ = 0.5f; public final float HEALTHREQ = 0.5f;
public ItemPackSelfSacrifice() public ItemPackSelfSacrifice()
@ -54,29 +64,17 @@ public class ItemPackSelfSacrifice extends ItemArmor implements IAltarManipulato
if (position == null) if (position == null)
{ {
return super.onItemRightClick(stack, world, player, EnumHand.MAIN_HAND); return super.onItemRightClick(stack, world, player, EnumHand.MAIN_HAND);
} else }
else
{ {
if (position.typeOfHit == RayTraceResult.Type.BLOCK) if (position.typeOfHit == RayTraceResult.Type.BLOCK)
{ {
TileEntity tile = world.getTileEntity(position.getBlockPos()); TileEntity tile = world.getTileEntity(position.getBlockPos());
if (!(tile instanceof TileAltar)) if (!(tile instanceof IBloodAltar))
return super.onItemRightClick(stack, world, player, EnumHand.MAIN_HAND); return super.onItemRightClick(stack, world, player, EnumHand.MAIN_HAND);
TileAltar altar = (TileAltar) tile; LPContainer.tryAndFillAltar((IBloodAltar) tile, stack, world, position.getBlockPos());
if (!altar.isActive())
{
int amount = this.getStoredLP(stack);
if (amount > 0)
{
int filledAmount = altar.fillMainTank(amount);
amount -= filledAmount;
setStoredLP(stack, amount);
world.notifyBlockUpdate(position.getBlockPos(), world.getBlockState(position.getBlockPos()), world.getBlockState(position.getBlockPos()), 3);
}
}
} }
} }
@ -94,7 +92,7 @@ public class ItemPackSelfSacrifice extends ItemArmor implements IAltarManipulato
if (shouldSyphon & world.getTotalWorldTime() % INTERVAL == 0) if (shouldSyphon & world.getTotalWorldTime() % INTERVAL == 0)
{ {
NetworkHelper.getSoulNetwork(player).hurtPlayer(player, 1.0F); NetworkHelper.getSoulNetwork(player).hurtPlayer(player, 1.0F);
addLP(stack, CONVERSION); LPContainer.addLPToItem(stack, CONVERSION, CAPACITY);
} }
if (getStoredLP(stack) > CAPACITY) if (getStoredLP(stack) > CAPACITY)
@ -117,28 +115,26 @@ public class ItemPackSelfSacrifice extends ItemArmor implements IAltarManipulato
return ret; return ret;
} }
public void addLP(ItemStack stack, int toAdd) // IFillable
@Override
public int getCapacity()
{ {
stack = NBTHelper.checkNBT(stack); return this.CAPACITY;
if (toAdd < 0)
toAdd = 0;
if (toAdd > CAPACITY)
toAdd = CAPACITY;
setStoredLP(stack, Math.min(getStoredLP(stack) + toAdd, CAPACITY));
}
public void setStoredLP(ItemStack stack, int lp)
{
stack = NBTHelper.checkNBT(stack);
stack.getTagCompound().setInteger(Constants.NBT.STORED_LP, lp);
} }
@Override
public int getStoredLP(ItemStack stack) public int getStoredLP(ItemStack stack)
{ {
stack = NBTHelper.checkNBT(stack); return stack != null ? NBTHelper.checkNBT(stack).getTagCompound().getInteger(Constants.NBT.STORED_LP) : 0;
return stack.getTagCompound().getInteger(Constants.NBT.STORED_LP); }
@Override
public void setStoredLP(ItemStack stack, int lp)
{
if (stack != null)
{
NBTHelper.checkNBT(stack).getTagCompound().setInteger(Constants.NBT.STORED_LP, lp);
}
} }
} }

View file

@ -53,7 +53,7 @@ public class ItemSigilBase extends ItemSigil implements IVariantProvider
NBTHelper.checkNBT(stack); NBTHelper.checkNBT(stack);
if (!Strings.isNullOrEmpty(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID))) if (!Strings.isNullOrEmpty(getOwnerName(stack)))
tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack))); tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack)));
super.addInformation(stack, player, tooltip, advanced); super.addInformation(stack, player, tooltip, advanced);

View file

@ -8,19 +8,22 @@ import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.impl.ItemSigilToggleable; import WayofTime.bloodmagic.api.impl.ItemSigilToggleable;
import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.api.util.helper.NBTHelper;
import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.client.IMeshProvider;
import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.text.WordUtils;
import org.apache.commons.lang3.tuple.Pair;
import javax.annotation.Nullable;
import WayofTime.bloodmagic.util.helper.TextHelper; import WayofTime.bloodmagic.util.helper.TextHelper;
public class ItemSigilToggleableBase extends ItemSigilToggleable implements IVariantProvider public class ItemSigilToggleableBase extends ItemSigilToggleable implements IMeshProvider
{ {
protected final String tooltipBase; protected final String tooltipBase;
private final String name; private final String name;
@ -28,7 +31,6 @@ public class ItemSigilToggleableBase extends ItemSigilToggleable implements IVar
public ItemSigilToggleableBase(String name, int lpUsed) public ItemSigilToggleableBase(String name, int lpUsed)
{ {
super(lpUsed); super(lpUsed);
setToggleable();
setUnlocalizedName(Constants.Mod.MODID + ".sigil." + name); setUnlocalizedName(Constants.Mod.MODID + ".sigil." + name);
setCreativeTab(BloodMagic.tabBloodMagic); setCreativeTab(BloodMagic.tabBloodMagic);
@ -45,16 +47,31 @@ public class ItemSigilToggleableBase extends ItemSigilToggleable implements IVar
super.addInformation(stack, player, tooltip, advanced); super.addInformation(stack, player, tooltip, advanced);
tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic." + (getActivated(stack) ? "activated" : "deactivated"))); tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic." + (getActivated(stack) ? "activated" : "deactivated")));
if (!Strings.isNullOrEmpty(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID))) if (!Strings.isNullOrEmpty(getOwnerName(stack)))
tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack))); tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack)));
} }
@Override @Override
public List<Pair<Integer, String>> getVariants() @SideOnly(Side.CLIENT)
public ItemMeshDefinition getMeshDefinition()
{ {
List<Pair<Integer, String>> ret = new ArrayList<Pair<Integer, String>>(); return new CustomMeshDefinitionActivatable("ItemSigil" + WordUtils.capitalize(name));
ret.add(new ImmutablePair<Integer, String>(0, "active=false")); }
ret.add(new ImmutablePair<Integer, String>(1, "active=true"));
@Nullable
@Override
public ResourceLocation getCustomLocation()
{
return null;
}
@Override
public List<String> getVariants()
{
List<String> ret = new ArrayList<String>();
ret.add("active=false");
ret.add("active=true");
return ret; return ret;
} }
} }

View file

@ -4,7 +4,7 @@ import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade; import WayofTime.bloodmagic.api.livingArmour.LivingArmourUpgrade;
import WayofTime.bloodmagic.api.livingArmour.StatTracker; import WayofTime.bloodmagic.api.livingArmour.StatTracker;
import WayofTime.bloodmagic.api.ritual.*; import WayofTime.bloodmagic.api.ritual.*;
import WayofTime.bloodmagic.item.ItemUpgradeTome; import WayofTime.bloodmagic.api.util.helper.ItemHelper.LivingUpgrades;
import WayofTime.bloodmagic.item.armour.ItemLivingArmour; import WayofTime.bloodmagic.item.armour.ItemLivingArmour;
import WayofTime.bloodmagic.livingArmour.LivingArmour; import WayofTime.bloodmagic.livingArmour.LivingArmour;
import WayofTime.bloodmagic.registry.ModItems; import WayofTime.bloodmagic.registry.ModItems;
@ -66,8 +66,8 @@ public class RitualUpgradeRemove extends Ritual
String upgradeKey = entry.getKey(); String upgradeKey = entry.getKey();
ItemStack upgradeStack = new ItemStack(ModItems.upgradeTome); ItemStack upgradeStack = new ItemStack(ModItems.upgradeTome);
ItemUpgradeTome.setKey(upgradeStack, upgradeKey); LivingUpgrades.setKey(upgradeStack, upgradeKey);
ItemUpgradeTome.setLevel(upgradeStack, upgrade.getUpgradeLevel()); LivingUpgrades.setLevel(upgradeStack, upgrade.getUpgradeLevel());
boolean successful = armour.removeUpgrade(player, upgrade); boolean successful = armour.removeUpgrade(player, upgrade);

View file

@ -224,7 +224,6 @@ public class ChatUtil
*/ */
public static class PacketNoSpamChat implements IMessage public static class PacketNoSpamChat implements IMessage
{ {
private ITextComponent[] chatLines; private ITextComponent[] chatLines;
public PacketNoSpamChat() public PacketNoSpamChat()
@ -260,7 +259,6 @@ public class ChatUtil
public static class Handler implements IMessageHandler<PacketNoSpamChat, IMessage> public static class Handler implements IMessageHandler<PacketNoSpamChat, IMessage>
{ {
@Override @Override
public IMessage onMessage(PacketNoSpamChat message, MessageContext ctx) public IMessage onMessage(PacketNoSpamChat message, MessageContext ctx)
{ {

View file

@ -71,10 +71,7 @@ import WayofTime.bloodmagic.api.soul.EnumDemonWillType;
import WayofTime.bloodmagic.api.soul.IDemonWill; import WayofTime.bloodmagic.api.soul.IDemonWill;
import WayofTime.bloodmagic.api.soul.IDemonWillWeapon; import WayofTime.bloodmagic.api.soul.IDemonWillWeapon;
import WayofTime.bloodmagic.api.soul.PlayerDemonWillHandler; import WayofTime.bloodmagic.api.soul.PlayerDemonWillHandler;
import WayofTime.bloodmagic.api.util.helper.BindableHelper; import WayofTime.bloodmagic.api.util.helper.*;
import WayofTime.bloodmagic.api.util.helper.NBTHelper;
import WayofTime.bloodmagic.api.util.helper.NetworkHelper;
import WayofTime.bloodmagic.api.util.helper.PlayerHelper;
import WayofTime.bloodmagic.block.BlockAltar; import WayofTime.bloodmagic.block.BlockAltar;
import WayofTime.bloodmagic.demonAura.PosXY; import WayofTime.bloodmagic.demonAura.PosXY;
import WayofTime.bloodmagic.demonAura.WillChunk; import WayofTime.bloodmagic.demonAura.WillChunk;
@ -83,7 +80,6 @@ import WayofTime.bloodmagic.entity.projectile.EntitySentientArrow;
import WayofTime.bloodmagic.item.ItemAltarMaker; import WayofTime.bloodmagic.item.ItemAltarMaker;
import WayofTime.bloodmagic.item.ItemExperienceBook; import WayofTime.bloodmagic.item.ItemExperienceBook;
import WayofTime.bloodmagic.item.ItemInscriptionTool; import WayofTime.bloodmagic.item.ItemInscriptionTool;
import WayofTime.bloodmagic.item.ItemUpgradeTome;
import WayofTime.bloodmagic.item.armour.ItemLivingArmour; import WayofTime.bloodmagic.item.armour.ItemLivingArmour;
import WayofTime.bloodmagic.item.armour.ItemSentientArmour; import WayofTime.bloodmagic.item.armour.ItemSentientArmour;
import WayofTime.bloodmagic.item.gear.ItemPackSacrifice; import WayofTime.bloodmagic.item.gear.ItemPackSacrifice;
@ -356,7 +352,7 @@ public class EventHandler
int totalLP = Math.round(damageDone * ConfigHandler.sacrificialPackConversion); int totalLP = Math.round(damageDone * ConfigHandler.sacrificialPackConversion);
if (shouldSyphon) if (shouldSyphon)
pack.addLP(player.getItemStackFromSlot(EntityEquipmentSlot.CHEST), totalLP); ItemHelper.LPContainer.addLPToItem(player.getItemStackFromSlot(EntityEquipmentSlot.CHEST), totalLP, pack.CAPACITY);
} }
} }
} }
@ -370,8 +366,8 @@ public class EventHandler
{ {
ItemStack output = new ItemStack(ModItems.upgradeTome); ItemStack output = new ItemStack(ModItems.upgradeTome);
output = NBTHelper.checkNBT(output); output = NBTHelper.checkNBT(output);
ItemUpgradeTome.setKey(output, Constants.Mod.MODID + ".upgrade.revealing"); ItemHelper.LivingUpgrades.setKey(output, Constants.Mod.MODID + ".upgrade.revealing");
ItemUpgradeTome.setLevel(output, 1); ItemHelper.LivingUpgrades.setLevel(output, 1);
event.setCost(1); event.setCost(1);
event.setOutput(output); event.setOutput(output);
@ -382,16 +378,16 @@ public class EventHandler
if (event.getLeft().getItem() == ModItems.upgradeTome && event.getRight().getItem() == ModItems.upgradeTome) if (event.getLeft().getItem() == ModItems.upgradeTome && event.getRight().getItem() == ModItems.upgradeTome)
{ {
LivingArmourUpgrade leftUpgrade = ItemUpgradeTome.getUpgrade(event.getLeft()); LivingArmourUpgrade leftUpgrade = ItemHelper.LivingUpgrades.getUpgrade(event.getLeft());
if (leftUpgrade != null && ItemUpgradeTome.getKey(event.getLeft()).equals(ItemUpgradeTome.getKey(event.getRight()))) if (leftUpgrade != null && ItemHelper.LivingUpgrades.getKey(event.getLeft()).equals(ItemHelper.LivingUpgrades.getKey(event.getRight())))
{ {
int leftLevel = ItemUpgradeTome.getLevel(event.getLeft()); int leftLevel = ItemHelper.LivingUpgrades.getLevel(event.getLeft());
int rightLevel = ItemUpgradeTome.getLevel(event.getRight()); int rightLevel = ItemHelper.LivingUpgrades.getLevel(event.getRight());
if (leftLevel == rightLevel && leftLevel < leftUpgrade.getMaxTier() - 1) if (leftLevel == rightLevel && leftLevel < leftUpgrade.getMaxTier() - 1)
{ {
ItemStack outputStack = event.getLeft().copy(); ItemStack outputStack = event.getLeft().copy();
ItemUpgradeTome.setLevel(outputStack, leftLevel + 1); ItemHelper.LivingUpgrades.setLevel(outputStack, leftLevel + 1);
event.setCost(leftLevel + 2); event.setCost(leftLevel + 2);
event.setOutput(outputStack); event.setOutput(outputStack);
@ -403,10 +399,10 @@ public class EventHandler
if (event.getLeft().getItem() instanceof IUpgradeTrainer && event.getRight().getItem() == ModItems.upgradeTome) if (event.getLeft().getItem() instanceof IUpgradeTrainer && event.getRight().getItem() == ModItems.upgradeTome)
{ {
LivingArmourUpgrade rightUpgrade = ItemUpgradeTome.getUpgrade(event.getRight()); LivingArmourUpgrade rightUpgrade = ItemHelper.LivingUpgrades.getUpgrade(event.getRight());
if (rightUpgrade != null) if (rightUpgrade != null)
{ {
String key = ItemUpgradeTome.getKey(event.getRight()); String key = ItemHelper.LivingUpgrades.getKey(event.getRight());
ItemStack outputStack = event.getLeft().copy(); ItemStack outputStack = event.getLeft().copy();
List<String> keyList = new ArrayList<String>(); List<String> keyList = new ArrayList<String>();
keyList.add(key); keyList.add(key);