aboutsummaryrefslogtreecommitdiff
path: root/mod/src/main/java/kr
diff options
context:
space:
mode:
authorsyeyoung <42869671+cyoung06@users.noreply.github.com>2023-01-13 13:11:13 +0900
committerGitHub <noreply@github.com>2023-01-13 13:11:13 +0900
commit87df9a914624b295e3e93db621ed2a8256eaf846 (patch)
tree538414a186e12b7ad1846462e8406c761a156a69 /mod/src/main/java/kr
parentd3f5b4df809fd03919952285a1906652097f00e6 (diff)
downloadSkyblock-Dungeons-Guide-87df9a914624b295e3e93db621ed2a8256eaf846.tar.gz
Skyblock-Dungeons-Guide-87df9a914624b295e3e93db621ed2a8256eaf846.tar.bz2
Skyblock-Dungeons-Guide-87df9a914624b295e3e93db621ed2a8256eaf846.zip
Dg4.0 guisystem (#269)
* - XML Like configuration for GUI Signed-off-by: syeyoung <cyoung06@naver.com> * - Stylesheets were never a good idea Signed-off-by: syeyoung <cyoung06@naver.com> * - Ref's are always bindable Signed-off-by: syeyoung <cyoung06@naver.com> * - cool components Column Background (color_ Row SizedBox Stack Padding Signed-off-by: syeyoung <cyoung06@naver.com> * - Update copyright header v2 Signed-off-by: syeyoung <cyoung06@naver.com> * - Bunch of stuff Signed-off-by: syeyoung <cyoung06@naver.com> * - Few more elements Signed-off-by: syeyoung <cyoung06@naver.com> * - View!! Signed-off-by: syeyoung <cyoung06@naver.com> * - Better click handlign - Popups Signed-off-by: syeyoung <cyoung06@naver.com> * - ComponentCreator for DX - test view (for testin Signed-off-by: syeyoung <cyoung06@naver.com> * - Column and Row shrink to crossAxisSize if its max is infinity - Gui test. Signed-off-by: syeyoung <cyoung06@naver.com> * - Load attributes after super constructor - Fix Stackoverflow in RootDom.setCursor - Test Gui Command - Test Gui to testview.gui - XML Parser settings to ignore comments - Controller check if element is actually an element, not a textnode. Signed-off-by: syeyoung <cyoung06@naver.com> * - Component Parent propagation - better placeholder Signed-off-by: syeyoung <cyoung06@naver.com> * - Line needs texture2d Signed-off-by: syeyoung <cyoung06@naver.com> * - igitignore update Signed-off-by: syeyoung <cyoung06@naver.com> * - gradle build file update Signed-off-by: syeyoung <cyoung06@naver.com> * - Flexible - Background uses singlehcildpassinglayouter - Helper methods in ConstraintBox Signed-off-by: syeyoung <cyoung06@naver.com> * - Line and Border - add updating code Signed-off-by: syeyoung <cyoung06@naver.com> * - Textfield Signed-off-by: syeyoung <cyoung06@naver.com> * - Column and Row with flex elements when given maximum mainAxis now throws an error - Column and Row when given maximum mainAxis now shrinks to children Signed-off-by: syeyoung <cyoung06@naver.com> * - Better architecture - I'll document it later on separate repo Signed-off-by: syeyoung <cyoung06@naver.com> * LGTM. - Might change rendering architecture. Separate child rendering and itself rendering Signed-off-by: syeyoung <cyoung06@naver.com> * - Fix some typo's and issues Signed-off-by: syeyoung <cyoung06@naver.com> * - make it work Signed-off-by: syeyoung <cyoung06@naver.com> * - smth Signed-off-by: syeyoung <cyoung06@naver.com> * - Button Signed-off-by: syeyoung <cyoung06@naver.com> * - colored button - passthroughs Signed-off-by: syeyoung <cyoung06@naver.com> * - fix issue in text Signed-off-by: syeyoung <cyoung06@naver.com> * - Delegating widgets and scrollbar Signed-off-by: syeyoung <cyoung06@naver.com> * - scrollbar Signed-off-by: syeyoung <cyoung06@naver.com> * - list Signed-off-by: syeyoung <cyoung06@naver.com> * - popup - align - stack now only propagates events to first child (lol) Signed-off-by: syeyoung <cyoung06@naver.com> * - Event propagation changes - some presets Signed-off-by: syeyoung <cyoung06@naver.com> * - moving stuff Signed-off-by: syeyoung <cyoung06@naver.com> Signed-off-by: syeyoung <cyoung06@naver.com>
Diffstat (limited to 'mod/src/main/java/kr')
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java11
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/BindableAttribute.java99
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/Context.java31
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/DomElement.java242
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/ElementTreeWalkIterator.java48
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/GuiScreenAdapter.java284
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/RootDom.java74
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/Widget.java94
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/AbsXY.java69
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Align.java64
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/AspectRatioFitter.java87
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Background.java61
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Border.java140
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Button.java127
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Clip.java70
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Column.java193
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Flexible.java77
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Line.java122
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Measure.java59
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Padding.java80
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Placeholder.java66
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/PopupMgr.java68
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Row.java196
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Scaler.java99
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/ScrollablePanel.java136
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Scrollbar.java166
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/SizedBox.java72
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Slot.java43
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Stack.java98
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Text.java214
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/TextField.java433
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/UnconstrainedBox.java60
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/image/Image.java63
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/image/ResourceImage.java54
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/layouter/Layouter.java32
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/layouter/NullLayouter.java33
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/layouter/SingleChildPassingLayouter.java42
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/primitive/Animation.java38
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/primitive/ConstraintBox.java40
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/primitive/IPosition.java25
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/primitive/IRect.java34
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/primitive/ISize.java29
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/primitive/Position.java28
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/primitive/Rect.java32
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/primitive/Size.java28
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/renderer/DrawNothingRenderer.java29
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/renderer/OnlyChildrenRenderer.java51
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/renderer/Renderer.java34
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/renderer/RenderingContext.java138
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/renderer/SingleChildRenderer.java51
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/view/TestPopup.java38
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/view/TestView.java51
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/AnnotatedExportOnlyWidget.java86
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/AnnotatedImportOnlyWidget.java124
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/AnnotatedWidget.java149
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/DelegatingWidget.java96
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/DelegatingWidgetConverter.java54
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/DomElementRegistry.java91
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/ExportedWidget.java25
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/ExportedWidgetConverter.java48
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/ImportingWidget.java29
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/ParsedWidgetConverter.java43
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/PropByPropParsedWidgetConverter.java140
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/StringConversions.java51
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/annotations/Bind.java30
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/annotations/Export.java30
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/annotations/On.java30
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/annotations/Passthrough.java32
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/annotations/Passthroughs.java27
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/data/Parser.java25
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/data/ParserElement.java34
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/data/ParserElementList.java26
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/data/ParserException.java38
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/data/W3CBackedParser.java70
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/data/W3CBackedParserElement.java72
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/xml/data/WidgetList.java26
77 files changed, 5931 insertions, 0 deletions
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java
index 0bdcacfc..9dd515c7 100755
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java
@@ -38,6 +38,7 @@ import kr.syeyoung.dungeonsguide.mod.events.listener.PacketListener;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
import kr.syeyoung.dungeonsguide.mod.party.PartyManager;
import kr.syeyoung.dungeonsguide.mod.resources.DGTexturePack;
+import kr.syeyoung.dungeonsguide.mod.stomp.StompManager;
import kr.syeyoung.dungeonsguide.mod.utils.AhUtils;
import kr.syeyoung.dungeonsguide.mod.utils.BlockCache;
import kr.syeyoung.dungeonsguide.mod.utils.TimeScoreUtil;
@@ -238,6 +239,7 @@ public class DungeonsGuide implements DGInterface {
progressbar.step("Opening connection");
+ StompManager.getInstance().init();
registerEventsForge(cosmeticsManager = new CosmeticsManager());
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java
index ab69fec6..5b553bdc 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java
@@ -40,6 +40,10 @@ import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.bossfight.BossfightPr
import kr.syeyoung.dungeonsguide.mod.events.impl.DungeonLeftEvent;
import kr.syeyoung.dungeonsguide.mod.features.AbstractFeature;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.guiv2.xml.DomElementRegistry;
+import kr.syeyoung.dungeonsguide.mod.guiv2.GuiScreenAdapter;
+import kr.syeyoung.dungeonsguide.mod.guiv2.RootDom;
+import kr.syeyoung.dungeonsguide.mod.guiv2.view.TestView;
import kr.syeyoung.dungeonsguide.mod.party.PartyContext;
import kr.syeyoung.dungeonsguide.mod.party.PartyManager;
import kr.syeyoung.dungeonsguide.mod.utils.*;
@@ -452,6 +456,13 @@ public class CommandDgDebug extends CommandBase {
} catch (Exception e) {
e.printStackTrace();
}
+ } else if ("testgui".equals(arg)) {
+ GuiScreenAdapter adapter = new GuiScreenAdapter(new TestView());
+ new Thread(DungeonsGuide.THREAD_GROUP, () -> {
+ Minecraft.getMinecraft().addScheduledTask(() -> {
+ Minecraft.getMinecraft().displayGuiScreen(adapter);
+ });
+ }).start();
} else {
sender.addChatMessage(new ChatComponentText("ain't gonna find much anything here"));
sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg loadrooms §7-§f Reloads dungeon roomdata."));
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/BindableAttribute.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/BindableAttribute.java
new file mode 100644
index 00000000..2070aef3
--- /dev/null
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/BindableAttribute.java
@@ -0,0 +1,99 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2022 cyoung06 (syeyoung)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package kr.syeyoung.dungeonsguide.mod.guiv2;
+
+import lombok.Getter;
+
+import java.util.*;
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
+
+public class BindableAttribute<T> {
+ public BindableAttribute(Class<T> type) {
+ this.type = type;
+ initialized = false;
+ }
+ public BindableAttribute(Class<T> type, T defaultValue) {
+ this.type = type;
+ value = defaultValue;
+ initialized = true;
+ }
+
+ private boolean initialized = false;
+ @Getter
+ private final Class<T> type;
+ private T value;
+ private List<BiConsumer<T,T>> onUpdates = new ArrayList<>();
+
+ private boolean updating = false;
+ public void setValue(T t) {
+ if (updating) return;
+ updating = true;
+ T old = this.value;
+ this.value = t;
+ if (!Objects.equals(t, old))
+ for (BiConsumer<T, T> onUpdate : onUpdates) {
+ onUpdate.accept(old, value);
+ }
+ updating = false;
+ initialized = true;
+ }
+ public T getValue() {
+ return value;
+ }
+
+ public void addOnUpdate(BiConsumer<T,T> onUpdate) {
+ onUpdates.add(onUpdate);
+ }
+ public void removeOnUpdate(BiConsumer<T,T> onUpdate) {
+ onUpdates.remove(onUpdate);
+ }
+
+ private Set<BindableAttribute<T>> linkedWith = new HashSet<>();
+
+ private void boundSet(T old, T neu) {
+ setValue(neu);
+ }
+
+ public void exportTo(BindableAttribute<T> bindableAttribute) { // This method has to be called by exporting bindable attribute
+ if (bindableAttribute.type != type) throw new IllegalArgumentException("Different type!!");
+
+ this.addOnUpdate(bindableAttribute::boundSet);
+ bindableAttribute.addOnUpdate(this::boundSet);
+ linkedWith.add(bindableAttribute);
+
+ if (bindableAttribute.initialized)
+ setValue(bindableAttribute.getValue());
+ else
+ bindableAttribute.setValue(getValue());
+ }
+
+ public void unexport(BindableAttribute<T> bindableAttribute) {
+ bindableAttribute.removeOnUpdate(this::boundSet);
+ removeOnUpdate(bindableAttribute::boundSet);
+ linkedWith.remove(bindableAttribute);
+ }
+
+ public void unexportAll() {
+ Set<BindableAttribute<T>> copy = new HashSet<>(linkedWith);
+ for (BindableAttribute<T> tBindableAttribute : copy) {
+ unexport(tBindableAttribute);
+ }
+ }
+}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/Context.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/Context.java
new file mod