diff --git a/book.xcf b/book.xcf new file mode 100644 index 00000000..f5eadf9a Binary files /dev/null and b/book.xcf differ diff --git a/src/main/java/com/minelittlepony/unicopia/enchanting/PageInstance.java b/src/main/java/com/minelittlepony/unicopia/enchanting/PageInstance.java index 8d1a4941..8218d066 100644 --- a/src/main/java/com/minelittlepony/unicopia/enchanting/PageInstance.java +++ b/src/main/java/com/minelittlepony/unicopia/enchanting/PageInstance.java @@ -12,6 +12,9 @@ class PageInstance implements IPage { int index; + @Nullable + ResourceLocation parent; + @Nonnull ResourceLocation name; @@ -27,6 +30,10 @@ class PageInstance implements IPage { PageInstance(ResourceLocation id, JsonObject json) { this.name = id; + if (json.has("parent")) { + parent = new ResourceLocation(json.get("parent").getAsString()); + } + if (json.has("state")) { state = PageState.of(json.get("state").getAsString()); } diff --git a/src/main/java/com/minelittlepony/unicopia/enchanting/Pages.java b/src/main/java/com/minelittlepony/unicopia/enchanting/Pages.java index 8b907a9c..fa1cb8b5 100644 --- a/src/main/java/com/minelittlepony/unicopia/enchanting/Pages.java +++ b/src/main/java/com/minelittlepony/unicopia/enchanting/Pages.java @@ -23,8 +23,8 @@ public class Pages { return instance; } - private final Map pages = Maps.newHashMap(); - private final List pagesByIndex = Lists.newArrayList(); + private final Map pages = Maps.newHashMap(); + private final List pagesByIndex = Lists.newArrayList(); private final Map conditionFactories = Maps.newHashMap(); @@ -41,10 +41,25 @@ public class Pages { pagesByIndex.clear(); assets.walk(); - int index = 0; - for (IPage ipage : pages.values()) { - ((PageInstance)ipage).index = index++; - pagesByIndex.add(ipage); + List names = Lists.newArrayList(); + + for (PageInstance page : pages.values()) { + if (page.parent != null) { + int i = names.indexOf(page.parent); + if (i != -1) { + names.add(i, page.name); + pagesByIndex.add(i, page); + + continue; + } + } + + names.add(page.name); + pagesByIndex.add(page); + } + + for (int i = 0; i < pagesByIndex.size(); i++) { + pagesByIndex.get(i).index = i; } } @@ -70,7 +85,7 @@ public class Pages { } public Stream getUnlockablePages(Predicate predicate) { - return pages.values().stream().filter(predicate); + return pages.values().stream().map(IPage.class::cast).filter(predicate); } public void triggerUnlockEvent(IPageOwner owner, IUnlockEvent event, @Nullable IPageUnlockListener unlockListener) { diff --git a/src/main/java/com/minelittlepony/unicopia/inventory/gui/ContainerSpellBook.java b/src/main/java/com/minelittlepony/unicopia/inventory/gui/ContainerSpellBook.java index 021535b8..74975949 100644 --- a/src/main/java/com/minelittlepony/unicopia/inventory/gui/ContainerSpellBook.java +++ b/src/main/java/com/minelittlepony/unicopia/inventory/gui/ContainerSpellBook.java @@ -60,12 +60,12 @@ public class ContainerSpellBook extends Container { } public void initCraftingSlots() { - addSlotToContainer(new SlotEnchanting(craftMatrix, 0, 180, 50)); - addSlotToContainer(new SlotEnchanting(craftMatrix, 1, 154, 94)); - addSlotToContainer(new SlotEnchanting(craftMatrix, 2, 180, 134)); - addSlotToContainer(new SlotEnchanting(craftMatrix, 3, 231, 120)); - addSlotToContainer(new SlotEnchanting(craftMatrix, 4, 232, 65)); - addSlotToContainer(resultSlot = new SlotEnchantingResult(listener, PlayerSpeciesList.instance().getPlayer(player), craftMatrix, craftResult, 0, 196, 92)); + addSlotToContainer(new SlotEnchanting(craftMatrix, 0, 175, 50)); + addSlotToContainer(new SlotEnchanting(craftMatrix, 1, 149, 94)); + addSlotToContainer(new SlotEnchanting(craftMatrix, 2, 175, 134)); + addSlotToContainer(new SlotEnchanting(craftMatrix, 3, 226, 120)); + addSlotToContainer(new SlotEnchanting(craftMatrix, 4, 227, 65)); + addSlotToContainer(resultSlot = new SlotEnchantingResult(listener, PlayerSpeciesList.instance().getPlayer(player), craftMatrix, craftResult, 0, 191, 92)); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/inventory/gui/GuiSpellBook.java b/src/main/java/com/minelittlepony/unicopia/inventory/gui/GuiSpellBook.java index cb98ff4a..1e88f740 100644 --- a/src/main/java/com/minelittlepony/unicopia/inventory/gui/GuiSpellBook.java +++ b/src/main/java/com/minelittlepony/unicopia/inventory/gui/GuiSpellBook.java @@ -112,10 +112,13 @@ public class GuiSpellBook extends GuiContainer implements IPageUnlockListener { if (slot instanceof SlotEnchanting) { GlStateManager.enableBlend(); GL11.glDisable(GL11.GL_ALPHA_TEST); + mc.getTextureManager().bindTexture(spellBookGuiTextures); drawModalRectWithCustomSizedTexture(slot.xPos - 1, slot.yPos - 1, 51, 223, 18, 18, 512, 256); + GL11.glEnable(GL11.GL_ALPHA_TEST); GlStateManager.disableBlend(); + return true; } return false; @@ -148,6 +151,9 @@ public class GuiSpellBook extends GuiContainer implements IPageUnlockListener { GlStateManager.enableBlend(); GL11.glDisable(GL11.GL_ALPHA_TEST); + mc.getTextureManager().bindTexture(spellBookGuiTextures); + drawModalRectWithCustomSizedTexture(left + 147, top + 49, 407, 2, 100, 101, 512, 256); + if (playerExtension.getPageState(currentIPage) != PageState.LOCKED) { ResourceLocation texture = currentIPage.getTexture(); @@ -163,9 +169,6 @@ public class GuiSpellBook extends GuiContainer implements IPageUnlockListener { } } - mc.getTextureManager().bindTexture(spellBookGuiTextures); - drawModalRectWithCustomSizedTexture(left + 152, top + 49, 407, 2, 100, 101, 512, 256); - GL11.glEnable(GL11.GL_ALPHA_TEST); GlStateManager.disableBlend(); } diff --git a/src/main/resources/assets/unicopia/pages/chapter_1_gems.json b/src/main/resources/assets/unicopia/pages/chapter_1_gems.json new file mode 100644 index 00000000..67a81c45 --- /dev/null +++ b/src/main/resources/assets/unicopia/pages/chapter_1_gems.json @@ -0,0 +1,9 @@ +{ + "parent": "unicopia:preface", + "texture": "unicopia:chapter_1_gems", + "state": "unread", + "conditions": { + "type": "unicopia:compound_condition", + "conditions": [] + } +} diff --git a/src/main/resources/assets/unicopia/textures/pages/chapter_1_gems.png b/src/main/resources/assets/unicopia/textures/pages/chapter_1_gems.png new file mode 100644 index 00000000..abb94396 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/pages/chapter_1_gems.png differ