diff options
author | Alkalus <draknyte1@hotmail.com> | 2017-11-07 16:52:26 +1000 |
---|---|---|
committer | Alkalus <draknyte1@hotmail.com> | 2017-11-07 16:52:26 +1000 |
commit | c55eecb0755deecb1d7cac4b78e0c5c19d7f85f3 (patch) | |
tree | 690686e8050f77ecbaa09b07e540cf2f3b2cecef /src/Java/gtPlusPlus/core/item | |
parent | 3e20ba4cf8cf18f1d8840db10ae5a32c2912746c (diff) | |
download | GT5-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.java | 8 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/item/bauble/BaseBauble.java | 157 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/item/bauble/HealthBoostBauble.java | 38 |
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); + } + + +} |