Skip to content

Commit

Permalink
Use Predicate<T> instead of creating a new interface that extends it.…
Browse files Browse the repository at this point in the history
… Fix tooltips.

See https://gist.github.com/gigaherz/7efeb2c17b05c179b970e4e0d3727714 for an example of the new pagination and conditions stuff.
  • Loading branch information
gigaherz committed Jun 4, 2018
1 parent 59a17f4 commit 4662a56
Show file tree
Hide file tree
Showing 26 changed files with 410 additions and 142 deletions.
204 changes: 146 additions & 58 deletions src/main/java/gigaherz/guidebook/guidebook/BookDocument.java

Large diffs are not rendered by default.

10 changes: 10 additions & 0 deletions src/main/java/gigaherz/guidebook/guidebook/IConditionSource.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package gigaherz.guidebook.guidebook;

import gigaherz.guidebook.guidebook.conditions.ConditionContext;

import java.util.function.Predicate;

public interface IConditionSource
{
Predicate<ConditionContext> getCondition(String name);
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public static BookDocument get(ResourceLocation loc)
public static void parseAllBooks(IResourceManager manager)
{
// Reload recipe caches
for(RecipeProvider recipeProvider : RecipeProvider.registry.getValues())
for(RecipeProvider recipeProvider : RecipeProvider.registry.getValuesCollection())
{
recipeProvider.reloadCache();
}
Expand All @@ -67,7 +67,7 @@ public static void parseAllBooks(IResourceManager manager)

for (IResource res : resources)
{
loadBooksData(toLoad, res.getInputStream());
loadBooksData(toLoad, res);
}
}
catch (FileNotFoundException e)
Expand Down Expand Up @@ -95,10 +95,13 @@ public static void parseAllBooks(IResourceManager manager)

private static Type listType = new TypeToken<List<String>>() {}.getType();

private static void loadBooksData(Set<ResourceLocation> toLoad, InputStream stream)
private static void loadBooksData(Set<ResourceLocation> toLoad, IResource resource) throws IOException
{
List<String> yourList = new Gson().fromJson(new InputStreamReader(stream), listType);
toLoad.addAll(yourList.stream().map(ResourceLocation::new).collect(Collectors.toList()));
try (InputStream stream = resource.getInputStream())
{
List<String> yourList = new Gson().fromJson(new InputStreamReader(stream), listType);
toLoad.addAll(yourList.stream().map(ResourceLocation::new).collect(Collectors.toList()));
}
}

@Nullable
Expand All @@ -108,9 +111,11 @@ private static BookDocument parseBook(IResourceManager manager, ResourceLocation
try
{
IResource res = manager.getResource(bookDocument.getBookLocation());
InputStream stream = res.getInputStream();
if (!bookDocument.parseBook(stream))
return null;
try (InputStream stream = res.getInputStream())
{
if (!bookDocument.parseBook(stream))
return null;
}
}
catch (IOException e)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package gigaherz.guidebook.guidebook.client;

import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import gigaherz.guidebook.GuidebookMod;
import gigaherz.guidebook.guidebook.*;
import gigaherz.guidebook.guidebook.conditions.ConditionContext;
import gigaherz.guidebook.guidebook.drawing.*;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
Expand All @@ -19,7 +19,6 @@

import javax.annotation.Nullable;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;

public class BookRendering implements IBookGraphics
Expand Down Expand Up @@ -62,15 +61,8 @@ public PageRef(int currentChapter, int currentPage)
}
}

private class VisualChapter
{
public final List<VisualPage> pages = Lists.newArrayList();
public final Map<String, Integer> pagesByName = Maps.newHashMap();
public int startPair;
public int totalPairs;
}

final List<VisualChapter> chapters = Lists.newArrayList();
private int lastProcessedChapter = 0;

final java.util.Stack<PageRef> history = new java.util.Stack<>();
private int currentChapter = 0;
Expand Down Expand Up @@ -331,30 +323,33 @@ public boolean mouseClicked(int mouseButton)

private VisualChapter getVisualChapter(int chapter)
{
while (chapters.size() <= chapter && chapters.size() < book.chapterCount())
while (chapters.size() <= chapter && lastProcessedChapter < book.chapterCount())
{
BookDocument.ChapterData bc = book.getChapter(lastProcessedChapter++);
if (!bc.conditionResult)
continue;

VisualChapter ch = new VisualChapter();
if (chapters.size() > 0)
{
VisualChapter prev = chapters.get(chapters.size() - 1);
ch.startPair = prev.startPair + prev.totalPairs;
}

BookDocument.SectionData bc = book.getChapter(chapters.size());

Size pageSize = new Size(pageWidth, pageHeight);
for(BookDocument.PageData section : bc.sections)
{
if(!Strings.isNullOrEmpty(section.id))
ch.pagesByName.put(section.id, ch.pages.size());

ch.pages.addAll(section.reflow(pageSize,ch.pages.size()));
}
bc.reflow(ch, pageSize);

ch.totalPairs = (ch.pages.size()+1)/2;
chapters.add(ch);
}

if (chapter >= chapters.size())
{
VisualChapter vc = new VisualChapter();
vc.pages.add(new VisualPage());
return vc;
}

return chapters.get(chapter);
}

Expand Down Expand Up @@ -427,11 +422,11 @@ private VisualElement mouseHoverPage(VisualPage pg, boolean isLeftPage)

for (VisualElement e : pg.children)
{
if (e.wantsHover() &&
mX >= e.position.x && mX <= (e.position.x + e.size.width) &&
if (mX >= e.position.x && mX <= (e.position.x + e.size.width) &&
mY >= e.position.y && mY <= (e.position.y + e.size.height))
{
return e;
if (e.wantsHover())
return e;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
import gigaherz.guidebook.GuidebookMod;
import gigaherz.guidebook.guidebook.BookDocument;
import gigaherz.guidebook.guidebook.IBookGraphics;
import gigaherz.guidebook.guidebook.conditions.ConditionContext;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.ItemModelMesher;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
Expand Down Expand Up @@ -52,9 +54,14 @@ public boolean doesGuiPauseGame()
@Override
public void initGui()
{
EntityPlayer player = Minecraft.getMinecraft().player;
ConditionContext conditionContext = new ConditionContext();
conditionContext.setPlayer(player);

BookDocument theBook = BookRegistry.get(bookLocation);
book = theBook.getRendering();
if (book == null)
boolean conditions = theBook.reevaluateConditions(conditionContext);
if (book == null || conditions)
{
book = new BookRendering(theBook, this);
theBook.setRendering(book);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import gigaherz.guidebook.guidebook.BookParsingException;
import org.w3c.dom.Node;

public abstract class AdvancementCondition implements IDisplayCondition
import java.util.function.Predicate;

public abstract class AdvancementCondition implements Predicate<ConditionContext>
{
public final String stageName;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import org.w3c.dom.Node;

public abstract class BasicConditions implements IDisplayCondition
import java.util.function.Predicate;

public abstract class BasicConditions implements Predicate<ConditionContext>
{
public static void register()
{
Expand Down Expand Up @@ -35,7 +37,7 @@ public boolean test(ConditionContext conditionContext)
}
}

public static class ModLoaded implements IDisplayCondition
public static class ModLoaded extends BasicConditions
{
private final String modId;

Expand All @@ -51,7 +53,7 @@ public boolean test(ConditionContext conditionContext)
}
}

public static class ItemExists implements IDisplayCondition
public static class ItemExists extends BasicConditions
{
private final ResourceLocation item;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
import gigaherz.guidebook.guidebook.BookDocument;

import java.util.List;
import java.util.function.Predicate;

public abstract class CompositeCondition implements IDisplayCondition
public abstract class CompositeCondition implements Predicate<ConditionContext>
{
public final List<IDisplayCondition> children;
public final List<Predicate<ConditionContext>> children;

protected CompositeCondition(List<IDisplayCondition> children)
protected CompositeCondition(List<Predicate<ConditionContext>> children)
{
this.children = children;
}
Expand All @@ -17,15 +18,17 @@ public static void register()
{
IDisplayConditionFactory any = (doc, node) -> new Any(BookDocument.parseChildConditions(doc, node));
IDisplayConditionFactory all = (doc, node) -> new All(BookDocument.parseChildConditions(doc, node));
IDisplayConditionFactory not = (doc, node) -> new Not(BookDocument.parseChildConditions(doc, node));
ConditionManager.register("any", any);
ConditionManager.register("and", any);
ConditionManager.register("all", all);
ConditionManager.register("or", all);
ConditionManager.register("not", not);
}

public static class Any extends CompositeCondition
{
public Any(List<IDisplayCondition> children)
public Any(List<Predicate<ConditionContext>> children)
{
super(children);
}
Expand All @@ -40,7 +43,7 @@ public boolean test(ConditionContext conditionContext)
public static class All extends CompositeCondition
{

public All(List<IDisplayCondition> children)
public All(List<Predicate<ConditionContext>> children)
{
super(children);
}
Expand All @@ -51,4 +54,19 @@ public boolean test(ConditionContext conditionContext)
return children.stream().allMatch(t -> t.test(conditionContext));
}
}

public static class Not extends CompositeCondition
{

public Not(List<Predicate<ConditionContext>> children)
{
super(children);
}

@Override
public boolean test(ConditionContext conditionContext)
{
return !children.stream().allMatch(t -> t.test(conditionContext));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.w3c.dom.Node;

import java.util.Map;
import java.util.function.Predicate;

public class ConditionManager
{
Expand All @@ -16,7 +17,7 @@ public static void register(String id, IDisplayConditionFactory factory)
REGISTRY.put(id, factory);
}

public static IDisplayCondition parseCondition(BookDocument document, Node node)
public static Predicate<ConditionContext> parseCondition(BookDocument document, Node node)
{
IDisplayConditionFactory factory = REGISTRY.get(node.getNodeName());
if (factory == null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@
import com.google.common.base.Strings;
import gigaherz.guidebook.guidebook.BookParsingException;
import net.darkhax.gamestages.capabilities.PlayerDataHandler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject;
import org.w3c.dom.Node;

public abstract class GameStageCondition implements IDisplayCondition
import java.util.function.Predicate;

public abstract class GameStageCondition implements Predicate<ConditionContext>
{
public final String stageName;

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import gigaherz.guidebook.guidebook.BookDocument;
import org.w3c.dom.Node;

import java.util.function.Predicate;

@FunctionalInterface
public interface IDisplayConditionFactory
{
IDisplayCondition parse(BookDocument document, Node xmlNode);
Predicate<ConditionContext> parse(BookDocument document, Node xmlNode);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package gigaherz.guidebook.guidebook.drawing;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

import java.util.List;
import java.util.Map;

public class VisualChapter
{
public final List<VisualPage> pages = Lists.newArrayList();
public final Map<String, Integer> pagesByName = Maps.newHashMap();
public int startPair;
public int totalPairs;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package gigaherz.guidebook.guidebook.drawing;

import gigaherz.guidebook.guidebook.IBookGraphics;

public class VisualPageBreak extends VisualElement
{
public VisualPageBreak(Size size)
{
super(size);
}

@Override
public void draw(IBookGraphics nav)
{
// not a drawableelement
}
}
Loading

0 comments on commit 4662a56

Please sign in to comment.