aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
-rw-r--r--src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java22
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java8
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){