diff options
author | Alkalus <draknyte1@hotmail.com> | 2017-11-11 01:56:15 +1000 |
---|---|---|
committer | Alkalus <draknyte1@hotmail.com> | 2017-11-11 01:56:15 +1000 |
commit | bab1fd921740a9184f67f3bbb34500221b2029b7 (patch) | |
tree | 2153566057165b5b42e656a818e87d6e2f6f36e0 /src | |
parent | 40d2c3e86e55ebdffec77dad73b67f49ddf7babd (diff) | |
download | GT5-Unofficial-bab1fd921740a9184f67f3bbb34500221b2029b7.tar.gz GT5-Unofficial-bab1fd921740a9184f67f3bbb34500221b2029b7.tar.bz2 GT5-Unofficial-bab1fd921740a9184f67f3bbb34500221b2029b7.zip |
+ Added in a modular bauble.
Diffstat (limited to 'src')
3 files changed, 256 insertions, 1 deletions
diff --git a/src/Java/gtPlusPlus/core/item/bauble/BaseBauble.java b/src/Java/gtPlusPlus/core/item/bauble/BaseBauble.java index 61da0d2f5c..60d5aa4e57 100644 --- a/src/Java/gtPlusPlus/core/item/bauble/BaseBauble.java +++ b/src/Java/gtPlusPlus/core/item/bauble/BaseBauble.java @@ -16,6 +16,7 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.registry.GameRegistry; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.nbt.ModularArmourUtils.BT; import gtPlusPlus.core.util.nbt.NBTUtils; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; @@ -35,7 +36,7 @@ public class BaseBauble extends Item implements IBauble{ * Implementation suggestions taken from Botania. */ - private final BaubleType mThisBauble; + private BaubleType mThisBauble; private final String mDisplayName; private List<String> damageNegations = new ArrayList<String>(); Multimap<String, AttributeModifier> attributes = HashMultimap.create(); @@ -82,6 +83,15 @@ public class BaseBauble extends Item implements IBauble{ public BaubleType getBaubleType(ItemStack arg0) { return mThisBauble; } + + public boolean SetBaubleType(BT arg0) { + BaubleType temp = this.mThisBauble; + this.mThisBauble = arg0.getType(); + if (this.mThisBauble != temp){ + return true; + } + return false; + } @Override public void onEquipped(ItemStack stack, EntityLivingBase entity) { diff --git a/src/Java/gtPlusPlus/core/item/bauble/ModularBauble.java b/src/Java/gtPlusPlus/core/item/bauble/ModularBauble.java new file mode 100644 index 0000000000..755f94ef8d --- /dev/null +++ b/src/Java/gtPlusPlus/core/item/bauble/ModularBauble.java @@ -0,0 +1,117 @@ +package gtPlusPlus.core.item.bauble; + +import java.util.List; + +import com.google.common.collect.Multimap; + +import baubles.api.BaubleType; +import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.util.nbt.ModularArmourUtils; +import gtPlusPlus.core.util.nbt.ModularArmourUtils.BT; +import gtPlusPlus.core.util.nbt.ModularArmourUtils.Modifiers; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumChatFormatting; + +public class ModularBauble extends BaseBauble{ + + + public ModularBauble() { + super(BaubleType.AMULET, "Does Fancy Things."); + addDamageNegation(DamageSource.wither); + this.setTextureName(CORE.MODID + ":" + "itemKeyGold"); + } + + @Override + void fillModifiers(Multimap<String, AttributeModifier> attributes, ItemStack stack) { + attributes.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), new AttributeModifier(getBaubleUUID(stack), "Bauble modifier", 40, 0)); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + //Bauble Type + if (ModularArmourUtils.getBaubleType(stack) == BaubleType.AMULET){ + list.add(EnumChatFormatting.GRAY+"Current Form: "+EnumChatFormatting.RED+"Amulet"+EnumChatFormatting.GRAY+"."); + list.add(EnumChatFormatting.GRAY+"You can change this into a Ring or a Belt."); + } + else if (ModularArmourUtils.getBaubleType(stack) == BaubleType.RING){ + list.add(EnumChatFormatting.GRAY+"Current Form: "+EnumChatFormatting.RED+"Ring"+EnumChatFormatting.GRAY+"."); + list.add(EnumChatFormatting.GRAY+"You can change this into an Amulet or a Belt."); + } + else if (ModularArmourUtils.getBaubleType(stack) == BaubleType.BELT){ + list.add(EnumChatFormatting.GRAY+"Current Form: "+EnumChatFormatting.RED+"Belt"+EnumChatFormatting.GRAY+"."); + list.add(EnumChatFormatting.GRAY+"You can change this into a Ring or an Amulet."); + } + + //Get Stats + int mStatlevel = 0; + if ((mStatlevel = ModularArmourUtils.getModifierLevel(stack, Modifiers.BOOST_DAMAGE)) > 0){ + list.add(EnumChatFormatting.GRAY+"Damage Boost: "+EnumChatFormatting.DARK_RED+mStatlevel+EnumChatFormatting.GRAY+"."); + } + if ((mStatlevel = ModularArmourUtils.getModifierLevel(stack, Modifiers.BOOST_DEF)) > 0){ + list.add(EnumChatFormatting.GRAY+"Defence Boost: "+EnumChatFormatting.BLUE+mStatlevel+EnumChatFormatting.GRAY+"."); + } + if ((mStatlevel = ModularArmourUtils.getModifierLevel(stack, Modifiers.BOOST_HP)) > 0){ + list.add(EnumChatFormatting.GRAY+"Health Boost: "+EnumChatFormatting.RED+mStatlevel+EnumChatFormatting.GRAY+"."); + } + if ((mStatlevel = ModularArmourUtils.getModifierLevel(stack, Modifiers.BOOST_SPEED)) > 0){ + list.add(EnumChatFormatting.GRAY+"Speed Boost: "+EnumChatFormatting.WHITE+mStatlevel+EnumChatFormatting.GRAY+"."); + } + if ((mStatlevel = ModularArmourUtils.getModifierLevel(stack, Modifiers.BOOST_MINING)) > 0){ + list.add(EnumChatFormatting.GRAY+"Mining Boost: "+EnumChatFormatting.DARK_GRAY+mStatlevel+EnumChatFormatting.GRAY+"."); + } + if ((mStatlevel = ModularArmourUtils.getModifierLevel(stack, Modifiers.BOOST_HOLY)) > 0){ + list.add(EnumChatFormatting.GRAY+"Holy Boost: "+EnumChatFormatting.GOLD+mStatlevel+EnumChatFormatting.GRAY+"."); + } + + super.addInformation(stack, player, list, bool); + } + + @Override + public boolean addDamageNegation(DamageSource damageSource) { + // TODO Auto-generated method stub + return super.addDamageNegation(damageSource); + } + + @Override + public boolean canEquip(ItemStack arg0, EntityLivingBase arg1) { + if (ModularArmourUtils.getBaubleTypeID(arg0) == BT.TYPE_AMULET.getID()){ + this.SetBaubleType(BT.TYPE_AMULET); + } + else if (ModularArmourUtils.getBaubleTypeID(arg0) == BT.TYPE_RING.getID()){ + this.SetBaubleType(BT.TYPE_RING); + } + else if (ModularArmourUtils.getBaubleTypeID(arg0) == BT.TYPE_BELT.getID()){ + this.SetBaubleType(BT.TYPE_BELT); + } + else { + this.SetBaubleType(BT.TYPE_RING); + } + return super.canEquip(arg0, arg1); + } + + @Override + public BaubleType getBaubleType(ItemStack arg0) { + return ModularArmourUtils.getBaubleType(arg0); + } + + @Override + public void onEquipped(ItemStack stack, EntityLivingBase entity) { + // TODO Auto-generated method stub + super.onEquipped(stack, entity); + } + + @Override + public void onUnequipped(ItemStack stack, EntityLivingBase player) { + // TODO Auto-generated method stub + super.onUnequipped(stack, player); + } + + + + +} diff --git a/src/Java/gtPlusPlus/core/util/nbt/ModularArmourUtils.java b/src/Java/gtPlusPlus/core/util/nbt/ModularArmourUtils.java new file mode 100644 index 0000000000..5fb70ab540 --- /dev/null +++ b/src/Java/gtPlusPlus/core/util/nbt/ModularArmourUtils.java @@ -0,0 +1,128 @@ +package gtPlusPlus.core.util.nbt; + +import baubles.api.BaubleType; +import gregtech.api.util.GT_Utility; +import net.minecraft.block.Block.SoundType; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class ModularArmourUtils { + + public static ItemStack addComponent(ItemStack tArmour, ItemStack[] tComponents){ + if (tArmour != null){ + ItemStack rArmour = NBTUtils.writeItemsToGtCraftingComponents(tArmour, tComponents, true); + if (rArmour != null){ + + } + } + return null; + } + + public static enum Modifiers { + BOOST_HP("skill.hpboost"), + BOOST_DEF("skill.defenceboost"), + BOOST_SPEED("skill.speedboost"), + BOOST_MINING("skill.miningboost"), + BOOST_DAMAGE("skill.damageboost"), + BOOST_HOLY("skill.holyboost"); + private String MODIFIER_NAME; + private Modifiers (final String mModifier){ + this.MODIFIER_NAME = mModifier; + } + public String getModifier() { + return this.MODIFIER_NAME; + } + public boolean isValidLevel(int i){ + if (i >= 0 && i <= 10){ + return true; + } + return false; + } + } + + public static enum BT { + TYPE_AMULET(BaubleType.AMULET, 0), + TYPE_RING(BaubleType.RING, 1), + TYPE_BELT(BaubleType.BELT, 2); + private final BaubleType mType; + private final int mID; + private final String mBaubleType; + private BT (final BaubleType tType, int tID){ + this.mType = tType; + this.mID = tID; + this.mBaubleType = tType.name().toLowerCase(); + } + public BaubleType getType(){ + return this.mType; + } + public BaubleType getBaubleByID(int tID){ + if (tID == 0){ + return BaubleType.AMULET; + } + else if (tID == 1){ + return BaubleType.RING; + } + else if (tID == 2){ + return BaubleType.BELT; + } + else { + return BaubleType.RING; + } + } + + public int getID(){ + return this.mID; + } + + public String getTypeAsString(){ + return this.mBaubleType; + } + } + + public static void setModifierLevel(ItemStack aStack, Modifiers aMod, int aInt) { + NBTTagCompound tNBT = NBTUtils.getNBT(aStack); + if (aMod.isValidLevel(aInt)){ + tNBT.setInteger(aMod.getModifier(), aInt); + GT_Utility.ItemNBT.setNBT(aStack, tNBT); + } + } + + public static int getModifierLevel(ItemStack aStack, Modifiers aMod) { + NBTTagCompound tNBT = NBTUtils.getNBT(aStack); + return tNBT.getInteger(aMod.getModifier()); + } + + public static void setBaubleType(ItemStack aStack, BT aMod) { + NBTTagCompound tNBT = NBTUtils.getNBT(aStack); + if (aMod != null){ + tNBT.setInteger("mBaubleType", aMod.getID()); + GT_Utility.ItemNBT.setNBT(aStack, tNBT); + } + } + + public static int getBaubleTypeID(ItemStack aStack) { + NBTTagCompound tNBT = NBTUtils.getNBT(aStack); + return tNBT.getInteger("mBaubleType"); + } + + public static BaubleType getBaubleType(ItemStack aStack) { + NBTTagCompound tNBT = NBTUtils.getNBT(aStack); + return getBaubleByID(tNBT.getInteger("mBaubleType")); + } + + public static BaubleType getBaubleByID(int tID){ + if (tID == 0){ + return BaubleType.AMULET; + } + else if (tID == 1){ + return BaubleType.RING; + } + else if (tID == 2){ + return BaubleType.BELT; + } + else { + return BaubleType.RING; + } + } + +} |