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 | |
| 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')
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){ | 
