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 | |
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')
5 files changed, 229 insertions, 4 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); + } + + +} diff --git a/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java b/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java index f3f928cbca..d2e8ba867f 100644 --- a/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java +++ b/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java @@ -162,6 +162,28 @@ public class NBTUtils { NBTTagCompound tNBT = getNBT(aStack); return tNBT.getInteger(aTag); } + + public static void setLong(ItemStack aStack, String aTag, long aInt) { + NBTTagCompound tNBT = getNBT(aStack); + tNBT.setLong(aTag, aInt); + GT_Utility.ItemNBT.setNBT(aStack, tNBT); + } + + public static long getLong(ItemStack aStack, String aTag) { + NBTTagCompound tNBT = getNBT(aStack); + return tNBT.getLong(aTag); + } + + public static void setFloat(ItemStack aStack, String aTag, float aInt) { + NBTTagCompound tNBT = getNBT(aStack); + tNBT.setFloat(aTag, aInt); + GT_Utility.ItemNBT.setNBT(aStack, tNBT); + } + + public static float getFloat(ItemStack aStack, String aTag) { + NBTTagCompound tNBT = getNBT(aStack); + return tNBT.getFloat(aTag); + } public static void setString(ItemStack aStack, String aTag, String aString) { NBTTagCompound tNBT = getNBT(aStack); diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java index 6a93a46dbf..438d64bfe2 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java @@ -91,7 +91,9 @@ public class GregtechConduits { generateNonGTFluidPipes(GT_Materials.HastelloyX, ALLOY.HASTELLOY_X, BasePipeID+50, 10000, 4200, true); generateGTFluidPipes(Materials.Tungsten, BasePipeID+55, 4320, 7200, true); - generateGTFluidPipes(Materials.DarkSteel, BasePipeID+60, 2320, 2750, true); + if (LoadedMods.EnderIO){ + generateGTFluidPipes(Materials.DarkSteel, BasePipeID+60, 2320, 2750, true); + } generateGTFluidPipes(Materials.Clay, BasePipeID+65, 100, 500, false); generateGTFluidPipes(Materials.Lead, BasePipeID+70, 720, 1200, true); } @@ -154,9 +156,9 @@ public class GregtechConduits { registerOre(OrePrefixes.cableGt08, aMaterial, new GregtechMetaPipeEntity_Cable(aStartID + 9, "cable." + aMaterial.getLocalizedName().toLowerCase() + ".08", "8x " + aMaterial.getLocalizedName() + " Cable", 0.625F, aLossInsulated, 8L * aAmperage, aVoltage, true, false, aMaterial.getRGBA()).getStackForm(1L)); registerOre(OrePrefixes.cableGt12, aMaterial, new GregtechMetaPipeEntity_Cable(aStartID + 10, "cable." + aMaterial.getLocalizedName().toLowerCase() + ".12", "12x " + aMaterial.getLocalizedName() + " Cable", 0.875F, aLossInsulated, 12L * aAmperage, aVoltage, true, false, aMaterial.getRGBA()).getStackForm(1L)); } - + generateWireRecipes(aMaterial); - + } private static void superConductorFactory(final GT_Materials Material, final int Voltage, final int ID, final long insulatedLoss, final long uninsulatedLoss, final long Amps){ |