diff options
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; +		} +	} +	 +} | 
