aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/core/item
diff options
context:
space:
mode:
authorAlkalus <draknyte1@hotmail.com>2017-11-07 16:52:26 +1000
committerAlkalus <draknyte1@hotmail.com>2017-11-07 16:52:26 +1000
commitc55eecb0755deecb1d7cac4b78e0c5c19d7f85f3 (patch)
tree690686e8050f77ecbaa09b07e540cf2f3b2cecef /src/Java/gtPlusPlus/core/item
parent3e20ba4cf8cf18f1d8840db10ae5a32c2912746c (diff)
downloadGT5-Unofficial-c55eecb0755deecb1d7cac4b78e0c5c19d7f85f3.tar.gz
GT5-Unofficial-c55eecb0755deecb1d7cac4b78e0c5c19d7f85f3.tar.bz2
GT5-Unofficial-c55eecb0755deecb1d7cac4b78e0c5c19d7f85f3.zip
+ Added 'The keys to the city' amulet.
$ Fixed #153, Dark Steel pipes existing without EIO.
Diffstat (limited to 'src/Java/gtPlusPlus/core/item')
-rw-r--r--src/Java/gtPlusPlus/core/item/ModItems.java8
-rw-r--r--src/Java/gtPlusPlus/core/item/bauble/BaseBauble.java157
-rw-r--r--src/Java/gtPlusPlus/core/item/bauble/HealthBoostBauble.java38
3 files changed, 202 insertions, 1 deletions
diff --git a/src/Java/gtPlusPlus/core/item/ModItems.java b/src/Java/gtPlusPlus/core/item/ModItems.java
index 4e6a461d41..9e17af13e0 100644
--- a/src/Java/gtPlusPlus/core/item/ModItems.java
+++ b/src/Java/gtPlusPlus/core/item/ModItems.java
@@ -19,6 +19,7 @@ import gtPlusPlus.core.item.base.misc.BaseItemMisc;
import gtPlusPlus.core.item.base.misc.BaseItemMisc.MiscTypes;
import gtPlusPlus.core.item.base.plates.BaseItemPlate;
import gtPlusPlus.core.item.base.plates.BaseItemPlateDouble;
+import gtPlusPlus.core.item.bauble.HealthBoostBauble;
import gtPlusPlus.core.item.chemistry.CoalTar;
import gtPlusPlus.core.item.effects.RarityUncommon;
import gtPlusPlus.core.item.general.*;
@@ -568,7 +569,7 @@ public final class ModItems {
//Juice
FluidUtils.generateFluidNonMolten("RaisinJuice", "Raisin Juice", 2, new short[]{51, 0, 51, 100}, ItemUtils.getItemStackOfAmountFromOreDictNoBroken("foodRaisins", 1), ItemUtils.getItemStackOfAmountFromOreDictNoBroken("fruitRaisins", 1), 50);
-
+
//Test items
metaItem2 = new BaseEuItem();
@@ -627,6 +628,11 @@ public final class ModItems {
itemPlateVanadium = new BaseItemPlate(MaterialUtils.generateMaterialFromGtENUM(Materials.Vanadium));
}
+ //Baubles
+ if (LoadedMods.Baubles){
+ tI = new HealthBoostBauble();
+ }
+
//EnderIO Resources
if ((LoadedMods.EnderIO || LOAD_ALL_CONTENT) && !CORE.GTNH){
Utils.LOG_INFO("EnderIO Found - Loading Resources.");
diff --git a/src/Java/gtPlusPlus/core/item/bauble/BaseBauble.java b/src/Java/gtPlusPlus/core/item/bauble/BaseBauble.java
new file mode 100644
index 0000000000..61da0d2f5c
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/item/bauble/BaseBauble.java
@@ -0,0 +1,157 @@
+package gtPlusPlus.core.item.bauble;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Multimap;
+
+import baubles.api.BaubleType;
+import baubles.api.IBauble;
+import baubles.common.container.InventoryBaubles;
+import baubles.common.lib.PlayerHandler;
+import cpw.mods.fml.common.Optional;
+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.NBTUtils;
+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.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.DamageSource;
+import net.minecraft.world.World;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.living.LivingAttackEvent;
+
+@Optional.InterfaceList(value = {@Optional.Interface(iface = "baubles.api.IBauble", modid = "Baubles"), @Optional.Interface(iface = "baubles.api.BaubleType", modid = "Baubles")})
+public class BaseBauble extends Item implements IBauble{
+
+ /**
+ * Implementation suggestions taken from Botania.
+ */
+
+ private final BaubleType mThisBauble;
+ private final String mDisplayName;
+ private List<String> damageNegations = new ArrayList<String>();
+ Multimap<String, AttributeModifier> attributes = HashMultimap.create();
+
+ public BaseBauble(BaubleType type, String displayName){
+ this.mThisBauble = type;
+ this.mDisplayName = displayName;
+ MinecraftForge.EVENT_BUS.register(this);
+ this.setMaxStackSize(1);
+ this.setCreativeTab(AddToCreativeTab.tabMisc);
+ this.setUnlocalizedName(Utils.sanitizeString(displayName.toLowerCase()));
+ GameRegistry.registerItem(this, getUnlocalizedName());
+ }
+
+ @Override
+ public String getItemStackDisplayName(final ItemStack tItem) {
+ return this.mDisplayName;
+ }
+
+ @SubscribeEvent
+ public void onPlayerAttacked(LivingAttackEvent event) {
+ if(event.entityLiving instanceof EntityPlayer) {
+ EntityPlayer player = (EntityPlayer) event.entityLiving;
+ if(getCorrectBauble(player) != null && damageNegations.contains(event.source.damageType))
+ event.setCanceled(true);
+ }
+ }
+
+ public boolean addDamageNegation(DamageSource damageSource){
+ return damageNegations.add(damageSource.drown.damageType);
+ }
+
+ @Override
+ public boolean canEquip(ItemStack arg0, EntityLivingBase arg1) {
+ return EntityPlayer.class.isInstance(arg1) ? true : false;
+ }
+
+ @Override
+ public boolean canUnequip(ItemStack arg0, EntityLivingBase arg1) {
+ return EntityPlayer.class.isInstance(arg1) ? true : false;
+ }
+
+ @Override
+ public BaubleType getBaubleType(ItemStack arg0) {
+ return mThisBauble;
+ }
+
+ @Override
+ public void onEquipped(ItemStack stack, EntityLivingBase entity) {
+ if(entity != null && EntityPlayer.class.isInstance(entity)) {
+ onEquippedOrLoadedIntoWorld(stack, entity);
+ setPlayerHashcode(stack, entity.hashCode());
+ }
+ }
+
+ @Override
+ public void onWornTick(ItemStack stack, EntityLivingBase player) {
+ if(getPlayerHashcode(stack) != player.hashCode()) {
+ onEquippedOrLoadedIntoWorld(stack, player);
+ setPlayerHashcode(stack, player.hashCode());
+ }
+ }
+
+ public void onEquippedOrLoadedIntoWorld(ItemStack stack, EntityLivingBase player) {
+ attributes.clear();
+ fillModifiers(attributes, stack);
+ player.getAttributeMap().applyAttributeModifiers(attributes);
+ }
+
+ @Override
+ public void onUnequipped(ItemStack stack, EntityLivingBase player) {
+ attributes.clear();
+ fillModifiers(attributes, stack);
+ player.getAttributeMap().removeAttributeModifiers(attributes);
+ }
+
+
+ void fillModifiers(Multimap<String, AttributeModifier> attributes, ItemStack stack) {
+
+ }
+
+ public ItemStack getCorrectBauble(EntityPlayer player) {
+ InventoryBaubles baubles = PlayerHandler.getPlayerBaubles(player);
+ ItemStack stack1 = baubles.getStackInSlot(1);
+ ItemStack stack2 = baubles.getStackInSlot(2);
+ return isCorrectBauble(stack1) ? stack1 : isCorrectBauble(stack2) ? stack2 : null;
+ }
+
+ private boolean isCorrectBauble(ItemStack stack) {
+ return stack != null && (stack.getItem() == this);
+ }
+
+ @Override
+ public int getEntityLifespan(ItemStack itemStack, World world) {
+ return Integer.MAX_VALUE;
+ }
+
+ public static UUID getBaubleUUID(ItemStack stack) {
+ long most = NBTUtils.getLong(stack, "baubleUUIDMost");
+ if(most == 0) {
+ UUID uuid = UUID.randomUUID();
+ NBTUtils.setLong(stack, "baubleUUIDMost", uuid.getMostSignificantBits());
+ NBTUtils.setLong(stack, "baubleUUIDLeast", uuid.getLeastSignificantBits());
+ return getBaubleUUID(stack);
+ }
+
+ long least = NBTUtils.getLong(stack, "baubleUUIDLeast");
+ return new UUID(most, least);
+ }
+
+ public static int getPlayerHashcode(ItemStack stack) {
+ return NBTUtils.getInteger(stack, "mPlayerHashcode");
+ }
+
+ public static void setPlayerHashcode(ItemStack stack, int hash) {
+ NBTUtils.setInteger(stack, "mPlayerHashcode", hash);
+ }
+
+}
diff --git a/src/Java/gtPlusPlus/core/item/bauble/HealthBoostBauble.java b/src/Java/gtPlusPlus/core/item/bauble/HealthBoostBauble.java
new file mode 100644
index 0000000000..50c5a1823a
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/item/bauble/HealthBoostBauble.java
@@ -0,0 +1,38 @@
+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 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 HealthBoostBauble extends BaseBauble{
+
+
+ public HealthBoostBauble() {
+ super(BaubleType.AMULET, "The Key to the City");
+ 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) {
+ list.add(EnumChatFormatting.GRAY+"You feel like you're on top of the world.");
+ list.add(EnumChatFormatting.GRAY+"Wear it around your neck like an amulet.");
+ super.addInformation(stack, player, list, bool);
+ }
+
+
+}