Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/main/java/betterquesting/api/questing/ISearchable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package betterquesting.api.questing;

import java.util.List;

public interface ISearchable {

default List<String> getTextForSearch() {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package betterquesting.api.questing.rewards;

import betterquesting.api.questing.IQuest;
import betterquesting.api.questing.ISearchable;
import betterquesting.api2.client.gui.misc.IGuiRect;
import betterquesting.api2.client.gui.panels.IGuiPanel;
import betterquesting.api2.storage.DBEntry;
Expand All @@ -14,7 +15,7 @@

import javax.annotation.Nullable;

public interface IReward extends INBTSaveLoad<NBTTagCompound> {
public interface IReward extends INBTSaveLoad<NBTTagCompound>, ISearchable {
String getUnlocalisedName();

ResourceLocation getFactoryID();
Expand Down
7 changes: 2 additions & 5 deletions src/main/java/betterquesting/api/questing/tasks/ITask.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package betterquesting.api.questing.tasks;

import betterquesting.api.questing.IQuest;
import betterquesting.api.questing.ISearchable;
import betterquesting.api2.client.gui.misc.IGuiRect;
import betterquesting.api2.client.gui.panels.IGuiPanel;
import betterquesting.api2.storage.DBEntry;
Expand All @@ -17,7 +18,7 @@
import java.util.List;
import java.util.UUID;

public interface ITask extends INBTSaveLoad<NBTTagCompound>, INBTProgress<NBTTagCompound> {
public interface ITask extends INBTSaveLoad<NBTTagCompound>, INBTProgress<NBTTagCompound>, ISearchable {
String getUnlocalisedName();

ResourceLocation getFactoryID();
Expand Down Expand Up @@ -48,8 +49,4 @@ default boolean ignored(UUID uuid) {
default boolean displaysCenteredAlone() {
return false;
}

default List<String> getTextForSearch() {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public class PanelTextField<T> implements IGuiPanel {
private boolean isFocused = false;
private boolean isActive = true;
private boolean canWrap = false;
private boolean clearOnRightClick = false;
private int maxLength = 32;

private String text;
Expand Down Expand Up @@ -108,6 +109,11 @@ public PanelTextField<T> enableWrapping(boolean state) {
return this;
}

public PanelTextField<T> enableClearingOnRightClick(boolean state) {
this.clearOnRightClick = state;
return this;
}

public void lockFocus(boolean state) {
this.lockFocus = state;

Expand Down Expand Up @@ -636,7 +642,7 @@ public void drawPanel(int mx, int my, float partialTick) {
GlStateManager.translate(-getScrollX(), -getScrollY(), 0);

if (text.length() <= 0) {
if (!isFocused) {
if (lockFocus || !isFocused) {
mc.fontRenderer.drawString(watermark, bounds.getX() + 4, bounds.getY() + 4, colWatermark.getRGB(), false);
}
} else {
Expand Down Expand Up @@ -665,6 +671,13 @@ public boolean onMouseClick(int mx, int my, int button) {
updateScrollBounds(); // Just in case
}

if (clearOnRightClick && button == 1) {
setText("");
if (callback != null) {
callback.setValue(filter.parseValue(this.text));
}
}

if (canWrap) {
setCursorPosition(RenderUtils.getCursorPos(text, mx - (transform.getX() + 4) + getScrollX(), my - (transform.getY() + 4) + getScrollY(), transform.getWidth() - 8, Minecraft.getMinecraft().fontRenderer));
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import betterquesting.api.questing.IQuest;
import betterquesting.api.questing.IQuestLine;
import betterquesting.api.questing.IQuestLineEntry;
import betterquesting.api.questing.tasks.ITask;
import betterquesting.api.questing.ISearchable;
import betterquesting.api2.cache.QuestCache;
import betterquesting.api2.client.gui.controls.PanelButtonCustom;
import betterquesting.api2.client.gui.controls.PanelButtonQuest;
Expand All @@ -22,12 +22,10 @@
import net.minecraft.entity.player.EntityPlayer;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayDeque;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import java.util.*;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class CanvasQuestSearch extends CanvasSearch<QuestSearchEntry, QuestSearchEntry> {
private List<QuestSearchEntry> questList;
Expand Down Expand Up @@ -85,15 +83,15 @@ protected void queryMatches(QuestSearchEntry entry, String query, ArrayDeque<Que

results.add(entry);
} else {
// task-specific search text
for (DBEntry<ITask> task : entry.getQuest().getValue().getTasks().getEntries()) {
if (task.getValue().getTextForSearch() == null) continue;
for (String text : task.getValue().getTextForSearch()) {
if (StringUtils.containsIgnoreCase(text, query)) {
results.add(entry);
}
}
}
// search tasks and rewards
Stream.concat(value.getTasks().getEntries().stream(), value.getRewards().getEntries().stream())
.map(DBEntry::getValue)
.map(ISearchable::getTextForSearch)
.filter(Objects::nonNull)
.flatMap(List::stream)
.filter(text -> StringUtils.containsIgnoreCase(text, query))
.findAny()
.ifPresent(text -> results.add(entry));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,7 @@ private void openQuestLine(DBEntry<IQuestLine> q) {
selectedLine = q.getValue();
selectedLineId = q.getID();
for (int i = 0; i < btnListRef.size(); i++) {
btnListRef.get(i).setActive((visChapters.get(i).getSecond() & 4) == 0 && q.getID() != selectedLineId);
btnListRef.get(i).setActive((visChapters.get(i).getSecond() & 4) == 0 && btnListRef.get(i).getStoredValue().getID() != selectedLineId);
}

cvQuest.setQuestLine(q.getValue());
Expand Down
12 changes: 10 additions & 2 deletions src/main/java/betterquesting/client/gui2/GuiQuestSearch.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

public class GuiQuestSearch extends GuiScreenCanvas {

private static String priorSearchText = null;
private PanelTextField<String> searchBox;

public GuiQuestSearch(GuiScreen parent) {
Expand Down Expand Up @@ -59,12 +60,19 @@ private void createSearchBox(CanvasEmpty cvInner) {
searchBox = new PanelTextField<>(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(0, 16, 8, -32), 0), "", FieldFilterString.INSTANCE);
searchBox.setWatermark("Search...");
searchBox.lockFocus(true);
searchBox.enableClearingOnRightClick(true);
cvInner.addPanel(searchBox);

CanvasQuestSearch canvasQuestSearch = createSearchCanvas();
cvInner.addPanel(canvasQuestSearch);

searchBox.setCallback(canvasQuestSearch::setSearchFilter);
searchBox.setCallback(text -> {
GuiQuestSearch.priorSearchText = text;
canvasQuestSearch.setSearchFilter(text);
});
if (priorSearchText != null) {
searchBox.writeText(priorSearchText);
}

PanelVScrollBar scDb = new PanelVScrollBar(new GuiTransform(GuiAlign.RIGHT_EDGE, new GuiPadding(-8, 32, 0, 24), 0));
cvInner.addPanel(scDb);
Expand All @@ -76,7 +84,7 @@ private CanvasQuestSearch createSearchCanvas() {
CanvasQuestSearch canvasQuestSearch = new CanvasQuestSearch(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(0, 32, 8, 24), 0), mc.player);
canvasQuestSearch.setQuestOpenCallback(questSearchEntry -> {
acceptCallback(questSearchEntry);
GuiHome.bookmark = new GuiQuest(parent, questSearchEntry.getQuest().getID());
GuiHome.bookmark = new GuiQuest(this, questSearchEntry.getQuest().getID());
mc.displayGuiScreen(GuiHome.bookmark);
});
canvasQuestSearch.setQuestHighlightCallback(questSearchEntry -> {
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/betterquesting/questing/rewards/RewardChoice.java
Original file line number Diff line number Diff line change
Expand Up @@ -138,4 +138,17 @@ public IGuiPanel getRewardGui(IGuiRect rect, DBEntry<IQuest> quest) {
public GuiScreen getRewardEditor(GuiScreen screen, DBEntry<IQuest> quest) {
return null;
}

@Override
public List<String> getTextForSearch() {
List<String> texts = new ArrayList<>();
for (BigItemStack bigStack : choices) {
ItemStack stack = bigStack.getBaseStack();
texts.add(stack.getDisplayName());
if (bigStack.hasOreDict()) {
texts.add(bigStack.getOreDict());
}
}
return texts;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@

import javax.annotation.Nonnull;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.UUID;

public class RewardCommand implements IReward {
Expand Down Expand Up @@ -122,6 +124,11 @@ public GuiScreen getRewardEditor(GuiScreen screen, DBEntry<IQuest> quest) {
return null;
}

@Override
public List<String> getTextForSearch() {
return Collections.singletonList(command);
}

public static class RewardCommandSender extends CommandBlockBaseLogic {
private final Entity entity;

Expand Down
13 changes: 13 additions & 0 deletions src/main/java/betterquesting/questing/rewards/RewardItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,17 @@ public IGuiPanel getRewardGui(IGuiRect rect, DBEntry<IQuest> quest) {
public GuiScreen getRewardEditor(GuiScreen screen, DBEntry<IQuest> quest) {
return null;
}

@Override
public List<String> getTextForSearch() {
List<String> texts = new ArrayList<>();
for (BigItemStack bigStack : items) {
ItemStack stack = bigStack.getBaseStack();
texts.add(stack.getDisplayName());
if (bigStack.hasOreDict()) {
texts.add(bigStack.getOreDict());
}
}
return texts;
}
}
10 changes: 10 additions & 0 deletions src/main/java/betterquesting/questing/rewards/RewardRecipe.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
import net.minecraftforge.fml.relauncher.SideOnly;

import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class RewardRecipe implements IReward {
public String recipeNames = "minecraft:crafting_table\nminecraft:chest";
Expand Down Expand Up @@ -74,4 +77,11 @@ public NBTTagCompound writeToNBT(NBTTagCompound nbt, boolean reduce) {
public void readFromNBT(NBTTagCompound nbt) {
recipeNames = nbt.getString("recipes");
}

@Override
public List<String> getTextForSearch() {
List<String> texts = new ArrayList<>();
Collections.addAll(texts, recipeNames.split("\n"));
return texts;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
import net.minecraftforge.fml.relauncher.SideOnly;
import org.apache.logging.log4j.Level;

import java.util.ArrayList;
import java.util.List;

public class RewardScoreboard implements IReward {

private static final String DEFAULT_TYPE = "dummy";
Expand Down Expand Up @@ -106,4 +109,12 @@ public IGuiPanel getRewardGui(IGuiRect rect, DBEntry<IQuest> quest) {
public GuiScreen getRewardEditor(GuiScreen screen, DBEntry<IQuest> quest) {
return null;
}

@Override
public List<String> getTextForSearch() {
List<String> texts = new ArrayList<>();
texts.add(score);
texts.add(String.valueOf(value));
return texts;
}
}