forked from Funwayguy/BetterQuesting
-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
16f0195
commit 72c3268
Showing
7 changed files
with
243 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package betterquesting; | ||
|
||
import org.apache.commons.lang3.EnumUtils; | ||
|
||
public class EnumUtil { | ||
|
||
@SuppressWarnings("unchecked") | ||
public static <E extends Enum<E>> E getEnum(String enumName, E defaultValue) { | ||
E value = (E) EnumUtils.getEnum(defaultValue.getClass(), enumName); | ||
return value != null ? value : defaultValue; | ||
} | ||
|
||
} |
39 changes: 39 additions & 0 deletions
39
src/main/java/betterquesting/api2/client/gui/controls/buttons/PanelButtonBoolean.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package betterquesting.api2.client.gui.controls.buttons; | ||
|
||
import betterquesting.api.misc.ICallback; | ||
import betterquesting.api2.client.gui.controls.PanelButton; | ||
import betterquesting.api2.client.gui.misc.IGuiRect; | ||
|
||
public class PanelButtonBoolean extends PanelButton { | ||
|
||
private boolean stored; | ||
private ICallback<Boolean> callback = null; | ||
|
||
public PanelButtonBoolean(IGuiRect rect, int id, boolean value) { | ||
super(rect, id, Boolean.toString(value)); | ||
this.setStoredValue(value); | ||
} | ||
|
||
public PanelButtonBoolean setStoredValue(boolean value) { | ||
this.stored = value; | ||
return this; | ||
} | ||
|
||
public boolean getStoredValue() { return stored; } | ||
|
||
public PanelButtonBoolean setCallback(ICallback<Boolean> callback) { | ||
this.callback = callback; | ||
return this; | ||
} | ||
|
||
public ICallback<Boolean> getCallback() { return this.callback; } | ||
|
||
@Override | ||
public void onButtonClick() { | ||
stored = !stored; | ||
setText(Boolean.toString(stored)); | ||
if (callback != null) | ||
this.callback.setValue(this.getStoredValue()); | ||
} | ||
|
||
} |
41 changes: 41 additions & 0 deletions
41
src/main/java/betterquesting/api2/client/gui/controls/buttons/PanelButtonEnum.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
package betterquesting.api2.client.gui.controls.buttons; | ||
|
||
import betterquesting.api.misc.ICallback; | ||
import betterquesting.api2.client.gui.controls.PanelButton; | ||
import betterquesting.api2.client.gui.misc.IGuiRect; | ||
|
||
public class PanelButtonEnum<E extends Enum<E>> extends PanelButton { | ||
|
||
private E stored; | ||
private ICallback<E> callback = null; | ||
|
||
public PanelButtonEnum(IGuiRect rect, int id, E value) { | ||
super(rect, id, value.toString()); | ||
this.setStoredValue(value); | ||
} | ||
|
||
public PanelButtonEnum<E> setStoredValue(E value) { | ||
this.stored = value; | ||
return this; | ||
} | ||
|
||
public E getStoredValue() { return stored; } | ||
|
||
public PanelButtonEnum<E> setCallback(ICallback<E> callback) { | ||
this.callback = callback; | ||
return this; | ||
} | ||
|
||
public ICallback<E> getCallback() { return this.callback; } | ||
|
||
@Override | ||
public void onButtonClick() { | ||
@SuppressWarnings("unchecked") | ||
E[] values = (E[]) stored.getClass().getEnumConstants(); | ||
stored = values[(stored.ordinal() + 1) % values.length]; | ||
setText(stored.toString()); | ||
if (callback != null) | ||
this.callback.setValue(this.getStoredValue()); | ||
} | ||
|
||
} |
29 changes: 29 additions & 0 deletions
29
src/main/java/betterquesting/api2/client/gui/panels/lists/CanvasScrollingNameValue.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
package betterquesting.api2.client.gui.panels.lists; | ||
|
||
import betterquesting.api2.client.gui.misc.GuiRectangle; | ||
import betterquesting.api2.client.gui.misc.IGuiRect; | ||
import betterquesting.api2.client.gui.panels.IGuiPanel; | ||
import betterquesting.api2.client.gui.panels.content.PanelTextBox; | ||
import betterquesting.api2.client.gui.themes.presets.PresetColor; | ||
import java.util.function.Function; | ||
|
||
public class CanvasScrollingNameValue extends CanvasScrolling { | ||
|
||
private int rowNum = 0; | ||
|
||
public CanvasScrollingNameValue(IGuiRect rect) { | ||
super(rect); | ||
} | ||
|
||
public void addPanel(String name, Function<GuiRectangle, IGuiPanel> panelFactory) { | ||
int width = getTransform().getWidth(); | ||
int lw = (int) (width / 3F); | ||
int rw = width - lw; // Width on right side (rounds up to account for rounding errors lost on left side) | ||
PanelTextBox namePanel = new PanelTextBox(new GuiRectangle(0, rowNum * 16 + 4, lw - 8, 12, 0), name).setAlignment(2); | ||
namePanel.setColor(PresetColor.TEXT_MAIN.getColor()); | ||
addPanel(namePanel); | ||
GuiRectangle rect = new GuiRectangle(lw, rowNum * 16, rw - 32, 16); | ||
addPanel(panelFactory.apply(rect)); | ||
rowNum++; | ||
} | ||
} |
117 changes: 117 additions & 0 deletions
117
src/main/java/betterquesting/client/gui2/editors/tasks/GuiEditTaskRetrieval.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
package betterquesting.client.gui2.editors.tasks; | ||
|
||
import betterquesting.EnumUtil; | ||
import betterquesting.api.api.ApiReference; | ||
import betterquesting.api.api.QuestingAPI; | ||
import betterquesting.api.client.gui.misc.IVolatileScreen; | ||
import betterquesting.api.enums.EnumLogic; | ||
import betterquesting.api.network.QuestingPacket; | ||
import betterquesting.api.questing.IQuest; | ||
import betterquesting.api2.client.gui.GuiScreenCanvas; | ||
import betterquesting.api2.client.gui.controls.PanelButton; | ||
import betterquesting.api2.client.gui.controls.buttons.PanelButtonBoolean; | ||
import betterquesting.api2.client.gui.controls.buttons.PanelButtonEnum; | ||
import betterquesting.api2.client.gui.misc.GuiAlign; | ||
import betterquesting.api2.client.gui.misc.GuiPadding; | ||
import betterquesting.api2.client.gui.misc.GuiTransform; | ||
import betterquesting.api2.client.gui.panels.CanvasTextured; | ||
import betterquesting.api2.client.gui.panels.bars.PanelVScrollBar; | ||
import betterquesting.api2.client.gui.panels.content.PanelTextBox; | ||
import betterquesting.api2.client.gui.panels.lists.CanvasScrollingNameValue; | ||
import betterquesting.api2.client.gui.themes.presets.PresetColor; | ||
import betterquesting.api2.client.gui.themes.presets.PresetTexture; | ||
import betterquesting.api2.storage.DBEntry; | ||
import betterquesting.api2.utils.QuestTranslation; | ||
import betterquesting.client.gui2.editors.nbt.GuiNbtEditor; | ||
import betterquesting.core.ModReference; | ||
import betterquesting.questing.tasks.TaskRetrieval; | ||
import net.minecraft.client.gui.GuiScreen; | ||
import net.minecraft.nbt.NBTTagCompound; | ||
import net.minecraft.nbt.NBTTagList; | ||
import net.minecraft.util.ResourceLocation; | ||
import org.lwjgl.input.Keyboard; | ||
|
||
public class GuiEditTaskRetrieval extends GuiScreenCanvas implements IVolatileScreen { | ||
|
||
private final DBEntry<IQuest> quest; | ||
private final TaskRetrieval task; | ||
private NBTTagCompound current; | ||
|
||
public GuiEditTaskRetrieval(GuiScreen parent, DBEntry<IQuest> quest, TaskRetrieval task) { | ||
super(parent); | ||
this.quest = quest; | ||
this.task = task; | ||
current = task.writeToNBT(new NBTTagCompound()); | ||
} | ||
|
||
@Override | ||
public void initPanel() { | ||
super.initPanel(); | ||
Keyboard.enableRepeatEvents(true); | ||
|
||
CanvasTextured cvBackground = new CanvasTextured(new GuiTransform(), PresetTexture.PANEL_MAIN.getTexture()); | ||
this.addPanel(cvBackground); | ||
|
||
cvBackground.addPanel(new PanelTextBox(new GuiTransform(GuiAlign.TOP_EDGE, new GuiPadding(16, 16, 16, -32), 0), | ||
QuestTranslation.translate("bq_standard.title.edit_retrieval_task")).setAlignment(1) | ||
.setColor(PresetColor.TEXT_HEADER.getColor())); | ||
|
||
CanvasScrollingNameValue cvList = new CanvasScrollingNameValue(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(16, 32, 24, 48), 0)); | ||
cvBackground.addPanel(cvList); | ||
initItems(cvList); | ||
|
||
PanelVScrollBar scList = new PanelVScrollBar(new GuiTransform(GuiAlign.RIGHT_EDGE, new GuiPadding(-24, 32, 16, 48), 0)); | ||
cvBackground.addPanel(scList); | ||
cvList.setScrollDriverY(scList); | ||
|
||
PanelButton btnEditNBT = new PanelButton(new GuiTransform(GuiAlign.BOTTOM_CENTER, -100, -36, 200, 16, 0), | ||
-1, | ||
QuestTranslation.translate("bq_standard.btn.edit_nbt")); | ||
btnEditNBT.setClickAction(btn -> { | ||
mc.displayGuiScreen(new GuiNbtEditor(GuiEditTaskRetrieval.this, current, value -> current = value)); | ||
}); | ||
cvBackground.addPanel(btnEditNBT); | ||
|
||
cvBackground.addPanel(new PanelButton(new GuiTransform(GuiAlign.BOTTOM_CENTER, -100, -16, 200, 16, 0), -1, QuestTranslation.translate("gui.done")) { | ||
|
||
@Override | ||
public void onButtonClick() { | ||
task.readFromNBT(current); | ||
sendChanges(); | ||
mc.displayGuiScreen(parent); | ||
} | ||
|
||
}); | ||
} | ||
|
||
private void initItems(CanvasScrollingNameValue cvList) { | ||
addBoolean("autoConsume", cvList); | ||
addBoolean("consume", cvList); | ||
cvList.addPanel("entryLogic", rect -> new PanelButtonEnum<>(rect, -1, EnumUtil.getEnum(current.getString("entryLogic"), EnumLogic.AND)).setCallback(value -> current.setString("entryLogic", value.name()))); | ||
addBoolean("groupDetect", cvList); | ||
addBoolean("ignoreNBT", cvList); | ||
addBoolean("partialMatch", cvList); | ||
cvList.addPanel("requiredItems", rect -> new PanelButton(rect, -1, "List...").setClickAction(b -> { | ||
mc.displayGuiScreen(new GuiNbtEditor(mc.currentScreen, (NBTTagList) current.getTag("requiredItems"), null)); | ||
})); | ||
} | ||
|
||
private void addBoolean(String name, CanvasScrollingNameValue cvList) { | ||
cvList.addPanel(name, rect -> new PanelButtonBoolean(rect, -1, current.getBoolean(name)).setCallback(value -> current.setBoolean(name, value))); | ||
} | ||
|
||
private static final ResourceLocation QUEST_EDIT = new ResourceLocation(ModReference.MODID, "quest_edit"); // TODO: Really need to make the native packet types accessible in the API | ||
|
||
private void sendChanges() { | ||
NBTTagCompound payload = new NBTTagCompound(); | ||
NBTTagList dataList = new NBTTagList(); | ||
NBTTagCompound entry = new NBTTagCompound(); | ||
entry.setInteger("questID", quest.getID()); | ||
entry.setTag("config", quest.getValue().writeToNBT(new NBTTagCompound())); | ||
dataList.appendTag(entry); | ||
payload.setTag("data", dataList); | ||
payload.setInteger("action", 0); // Action: Update data | ||
QuestingAPI.getAPI(ApiReference.PACKET_SENDER).sendToServer(new QuestingPacket(QUEST_EDIT, payload)); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters