From 9801cd639a7d089e19c36c2ca7c8340de27d0e62 Mon Sep 17 00:00:00 2001 From: pahimar Date: Thu, 19 Feb 2015 22:09:10 -0500 Subject: [PATCH] Finish up the work on the new commands, and lots of other improvements/fixes --- .../ee3/api/EnergyValueRegistryProxy.java | 1 + .../handler/ItemTooltipEventHandler.java | 21 ++++++++- .../CommandTemplateForgetCurrentItem.java | 21 +++++++++ .../CommandTemplateLearnCurrentItem.java | 21 +++++++++ .../ee3/exchange/EnergyValueRegistry.java | 43 +++++++------------ .../pahimar/ee3/item/ItemAlchemicalBag.java | 10 ++--- .../pahimar/ee3/item/ItemAlchemicalTome.java | 15 +++++-- .../ee3/knowledge/AbilityRegistry.java | 33 ++++++++++++++ .../ee3/knowledge/TransmutationKnowledge.java | 21 ++------- .../com/pahimar/ee3/reference/Messages.java | 3 +- .../java/com/pahimar/ee3/util/ItemHelper.java | 26 +++++++++-- src/main/resources/assets/ee3/lang/en_US.lang | 3 +- 12 files changed, 157 insertions(+), 61 deletions(-) diff --git a/src/main/java/com/pahimar/ee3/api/EnergyValueRegistryProxy.java b/src/main/java/com/pahimar/ee3/api/EnergyValueRegistryProxy.java index d9bbc141..26513e52 100644 --- a/src/main/java/com/pahimar/ee3/api/EnergyValueRegistryProxy.java +++ b/src/main/java/com/pahimar/ee3/api/EnergyValueRegistryProxy.java @@ -84,6 +84,7 @@ public final class EnergyValueRegistryProxy return null; } + public static List getStacksInRange(int start, int finish) { return getStacksInRange(new EnergyValue(start), new EnergyValue(finish)); diff --git a/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java b/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java index aeb283bf..3ae5f719 100644 --- a/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java +++ b/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java @@ -4,15 +4,19 @@ import com.pahimar.ee3.api.EnergyValue; import com.pahimar.ee3.exchange.EnergyValueRegistry; import com.pahimar.ee3.exchange.WrappedStack; import com.pahimar.ee3.inventory.ContainerAlchemicalTome; +import com.pahimar.ee3.reference.Messages; import com.pahimar.ee3.util.IOwnable; import com.pahimar.ee3.util.ItemHelper; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.UsernameCache; import net.minecraftforge.event.entity.player.ItemTooltipEvent; import org.lwjgl.input.Keyboard; import java.text.DecimalFormat; +import java.util.UUID; /** * Equivalent-Exchange-3 @@ -54,7 +58,22 @@ public class ItemTooltipEventHandler if (event.itemStack.getItem() instanceof IOwnable) { - event.toolTip.add("Owner: " + ItemHelper.getOwnerName(event.itemStack)); + UUID playerUUID = ItemHelper.getOwnerUUID(event.itemStack); + if (playerUUID != null && UsernameCache.containsUUID(playerUUID)) + { + event.toolTip.add(StatCollector.translateToLocalFormatted(Messages.ITEM_BELONGS_TO, UsernameCache.getLastKnownUsername(playerUUID))); + } + else if (ItemHelper.hasOwnerName(event.itemStack)) + { + event.toolTip.add(StatCollector.translateToLocalFormatted(Messages.ITEM_BELONGS_TO, ItemHelper.getOwnerName(event.itemStack))); + } + else + { + if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) + { + event.toolTip.add(StatCollector.translateToLocal(Messages.ITEM_BELONGS_TO_NO_ONE)); + } + } } } } diff --git a/src/main/java/com/pahimar/ee3/command/CommandTemplateForgetCurrentItem.java b/src/main/java/com/pahimar/ee3/command/CommandTemplateForgetCurrentItem.java index 44154404..e8da0170 100644 --- a/src/main/java/com/pahimar/ee3/command/CommandTemplateForgetCurrentItem.java +++ b/src/main/java/com/pahimar/ee3/command/CommandTemplateForgetCurrentItem.java @@ -1,9 +1,13 @@ package com.pahimar.ee3.command; +import com.pahimar.ee3.knowledge.TransmutationKnowledgeRegistry; import com.pahimar.ee3.reference.Messages; import com.pahimar.ee3.reference.Names; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; public class CommandTemplateForgetCurrentItem extends CommandBase { @@ -28,6 +32,23 @@ public class CommandTemplateForgetCurrentItem extends CommandBase @Override public void processCommand(ICommandSender commandSender, String[] args) { + if (args.length < 1) + { + throw new WrongUsageException(Messages.Commands.TEMPLATE_FORGET_CURRENT_ITEM_USAGE); + } + else + { + ItemStack itemStack = ((EntityPlayer) commandSender).getCurrentEquippedItem(); + if (itemStack != null) + { + TransmutationKnowledgeRegistry.getInstance().makeTemplateForget(itemStack); + func_152373_a(commandSender, this, Messages.Commands.TEMPLATE_FORGET_CURRENT_ITEM_SUCCESS, new Object[]{commandSender.getCommandSenderName(), itemStack.func_151000_E()}); + } + else + { + throw new WrongUsageException(Messages.Commands.NO_ITEM); + } + } } } diff --git a/src/main/java/com/pahimar/ee3/command/CommandTemplateLearnCurrentItem.java b/src/main/java/com/pahimar/ee3/command/CommandTemplateLearnCurrentItem.java index bfe11891..bd426f5e 100644 --- a/src/main/java/com/pahimar/ee3/command/CommandTemplateLearnCurrentItem.java +++ b/src/main/java/com/pahimar/ee3/command/CommandTemplateLearnCurrentItem.java @@ -1,9 +1,13 @@ package com.pahimar.ee3.command; +import com.pahimar.ee3.knowledge.TransmutationKnowledgeRegistry; import com.pahimar.ee3.reference.Messages; import com.pahimar.ee3.reference.Names; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; public class CommandTemplateLearnCurrentItem extends CommandBase { @@ -28,6 +32,23 @@ public class CommandTemplateLearnCurrentItem extends CommandBase @Override public void processCommand(ICommandSender commandSender, String[] args) { + if (args.length < 1) + { + throw new WrongUsageException(Messages.Commands.TEMPLATE_LEARN_CURRENT_ITEM_USAGE); + } + else + { + ItemStack itemStack = ((EntityPlayer) commandSender).getCurrentEquippedItem(); + if (itemStack != null) + { + TransmutationKnowledgeRegistry.getInstance().teachTemplate(itemStack); + func_152373_a(commandSender, this, Messages.Commands.TEMPLATE_LEARN_CURRENT_ITEM_SUCCESS, new Object[]{commandSender.getCommandSenderName(), itemStack.func_151000_E()}); + } + else + { + throw new WrongUsageException(Messages.Commands.NO_ITEM); + } + } } } diff --git a/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java b/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java index ef90760f..3512d831 100644 --- a/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java +++ b/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java @@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableSortedMap; import com.google.gson.*; import com.pahimar.ee3.api.EnergyValue; import com.pahimar.ee3.api.IEnergyValueProvider; +import com.pahimar.ee3.knowledge.AbilityRegistry; import com.pahimar.ee3.recipe.RecipeRegistry; import com.pahimar.ee3.reference.Files; import com.pahimar.ee3.reference.Reference; @@ -239,9 +240,11 @@ public class EnergyValueRegistry implements INBTTaggable, JsonSerializer 0f) { @@ -359,7 +362,7 @@ public class EnergyValueRegistry implements INBTTaggable, JsonSerializer(ItemHelper.baseComparator); - for (WrappedStack wrappedStack : this.stackMappings.keySet()) - { - if (wrappedStack.getWrappedStack() instanceof OreStack) - { - for (ItemStack itemStack : OreDictionary.getOres(((OreStack) wrappedStack.getWrappedStack()).oreName)) - { - this.allItemStacksWithValues.add(itemStack); - } - } - else if (wrappedStack.getWrappedStack() instanceof ItemStack) - { - this.allItemStacksWithValues.add((ItemStack) wrappedStack.getWrappedStack()); - } - } - } - - public Set getAllItemStacksWithValues() - { - return this.allItemStacksWithValues; - } - private void generateValueStackMappings() { SortedMap> tempValueMappings = new TreeMap>(); @@ -736,6 +715,16 @@ public class EnergyValueRegistry implements INBTTaggable, JsonSerializer getStackValueMap() + { + return stackMappings; + } + + public ImmutableSortedMap> getValueStackMap() + { + return valueMappings; + } + public void saveEnergyValueRegistryToFile() { File energyValuesDataDirectory = new File(FMLCommonHandler.instance().getMinecraftServerInstance().getEntityWorld().getSaveHandler().getWorldDirectory(), "data" + File.separator + Reference.LOWERCASE_MOD_ID + File.separator + "energyvalues"); diff --git a/src/main/java/com/pahimar/ee3/item/ItemAlchemicalBag.java b/src/main/java/com/pahimar/ee3/item/ItemAlchemicalBag.java index 9aa5ffde..2e1c7c99 100644 --- a/src/main/java/com/pahimar/ee3/item/ItemAlchemicalBag.java +++ b/src/main/java/com/pahimar/ee3/item/ItemAlchemicalBag.java @@ -1,10 +1,7 @@ package com.pahimar.ee3.item; import com.pahimar.ee3.EquivalentExchange3; -import com.pahimar.ee3.reference.Colors; -import com.pahimar.ee3.reference.GUIs; -import com.pahimar.ee3.reference.Names; -import com.pahimar.ee3.reference.Textures; +import com.pahimar.ee3.reference.*; import com.pahimar.ee3.util.ColorHelper; import com.pahimar.ee3.util.IOwnable; import com.pahimar.ee3.util.ItemHelper; @@ -17,6 +14,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.World; @@ -97,10 +95,10 @@ public class ItemAlchemicalBag extends ItemEE implements IOwnable { if (!world.isRemote) { - // Set the owner - if (!ItemHelper.hasOwner(itemStack)) + if (!ItemHelper.hasOwnerUUID(itemStack)) { ItemHelper.setOwner(itemStack, entityPlayer); + entityPlayer.addChatComponentMessage(new ChatComponentTranslation(Messages.OWNER_SET_TO_SELF, new Object[]{itemStack.func_151000_E()})); } // Set a UUID on the Alchemical Bag, if one doesn't exist already diff --git a/src/main/java/com/pahimar/ee3/item/ItemAlchemicalTome.java b/src/main/java/com/pahimar/ee3/item/ItemAlchemicalTome.java index 31476073..80e949aa 100644 --- a/src/main/java/com/pahimar/ee3/item/ItemAlchemicalTome.java +++ b/src/main/java/com/pahimar/ee3/item/ItemAlchemicalTome.java @@ -1,6 +1,10 @@ package com.pahimar.ee3.item; import com.pahimar.ee3.EquivalentExchange3; +import com.pahimar.ee3.api.EnergyValue; +import com.pahimar.ee3.api.EnergyValueRegistryProxy; +import com.pahimar.ee3.api.IEnergyValueProvider; +import com.pahimar.ee3.init.ModItems; import com.pahimar.ee3.reference.GUIs; import com.pahimar.ee3.reference.Messages; import com.pahimar.ee3.reference.Names; @@ -11,7 +15,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.world.World; -public class ItemAlchemicalTome extends ItemEE implements IOwnable +public class ItemAlchemicalTome extends ItemEE implements IOwnable, IEnergyValueProvider { public ItemAlchemicalTome() { @@ -30,8 +34,7 @@ public class ItemAlchemicalTome extends ItemEE implements IOwnable { if (!world.isRemote) { - // Set the owner if one hasn't been set already - if (!ItemHelper.hasOwner(itemStack)) + if (!ItemHelper.hasOwnerUUID(itemStack)) { ItemHelper.setOwner(itemStack, entityPlayer); entityPlayer.addChatComponentMessage(new ChatComponentTranslation(Messages.OWNER_SET_TO_SELF, new Object[]{itemStack.func_151000_E()})); @@ -44,4 +47,10 @@ public class ItemAlchemicalTome extends ItemEE implements IOwnable return itemStack; } + + @Override + public EnergyValue getEnergyValue(ItemStack itemStack) + { + return EnergyValueRegistryProxy.getEnergyValue(ModItems.alchemicalTome, true); + } } diff --git a/src/main/java/com/pahimar/ee3/knowledge/AbilityRegistry.java b/src/main/java/com/pahimar/ee3/knowledge/AbilityRegistry.java index a724b1c0..ef13a285 100644 --- a/src/main/java/com/pahimar/ee3/knowledge/AbilityRegistry.java +++ b/src/main/java/com/pahimar/ee3/knowledge/AbilityRegistry.java @@ -4,14 +4,19 @@ import com.google.gson.*; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; import com.pahimar.ee3.exchange.EnergyValueRegistry; +import com.pahimar.ee3.exchange.OreStack; import com.pahimar.ee3.exchange.WrappedStack; import com.pahimar.ee3.reference.Files; +import com.pahimar.ee3.util.ItemHelper; import com.pahimar.ee3.util.SerializationHelper; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; import java.io.*; import java.lang.reflect.Type; import java.util.Iterator; import java.util.Set; +import java.util.SortedSet; import java.util.TreeSet; public class AbilityRegistry implements JsonSerializer, JsonDeserializer @@ -23,6 +28,7 @@ public class AbilityRegistry implements JsonSerializer, JsonDes private boolean hasBeenModified; private Set notLearnableSet; private Set notRecoverableSet; + private SortedSet allLearnableItemStacks = new TreeSet(ItemHelper.baseComparator); private AbilityRegistry() { @@ -48,6 +54,33 @@ public class AbilityRegistry implements JsonSerializer, JsonDes notRecoverableSet = new TreeSet(); } + public void discoverAllLearnableItemStacks() + { + this.allLearnableItemStacks = new TreeSet(ItemHelper.baseComparator); + for (WrappedStack wrappedStack : EnergyValueRegistry.getInstance().getStackValueMap().keySet()) + { + if (isLearnable(wrappedStack)) + { + if (wrappedStack.getWrappedStack() instanceof OreStack) + { + for (ItemStack itemStack : OreDictionary.getOres(((OreStack) wrappedStack.getWrappedStack()).oreName)) + { + this.allLearnableItemStacks.add(itemStack); + } + } + else if (wrappedStack.getWrappedStack() instanceof ItemStack) + { + this.allLearnableItemStacks.add((ItemStack) wrappedStack.getWrappedStack()); + } + } + } + } + + public SortedSet getAllLearnableItemStacks() + { + return allLearnableItemStacks; + } + public Set getNotLearnableStacks() { return this.notLearnableSet; diff --git a/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledge.java b/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledge.java index 0b66dfc0..2d3bb83f 100644 --- a/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledge.java +++ b/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledge.java @@ -3,7 +3,6 @@ package com.pahimar.ee3.knowledge; import com.google.gson.*; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; -import com.pahimar.ee3.exchange.EnergyValueRegistry; import com.pahimar.ee3.exchange.JsonItemStack; import com.pahimar.ee3.reference.Names; import com.pahimar.ee3.util.INBTTaggable; @@ -84,7 +83,7 @@ public class TransmutationKnowledge implements INBTTaggable, JsonSerializer filterByNameStartsWith(String filterString) { - if (canTransmuteEverything) - { - return ItemHelper.filterByNameStartsWith(EnergyValueRegistry.getInstance().getAllItemStacksWithValues(), filterString); - } - else - { - return ItemHelper.filterByNameStartsWith(knownTransmutations, filterString); - } + return ItemHelper.filterByNameStartsWith(getKnownTransmutations(), filterString); } public Set filterByNameContains(String filterString) { - if (canTransmuteEverything) - { - return ItemHelper.filterByNameContains(EnergyValueRegistry.getInstance().getAllItemStacksWithValues(), filterString); - } - else - { - return ItemHelper.filterByNameContains(knownTransmutations, filterString); - } + return ItemHelper.filterByNameContains(getKnownTransmutations(), filterString); } @Override diff --git a/src/main/java/com/pahimar/ee3/reference/Messages.java b/src/main/java/com/pahimar/ee3/reference/Messages.java index f8e53aef..b7c1684c 100644 --- a/src/main/java/com/pahimar/ee3/reference/Messages.java +++ b/src/main/java/com/pahimar/ee3/reference/Messages.java @@ -3,7 +3,8 @@ package com.pahimar.ee3.reference; public final class Messages { public static final String UPGRADES_CHESTS = "tooltip.ee3:upgradesPrefix"; - public static final String NO_OWNER = "tooltip.ee3:none"; + public static final String ITEM_BELONGS_TO = "tooltip.ee3:belongsTo"; + public static final String ITEM_BELONGS_TO_NO_ONE = "tooltip.ee3:belongsToNoOne"; public static final String OWNER_SET_TO_SELF = "misc.ee3:owner-set-to-self"; diff --git a/src/main/java/com/pahimar/ee3/util/ItemHelper.java b/src/main/java/com/pahimar/ee3/util/ItemHelper.java index 9f83f8d9..bfc0c170 100644 --- a/src/main/java/com/pahimar/ee3/util/ItemHelper.java +++ b/src/main/java/com/pahimar/ee3/util/ItemHelper.java @@ -1,11 +1,9 @@ package com.pahimar.ee3.util; -import com.pahimar.ee3.reference.Messages; import com.pahimar.ee3.reference.Names; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; import net.minecraftforge.oredict.OreDictionary; import java.util.Comparator; @@ -279,6 +277,16 @@ public class ItemHelper return (NBTHelper.hasTag(itemStack, Names.NBT.OWNER_UUID_MOST_SIG) && NBTHelper.hasTag(itemStack, Names.NBT.OWNER_UUID_LEAST_SIG)) || NBTHelper.hasTag(itemStack, Names.NBT.OWNER); } + public static boolean hasOwnerUUID(ItemStack itemStack) + { + return NBTHelper.hasTag(itemStack, Names.NBT.OWNER_UUID_MOST_SIG) && NBTHelper.hasTag(itemStack, Names.NBT.OWNER_UUID_LEAST_SIG); + } + + public static boolean hasOwnerName(ItemStack itemStack) + { + return NBTHelper.hasTag(itemStack, Names.NBT.OWNER); + } + public static String getOwnerName(ItemStack itemStack) { if (NBTHelper.hasTag(itemStack, Names.NBT.OWNER)) @@ -286,7 +294,7 @@ public class ItemHelper return NBTHelper.getString(itemStack, Names.NBT.OWNER); } - return StatCollector.translateToLocal(Messages.NO_OWNER); + return null; } public static UUID getOwnerUUID(ItemStack itemStack) @@ -301,8 +309,18 @@ public class ItemHelper public static void setOwner(ItemStack itemStack, EntityPlayer entityPlayer) { - NBTHelper.setString(itemStack, Names.NBT.OWNER, entityPlayer.getDisplayName()); + setOwnerName(itemStack, entityPlayer); + setOwnerUUID(itemStack, entityPlayer); + } + + public static void setOwnerUUID(ItemStack itemStack, EntityPlayer entityPlayer) + { NBTHelper.setLong(itemStack, Names.NBT.OWNER_UUID_MOST_SIG, entityPlayer.getUniqueID().getMostSignificantBits()); NBTHelper.setLong(itemStack, Names.NBT.OWNER_UUID_LEAST_SIG, entityPlayer.getUniqueID().getLeastSignificantBits()); } + + public static void setOwnerName(ItemStack itemStack, EntityPlayer entityPlayer) + { + NBTHelper.setString(itemStack, Names.NBT.OWNER, entityPlayer.getDisplayName()); + } } diff --git a/src/main/resources/assets/ee3/lang/en_US.lang b/src/main/resources/assets/ee3/lang/en_US.lang index 3c83ebac..c990998b 100644 --- a/src/main/resources/assets/ee3/lang/en_US.lang +++ b/src/main/resources/assets/ee3/lang/en_US.lang @@ -147,11 +147,12 @@ commands.ee3.set-item-not-recoverable.usage=/ee3 set-item-not-recoverable commands.ee3.set-item-not-recoverable.success=%s set %s as not being able to have its energy value recovered # Tooltips +tooltip.ee3:belongsTo=Belongs to %s +tooltip.ee3:belongsToNoOne=Belongs to no one tooltip.ee3:upgradesPrefix=Upgrades (Alchemical) Chests tooltip.ee3:alchemicalChestPrefix.small=Small tooltip.ee3:alchemicalChestPrefix.medium=Medium tooltip.ee3:alchemicalChestPrefix.large=Large -tooltip.ee3:none=None #Misc misc.ee3:owner-set-to-self=You are now the owner of %s \ No newline at end of file