diff --git a/src/main/java/com/pahimar/ee3/api/TransmutationKnowledgeRegistryProxy.java b/src/main/java/com/pahimar/ee3/api/TransmutationKnowledgeRegistryProxy.java index 751653ba..f70550ae 100644 --- a/src/main/java/com/pahimar/ee3/api/TransmutationKnowledgeRegistryProxy.java +++ b/src/main/java/com/pahimar/ee3/api/TransmutationKnowledgeRegistryProxy.java @@ -6,6 +6,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import java.util.Set; +import java.util.UUID; public class TransmutationKnowledgeRegistryProxy { @@ -21,6 +22,18 @@ public class TransmutationKnowledgeRegistryProxy return false; } + public static boolean doesPlayerKnow(UUID playerUUID, ItemStack itemStack) + { + init(); + + if (ee3Mod != null) + { + return EE3Wrapper.ee3mod.getTransmutationKnowledgeRegistry().doesPlayerKnow(playerUUID, itemStack); + } + + return false; + } + public static boolean canPlayerLearn(EntityPlayer entityPlayer, ItemStack itemStack) { init(); @@ -33,6 +46,18 @@ public class TransmutationKnowledgeRegistryProxy return false; } + public static boolean canPlayerLearn(UUID playerUUID, ItemStack itemStack) + { + init(); + + if (ee3Mod != null) + { + return EE3Wrapper.ee3mod.getTransmutationKnowledgeRegistry().canPlayerLearn(playerUUID, itemStack); + } + + return false; + } + public static Set getPlayerKnownTransmutations(EntityPlayer entityPlayer) { init(); @@ -45,6 +70,18 @@ public class TransmutationKnowledgeRegistryProxy return null; } + public static Set getPlayerKnownTransmutations(UUID playerUUID) + { + init(); + + if (ee3Mod != null) + { + return EE3Wrapper.ee3mod.getTransmutationKnowledgeRegistry().getPlayersKnownTransmutations(playerUUID); + } + + return null; + } + public static Set getPlayerKnownTransmutationsFilteredStartsWith(EntityPlayer entityPlayer, String filterString) { init(); @@ -57,6 +94,18 @@ public class TransmutationKnowledgeRegistryProxy return null; } + public static Set getPlayerKnownTransmutationsFilteredStartsWith(UUID playerUUID, String filterString) + { + init(); + + if (ee3Mod != null) + { + return EE3Wrapper.ee3mod.getTransmutationKnowledgeRegistry().getPlayersKnownTransmutationsFilteredStartsWith(playerUUID, filterString); + } + + return null; + } + public static Set getPlayerKnownTransmutationsFilteredContains(EntityPlayer entityPlayer, String filterString) { init(); @@ -69,6 +118,18 @@ public class TransmutationKnowledgeRegistryProxy return null; } + public static Set getPlayerKnownTransmutationsFilteredContains(UUID playerUUID, String filterString) + { + init(); + + if (ee3Mod != null) + { + return EE3Wrapper.ee3mod.getTransmutationKnowledgeRegistry().getPlayersKnownTransmutationsFilteredContains(playerUUID, filterString); + } + + return null; + } + public static void teachPlayer(EntityPlayer entityPlayer, ItemStack itemStack) { init(); @@ -79,6 +140,16 @@ public class TransmutationKnowledgeRegistryProxy } } + public static void teachPlayer(UUID playerUUID, ItemStack itemStack) + { + init(); + + if (ee3Mod != null) + { + EE3Wrapper.ee3mod.getTransmutationKnowledgeRegistry().teachPlayer(playerUUID, itemStack); + } + } + public static void teachPlayerEverything(EntityPlayer entityPlayer) { init(); @@ -89,6 +160,16 @@ public class TransmutationKnowledgeRegistryProxy } } + public static void teachPlayerEverything(UUID playerUUID) + { + init(); + + if (ee3Mod != null) + { + EE3Wrapper.ee3mod.getTransmutationKnowledgeRegistry().teachPlayerEverything(playerUUID); + } + } + public static void makePlayerForget(EntityPlayer entityPlayer, ItemStack itemStack) { init(); @@ -99,6 +180,16 @@ public class TransmutationKnowledgeRegistryProxy } } + public static void makePlayerForget(UUID playerUUID, ItemStack itemStack) + { + init(); + + if (ee3Mod != null) + { + EE3Wrapper.ee3mod.getTransmutationKnowledgeRegistry().makePlayerForget(playerUUID, itemStack); + } + } + public static void makePlayerForgetEverything(EntityPlayer entityPlayer) { init(); @@ -109,6 +200,16 @@ public class TransmutationKnowledgeRegistryProxy } } + public static void makePlayerForgetEverything(UUID playerUUID) + { + init(); + + if (ee3Mod != null) + { + EE3Wrapper.ee3mod.getTransmutationKnowledgeRegistry().makePlayerForgetEverything(playerUUID); + } + } + public static boolean doesTemplateKnow(ItemStack itemStack) { init(); diff --git a/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiResearchStation.java b/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiResearchStation.java index ca16b6bd..55d2f774 100644 --- a/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiResearchStation.java +++ b/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiResearchStation.java @@ -33,7 +33,19 @@ public class GuiResearchStation extends GuiContainer int yStart = (height - ySize) / 2; this.drawTexturedModalRect(xStart, yStart, 0, 0, xSize, ySize); - int scaleAdjustment = this.tileEntityResearchStation.getLearnProgressScaled(42); - this.drawTexturedModalRect(xStart + 107, yStart + 87, 0, 236, scaleAdjustment, 16); + if (this.tileEntityResearchStation.isItemKnown) + { + this.mc.getTextureManager().bindTexture(Textures.Gui.RESEARCH_STATION_GYLPH_1); + this.drawTexturedModalRect(xStart, yStart, 0, 0, xSize, ySize); + } + else + { + int arrowScaleAdjustment = this.tileEntityResearchStation.getLearnProgressScaled(42); + this.drawTexturedModalRect(xStart + 107, yStart + 87, 0, 236, arrowScaleAdjustment, 16); + + int scaleAdjustment = this.tileEntityResearchStation.getLearnProgressScaled(80); + this.mc.getTextureManager().bindTexture(Textures.Gui.RESEARCH_STATION_GYLPH_1); + this.drawTexturedModalRect(xStart, yStart, 0, 0, xSize, (ySize * scaleAdjustment) / 100); + } } } diff --git a/src/main/java/com/pahimar/ee3/inventory/ContainerResearchStation.java b/src/main/java/com/pahimar/ee3/inventory/ContainerResearchStation.java index 1a0836bf..291f1ea0 100644 --- a/src/main/java/com/pahimar/ee3/inventory/ContainerResearchStation.java +++ b/src/main/java/com/pahimar/ee3/inventory/ContainerResearchStation.java @@ -1,5 +1,7 @@ package com.pahimar.ee3.inventory; +import com.pahimar.ee3.item.ItemAlchemicalTome; +import com.pahimar.ee3.knowledge.AbilityRegistry; import com.pahimar.ee3.tileentity.TileEntityResearchStation; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -13,21 +15,43 @@ public class ContainerResearchStation extends ContainerEE { private TileEntityResearchStation tileEntityResearchStation; private int lastItemLearnTime; + private boolean isItemStackKnown; public ContainerResearchStation(InventoryPlayer inventoryPlayer, TileEntityResearchStation tileEntityResearchStation) { this.tileEntityResearchStation = tileEntityResearchStation; - this.addSlotToContainer(new Slot(tileEntityResearchStation, TileEntityResearchStation.ITEM_SLOT_INVENTORY_INDEX, 122, 84) + this.addSlotToContainer(new Slot(tileEntityResearchStation, TileEntityResearchStation.ITEM_SLOT_INVENTORY_INDEX, 79, 84) { @Override public int getSlotStackLimit() { return 1; } + + @Override + public boolean isItemValid(ItemStack itemStack) + { + return AbilityRegistry.getInstance().isLearnable(itemStack); + } }); - // Add the player's inventory slots to the container + this.addSlotToContainer(new Slot(tileEntityResearchStation, TileEntityResearchStation.TOME_SLOT_INVENTORY_INDEX, 161, 84) + { + @Override + public int getSlotStackLimit() + { + return 1; + } + + @Override + public boolean isItemValid(ItemStack itemStack) + { + return itemStack.getItem() instanceof ItemAlchemicalTome; + } + }); + + // Add the entityPlayer's inventory slots to the container for (int inventoryRowIndex = 0; inventoryRowIndex < PLAYER_INVENTORY_ROWS; ++inventoryRowIndex) { for (int inventoryColumnIndex = 0; inventoryColumnIndex < PLAYER_INVENTORY_COLUMNS; ++inventoryColumnIndex) @@ -36,7 +60,7 @@ public class ContainerResearchStation extends ContainerEE } } - // Add the player's action bar slots to the container + // Add the entityPlayer's action bar slots to the container for (int actionBarSlotIndex = 0; actionBarSlotIndex < PLAYER_INVENTORY_COLUMNS; ++actionBarSlotIndex) { this.addSlotToContainer(new Slot(inventoryPlayer, actionBarSlotIndex, 50 + actionBarSlotIndex * 18, 210)); @@ -48,6 +72,14 @@ public class ContainerResearchStation extends ContainerEE { super.addCraftingToCrafters(iCrafting); iCrafting.sendProgressBarUpdate(this, 0, this.tileEntityResearchStation.itemLearnTime); + if (this.tileEntityResearchStation.isItemKnown) + { + iCrafting.sendProgressBarUpdate(this, 1, 1); + } + else + { + iCrafting.sendProgressBarUpdate(this, 1, 0); + } } @Override @@ -57,15 +89,28 @@ public class ContainerResearchStation extends ContainerEE for (Object crafter : this.crafters) { - ICrafting icrafting = (ICrafting) crafter; + ICrafting iCrafting = (ICrafting) crafter; if (this.lastItemLearnTime != this.tileEntityResearchStation.itemLearnTime) { - icrafting.sendProgressBarUpdate(this, 0, this.tileEntityResearchStation.itemLearnTime); + iCrafting.sendProgressBarUpdate(this, 0, this.tileEntityResearchStation.itemLearnTime); + } + + if (this.isItemStackKnown != this.tileEntityResearchStation.isItemKnown) + { + if (this.tileEntityResearchStation.isItemKnown) + { + iCrafting.sendProgressBarUpdate(this, 1, 1); + } + else + { + iCrafting.sendProgressBarUpdate(this, 1, 0); + } } } this.lastItemLearnTime = this.tileEntityResearchStation.itemLearnTime; + this.isItemStackKnown = this.tileEntityResearchStation.isItemKnown; } @SideOnly(Side.CLIENT) @@ -75,6 +120,17 @@ public class ContainerResearchStation extends ContainerEE { this.tileEntityResearchStation.itemLearnTime = updatedValue; } + else if (valueType == 1) + { + if (updatedValue == 1) + { + this.tileEntityResearchStation.isItemKnown = true; + } + else + { + this.tileEntityResearchStation.isItemKnown = false; + } + } } @Override @@ -90,7 +146,7 @@ public class ContainerResearchStation extends ContainerEE /** * If we are shift-clicking an item out of the Research Table's container, - * attempt to put it in the first available slot in the player's + * attempt to put it in the first available slot in the entityPlayer's * inventory */ if (slotIndex < TileEntityResearchStation.INVENTORY_SIZE) @@ -102,9 +158,25 @@ public class ContainerResearchStation extends ContainerEE } else { - if (!this.mergeItemStack(slotItemStack, TileEntityResearchStation.ITEM_SLOT_INVENTORY_INDEX, TileEntityResearchStation.INVENTORY_SIZE, false)) + /** + * If the stack being shift-clicked into the Research Table's container + * is a fuel, first try to put it in the fuel slot. If it cannot + * be merged into the fuel slot, try to put it in the input + * slot. + */ + if (slotItemStack.getItem() instanceof ItemAlchemicalTome) { - return null; + if (!this.mergeItemStack(slotItemStack, TileEntityResearchStation.TOME_SLOT_INVENTORY_INDEX, TileEntityResearchStation.INVENTORY_SIZE, false)) + { + return null; + } + } + else + { + if (!this.mergeItemStack(slotItemStack, TileEntityResearchStation.ITEM_SLOT_INVENTORY_INDEX, TileEntityResearchStation.TOME_SLOT_INVENTORY_INDEX, false)) + { + return null; + } } } diff --git a/src/main/java/com/pahimar/ee3/item/ItemAlchemicalTome.java b/src/main/java/com/pahimar/ee3/item/ItemAlchemicalTome.java index 21e20565..063ab24b 100644 --- a/src/main/java/com/pahimar/ee3/item/ItemAlchemicalTome.java +++ b/src/main/java/com/pahimar/ee3/item/ItemAlchemicalTome.java @@ -29,7 +29,10 @@ public class ItemAlchemicalTome extends ItemEE implements IOwnable if (!world.isRemote) { // Set the owner - ItemHelper.setOwner(itemStack, entityPlayer); + if (!ItemHelper.hasOwner(itemStack)) + { + ItemHelper.setOwner(itemStack, entityPlayer); + } } else { diff --git a/src/main/java/com/pahimar/ee3/knowledge/AbilityRegistry.java b/src/main/java/com/pahimar/ee3/knowledge/AbilityRegistry.java index 32806568..a724b1c0 100644 --- a/src/main/java/com/pahimar/ee3/knowledge/AbilityRegistry.java +++ b/src/main/java/com/pahimar/ee3/knowledge/AbilityRegistry.java @@ -3,6 +3,7 @@ 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.WrappedStack; import com.pahimar.ee3.reference.Files; import com.pahimar.ee3.util.SerializationHelper; @@ -25,9 +26,6 @@ public class AbilityRegistry implements JsonSerializer, JsonDes private AbilityRegistry() { - // abilityDirectory = new File(SerializationHelper.getDataDirectory(), "abilities"); - // abilityDirectory.mkdirs(); - hasBeenModified = false; notLearnableSet = new TreeSet(); notRecoverableSet = new TreeSet(); @@ -60,7 +58,7 @@ public class AbilityRegistry implements JsonSerializer, JsonDes if (WrappedStack.canBeWrapped(object)) { WrappedStack wrappedObject = new WrappedStack(object); - return !notLearnableSet.contains(wrappedObject); + return !notLearnableSet.contains(wrappedObject) && EnergyValueRegistry.getInstance().hasEnergyValue(wrappedObject); } return false; @@ -91,7 +89,8 @@ public class AbilityRegistry implements JsonSerializer, JsonDes { if (WrappedStack.canBeWrapped(object)) { - return !notRecoverableSet.contains(new WrappedStack(object)); + WrappedStack wrappedObject = new WrappedStack(object); + return !notRecoverableSet.contains(wrappedObject) && EnergyValueRegistry.getInstance().hasEnergyValue(wrappedObject); } return false; diff --git a/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledgeRegistry.java b/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledgeRegistry.java index 52329dcc..5211864e 100644 --- a/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledgeRegistry.java +++ b/src/main/java/com/pahimar/ee3/knowledge/TransmutationKnowledgeRegistry.java @@ -169,11 +169,21 @@ public class TransmutationKnowledgeRegistry { if (entityPlayer != null) { - loadPlayerFromDiskIfNeeded(entityPlayer); + return getPlayersKnownTransmutations(entityPlayer.getUniqueID()); + } - if (playerKnowledgeMap.containsKey(entityPlayer.getUniqueID())) + return null; + } + + public Set getPlayersKnownTransmutations(UUID playerUUID) + { + if (playerUUID != null) + { + loadPlayerFromDiskIfNeeded(playerUUID); + + if (playerKnowledgeMap.containsKey(playerUUID)) { - return playerKnowledgeMap.get(entityPlayer.getUniqueID()).getKnownTransmutations(); + return playerKnowledgeMap.get(playerUUID).getKnownTransmutations(); } } @@ -184,11 +194,21 @@ public class TransmutationKnowledgeRegistry { if (entityPlayer != null) { - loadPlayerFromDiskIfNeeded(entityPlayer); + return getPlayersKnownTransmutationsFilteredStartsWith(entityPlayer.getUniqueID(), startsWith); + } - if (playerKnowledgeMap.containsKey(entityPlayer.getUniqueID())) + return null; + } + + public Set getPlayersKnownTransmutationsFilteredStartsWith(UUID playerUUID, String startsWith) + { + if (playerUUID != null) + { + loadPlayerFromDiskIfNeeded(playerUUID); + + if (playerKnowledgeMap.containsKey(playerUUID)) { - return playerKnowledgeMap.get(entityPlayer.getUniqueID()).filterByNameStartsWith(startsWith); + return playerKnowledgeMap.get(playerUUID).filterByNameStartsWith(startsWith); } } @@ -199,11 +219,21 @@ public class TransmutationKnowledgeRegistry { if (entityPlayer != null) { - loadPlayerFromDiskIfNeeded(entityPlayer); + return getPlayersKnownTransmutationsFilteredContains(entityPlayer.getUniqueID(), contains); + } - if (playerKnowledgeMap.containsKey(entityPlayer.getUniqueID())) + return null; + } + + public Set getPlayersKnownTransmutationsFilteredContains(UUID playerUUID, String contains) + { + if (playerUUID != null) + { + loadPlayerFromDiskIfNeeded(playerUUID); + + if (playerKnowledgeMap.containsKey(playerUUID)) { - return playerKnowledgeMap.get(entityPlayer.getUniqueID()).filterByNameContains(contains); + return playerKnowledgeMap.get(playerUUID).filterByNameContains(contains); } } @@ -225,17 +255,42 @@ public class TransmutationKnowledgeRegistry 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 && itemStack != null) + 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(entityPlayer); + loadPlayerFromDiskIfNeeded(playerUUID); - if (playerKnowledgeMap.containsKey(entityPlayer.getUniqueID())) + if (playerKnowledgeMap.containsKey(playerUUID)) { - return !playerKnowledgeMap.get(entityPlayer.getUniqueID()).isKnown(itemStack); + return !playerKnowledgeMap.get(playerUUID).isKnown(itemStack); } } } @@ -245,12 +300,21 @@ public class TransmutationKnowledgeRegistry public void teachPlayer(EntityPlayer entityPlayer, ItemStack itemStack) { - if (entityPlayer != null && itemStack != null && canPlayerLearn(entityPlayer, itemStack)) + if (entityPlayer != null) { - loadPlayerFromDiskIfNeeded(entityPlayer); - if (playerKnowledgeMap.containsKey(entityPlayer.getUniqueID())) + 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)) { - playerKnowledgeMap.get(entityPlayer.getUniqueID()).learnTransmutation(itemStack); + playerKnowledgeMap.get(playerUUID).learnTransmutation(itemStack); + savePlayerKnowledgeToDisk(playerUUID); } } } @@ -259,11 +323,20 @@ public class TransmutationKnowledgeRegistry { if (entityPlayer != null) { - loadPlayerFromDiskIfNeeded(entityPlayer); + teachPlayerEverything(entityPlayer.getUniqueID()); + } + } - if (playerKnowledgeMap.containsKey(entityPlayer.getUniqueID())) + public void teachPlayerEverything(UUID playerUUID) + { + if (playerUUID != null) + { + loadPlayerFromDiskIfNeeded(playerUUID); + + if (playerKnowledgeMap.containsKey(playerUUID)) { - playerKnowledgeMap.get(entityPlayer.getUniqueID()).setCanTransmuteEverything(true); + playerKnowledgeMap.get(playerUUID).setCanTransmuteEverything(true); + savePlayerKnowledgeToDisk(playerUUID); } } } @@ -272,22 +345,40 @@ public class TransmutationKnowledgeRegistry { if (entityPlayer != null) { - loadPlayerFromDiskIfNeeded(entityPlayer); - if (playerKnowledgeMap.containsKey(entityPlayer.getUniqueID())) + setPlayerCanTransmuteEverything(entityPlayer.getUniqueID(), canTransmuteEverything); + } + } + + public void setPlayerCanTransmuteEverything(UUID playerUUID, boolean canTransmuteEverything) + { + if (playerUUID != null) + { + loadPlayerFromDiskIfNeeded(playerUUID); + if (playerKnowledgeMap.containsKey(playerUUID)) { - playerKnowledgeMap.get(entityPlayer.getUniqueID()).setCanTransmuteEverything(canTransmuteEverything); + playerKnowledgeMap.get(playerUUID).setCanTransmuteEverything(canTransmuteEverything); + savePlayerKnowledgeToDisk(playerUUID); } } } public void makePlayerForget(EntityPlayer entityPlayer, ItemStack itemStack) { - if (entityPlayer != null && itemStack != null && doesPlayerKnow(entityPlayer, itemStack)) + if (entityPlayer != null) { - loadPlayerFromDiskIfNeeded(entityPlayer); - if (playerKnowledgeMap.containsKey(entityPlayer.getUniqueID())) + 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)) { - playerKnowledgeMap.get(entityPlayer.getUniqueID()).forgetTransmutation(itemStack); + playerKnowledgeMap.get(playerUUID).forgetTransmutation(itemStack); + savePlayerKnowledgeToDisk(playerUUID); } } } @@ -296,10 +387,19 @@ public class TransmutationKnowledgeRegistry { if (entityPlayer != null) { - loadPlayerFromDiskIfNeeded(entityPlayer); - if (playerKnowledgeMap.containsKey(entityPlayer.getUniqueID())) + makePlayerForgetEverything(entityPlayer.getUniqueID()); + } + } + + public void makePlayerForgetEverything(UUID playerUUID) + { + if (playerUUID != null) + { + loadPlayerFromDiskIfNeeded(playerUUID); + if (playerKnowledgeMap.containsKey(playerUUID)) { - playerKnowledgeMap.get(entityPlayer.getUniqueID()).forgetAllTransmutations(); + playerKnowledgeMap.get(playerUUID).forgetAllTransmutations(); + savePlayerKnowledgeToDisk(playerUUID); } } } @@ -349,48 +449,72 @@ public class TransmutationKnowledgeRegistry public void loadPlayerFromDiskIfNeeded(EntityPlayer entityPlayer) { - if (entityPlayer != null && entityPlayer.getUniqueID() != null && playerKnowledgeDirectory != null) + if (entityPlayer != null && entityPlayer.getUniqueID() != null) { - if (!playerKnowledgeMap.containsKey(entityPlayer.getUniqueID())) + 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()) { - TransmutationKnowledge playerTransmutationKnowledge = new TransmutationKnowledge(); - - File playerKnowledgeFile = new File(playerKnowledgeDirectory, entityPlayer.getUniqueID().toString() + ".json"); - - if (playerKnowledgeFile.exists() && playerKnowledgeFile.isFile()) - { - playerTransmutationKnowledge = SerializationHelper.readTransmutationKnowledgeFromFile(playerKnowledgeDirectory, entityPlayer.getUniqueID().toString() + ".json"); - } - - playerKnowledgeMap.put(entityPlayer.getUniqueID(), playerTransmutationKnowledge); + playerTransmutationKnowledge = SerializationHelper.readTransmutationKnowledgeFromFile(playerKnowledgeDirectory, playerUUID.toString() + ".json"); } + + playerKnowledgeMap.put(playerUUID, playerTransmutationKnowledge); } } public void unloadPlayer(EntityPlayer entityPlayer) { - if (entityPlayer != null && entityPlayer.getUniqueID() != null) + if (entityPlayer != null) { - if (playerKnowledgeMap.containsKey(entityPlayer.getUniqueID())) + unloadPlayer(entityPlayer.getUniqueID()); + } + } + + public void unloadPlayer(UUID playerUUID) + { + if (playerUUID != null) + { + if (playerKnowledgeMap.containsKey(playerUUID)) { - savePlayerKnowledgeToDisk(entityPlayer); - playerKnowledgeMap.remove(entityPlayer.getUniqueID()); + savePlayerKnowledgeToDisk(playerUUID); + playerKnowledgeMap.remove(playerUUID); } } } public void savePlayerKnowledgeToDisk(EntityPlayer entityPlayer) { - if (entityPlayer != null && entityPlayer.getUniqueID() != null && playerKnowledgeDirectory != null) + if (entityPlayer != null && entityPlayer.getUniqueID() != null) { - if (playerKnowledgeMap.containsKey(entityPlayer.getUniqueID()) && playerKnowledgeMap.get(entityPlayer.getUniqueID()) != null && playerKnowledgeMap.get(entityPlayer.getUniqueID()).hasBeenModified()) + savePlayerKnowledgeToDisk(entityPlayer.getUniqueID()); + } + } + + public void savePlayerKnowledgeToDisk(UUID playerUUID) + { + if (playerUUID != null && playerKnowledgeDirectory != null) + { + if (playerKnowledgeMap.containsKey(playerUUID) && playerKnowledgeMap.get(playerUUID) != null) { - SerializationHelper.writeTransmutationKnowledgeToFile(playerKnowledgeDirectory, entityPlayer.getUniqueID().toString() + ".json", playerKnowledgeMap.get(entityPlayer.getUniqueID())); + if (playerKnowledgeMap.get(playerUUID).hasBeenModified()) + { + SerializationHelper.writeTransmutationKnowledgeToFile(playerKnowledgeDirectory, playerUUID.toString() + ".json", playerKnowledgeMap.get(playerUUID)); + } } else { - loadPlayerFromDiskIfNeeded(entityPlayer); - SerializationHelper.writeTransmutationKnowledgeToFile(playerKnowledgeDirectory, entityPlayer.getUniqueID().toString() + ".json", new TransmutationKnowledge()); + loadPlayerFromDiskIfNeeded(playerUUID); + SerializationHelper.writeTransmutationKnowledgeToFile(playerKnowledgeDirectory, playerUUID.toString() + ".json", new TransmutationKnowledge()); } } } diff --git a/src/main/java/com/pahimar/ee3/reference/Textures.java b/src/main/java/com/pahimar/ee3/reference/Textures.java index a1f4dd74..fe0eaa73 100644 --- a/src/main/java/com/pahimar/ee3/reference/Textures.java +++ b/src/main/java/com/pahimar/ee3/reference/Textures.java @@ -39,6 +39,8 @@ public final class Textures public static final ResourceLocation ALCHEMICAL_CHEST_LARGE = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "alchemicalChest_large.png"); public static final ResourceLocation GLASS_BELL = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "glassBell.png"); public static final ResourceLocation RESEARCH_STATION = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "researchStation.png"); + public static final ResourceLocation RESEARCH_STATION_GYLPH_1 = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "researchStation_Glyph1.png"); + public static final ResourceLocation RESEARCH_STATION_GYLPH_2 = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "researchStation_Glyph2.png"); public static final ResourceLocation AUGMENTATION_TABLE = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "augmentationTable.png"); public static final ResourceLocation PORTABLE_CRAFTING = new ResourceLocation("textures/gui/container/crafting_table.png"); public static final ResourceLocation ALCHEMICAL_TOME = ResourceLocationHelper.getResourceLocation(GUI_SHEET_LOCATION + "alchemicalTome.png"); diff --git a/src/main/java/com/pahimar/ee3/tileentity/TileEntityResearchStation.java b/src/main/java/com/pahimar/ee3/tileentity/TileEntityResearchStation.java index c76b1636..800d6568 100644 --- a/src/main/java/com/pahimar/ee3/tileentity/TileEntityResearchStation.java +++ b/src/main/java/com/pahimar/ee3/tileentity/TileEntityResearchStation.java @@ -1,6 +1,9 @@ package com.pahimar.ee3.tileentity; +import com.pahimar.ee3.knowledge.AbilityRegistry; +import com.pahimar.ee3.knowledge.TransmutationKnowledgeRegistry; import com.pahimar.ee3.reference.Names; +import com.pahimar.ee3.util.ItemHelper; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; @@ -9,12 +12,16 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import java.util.UUID; + public class TileEntityResearchStation extends TileEntityEE implements IInventory { - public static final int INVENTORY_SIZE = 1; + public static final int INVENTORY_SIZE = 2; public static final int ITEM_SLOT_INVENTORY_INDEX = 0; + public static final int TOME_SLOT_INVENTORY_INDEX = 1; public int itemLearnTime; + public boolean isItemKnown; private ItemStack[] inventory; public TileEntityResearchStation() @@ -117,7 +124,7 @@ public class TileEntityResearchStation extends TileEntityEE implements IInventor @Override public boolean isItemValidForSlot(int slotIndex, ItemStack itemStack) { - return false; + return slotIndex == ITEM_SLOT_INVENTORY_INDEX && AbilityRegistry.getInstance().isLearnable(itemStack); } @Override @@ -187,12 +194,34 @@ public class TileEntityResearchStation extends TileEntityEE implements IInventor { this.itemLearnTime = 0; } + + isItemKnown = isItemStackKnown(); } } private boolean canLearnItemStack() { - // return ItemTransmutationKnowledgeHelper.canLearnItemStack(inventory[ITEM_SLOT_INVENTORY_INDEX], inventory[TOME_SLOT_INVENTORY_INDEX]); + ItemStack alchemicalTome = inventory[TOME_SLOT_INVENTORY_INDEX]; + UUID playerUUID = ItemHelper.getOwnerUUID(alchemicalTome); + + if (alchemicalTome != null && playerUUID != null) + { + return TransmutationKnowledgeRegistry.getInstance().canPlayerLearn(playerUUID, inventory[ITEM_SLOT_INVENTORY_INDEX]); + } + + return false; + } + + private boolean isItemStackKnown() + { + ItemStack alchemicalTome = inventory[TOME_SLOT_INVENTORY_INDEX]; + UUID playerUUID = ItemHelper.getOwnerUUID(alchemicalTome); + + if (alchemicalTome != null && playerUUID != null) + { + return TransmutationKnowledgeRegistry.getInstance().doesPlayerKnow(playerUUID, inventory[ITEM_SLOT_INVENTORY_INDEX]); + } + return false; } @@ -200,16 +229,14 @@ public class TileEntityResearchStation extends TileEntityEE implements IInventor { if (this.canLearnItemStack()) { - // PlayerKnowledge playerKnowledge = PlayerKnowledge.readPlayerKnowledgeFromNBT(this.inventory[TOME_SLOT_INVENTORY_INDEX].getTagCompound()); - // playerKnowledge.learnTransmutation(this.inventory[ITEM_SLOT_INVENTORY_INDEX]); - // playerKnowledge.writeToNBT(this.inventory[TOME_SLOT_INVENTORY_INDEX].getTagCompound()); - // - // this.inventory[ITEM_SLOT_INVENTORY_INDEX].stackSize--; - // - // if (this.inventory[ITEM_SLOT_INVENTORY_INDEX].stackSize <= 0) - // { - // this.inventory[ITEM_SLOT_INVENTORY_INDEX] = null; - // } + TransmutationKnowledgeRegistry.getInstance().teachPlayer(ItemHelper.getOwnerUUID(inventory[TOME_SLOT_INVENTORY_INDEX]), inventory[ITEM_SLOT_INVENTORY_INDEX]); + + this.inventory[ITEM_SLOT_INVENTORY_INDEX].stackSize--; + + if (this.inventory[ITEM_SLOT_INVENTORY_INDEX].stackSize <= 0) + { + this.inventory[ITEM_SLOT_INVENTORY_INDEX] = null; + } } } } diff --git a/src/main/resources/assets/ee3/textures/gui/elements/longArrowRight.png b/src/main/resources/assets/ee3/textures/gui/elements/longArrowRight.png new file mode 100644 index 00000000..4a0de6bc Binary files /dev/null and b/src/main/resources/assets/ee3/textures/gui/elements/longArrowRight.png differ diff --git a/src/main/resources/assets/ee3/textures/gui/researchStation.png b/src/main/resources/assets/ee3/textures/gui/researchStation.png index 2286adb0..d46dfbc7 100644 Binary files a/src/main/resources/assets/ee3/textures/gui/researchStation.png and b/src/main/resources/assets/ee3/textures/gui/researchStation.png differ diff --git a/src/main/resources/assets/ee3/textures/gui/researchStation_Glyph1.png b/src/main/resources/assets/ee3/textures/gui/researchStation_Glyph1.png new file mode 100644 index 00000000..49f929d3 Binary files /dev/null and b/src/main/resources/assets/ee3/textures/gui/researchStation_Glyph1.png differ diff --git a/src/main/resources/assets/ee3/textures/gui/researchStation_Glyph2.png b/src/main/resources/assets/ee3/textures/gui/researchStation_Glyph2.png new file mode 100644 index 00000000..5cc7c642 Binary files /dev/null and b/src/main/resources/assets/ee3/textures/gui/researchStation_Glyph2.png differ diff --git a/src/main/resources/assets/ee3/textures/xcf/gui/elements/longArrowRight.xcf b/src/main/resources/assets/ee3/textures/xcf/gui/elements/longArrowRight.xcf new file mode 100644 index 00000000..fb308ffa Binary files /dev/null and b/src/main/resources/assets/ee3/textures/xcf/gui/elements/longArrowRight.xcf differ diff --git a/src/main/resources/assets/ee3/textures/xcf/gui/researchStation.xcf b/src/main/resources/assets/ee3/textures/xcf/gui/researchStation.xcf index 307ad9f5..ac23924b 100644 Binary files a/src/main/resources/assets/ee3/textures/xcf/gui/researchStation.xcf and b/src/main/resources/assets/ee3/textures/xcf/gui/researchStation.xcf differ