From 3290abb23e31e910ac72f143fc20ef2a48afb01a Mon Sep 17 00:00:00 2001 From: Pahimar Date: Sun, 22 May 2016 13:21:46 -0400 Subject: [PATCH] Death to the old Transmutation Knowledge! Long live Player Knowledge! --- .../com/pahimar/ee3/EquivalentExchange3.java | 4 - .../com/pahimar/ee3/command/CommandEE.java | 5 - .../CommandTemplateForgetCurrentItem.java | 54 -- .../CommandTemplateForgetEverything.java | 35 -- .../command/CommandTemplateForgetItem.java | 94 ---- .../CommandTemplateLearnCurrentItem.java | 54 -- .../ee3/command/CommandTemplateLearnItem.java | 98 ---- .../ee3/handler/PlayerEventHandler.java | 38 +- .../ee3/inventory/ContainerAlchenomicon.java | 13 +- .../ContainerTransmutationTablet.java | 27 +- .../knowledge/PlayerKnowledgeRegistry.java | 122 ++++- .../ee3/knowledge/TransmutationKnowledge.java | 246 --------- .../TransmutationKnowledgeRegistry.java | 478 ------------------ .../pahimar/ee3/network/PacketHandler.java | 2 +- .../message/MessagePlayerKnowledge.java | 112 ++++ .../MessageTransmutationKnowledgeUpdate.java | 135 ----- .../tileentity/TileEntityResearchStation.java | 2 +- .../pahimar/ee3/util/SerializationHelper.java | 78 --- .../serialize/PlayerKnowledgeSerializer.java | 36 +- 19 files changed, 283 insertions(+), 1350 deletions(-) delete mode 100644 src/main/java/com/pahimar/ee3/command/CommandTemplateForgetCurrentItem.java delete mode 100644 src/main/java/com/pahimar/ee3/command/CommandTemplateForgetEverything.java delete mode 100644 src/main/java/com/pahimar/ee3/command/CommandTemplateForgetItem.java delete mode 100644 src/main/java/com/pahimar/ee3/command/CommandTemplateLearnCurrentItem.java delete mode 100644 src/main/java/com/pahimar/ee3/command/CommandTemplateLearnItem.java delete mode 100644 src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledge.java delete mode 100644 src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledgeRegistry.java create mode 100644 src/main/java/com/pahimar/ee3/network/message/MessagePlayerKnowledge.java delete mode 100644 src/main/java/com/pahimar/ee3/network/message/MessageTransmutationKnowledgeUpdate.java diff --git a/src/main/java/com/pahimar/ee3/EquivalentExchange3.java b/src/main/java/com/pahimar/ee3/EquivalentExchange3.java index 31fc42c4..a43ac10a 100644 --- a/src/main/java/com/pahimar/ee3/EquivalentExchange3.java +++ b/src/main/java/com/pahimar/ee3/EquivalentExchange3.java @@ -7,7 +7,6 @@ import com.pahimar.ee3.handler.*; import com.pahimar.ee3.init.*; import com.pahimar.ee3.knowledge.AbilityRegistry; import com.pahimar.ee3.knowledge.PlayerKnowledgeRegistry; -import com.pahimar.ee3.knowledge.TransmutationKnowledgeRegistry; import com.pahimar.ee3.network.PacketHandler; import com.pahimar.ee3.proxy.IProxy; import com.pahimar.ee3.recipe.AludelRecipeManager; @@ -56,7 +55,6 @@ public class EquivalentExchange3 Files.updateFileReferences(); SerializationHelper.initModDataDirectories(); - TransmutationKnowledgeRegistry.getInstance(); AbilityRegistry.getInstance().loadAbilityRegistryFromFile(ConfigurationHandler.Settings.onlyLoadFile); event.registerServerCommand(new CommandEE()); } @@ -119,8 +117,6 @@ public class EquivalentExchange3 WorldEventHandler.hasInitilialized = false; EnergyValueRegistry.INSTANCE.save(); - - TransmutationKnowledgeRegistry.getInstance().clear(); PlayerKnowledgeRegistry.INSTANCE.saveAll(); AbilityRegistry.getInstance().save(); diff --git a/src/main/java/com/pahimar/ee3/command/CommandEE.java b/src/main/java/com/pahimar/ee3/command/CommandEE.java index a849de82..c9240b8a 100644 --- a/src/main/java/com/pahimar/ee3/command/CommandEE.java +++ b/src/main/java/com/pahimar/ee3/command/CommandEE.java @@ -71,11 +71,6 @@ public class CommandEE extends CommandBase modCommands.add(new CommandPlayerForgetEverything()); modCommands.add(new CommandPlayerForgetItem()); modCommands.add(new CommandPlayerForgetCurrentItem()); - modCommands.add(new CommandTemplateLearnItem()); - modCommands.add(new CommandTemplateLearnCurrentItem()); - modCommands.add(new CommandTemplateForgetEverything()); - modCommands.add(new CommandTemplateForgetItem()); - modCommands.add(new CommandTemplateForgetCurrentItem()); modCommands.add(new CommandSetItemLearnable()); modCommands.add(new CommandSetItemNotLearnable()); modCommands.add(new CommandSetItemRecoverable()); diff --git a/src/main/java/com/pahimar/ee3/command/CommandTemplateForgetCurrentItem.java b/src/main/java/com/pahimar/ee3/command/CommandTemplateForgetCurrentItem.java deleted file mode 100644 index e8da0170..00000000 --- a/src/main/java/com/pahimar/ee3/command/CommandTemplateForgetCurrentItem.java +++ /dev/null @@ -1,54 +0,0 @@ -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 -{ - @Override - public String getCommandName() - { - return Names.Commands.TEMPLATE_FORGET_CURRENT_ITEM; - } - - @Override - public int getRequiredPermissionLevel() - { - return 2; - } - - @Override - public String getCommandUsage(ICommandSender commandSender) - { - return Messages.Commands.TEMPLATE_FORGET_CURRENT_ITEM_USAGE; - } - - @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/CommandTemplateForgetEverything.java b/src/main/java/com/pahimar/ee3/command/CommandTemplateForgetEverything.java deleted file mode 100644 index f445bfeb..00000000 --- a/src/main/java/com/pahimar/ee3/command/CommandTemplateForgetEverything.java +++ /dev/null @@ -1,35 +0,0 @@ -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; - -public class CommandTemplateForgetEverything extends CommandBase -{ - @Override - public String getCommandName() - { - return Names.Commands.TEMPLATE_FORGET_EVERYTHING; - } - - @Override - public int getRequiredPermissionLevel() - { - return 2; - } - - @Override - public String getCommandUsage(ICommandSender commandSender) - { - return Messages.Commands.TEMPLATE_FORGET_EVERYTHING_USAGE; - } - - @Override - public void processCommand(ICommandSender commandSender, String[] args) - { - TransmutationKnowledgeRegistry.getInstance().makeTemplateForgetEverything(); - func_152373_a(commandSender, this, Messages.Commands.TEMPLATE_FORGET_EVERYTHING_SUCCESS, new Object[]{commandSender.getCommandSenderName()}); - } -} diff --git a/src/main/java/com/pahimar/ee3/command/CommandTemplateForgetItem.java b/src/main/java/com/pahimar/ee3/command/CommandTemplateForgetItem.java deleted file mode 100644 index 71314105..00000000 --- a/src/main/java/com/pahimar/ee3/command/CommandTemplateForgetItem.java +++ /dev/null @@ -1,94 +0,0 @@ -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.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.JsonToNBT; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; - -import java.util.List; - -public class CommandTemplateForgetItem extends CommandBase -{ - @Override - public String getCommandName() - { - return Names.Commands.TEMPLATE_FORGET_ITEM; - } - - @Override - public int getRequiredPermissionLevel() - { - return 2; - } - - @Override - public String getCommandUsage(ICommandSender commandSender) - { - return Messages.Commands.TEMPLATE_FORGET_ITEM_USAGE; - } - - @Override - public void processCommand(ICommandSender commandSender, String[] args) - { - if (args.length < 2) - { - throw new WrongUsageException(Messages.Commands.TEMPLATE_FORGET_ITEM_USAGE); - } - else - { - Item item = getItemByText(commandSender, args[1]); - int metaData = 0; - - if (args.length >= 3) - { - metaData = parseInt(commandSender, args[2]); - } - - ItemStack itemStack = new ItemStack(item, 1, metaData); - - if (args.length >= 4) - { - String stringNBTData = func_147178_a(commandSender, args, 3).getUnformattedText(); - - try - { - NBTBase nbtBase = JsonToNBT.func_150315_a(stringNBTData); - - if (!(nbtBase instanceof NBTTagCompound)) - { - func_152373_a(commandSender, this, Messages.Commands.INVALID_NBT_TAG_ERROR, new Object[]{"Not a valid tag"}); - return; - } - - itemStack.setTagCompound((NBTTagCompound) nbtBase); - } - catch (Exception exception) - { - func_152373_a(commandSender, this, Messages.Commands.INVALID_NBT_TAG_ERROR, new Object[]{exception.getMessage()}); - return; - } - } - - TransmutationKnowledgeRegistry.getInstance().makeTemplateForget(itemStack); - func_152373_a(commandSender, this, Messages.Commands.TEMPLATE_FORGET_ITEM_SUCCESS, new Object[]{commandSender.getCommandSenderName(), itemStack.func_151000_E()}); - } - } - - @Override - public List addTabCompletionOptions(ICommandSender commandSender, String[] args) - { - if (args.length == 2) - { - return getListOfStringsFromIterableMatchingLastWord(args, Item.itemRegistry.getKeys()); - } - - return null; - } -} diff --git a/src/main/java/com/pahimar/ee3/command/CommandTemplateLearnCurrentItem.java b/src/main/java/com/pahimar/ee3/command/CommandTemplateLearnCurrentItem.java deleted file mode 100644 index bd426f5e..00000000 --- a/src/main/java/com/pahimar/ee3/command/CommandTemplateLearnCurrentItem.java +++ /dev/null @@ -1,54 +0,0 @@ -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 -{ - @Override - public String getCommandName() - { - return Names.Commands.TEMPLATE_LEARN_CURRENT_ITEM; - } - - @Override - public int getRequiredPermissionLevel() - { - return 2; - } - - @Override - public String getCommandUsage(ICommandSender commandSender) - { - return Messages.Commands.TEMPLATE_LEARN_CURRENT_ITEM_USAGE; - } - - @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/command/CommandTemplateLearnItem.java b/src/main/java/com/pahimar/ee3/command/CommandTemplateLearnItem.java deleted file mode 100644 index c6103e5e..00000000 --- a/src/main/java/com/pahimar/ee3/command/CommandTemplateLearnItem.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.pahimar.ee3.command; - -import com.pahimar.ee3.knowledge.AbilityRegistry; -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.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.JsonToNBT; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; - -import java.util.List; - -public class CommandTemplateLearnItem extends CommandBase -{ - @Override - public String getCommandName() - { - return Names.Commands.TEMPLATE_LEARN_ITEM; - } - - @Override - public int getRequiredPermissionLevel() - { - return 2; - } - - @Override - public String getCommandUsage(ICommandSender commandSender) - { - return Messages.Commands.TEMPLATE_LEARN_ITEM_USAGE; - } - - @Override - public void processCommand(ICommandSender commandSender, String[] args) - { - if (args.length < 2) - { - throw new WrongUsageException(Messages.Commands.TEMPLATE_LEARN_ITEM_USAGE); - } - else - { - Item item = getItemByText(commandSender, args[1]); - int metaData = 0; - - if (args.length >= 3) - { - metaData = parseInt(commandSender, args[2]); - } - - ItemStack itemStack = new ItemStack(item, 1, metaData); - - if (args.length >= 4) - { - String stringNBTData = func_147178_a(commandSender, args, 3).getUnformattedText(); - - try - { - NBTBase nbtBase = JsonToNBT.func_150315_a(stringNBTData); - - if (!(nbtBase instanceof NBTTagCompound)) - { - func_152373_a(commandSender, this, Messages.Commands.INVALID_NBT_TAG_ERROR, new Object[]{"Not a valid tag"}); - return; - } - - itemStack.setTagCompound((NBTTagCompound) nbtBase); - } - catch (Exception exception) - { - func_152373_a(commandSender, this, Messages.Commands.INVALID_NBT_TAG_ERROR, new Object[]{exception.getMessage()}); - return; - } - } - - if (AbilityRegistry.getInstance().isLearnable(itemStack)) - { - TransmutationKnowledgeRegistry.getInstance().teachTemplate(itemStack); - func_152373_a(commandSender, this, Messages.Commands.TEMPLATE_LEARN_ITEM_SUCCESS, new Object[]{commandSender.getCommandSenderName(), itemStack.func_151000_E()}); - } - } - } - - @Override - public List addTabCompletionOptions(ICommandSender commandSender, String[] args) - { - if (args.length == 2) - { - return getListOfStringsFromIterableMatchingLastWord(args, Item.itemRegistry.getKeys()); - } - - return null; - } -} diff --git a/src/main/java/com/pahimar/ee3/handler/PlayerEventHandler.java b/src/main/java/com/pahimar/ee3/handler/PlayerEventHandler.java index 6a5dead0..19988b8a 100644 --- a/src/main/java/com/pahimar/ee3/handler/PlayerEventHandler.java +++ b/src/main/java/com/pahimar/ee3/handler/PlayerEventHandler.java @@ -1,6 +1,5 @@ package com.pahimar.ee3.handler; -import com.pahimar.ee3.knowledge.TransmutationKnowledgeRegistry; import com.pahimar.ee3.network.PacketHandler; import com.pahimar.ee3.network.message.MessageChalkSettings; import com.pahimar.ee3.network.message.MessageSyncEnergyValues; @@ -9,33 +8,13 @@ import com.pahimar.ee3.util.EntityHelper; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.event.entity.player.PlayerEvent; -public class PlayerEventHandler -{ - @SubscribeEvent - public void onPlayerLoadFromFileEvent(PlayerEvent.LoadFromFile event) - { - if (!event.entityPlayer.worldObj.isRemote) - { - TransmutationKnowledgeRegistry.getInstance().loadPlayerFromDiskIfNeeded(event.entityPlayer); - } - } +public class PlayerEventHandler { @SubscribeEvent - public void onPlayerSaveToFileEvent(PlayerEvent.SaveToFile event) - { - if (!event.entityPlayer.worldObj.isRemote) - { - TransmutationKnowledgeRegistry.getInstance().savePlayerKnowledgeToDisk(event.entityPlayer); - } - } + public void onPlayerLoggedIn(cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent event) { - @SubscribeEvent - public void onPlayerLoggedIn(cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent event) - { - if (event.player != null) - { + if (event.player != null) { NBTTagCompound playerCustomData = EntityHelper.getCustomEntityData(event.player); // Chalk Settings @@ -45,18 +24,7 @@ public class PlayerEventHandler EntityHelper.saveCustomEntityData(event.player, playerCustomData); PacketHandler.INSTANCE.sendTo(new MessageChalkSettings(chalkSettings), (EntityPlayerMP) event.player); - TransmutationKnowledgeRegistry.getInstance().loadPlayerFromDiskIfNeeded(event.player); PacketHandler.INSTANCE.sendTo(new MessageSyncEnergyValues(), (EntityPlayerMP) event.player); } - - } - - @SubscribeEvent - public void onPlayerLoggedOut(cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedOutEvent event) - { - if (!event.player.worldObj.isRemote) - { - TransmutationKnowledgeRegistry.getInstance().unloadPlayer(event.player); - } } } diff --git a/src/main/java/com/pahimar/ee3/inventory/ContainerAlchenomicon.java b/src/main/java/com/pahimar/ee3/inventory/ContainerAlchenomicon.java index 7df44690..06eb5b15 100644 --- a/src/main/java/com/pahimar/ee3/inventory/ContainerAlchenomicon.java +++ b/src/main/java/com/pahimar/ee3/inventory/ContainerAlchenomicon.java @@ -1,9 +1,9 @@ package com.pahimar.ee3.inventory; +import com.pahimar.ee3.api.knowledge.PlayerKnowledgeRegistryProxy; import com.pahimar.ee3.inventory.element.IElementButtonHandler; import com.pahimar.ee3.inventory.element.IElementTextFieldHandler; import com.pahimar.ee3.item.ItemAlchenomicon; -import com.pahimar.ee3.knowledge.TransmutationKnowledgeRegistry; import com.pahimar.ee3.reference.Comparators; import com.pahimar.ee3.util.FilterUtils; import com.pahimar.ee3.util.ItemHelper; @@ -17,7 +17,6 @@ import net.minecraft.item.ItemStack; import java.util.ArrayList; import java.util.List; import java.util.TreeSet; -import java.util.UUID; public class ContainerAlchenomicon extends ContainerEE implements IElementButtonHandler, IElementTextFieldHandler { @@ -31,12 +30,12 @@ public class ContainerAlchenomicon extends ContainerEE implements IElementButton public ContainerAlchenomicon(EntityPlayer entityPlayer, ItemStack itemStack) { - TreeSet knownTransmutations = new TreeSet(Comparators.DISPLAY_NAME_COMPARATOR); + TreeSet knownTransmutations = new TreeSet<>(Comparators.DISPLAY_NAME_COMPARATOR); - if (itemStack.getItem() instanceof ItemAlchenomicon && ItemHelper.hasOwnerUUID(itemStack)) + if (itemStack.getItem() instanceof ItemAlchenomicon && ItemHelper.hasOwnerName(itemStack)) { - UUID ownerUUID = ItemHelper.getOwnerUUID(itemStack); - knownTransmutations.addAll(TransmutationKnowledgeRegistry.getInstance().getPlayersKnownTransmutations(ownerUUID)); + String playerName = ItemHelper.getOwnerName(itemStack); + knownTransmutations.addAll(PlayerKnowledgeRegistryProxy.getKnownItemStacks(playerName)); } inventoryAlchenomicon = new InventoryAlchenomicon(knownTransmutations); @@ -188,7 +187,7 @@ public class ContainerAlchenomicon extends ContainerEE implements IElementButton this.requiresUpdate = true; boolean shouldUpdateInventory = false; ItemStack[] newInventory = new ItemStack[80]; - List filteredList = new ArrayList(FilterUtils.filterByDisplayName(inventoryAlchenomicon.getKnownTransmutations(), searchTerm, FilterUtils.NameFilterType.CONTAINS, Comparators.DISPLAY_NAME_COMPARATOR)); + List filteredList = new ArrayList<>(FilterUtils.filterByDisplayName(inventoryAlchenomicon.getKnownTransmutations(), searchTerm, FilterUtils.NameFilterType.CONTAINS, Comparators.DISPLAY_NAME_COMPARATOR)); maxPageOffset = filteredList.size() / 80; if (pageOffset > maxPageOffset) diff --git a/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java b/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java index 66cdec27..6e77f78a 100644 --- a/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java +++ b/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java @@ -2,16 +2,16 @@ package com.pahimar.ee3.inventory; import com.pahimar.ee3.api.exchange.EnergyValueRegistryProxy; import com.pahimar.ee3.api.knowledge.AbilityRegistryProxy; +import com.pahimar.ee3.api.knowledge.PlayerKnowledgeRegistryProxy; import com.pahimar.ee3.inventory.element.IElementButtonHandler; import com.pahimar.ee3.inventory.element.IElementSliderHandler; import com.pahimar.ee3.inventory.element.IElementTextFieldHandler; import com.pahimar.ee3.item.ItemAlchenomicon; import com.pahimar.ee3.item.ItemMiniumStone; import com.pahimar.ee3.item.ItemPhilosophersStone; -import com.pahimar.ee3.knowledge.TransmutationKnowledge; -import com.pahimar.ee3.knowledge.TransmutationKnowledgeRegistry; +import com.pahimar.ee3.knowledge.PlayerKnowledge; import com.pahimar.ee3.network.PacketHandler; -import com.pahimar.ee3.network.message.MessageTransmutationKnowledgeUpdate; +import com.pahimar.ee3.network.message.MessagePlayerKnowledge; import com.pahimar.ee3.reference.Comparators; import com.pahimar.ee3.tileentity.TileEntityTransmutationTablet; import com.pahimar.ee3.util.FilterUtils; @@ -48,9 +48,9 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen if (tileEntityTransmutationTablet.getStackInSlot(TileEntityTransmutationTablet.ALCHENOMICON_INDEX) != null) { ItemStack itemStack = tileEntityTransmutationTablet.getStackInSlot(TileEntityTransmutationTablet.ALCHENOMICON_INDEX); - if (itemStack.getItem() instanceof ItemAlchenomicon && ItemHelper.hasOwnerUUID(itemStack)) + if (itemStack.getItem() instanceof ItemAlchenomicon && ItemHelper.hasOwnerName(itemStack)) { - knownTransmutations.addAll(TransmutationKnowledgeRegistry.getInstance().getPlayersKnownTransmutations(ItemHelper.getOwnerUUID(itemStack))); + knownTransmutations.addAll(PlayerKnowledgeRegistryProxy.getKnownItemStacks(ItemHelper.getOwnerName(itemStack))); } } inventoryTransmutationTablet = new InventoryTransmutationTablet(knownTransmutations); @@ -189,11 +189,10 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen } } - public void handleTransmutationKnowledgeUpdate(TransmutationKnowledge transmutationKnowledge) - { - if (transmutationKnowledge != null) - { - this.inventoryTransmutationTablet = new InventoryTransmutationTablet(transmutationKnowledge.getKnownTransmutations()); + public void handlePlayerKnowledgeUpdate(PlayerKnowledge playerKnowledge) { + + if (playerKnowledge != null) { + this.inventoryTransmutationTablet = new InventoryTransmutationTablet(playerKnowledge.getKnownItemStacks()); this.updateInventory(); } } @@ -479,7 +478,7 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen if (!this.tileEntityTransmutationTablet.getWorldObj().isRemote && itemStack != null && itemStack.getItem() instanceof ItemAlchenomicon && ItemHelper.hasOwnerUUID(itemStack)) { - PacketHandler.INSTANCE.sendToAllAround(new MessageTransmutationKnowledgeUpdate(this.containerTransmutationTablet.tileEntityTransmutationTablet, null), new NetworkRegistry.TargetPoint(this.tileEntityTransmutationTablet.getWorldObj().provider.dimensionId, (double) this.tileEntityTransmutationTablet.xCoord, (double) this.tileEntityTransmutationTablet.yCoord, (double) this.tileEntityTransmutationTablet.zCoord, 5d)); + PacketHandler.INSTANCE.sendToAllAround(new MessagePlayerKnowledge(this.containerTransmutationTablet.tileEntityTransmutationTablet, null), new NetworkRegistry.TargetPoint(this.tileEntityTransmutationTablet.getWorldObj().provider.dimensionId, (double) this.tileEntityTransmutationTablet.xCoord, (double) this.tileEntityTransmutationTablet.yCoord, (double) this.tileEntityTransmutationTablet.zCoord, 5d)); } } @@ -488,12 +487,12 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen { super.putStack(itemStack); - if (!this.tileEntityTransmutationTablet.getWorldObj().isRemote && itemStack != null && itemStack.getItem() instanceof ItemAlchenomicon && ItemHelper.hasOwnerUUID(itemStack)) + if (!this.tileEntityTransmutationTablet.getWorldObj().isRemote && itemStack != null && itemStack.getItem() instanceof ItemAlchenomicon && ItemHelper.hasOwnerName(itemStack)) { - Set knownTransmutations = TransmutationKnowledgeRegistry.getInstance().getPlayersKnownTransmutations(ItemHelper.getOwnerUUID(itemStack)); + Set knownTransmutations = PlayerKnowledgeRegistryProxy.getKnownItemStacks(ItemHelper.getOwnerName(itemStack)); this.containerTransmutationTablet.inventoryTransmutationTablet = new InventoryTransmutationTablet(knownTransmutations); this.containerTransmutationTablet.updateInventory(); - PacketHandler.INSTANCE.sendToAllAround(new MessageTransmutationKnowledgeUpdate(this.containerTransmutationTablet.tileEntityTransmutationTablet, knownTransmutations), new NetworkRegistry.TargetPoint(this.tileEntityTransmutationTablet.getWorldObj().provider.dimensionId, (double) this.tileEntityTransmutationTablet.xCoord, (double) this.tileEntityTransmutationTablet.yCoord, (double) this.tileEntityTransmutationTablet.zCoord, 5d)); + PacketHandler.INSTANCE.sendToAllAround(new MessagePlayerKnowledge(this.containerTransmutationTablet.tileEntityTransmutationTablet, knownTransmutations), new NetworkRegistry.TargetPoint(this.tileEntityTransmutationTablet.getWorldObj().provider.dimensionId, (double) this.tileEntityTransmutationTablet.xCoord, (double) this.tileEntityTransmutationTablet.yCoord, (double) this.tileEntityTransmutationTablet.zCoord, 5d)); } } } diff --git a/src/main/java/com/pahimar/ee3/knowledge/PlayerKnowledgeRegistry.java b/src/main/java/com/pahimar/ee3/knowledge/PlayerKnowledgeRegistry.java index c86911f0..b06766c0 100644 --- a/src/main/java/com/pahimar/ee3/knowledge/PlayerKnowledgeRegistry.java +++ b/src/main/java/com/pahimar/ee3/knowledge/PlayerKnowledgeRegistry.java @@ -5,6 +5,7 @@ import com.pahimar.ee3.api.knowledge.AbilityRegistryProxy; import com.pahimar.ee3.handler.ConfigurationHandler; import com.pahimar.ee3.reference.Comparators; import com.pahimar.ee3.reference.Files; +import com.pahimar.ee3.util.LogHelper; import com.pahimar.ee3.util.SerializationHelper; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.Side; @@ -33,10 +34,13 @@ public class PlayerKnowledgeRegistry { templatePlayerKnowledge = new PlayerKnowledge(); } - public PlayerKnowledge getTemplatePlayerKnowledge() { - return templatePlayerKnowledge; - } - + /** + * TODO Finish JavaDoc + * + * @param player + * @param object + * @return + */ public boolean doesPlayerKnow(EntityPlayer player, Object object) { if (player != null) { @@ -46,6 +50,13 @@ public class PlayerKnowledgeRegistry { return false; } + /** + * TODO Finish JavaDoc + * + * @param playerName + * @param object + * @return + */ public boolean doesPlayerKnow(String playerName, Object object) { if (getPlayerKnowledge(playerName) != null) { @@ -55,6 +66,13 @@ public class PlayerKnowledgeRegistry { return false; } + /** + * TODO Finish JavaDoc + * + * @param entityPlayer + * @param object + * @return + */ public boolean canPlayerLearn(EntityPlayer entityPlayer, Object object) { if (entityPlayer != null) { @@ -64,6 +82,13 @@ public class PlayerKnowledgeRegistry { return false; } + /** + * TODO Finish JavaDoc + * + * @param playerName + * @param object + * @return + */ public boolean canPlayerLearn(String playerName, Object object) { if (getPlayerKnowledge(playerName) != null) { @@ -73,6 +98,12 @@ public class PlayerKnowledgeRegistry { return false; } + /** + * TODO Finish JavaDoc + * + * @param entityPlayer + * @param object + */ public void teachPlayer(EntityPlayer entityPlayer, Object object) { if (entityPlayer != null) { @@ -80,6 +111,12 @@ public class PlayerKnowledgeRegistry { } } + /** + * TODO Finish JavaDoc + * + * @param playerName + * @param object + */ public void teachPlayer(String playerName, Object object) { if (getPlayerKnowledge(playerName) != null) { @@ -88,6 +125,12 @@ public class PlayerKnowledgeRegistry { } } + /** + * TODO Finish JavaDoc + * + * @param entityPlayer + * @param objects + */ public void teachPlayer(EntityPlayer entityPlayer, Collection objects) { if (entityPlayer != null) { @@ -95,6 +138,12 @@ public class PlayerKnowledgeRegistry { } } + /** + * TODO Finish JavaDoc + * + * @param playerName + * @param objects + */ public void teachPlayer(String playerName, Collection objects) { if (objects != null) { @@ -102,12 +151,20 @@ public class PlayerKnowledgeRegistry { PlayerKnowledge playerKnowledge = getPlayerKnowledge(playerName); if (playerKnowledge != null) { - objects.forEach(playerKnowledge::learn); + for (Object object : objects){ + getPlayerKnowledge(playerName).learn(object); + } save(playerName); } } } + /** + * TODO Finish JavaDoc + * + * @param entityPlayer + * @param object + */ public void makePlayerForget(EntityPlayer entityPlayer, Object object) { if (entityPlayer != null) { @@ -115,6 +172,12 @@ public class PlayerKnowledgeRegistry { } } + /** + * TODO Finish JavaDoc + * + * @param playerName + * @param object + */ public void makePlayerForget(String playerName, Object object) { if (getPlayerKnowledge(playerName) != null) { @@ -123,6 +186,12 @@ public class PlayerKnowledgeRegistry { } } + /** + * TODO Finish JavaDoc + * + * @param entityPlayer + * @param objects + */ public void makePlayerForget(EntityPlayer entityPlayer, Collection objects) { if (entityPlayer != null) { @@ -130,6 +199,12 @@ public class PlayerKnowledgeRegistry { } } + /** + * TODO Finish JavaDoc + * + * @param playerName + * @param objects + */ public void makePlayerForget(String playerName, Collection objects) { if (objects != null) { @@ -137,12 +212,19 @@ public class PlayerKnowledgeRegistry { PlayerKnowledge playerKnowledge = getPlayerKnowledge(playerName); if (playerKnowledge != null) { - objects.forEach(playerKnowledge::forget); + for (Object object : objects) { + getPlayerKnowledge(playerName).forget(object); + } save(playerName); } } } + /** + * TODO Finish JavaDoc + * + * @param entityPlayer + */ public void makePlayerForgetAll(EntityPlayer entityPlayer) { if (entityPlayer != null) { @@ -150,6 +232,11 @@ public class PlayerKnowledgeRegistry { } } + /** + * TODO Finish JavaDoc + * + * @param playerName + */ public void makePlayerForgetAll(String playerName) { if (playerName != null && !playerName.isEmpty()) { @@ -158,6 +245,12 @@ public class PlayerKnowledgeRegistry { } } + /** + * TODO Finish JavaDoc + * + * @param entityPlayer + * @return + */ public Set getKnownItemStacks(EntityPlayer entityPlayer) { if (entityPlayer != null) { @@ -167,6 +260,12 @@ public class PlayerKnowledgeRegistry { return Collections.EMPTY_SET; } + /** + * TODO Finish JavaDoc + * + * @param playerName + * @return + */ public Set getKnownItemStacks(String playerName) { if (getPlayerKnowledge(playerName) != null) { @@ -199,7 +298,6 @@ public class PlayerKnowledgeRegistry { */ protected PlayerKnowledge getPlayerKnowledge(String playerName) { - // TODO Logging if (playerName != null && !playerName.isEmpty()) { if (!playerKnowledgeMap.containsKey(playerName)) { playerKnowledgeMap.put(playerName, load(getPlayerKnowledgeFile(playerName), false)); @@ -275,17 +373,23 @@ public class PlayerKnowledgeRegistry { PlayerKnowledge playerKnowledge = SerializationHelper.GSON.fromJson(jsonString, PlayerKnowledge.class); if (playerKnowledge != null) { - return playerKnowledge; + return playerKnowledge; } } - catch (JsonSyntaxException | FileNotFoundException e) { + catch (JsonSyntaxException e) { + LogHelper.error("Unable to read player knowledge from file '{}'", file.getAbsoluteFile()); + } + catch (FileNotFoundException e) { + LogHelper.warn("Unable to find file '{}'", file.getAbsoluteFile()); } } if (ConfigurationHandler.Settings.playerKnowledgeTemplateEnabled && !isTemplate) { + LogHelper.info("Unable to read player knowledge from {}, initializing a new one with template data", file.getName()); return new PlayerKnowledge(templatePlayerKnowledge); } else { + LogHelper.info("Unable to read player knowledge from {}, initializing a new empty one", file.getName()); return new PlayerKnowledge(); } } diff --git a/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledge.java b/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledge.java deleted file mode 100644 index b4e56ba0..00000000 --- a/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledge.java +++ /dev/null @@ -1,246 +0,0 @@ -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.JsonItemStack; -import com.pahimar.ee3.reference.Comparators; -import com.pahimar.ee3.util.FilterUtils; -import com.pahimar.ee3.util.ItemHelper; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import java.io.*; -import java.lang.reflect.Type; -import java.util.*; - -public class TransmutationKnowledge implements JsonSerializer, JsonDeserializer -{ - private static final Gson jsonSerializer = (new GsonBuilder()).setPrettyPrinting().registerTypeAdapter(TransmutationKnowledge.class, new TransmutationKnowledge()).create(); - private Set knownTransmutations; - private boolean hasBeenModified = false; - - public TransmutationKnowledge() - { - this(new TreeSet(Comparators.ID_COMPARATOR)); - } - - public TransmutationKnowledge(Collection knownTransmutations) - { - this.knownTransmutations = new TreeSet(Comparators.ID_COMPARATOR); - this.knownTransmutations.addAll(knownTransmutations); - hasBeenModified = false; - } - - public TransmutationKnowledge(ItemStack... knownTransmutations) - { - this(Arrays.asList(knownTransmutations)); - } - - public boolean isKnown(ItemStack itemStack) - { - ItemStack unitItemStack = itemStack.copy(); - unitItemStack.stackSize = 1; - return this.knownTransmutations.contains(unitItemStack); - } - - public Set getKnownTransmutations() - { - return this.knownTransmutations; - } - - public boolean learnTransmutation(ItemStack itemStack) - { - ItemStack unitItemStack = itemStack.copy(); - unitItemStack.stackSize = 1; - - if (!this.knownTransmutations.contains(unitItemStack)) - { - hasBeenModified = true; - return this.knownTransmutations.add(unitItemStack); - } - - return false; - } - - public boolean forgetTransmutation(ItemStack itemStack) - { - ItemStack unitItemStack = itemStack.copy(); - unitItemStack.stackSize = 1; - - if (this.knownTransmutations.contains(unitItemStack)) - { - hasBeenModified = true; - return this.knownTransmutations.remove(unitItemStack); - } - - return false; - } - - public void forgetAllTransmutations() - { - this.knownTransmutations.clear(); - hasBeenModified = true; - } - - public boolean hasBeenModified() - { - return hasBeenModified; - } - - public Set filterByNameStartsWith(String filterString) - { - return FilterUtils.filterByDisplayName(getKnownTransmutations(), filterString, FilterUtils.NameFilterType.STARTS_WITH); - } - - public Set filterByNameContains(String filterString) - { - return FilterUtils.filterByDisplayName(getKnownTransmutations(), filterString, FilterUtils.NameFilterType.CONTAINS); - } - - @Override - public String toString() - { - StringBuilder stringBuilder = new StringBuilder(); - - stringBuilder.append("["); - for (ItemStack itemStack : knownTransmutations) - { - stringBuilder.append(String.format("%s, ", ItemHelper.toString(itemStack))); - } - stringBuilder.append("]"); - - return stringBuilder.toString(); - } - - public static TransmutationKnowledge createFromJson(String jsonTransmutationKnowledge) throws JsonParseException - { - try - { - return jsonSerializer.fromJson(jsonTransmutationKnowledge, TransmutationKnowledge.class); - } - catch (JsonSyntaxException exception) - { - exception.printStackTrace(); - } - catch (JsonParseException exception) - { - exception.printStackTrace(); - } - - return null; - } - - public String toJson() - { - return jsonSerializer.toJson(this); - } - - @Override - public TransmutationKnowledge deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException - { - if (json.isJsonObject()) - { - JsonObject jsonObject = (JsonObject) json; - - Set itemStacks = new TreeSet(Comparators.ID_COMPARATOR); - - if (jsonObject.has("knownTransmutations") && jsonObject.get("knownTransmutations").isJsonArray()) - { - JsonArray jsonArray = (JsonArray) jsonObject.get("knownTransmutations"); - Iterator iterator = jsonArray.iterator(); - - while (iterator.hasNext()) - { - JsonElement jsonElement = iterator.next(); - if (jsonElement.isJsonObject()) - { - try - { - JsonItemStack jsonItemStack = JsonItemStack.jsonSerializer.fromJson(jsonElement, JsonItemStack.class); - - ItemStack itemStack = null; - Item item = (Item) Item.itemRegistry.getObject(jsonItemStack.itemName); - if (item != null) - { - itemStack = new ItemStack(item, 1, jsonItemStack.itemDamage); - if (jsonItemStack.itemNBTTagCompound != null) - { - itemStack.stackTagCompound = jsonItemStack.itemNBTTagCompound; - } - } - - if (itemStack != null) - { - itemStacks.add(itemStack); - } - } - catch (JsonParseException e) - { - } - } - } - } - - return new TransmutationKnowledge(itemStacks); - } - - return null; - } - - @Override - public JsonElement serialize(TransmutationKnowledge transmutationKnowledge, Type typeOfSrc, JsonSerializationContext context) - { - JsonObject jsonTransmutationKnowledge = new JsonObject(); - - JsonArray knownTransmutations = new JsonArray(); - for (ItemStack itemStack : transmutationKnowledge.getKnownTransmutations()) - { - knownTransmutations.add(JsonItemStack.jsonSerializer.toJsonTree(new JsonItemStack(itemStack))); - } - jsonTransmutationKnowledge.add("knownTransmutations", knownTransmutations); - - return jsonTransmutationKnowledge; - } - - public static void writeToFile(File file, TransmutationKnowledge transmutationKnowledge) - { - JsonWriter jsonWriter; - - try - { - jsonWriter = new JsonWriter(new FileWriter(file)); - jsonWriter.setIndent(" "); - jsonSerializer.toJson(transmutationKnowledge, TransmutationKnowledge.class, jsonWriter); - jsonWriter.close(); - transmutationKnowledge.hasBeenModified = false; - } - catch (IOException e) - { - e.printStackTrace(); - } - } - - public static TransmutationKnowledge readFromFile(File file) - { - JsonReader jsonReader; - - try - { - jsonReader = new JsonReader(new FileReader(file)); - TransmutationKnowledge transmutationKnowledge = jsonSerializer.fromJson(jsonReader, TransmutationKnowledge.class); - jsonReader.close(); - return transmutationKnowledge; - } - catch (FileNotFoundException ignored) - { - // NOOP - } - catch (IOException e) - { - e.printStackTrace(); - } - - return null; - } -} diff --git a/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledgeRegistry.java b/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledgeRegistry.java deleted file mode 100644 index 3da3ff9b..00000000 --- a/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledgeRegistry.java +++ /dev/null @@ -1,478 +0,0 @@ -package com.pahimar.ee3.knowledge; - -import com.pahimar.ee3.api.event.PlayerKnowledgeEvent; -import com.pahimar.ee3.api.event.TemplateKnowledgeEvent; -import com.pahimar.ee3.reference.Files; -import com.pahimar.ee3.util.FilterUtils; -import com.pahimar.ee3.util.SerializationHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.MinecraftForge; - -import java.io.File; -import java.util.HashMap; -import java.util.Set; -import java.util.UUID; - -public class TransmutationKnowledgeRegistry -{ - private static TransmutationKnowledgeRegistry transmutationKnowledgeRegistry = null; - private static File playerKnowledgeDirectory, dataKnowledgeDirectory; - private static TransmutationKnowledge templateKnowledge; - private static HashMap playerKnowledgeMap; - - private TransmutationKnowledgeRegistry() - { - playerKnowledgeDirectory = new File(SerializationHelper.getInstancePlayerDataDirectory(), "knowledge" + File.separator + "transmutation"); - playerKnowledgeDirectory.mkdirs(); - - dataKnowledgeDirectory = new File(SerializationHelper.getInstanceDataDirectory(), "knowledge" + File.separator + "transmutation"); - dataKnowledgeDirectory.mkdirs(); - - loadTemplateKnowledgeFromDisk(); - - playerKnowledgeMap = new HashMap(); - } - - public static TransmutationKnowledgeRegistry getInstance() - { - if (transmutationKnowledgeRegistry == null) - { - transmutationKnowledgeRegistry = new TransmutationKnowledgeRegistry(); - } - - return transmutationKnowledgeRegistry; - } - - public TransmutationKnowledge getTemplateKnowledge() - { - return templateKnowledge; - } - - /* Template Related Transmutation Knowledge */ - public Set getTemplatesKnownTransmutations() - { - if (templateKnowledge == null) - { - loadTemplateKnowledgeFromDisk(); - } - - return templateKnowledge.getKnownTransmutations(); - } - - public Set getTemplatesKnownTransmutationsFilteredStartsWith(String filterString) - { - if (templateKnowledge == null) - { - loadTemplateKnowledgeFromDisk(); - } - - return FilterUtils.filterByDisplayName(templateKnowledge.getKnownTransmutations(), filterString, FilterUtils.NameFilterType.STARTS_WITH); - } - - public Set getTemplatesKnownTransmutationsFilteredContains(String filterString) - { - if (templateKnowledge == null) - { - loadTemplateKnowledgeFromDisk(); - } - - return FilterUtils.filterByDisplayName(templateKnowledge.getKnownTransmutations(), filterString, FilterUtils.NameFilterType.CONTAINS); - } - - public boolean doesTemplateKnow(ItemStack itemStack) - { - if (templateKnowledge == null) - { - loadTemplateKnowledgeFromDisk(); - } - - return templateKnowledge.isKnown(itemStack); - } - - public boolean canTemplateLearn(ItemStack itemStack) - { - if (AbilityRegistry.getInstance().isLearnable(itemStack)) - { - if (templateKnowledge == null) - { - loadTemplateKnowledgeFromDisk(); - } - return !templateKnowledge.isKnown(itemStack); - } - - return false; - } - - public void teachTemplate(ItemStack itemStack) - { - if (templateKnowledge == null) - { - loadTemplateKnowledgeFromDisk(); - } - - if (canTemplateLearn(itemStack) && !MinecraftForge.EVENT_BUS.post(new TemplateKnowledgeEvent.TemplateLearnKnowledgeEvent(itemStack))) - { - templateKnowledge.learnTransmutation(itemStack); - saveTemplateKnowledgeToDisk(); - } - } - - public void makeTemplateForget(ItemStack itemStack) - { - if (templateKnowledge == null) - { - loadTemplateKnowledgeFromDisk(); - } - - if (doesTemplateKnow(itemStack) && !MinecraftForge.EVENT_BUS.post(new TemplateKnowledgeEvent.TemplateForgetKnowledgeEvent(itemStack))) - { - templateKnowledge.forgetTransmutation(itemStack); - saveTemplateKnowledgeToDisk(); - } - } - - public void makeTemplateForgetEverything() - { - if (templateKnowledge == null) - { - loadTemplateKnowledgeFromDisk(); - } - - if (!MinecraftForge.EVENT_BUS.post(new TemplateKnowledgeEvent.TemplateForgetAllKnowledgeEvent())) - { - templateKnowledge.forgetAllTransmutations(); - saveTemplateKnowledgeToDisk(); - } - } - - /* Player Related Transmutation Knowledge */ - public Set getPlayersKnownTransmutations(EntityPlayer entityPlayer) - { - if (entityPlayer != null) - { - return getPlayersKnownTransmutations(entityPlayer.getUniqueID()); - } - - return null; - } - - public Set getPlayersKnownTransmutations(UUID playerUUID) - { - if (playerUUID != null) - { - loadPlayerFromDiskIfNeeded(playerUUID); - - if (playerKnowledgeMap.containsKey(playerUUID)) - { - return playerKnowledgeMap.get(playerUUID).getKnownTransmutations(); - } - } - - return null; - } - - public Set getPlayersKnownTransmutationsFilteredStartsWith(EntityPlayer entityPlayer, String startsWith) - { - if (entityPlayer != null) - { - return getPlayersKnownTransmutationsFilteredStartsWith(entityPlayer.getUniqueID(), startsWith); - } - - return null; - } - - public Set getPlayersKnownTransmutationsFilteredStartsWith(UUID playerUUID, String startsWith) - { - if (playerUUID != null) - { - loadPlayerFromDiskIfNeeded(playerUUID); - - if (playerKnowledgeMap.containsKey(playerUUID)) - { - return playerKnowledgeMap.get(playerUUID).filterByNameStartsWith(startsWith); - } - } - - return null; - } - - public Set getPlayersKnownTransmutationsFilteredContains(EntityPlayer entityPlayer, String contains) - { - if (entityPlayer != null) - { - return getPlayersKnownTransmutationsFilteredContains(entityPlayer.getUniqueID(), contains); - } - - return null; - } - - public Set getPlayersKnownTransmutationsFilteredContains(UUID playerUUID, String contains) - { - if (playerUUID != null) - { - loadPlayerFromDiskIfNeeded(playerUUID); - - if (playerKnowledgeMap.containsKey(playerUUID)) - { - return playerKnowledgeMap.get(playerUUID).filterByNameContains(contains); - } - } - - return null; - } - - public boolean doesPlayerKnow(EntityPlayer entityPlayer, ItemStack itemStack) - { - if (entityPlayer != null && itemStack != null) - { - loadPlayerFromDiskIfNeeded(entityPlayer); - - if (playerKnowledgeMap.containsKey(entityPlayer.getUniqueID())) - { - return playerKnowledgeMap.get(entityPlayer.getUniqueID()).isKnown(itemStack); - } - } - - return false; - } - - public boolean doesPlayerKnow(UUID playerUUID, ItemStack itemStack) - { - if (playerUUID != null && itemStack != null) - { - loadPlayerFromDiskIfNeeded(playerUUID); - - if (playerKnowledgeMap.containsKey(playerUUID)) - { - return playerKnowledgeMap.get(playerUUID).isKnown(itemStack); - } - } - - return false; - } - - public boolean canPlayerLearn(EntityPlayer entityPlayer, ItemStack itemStack) - { - if (entityPlayer != null) - { - return canPlayerLearn(entityPlayer.getUniqueID(), itemStack); - } - - return false; - } - - public boolean canPlayerLearn(UUID playerUUID, ItemStack itemStack) - { - if (playerUUID != null && itemStack != null) - { - if (AbilityRegistry.getInstance().isLearnable(itemStack)) - { - loadPlayerFromDiskIfNeeded(playerUUID); - - if (playerKnowledgeMap.containsKey(playerUUID)) - { - return !playerKnowledgeMap.get(playerUUID).isKnown(itemStack); - } - } - } - - return false; - } - - public void teachPlayer(EntityPlayer entityPlayer, ItemStack itemStack) - { - if (entityPlayer != null) - { - teachPlayer(entityPlayer.getUniqueID(), itemStack); - } - } - - public void teachPlayer(UUID playerUUID, ItemStack itemStack) - { - if (playerUUID != null && itemStack != null && canPlayerLearn(playerUUID, itemStack)) - { - loadPlayerFromDiskIfNeeded(playerUUID); - if (playerKnowledgeMap.containsKey(playerUUID) && !MinecraftForge.EVENT_BUS.post(new PlayerKnowledgeEvent.PlayerLearnKnowledgeEvent(playerUUID, itemStack))) - { - playerKnowledgeMap.get(playerUUID).learnTransmutation(itemStack); - savePlayerKnowledgeToDisk(playerUUID); - } - } - } - - public void makePlayerForget(EntityPlayer entityPlayer, ItemStack itemStack) - { - if (entityPlayer != null) - { - makePlayerForget(entityPlayer.getUniqueID(), itemStack); - } - } - - public void makePlayerForget(UUID playerUUID, ItemStack itemStack) - { - if (playerUUID != null && itemStack != null && doesPlayerKnow(playerUUID, itemStack)) - { - loadPlayerFromDiskIfNeeded(playerUUID); - if (playerKnowledgeMap.containsKey(playerUUID) && !MinecraftForge.EVENT_BUS.post(new PlayerKnowledgeEvent.PlayerForgetKnowledgeEvent(playerUUID, itemStack))) - { - playerKnowledgeMap.get(playerUUID).forgetTransmutation(itemStack); - savePlayerKnowledgeToDisk(playerUUID); - } - } - } - - public void makePlayerForgetEverything(EntityPlayer entityPlayer) - { - if (entityPlayer != null) - { - makePlayerForgetEverything(entityPlayer.getUniqueID()); - } - } - - public void makePlayerForgetEverything(UUID playerUUID) - { - if (playerUUID != null) - { - loadPlayerFromDiskIfNeeded(playerUUID); - if (playerKnowledgeMap.containsKey(playerUUID) && !MinecraftForge.EVENT_BUS.post(new PlayerKnowledgeEvent.PlayerForgetAllKnowledgeEvent(playerUUID))) - { - playerKnowledgeMap.get(playerUUID).forgetAllTransmutations(); - savePlayerKnowledgeToDisk(playerUUID); - } - } - } - - /* Serialization */ - public void loadTemplateKnowledgeFromDisk() - { - if (dataKnowledgeDirectory != null) - { - File templateFile = new File(dataKnowledgeDirectory, Files.TEMPLATE_JSON_FILENAME); - - if (!templateFile.exists()) - { - templateKnowledge = new TransmutationKnowledge(); - SerializationHelper.writeTransmutationKnowledgeToFile(dataKnowledgeDirectory, Files.TEMPLATE_JSON_FILENAME, templateKnowledge); - } - else - { - templateKnowledge = SerializationHelper.readTransmutationKnowledgeFromFile(dataKnowledgeDirectory, Files.TEMPLATE_JSON_FILENAME); - } - } - else - { - templateKnowledge = new TransmutationKnowledge(); - } - } - - public void saveTemplateKnowledgeToDisk() - { - if (dataKnowledgeDirectory != null) - { - if (templateKnowledge != null) - { - SerializationHelper.writeTransmutationKnowledgeToFile(dataKnowledgeDirectory, Files.TEMPLATE_JSON_FILENAME, templateKnowledge); - } - else - { - templateKnowledge = new TransmutationKnowledge(); - SerializationHelper.writeTransmutationKnowledgeToFile(dataKnowledgeDirectory, Files.TEMPLATE_JSON_FILENAME, templateKnowledge); - } - } - } - - public void loadPlayerFromDiskIfNeeded(EntityPlayer entityPlayer) - { - if (entityPlayer != null && entityPlayer.getUniqueID() != null) - { - loadPlayerFromDiskIfNeeded(entityPlayer.getUniqueID()); - } - } - - public void loadPlayerFromDiskIfNeeded(UUID playerUUID) - { - if (playerUUID != null && playerKnowledgeDirectory != null && !playerKnowledgeMap.containsKey(playerUUID)) - { - TransmutationKnowledge playerTransmutationKnowledge = new TransmutationKnowledge(); - - File playerKnowledgeFile = new File(playerKnowledgeDirectory, playerUUID.toString() + ".json"); - - if (playerKnowledgeFile.exists() && playerKnowledgeFile.isFile()) - { - playerTransmutationKnowledge = SerializationHelper.readTransmutationKnowledgeFromFile(playerKnowledgeDirectory, playerUUID.toString() + ".json"); - } - - playerKnowledgeMap.put(playerUUID, playerTransmutationKnowledge); - } - } - - public void unloadPlayer(EntityPlayer entityPlayer) - { - if (entityPlayer != null) - { - unloadPlayer(entityPlayer.getUniqueID()); - } - } - - public void unloadPlayer(UUID playerUUID) - { - if (playerUUID != null) - { - if (playerKnowledgeMap.containsKey(playerUUID)) - { - savePlayerKnowledgeToDisk(playerUUID); - playerKnowledgeMap.remove(playerUUID); - } - } - } - - public void savePlayerKnowledgeToDisk(EntityPlayer entityPlayer) - { - if (entityPlayer != null && entityPlayer.getUniqueID() != null) - { - savePlayerKnowledgeToDisk(entityPlayer.getUniqueID()); - } - } - - public void savePlayerKnowledgeToDisk(UUID playerUUID) - { - if (playerUUID != null && playerKnowledgeDirectory != null) - { - if (playerKnowledgeMap.containsKey(playerUUID) && playerKnowledgeMap.get(playerUUID) != null) - { - if (playerKnowledgeMap.get(playerUUID).hasBeenModified()) - { - SerializationHelper.writeTransmutationKnowledgeToFile(playerKnowledgeDirectory, playerUUID.toString() + ".json", playerKnowledgeMap.get(playerUUID)); - } - } - else - { - loadPlayerFromDiskIfNeeded(playerUUID); - SerializationHelper.writeTransmutationKnowledgeToFile(playerKnowledgeDirectory, playerUUID.toString() + ".json", playerKnowledgeMap.get(playerUUID)); - } - } - } - - public void saveAll() - { - if (dataKnowledgeDirectory != null) - { - saveTemplateKnowledgeToDisk(); - } - - if (playerKnowledgeDirectory != null) - { - for (UUID playerUUID : playerKnowledgeMap.keySet()) - { - SerializationHelper.writeTransmutationKnowledgeToFile(playerKnowledgeDirectory, playerUUID.toString() + ".json", playerKnowledgeMap.get(playerUUID)); - } - } - } - - public void clear() - { - saveAll(); - this.transmutationKnowledgeRegistry = null; - } -} diff --git a/src/main/java/com/pahimar/ee3/network/PacketHandler.java b/src/main/java/com/pahimar/ee3/network/PacketHandler.java index 15486cb1..8d9d42a7 100644 --- a/src/main/java/com/pahimar/ee3/network/PacketHandler.java +++ b/src/main/java/com/pahimar/ee3/network/PacketHandler.java @@ -28,7 +28,7 @@ public class PacketHandler INSTANCE.registerMessage(MessageTileEntityTransmutationTablet.class, MessageTileEntityTransmutationTablet.class, 13, Side.CLIENT); INSTANCE.registerMessage(MessageSingleParticleEvent.class, MessageSingleParticleEvent.class, 14, Side.CLIENT); INSTANCE.registerMessage(MessageSliderElementUpdated.class, MessageSliderElementUpdated.class, 15, Side.SERVER); - INSTANCE.registerMessage(MessageTransmutationKnowledgeUpdate.class, MessageTransmutationKnowledgeUpdate.class, 16, Side.CLIENT); + INSTANCE.registerMessage(MessagePlayerKnowledge.class, MessagePlayerKnowledge.class, 16, Side.CLIENT); INSTANCE.registerMessage(MessageTileEntityResearchStation.class, MessageTileEntityResearchStation.class, 17, Side.CLIENT); } } diff --git a/src/main/java/com/pahimar/ee3/network/message/MessagePlayerKnowledge.java b/src/main/java/com/pahimar/ee3/network/message/MessagePlayerKnowledge.java new file mode 100644 index 00000000..51071910 --- /dev/null +++ b/src/main/java/com/pahimar/ee3/network/message/MessagePlayerKnowledge.java @@ -0,0 +1,112 @@ +package com.pahimar.ee3.network.message; + +import com.google.gson.JsonSyntaxException; +import com.pahimar.ee3.inventory.ContainerTransmutationTablet; +import com.pahimar.ee3.knowledge.PlayerKnowledge; +import com.pahimar.ee3.tileentity.TileEntityTransmutationTablet; +import com.pahimar.ee3.util.CompressionHelper; +import com.pahimar.ee3.util.SerializationHelper; +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import io.netty.buffer.ByteBuf; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.item.ItemStack; + +import java.util.Set; + +public class MessagePlayerKnowledge implements IMessage, IMessageHandler +{ + public int xCoord, yCoord, zCoord; + public PlayerKnowledge playerKnowledge; + + public MessagePlayerKnowledge(){ + } + + public MessagePlayerKnowledge(TileEntityTransmutationTablet transmutationTablet, Set knownItemStacks) { + + if (transmutationTablet != null) { + this.xCoord = transmutationTablet.xCoord; + this.yCoord = transmutationTablet.yCoord; + this.zCoord = transmutationTablet.zCoord; + } + else { + this.xCoord = 0; + this.yCoord = Integer.MIN_VALUE; + this.zCoord = 0; + } + + if (knownItemStacks != null) { + this.playerKnowledge = new PlayerKnowledge(knownItemStacks); + } + else { + this.playerKnowledge = new PlayerKnowledge(); + } + } + + @Override + public void fromBytes(ByteBuf buf) { + + this.xCoord = buf.readInt(); + this.yCoord = buf.readInt(); + this.zCoord = buf.readInt(); + + byte[] compressedJson = null; + int readableBytes = buf.readInt(); + + if (readableBytes > 0) { + compressedJson = buf.readBytes(readableBytes).array(); + } + + if (compressedJson != null) { + try { + this.playerKnowledge = SerializationHelper.GSON.fromJson(CompressionHelper.decompress(compressedJson), PlayerKnowledge.class); + } + catch (JsonSyntaxException e) { + this.playerKnowledge = new PlayerKnowledge(); + } + } + } + + @Override + public void toBytes(ByteBuf buf) { + + buf.writeInt(xCoord); + buf.writeInt(yCoord); + buf.writeInt(zCoord); + + byte[] compressedJson = null; + + if (playerKnowledge != null) { + compressedJson = CompressionHelper.compress(SerializationHelper.GSON.toJson(playerKnowledge)); + } + + if (compressedJson != null) { + buf.writeInt(compressedJson.length); + buf.writeBytes(compressedJson); + } + else { + buf.writeInt(0); + } + } + + @Override + public IMessage onMessage(MessagePlayerKnowledge message, MessageContext ctx) { + + if (message.yCoord != Integer.MIN_VALUE) { + if (FMLClientHandler.instance().getClient().currentScreen instanceof GuiContainer) { + + GuiContainer guiContainer = (GuiContainer) FMLClientHandler.instance().getClient().currentScreen; + + if (guiContainer.inventorySlots instanceof ContainerTransmutationTablet) { + if (FMLClientHandler.instance().getWorldClient().getTileEntity(message.xCoord, message.yCoord, message.zCoord) instanceof TileEntityTransmutationTablet) { + ((ContainerTransmutationTablet) guiContainer.inventorySlots).handlePlayerKnowledgeUpdate(message.playerKnowledge); + } + } + } + } + + return null; + } +} diff --git a/src/main/java/com/pahimar/ee3/network/message/MessageTransmutationKnowledgeUpdate.java b/src/main/java/com/pahimar/ee3/network/message/MessageTransmutationKnowledgeUpdate.java deleted file mode 100644 index c111c447..00000000 --- a/src/main/java/com/pahimar/ee3/network/message/MessageTransmutationKnowledgeUpdate.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.pahimar.ee3.network.message; - -import com.pahimar.ee3.inventory.ContainerTransmutationTablet; -import com.pahimar.ee3.knowledge.TransmutationKnowledge; -import com.pahimar.ee3.tileentity.TileEntityTransmutationTablet; -import com.pahimar.ee3.util.CompressionHelper; -import cpw.mods.fml.client.FMLClientHandler; -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.item.ItemStack; - -import java.util.Collection; - -public class MessageTransmutationKnowledgeUpdate implements IMessage, IMessageHandler -{ - public int xCoord, yCoord, zCoord; - public TransmutationKnowledge transmutationKnowledge; - - public MessageTransmutationKnowledgeUpdate() - { - - } - - public MessageTransmutationKnowledgeUpdate(TileEntityTransmutationTablet tileEntityTransmutationTablet, Collection knownTransmutationsCollection) - { - if (tileEntityTransmutationTablet != null) - { - this.xCoord = tileEntityTransmutationTablet.xCoord; - this.yCoord = tileEntityTransmutationTablet.yCoord; - this.zCoord = tileEntityTransmutationTablet.zCoord; - } - else - { - this.xCoord = 0; - this.yCoord = Integer.MIN_VALUE; - this.zCoord = 0; - } - - if (knownTransmutationsCollection != null) - { - this.transmutationKnowledge = new TransmutationKnowledge(knownTransmutationsCollection); - } - else - { - this.transmutationKnowledge = new TransmutationKnowledge(); - } - } - - public MessageTransmutationKnowledgeUpdate(int xCoord, int yCoord, int zCoord, Collection knownTransmutationsCollection) - { - this.xCoord = xCoord; - this.yCoord = yCoord; - this.zCoord = zCoord; - - if (knownTransmutationsCollection != null) - { - this.transmutationKnowledge = new TransmutationKnowledge(knownTransmutationsCollection); - } - else - { - this.transmutationKnowledge = new TransmutationKnowledge(); - } - } - - @Override - public void fromBytes(ByteBuf buf) - { - this.xCoord = buf.readInt(); - this.yCoord = buf.readInt(); - this.zCoord = buf.readInt(); - - byte[] compressedString = null; - int readableBytes = buf.readInt(); - - if (readableBytes > 0) - { - compressedString = buf.readBytes(readableBytes).array(); - } - - if (compressedString != null) - { - String uncompressedString = CompressionHelper.decompress(compressedString); - this.transmutationKnowledge = TransmutationKnowledge.createFromJson(uncompressedString); - } - } - - @Override - public void toBytes(ByteBuf buf) - { - buf.writeInt(xCoord); - buf.writeInt(yCoord); - buf.writeInt(zCoord); - - byte[] compressedString = null; - - if (transmutationKnowledge != null) { - compressedString = CompressionHelper.compress(transmutationKnowledge.toJson()); - } - - if (compressedString != null) - { - buf.writeInt(compressedString.length); - buf.writeBytes(compressedString); - } - else - { - buf.writeInt(0); - } - } - - @Override - public IMessage onMessage(MessageTransmutationKnowledgeUpdate message, MessageContext ctx) - { - if (message.yCoord != Integer.MIN_VALUE) - { - if (FMLClientHandler.instance().getClient().currentScreen instanceof GuiContainer) - { - GuiContainer guiContainer = (GuiContainer) FMLClientHandler.instance().getClient().currentScreen; - - if (guiContainer.inventorySlots instanceof ContainerTransmutationTablet) - { - if (FMLClientHandler.instance().getWorldClient().getTileEntity(message.xCoord, message.yCoord, message.zCoord) instanceof TileEntityTransmutationTablet) - { - ((ContainerTransmutationTablet) guiContainer.inventorySlots).handleTransmutationKnowledgeUpdate(message.transmutationKnowledge); - } - } - } - } - - return null; - } -} diff --git a/src/main/java/com/pahimar/ee3/tileentity/TileEntityResearchStation.java b/src/main/java/com/pahimar/ee3/tileentity/TileEntityResearchStation.java index 0b31ec76..e5410d22 100644 --- a/src/main/java/com/pahimar/ee3/tileentity/TileEntityResearchStation.java +++ b/src/main/java/com/pahimar/ee3/tileentity/TileEntityResearchStation.java @@ -184,7 +184,7 @@ public class TileEntityResearchStation extends TileEntityEE implements IInventor @Override public void updateEntity() { - if (!this.worldObj.isRemote) + if (!this.worldObj.isRemote && inventory[ALCHENOMICON_SLOT_INVENTORY_INDEX] != null && inventory[ITEM_SLOT_INVENTORY_INDEX] != null) { // Continue "cooking" the same item, if we can if (this.canLearnItemStack()) diff --git a/src/main/java/com/pahimar/ee3/util/SerializationHelper.java b/src/main/java/com/pahimar/ee3/util/SerializationHelper.java index 04853434..2317b3bc 100644 --- a/src/main/java/com/pahimar/ee3/util/SerializationHelper.java +++ b/src/main/java/com/pahimar/ee3/util/SerializationHelper.java @@ -11,7 +11,6 @@ import com.pahimar.ee3.exchange.EnergyValueStackMapping; import com.pahimar.ee3.exchange.OreStack; import com.pahimar.ee3.exchange.WrappedStack; import com.pahimar.ee3.knowledge.PlayerKnowledge; -import com.pahimar.ee3.knowledge.TransmutationKnowledge; import com.pahimar.ee3.reference.Reference; import com.pahimar.ee3.util.serialize.*; import cpw.mods.fml.common.FMLCommonHandler; @@ -54,16 +53,6 @@ public class SerializationHelper { return instanceDataDirectory; } - /** - * Returns a File reference to the mod specific directory in the playerdata directory - * - * @return - */ - public static File getInstancePlayerDataDirectory() - { - return instancePlayerDataDirectory; - } - /** * TODO Move this to {@link com.pahimar.ee3.reference.Files} * @@ -78,67 +67,6 @@ public class SerializationHelper { instancePlayerDataDirectory.mkdirs(); } - public static TransmutationKnowledge readTransmutationKnowledgeFromFile(File directory, String fileName) - { - if (!directory.exists()) - { - directory.mkdirs(); - } - - return TransmutationKnowledge.readFromFile(new File(directory, fileName)); - } - - public static void writeTransmutationKnowledgeToFile(File directory, String fileName, TransmutationKnowledge transmutationKnowledge) - { - writeTransmutationKnowledgeToFile(directory, fileName, transmutationKnowledge, false); - } - - public static void writeTransmutationKnowledgeToFile(File directory, String fileName, TransmutationKnowledge transmutationKnowledge, boolean verboseLogging) - { - if (directory != null && fileName != null) - { - if (!directory.exists()) - { - directory.mkdirs(); - } - - if (transmutationKnowledge == null) - { - transmutationKnowledge = new TransmutationKnowledge(); - } - - try - { - File file1 = new File(directory, fileName + ".tmp"); - File file2 = new File(directory, fileName); - TransmutationKnowledge.writeToFile(file1, transmutationKnowledge); - - if (file2.exists()) - { - file2.delete(); - } - - file1.renameTo(file2); - - if (verboseLogging) - { - LogHelper.info("Successfully saved TransmutationKnowledge to file: {}", file2.getAbsolutePath()); - } - } - catch (Exception exception) - { - exception.printStackTrace(); - LogHelper.error("Failed to save TransmutationKnowledge to file: {}{}", directory.getAbsolutePath(), fileName); - } - } - } - - public static Map readEnergyValueStackMapFromJsonFile(String fileName) - { - File energyValuesDataDirectory = new File(FMLCommonHandler.instance().getMinecraftServerInstance().getEntityWorld().getSaveHandler().getWorldDirectory(), "data" + File.separator + Reference.LOWERCASE_MOD_ID + File.separator + "energyvalues"); - return readEnergyValueStackMapFromJsonFile(new File(energyValuesDataDirectory, fileName)); - } - public static Map readEnergyValueStackMapFromJsonFile(File jsonFile) { Map energyValueStackMap = new TreeMap(); @@ -170,12 +98,6 @@ public class SerializationHelper { return energyValueStackMap; } - public static void writeEnergyValueStackMapToJsonFile(String fileName, Map energyValueMap) - { - File energyValuesDataDirectory = new File(FMLCommonHandler.instance().getMinecraftServerInstance().getEntityWorld().getSaveHandler().getWorldDirectory(), "data" + File.separator + Reference.LOWERCASE_MOD_ID + File.separator + "energyvalues"); - writeEnergyValueStackMapToJsonFile(new File(energyValuesDataDirectory, fileName), energyValueMap); - } - public static void writeEnergyValueStackMapToJsonFile(File jsonFile, Map energyValueMap) { JsonWriter jsonWriter; diff --git a/src/main/java/com/pahimar/ee3/util/serialize/PlayerKnowledgeSerializer.java b/src/main/java/com/pahimar/ee3/util/serialize/PlayerKnowledgeSerializer.java index 6a60916b..d82834a7 100644 --- a/src/main/java/com/pahimar/ee3/util/serialize/PlayerKnowledgeSerializer.java +++ b/src/main/java/com/pahimar/ee3/util/serialize/PlayerKnowledgeSerializer.java @@ -3,16 +3,48 @@ package com.pahimar.ee3.util.serialize; import com.google.gson.*; import com.pahimar.ee3.exchange.WrappedStack; import com.pahimar.ee3.knowledge.PlayerKnowledge; +import com.pahimar.ee3.reference.Comparators; import net.minecraft.item.ItemStack; import java.lang.reflect.Type; +import java.util.Iterator; +import java.util.Set; +import java.util.TreeSet; public class PlayerKnowledgeSerializer implements JsonSerializer, JsonDeserializer { @Override public PlayerKnowledge deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - // FIXME Priority Number 1 - return null; + + Set knownItemStacks = new TreeSet<>(Comparators.ID_COMPARATOR); + + if (json.isJsonArray()) { + + JsonArray jsonArray = json.getAsJsonArray(); + Iterator jsonArrayIterator = jsonArray.iterator(); + + while (jsonArrayIterator.hasNext()) { + + JsonElement jsonElement = jsonArrayIterator.next(); + + if (jsonElement.isJsonObject()) { + + WrappedStack wrappedStack = null; + + try { + wrappedStack = context.deserialize(jsonElement, WrappedStack.class); + } + catch (JsonParseException e){ + } + + if (wrappedStack != null && wrappedStack.getWrappedObject() instanceof ItemStack) { + knownItemStacks.add((ItemStack) wrappedStack.getWrappedObject()); + } + } + } + } + + return new PlayerKnowledge(knownItemStacks); } @Override