aboutsummaryrefslogtreecommitdiff
path: root/mod/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'mod/src/main')
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/AColor.java8
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCRTextStyle.java73
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCRTextStyleMap.java49
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractFeature.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractHUDFeature.java7
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/FeatureRegistry.java3
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureDebugTrap.java41
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureDetectFreeze.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureRoomCoordDisplay.java33
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureRoomDebugInfo.java36
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureBossHealth.java44
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureCurrentPhase.java46
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureTerracotaTimer.java46
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureThornBearPercentage.java51
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureThornSpiritBowTimer.java43
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/inviteViewer/PartyInviteViewer.java4
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonCurrentRoomSecrets.java62
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonDeaths.java83
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonMilestone.java40
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonRealTime.java49
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonRoomName.java39
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonSBTime.java48
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonScore.java198
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonSecrets.java64
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonTombs.java44
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureWarnLowHealth.java56
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureWatcherWarning.java26
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureCooldownCounter.java46
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/ability/FeatureAbilityCooldown.java85
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeaturePartyList.java80
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeaturePartyReady.java82
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyFinder.java1
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureActions.java101
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureSoulRoomWarning.java18
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/DefaultTextHUDFeatureStyleFeature.java70
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/DefaultingDelegatingTextStyle.java82
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/NullTextStyle.java110
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/StyledText.java7
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/StyledTextSpan.java32
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/TextHUDFeature.java112
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/richtext/styles/ParentDelegatingTextStyle.java2
41 files changed, 1072 insertions, 953 deletions
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/AColor.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/AColor.java
index 35b9e41f..a031a8f3 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/AColor.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/AColor.java
@@ -18,6 +18,9 @@
package kr.syeyoung.dungeonsguide.mod.config.types;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.shaders.ChromaShader;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.shaders.Shader;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.shaders.SingleColorShader;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
@@ -52,6 +55,11 @@ public class AColor extends Color {
return aColor;
}
+ public Shader getShader() {
+ if (chroma) return new ChromaShader(chromaSpeed, getRGB());
+ else return new SingleColorShader(getRGB());
+ }
+
@Override
public String toString() {
return "AColor{" +
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCRTextStyle.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCRTextStyle.java
new file mode 100644
index 00000000..9d1d099b
--- /dev/null
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCRTextStyle.java
@@ -0,0 +1,73 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * 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.config.types;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+
+
+public class TCRTextStyle implements FeatureTypeHandler<DefaultingDelegatingTextStyle> {
+ public static final TCRTextStyle INSTANCE = new TCRTextStyle();
+
+ @Override
+ public DefaultingDelegatingTextStyle deserialize(JsonElement element) {
+ JsonObject object = element.getAsJsonObject();
+ DefaultingDelegatingTextStyle textStyle = new DefaultingDelegatingTextStyle();
+ textStyle.setSize(object.has("size") && !object.get("size").isJsonNull() ? object.get("size").getAsDouble() : null);
+ textStyle.setTopAscent(object.has("topAscent") && !object.get("topAscent").isJsonNull()? object.get("topAscent").getAsDouble() : null);
+ textStyle.setBottomAscent(object.has("bottomAscent") && !object.get("bottomAscent").isJsonNull()? object.get("bottomAscent").getAsDouble() : null);
+ textStyle.setBold(object.has("bold") && !object.get("bold").isJsonNull()? object.get("bold").getAsBoolean() : null);
+ textStyle.setItalics(object.has("italics") && !object.get("italics").isJsonNull()? object.get("italics").getAsBoolean() : null);
+ textStyle.setStrikeThrough(object.has("strikethrough") && !object.get("strikethrough").isJsonNull()? object.get("strikethrough").getAsBoolean() : null);
+ textStyle.setUnderline(object.has("underline") && !object.get("underline").isJsonNull()? object.get("underline").getAsBoolean() : null);
+ textStyle.setOutline(object.has("outline") && !object.get("outline").isJsonNull()? object.get("outline").getAsBoolean() : null);
+ textStyle.setShadow(object.has("shadow") && !object.get("shadow").isJsonNull()? object.get("shadow").getAsBoolean() : null);
+ textStyle.setBackgroundShader(object.has("backgroundColor") && !object.get("backgroundColor").isJsonNull()? TCAColor.INSTANCE.deserialize(object.get("backgroundColor")) : null);
+ textStyle.setTextShader(object.has("textColor") && !object.get("textColor").isJsonNull()? TCAColor.INSTANCE.deserialize(object.get("textColor")) : null);
+ textStyle.setStrikeThroughShader(object.has("strikethroughColor") && !object.get("strikethroughColor").isJsonNull()? TCAColor.INSTANCE.deserialize(object.get("strikethroughColor")) : null);
+ textStyle.setUnderlineShader(object.has("underlineColor") && !object.get("underlineColor").isJsonNull()? TCAColor.INSTANCE.deserialize(object.get("underlineColor")) : null);
+ textStyle.setOutlineShader(object.has("outlineColor") && !object.get("outlineColor").isJsonNull()? TCAColor.INSTANCE.deserialize(object.get("outlineColor")) : null);
+ textStyle.setShadowShader(object.has("shadowColor") && !object.get("shadowColor").isJsonNull()? TCAColor.INSTANCE.deserialize(object.get("shadowColor")) : null);
+ return textStyle;
+ }
+
+ @Override
+ public JsonElement serialize(DefaultingDelegatingTextStyle element) {
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.addProperty("size", element.size);
+ jsonObject.addProperty("topAscent", element.topAscent);
+ jsonObject.addProperty("bottomAscent", element.bottomAscent);
+ jsonObject.addProperty("bold", element.bold);
+ jsonObject.addProperty("italics", element.italics);
+ jsonObject.addProperty("strikethrough", element.strikeThrough);
+ jsonObject.addProperty("underline", element.underline);
+ jsonObject.addProperty("outline", element.outline);
+ jsonObject.addProperty("shadow", element.shadow);
+ jsonObject.add("backgroundColor", element.backgroundShader == null ? null : TCAColor.INSTANCE.serialize(element.backgroundShader));
+ jsonObject.add("textColor", element.textShader == null ? null : TCAColor.INSTANCE.serialize(element.textShader));
+ jsonObject.add("strikethroughColor", element.strikeThroughShader == null ? null : TCAColor.INSTANCE.serialize(element.strikeThroughShader));
+ jsonObject.add("underlineColor", element.underlineShader == null ? null : TCAColor.INSTANCE.serialize(element.underlineShader));
+ jsonObject.add("outlineColor", element.outlineShader == null ? null : TCAColor.INSTANCE.serialize(element.outlineShader));
+ jsonObject.add("shadowColor", element.shadowShader == null ? null : TCAColor.INSTANCE.serialize(element.shadowShader));
+ return jsonObject;
+ }
+}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCRTextStyleMap.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCRTextStyleMap.java
new file mode 100644
index 00000000..9311ff2b
--- /dev/null
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCRTextStyleMap.java
@@ -0,0 +1,49 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * 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.config.types;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class TCRTextStyleMap implements FeatureTypeHandler<Map<String, DefaultingDelegatingTextStyle>> {
+ public static final TCRTextStyleMap INSTANCE = new TCRTextStyleMap();
+ @Override
+ public Map<String, DefaultingDelegatingTextStyle> deserialize(JsonElement element) {
+ JsonObject jsonObject = element.getAsJsonObject();
+ Map<String, DefaultingDelegatingTextStyle> map = new HashMap<>();
+ for (Map.Entry<String, JsonElement> stringJsonElementEntry : jsonObject.entrySet()) {
+ map.put(stringJsonElementEntry.getKey(), TCRTextStyle.INSTANCE.deserialize(stringJsonElementEntry.getValue()));
+ }
+ return map;
+ }
+
+ @Override
+ public JsonElement serialize(Map<String, DefaultingDelegatingTextStyle> element) {
+ JsonObject jsonObject = new JsonObject();
+ for (Map.Entry<String, DefaultingDelegatingTextStyle> stringDefaultingDelegatingTextStyleEntry : element.entrySet()) {
+ jsonObject.add(stringDefaultingDelegatingTextStyleEntry.getKey(), TCRTextStyle.INSTANCE.serialize(stringDefaultingDelegatingTextStyleEntry.getValue()));
+ }
+ return jsonObject;
+ }
+}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractFeature.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractFeature.java
index 363fd24e..28650192 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractFeature.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractFeature.java
@@ -18,12 +18,10 @@
package kr.syeyoung.dungeonsguide.mod.features;
-import com.google.common.base.Supplier;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import kr.syeyoung.dungeonsguide.mod.config.guiconfig.configv3.DefaultConfigurePageWidget;
import kr.syeyoung.dungeonsguide.mod.config.types.FeatureTypeHandler;
-import kr.syeyoung.dungeonsguide.mod.gui.MPanel;
import kr.syeyoung.dungeonsguide.mod.guiv2.Widget;
import lombok.Getter;
import lombok.Setter;
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractHUDFeature.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractHUDFeature.java
index ea1972b2..0fe84145 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractHUDFeature.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractHUDFeature.java
@@ -23,17 +23,11 @@ import kr.syeyoung.dungeonsguide.mod.config.guiconfig.configv3.MainConfigWidget;
import kr.syeyoung.dungeonsguide.mod.config.types.GUIPosition;
import kr.syeyoung.dungeonsguide.mod.config.types.TCGUIPosition;
import kr.syeyoung.dungeonsguide.mod.guiv2.BindableAttribute;
-import kr.syeyoung.dungeonsguide.mod.guiv2.DomElement;
import kr.syeyoung.dungeonsguide.mod.guiv2.GuiScreenAdapter;
import kr.syeyoung.dungeonsguide.mod.guiv2.Widget;
import kr.syeyoung.dungeonsguide.mod.guiv2.elements.GlobalHUDScale;
import kr.syeyoung.dungeonsguide.mod.guiv2.elements.Navigator;
import kr.syeyoung.dungeonsguide.mod.guiv2.elements.Text;
-import kr.syeyoung.dungeonsguide.mod.guiv2.layouter.Layouter;
-import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.ConstraintBox;
-import kr.syeyoung.dungeonsguide.mod.guiv2.primitive.Size;
-import kr.syeyoung.dungeonsguide.mod.guiv2.renderer.Renderer;
-import kr.syeyoung.dungeonsguide.mod.guiv2.renderer.RenderingContext;
import kr.syeyoung.dungeonsguide.mod.guiv2.xml.AnnotatedImportOnlyWidget;
import kr.syeyoung.dungeonsguide.mod.guiv2.xml.annotations.Bind;
import kr.syeyoung.dungeonsguide.mod.guiv2.xml.annotations.On;
@@ -42,7 +36,6 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.util.ResourceLocation;
-import java.util.Collections;
import java.util.List;
@Getter
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/FeatureRegistry.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/FeatureRegistry.java
index 1c0bc38e..03cf914f 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/FeatureRegistry.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/FeatureRegistry.java
@@ -42,6 +42,7 @@ import kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.FeatureVi
import kr.syeyoung.dungeonsguide.mod.features.impl.secret.*;
import kr.syeyoung.dungeonsguide.mod.features.impl.secret.mechanicbrowser.FeatureMechanicBrowse;
import kr.syeyoung.dungeonsguide.mod.features.impl.solvers.*;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
import kr.syeyoung.dungeonsguide.mod.overlay.OverlayManager;
import lombok.Getter;
import org.lwjgl.input.Keyboard;
@@ -80,6 +81,8 @@ public class FeatureRegistry {
return abstractFeature;
}
+ public static final DefaultTextHUDFeatureStyleFeature DEFAULT_STYLE = register(new DefaultTextHUDFeatureStyleFeature());
+
public static final PathfindLineProperties SECRET_LINE_PROPERTIES_GLOBAL = register(new PathfindLineProperties("Dungeon.Secrets.Preferences", "Global Line Settings", "Global Line Settings", "secret.lineproperties.global", true, null));
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureDebugTrap.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureDebugTrap.java
index 93e7363e..84783d12 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureDebugTrap.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureDebugTrap.java
@@ -21,35 +21,28 @@ package kr.syeyoung.dungeonsguide.mod.features.impl.advanced;
import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.passive.EntityBat;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
public class FeatureDebugTrap extends TextHUDFeature {
public FeatureDebugTrap() {
super("Debug", "Display the current amount of bat entities", "", "advanced.bat");
- getStyles().add(new TextStyle("base", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("batsamm", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("base", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("batsamm", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
-
-
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
- private static final List<StyledText> dummyText= new ArrayList<>();
- static {
- dummyText.add(new StyledText("Bats: ","base"));
- dummyText.add(new StyledText("9999","batsamm"));
- }
-
-
static List<Long> avgStorage = new ArrayList<>();
public static void updateVal(long timeItTookForThePacketToProcess){
@@ -72,26 +65,24 @@ public class FeatureDebugTrap extends TextHUDFeature {
}
@Override
- public List<String> getUsedTextStyle() {
- return Arrays.asList("batsamm", "base");
- }
-
- @Override
- public List<StyledText> getDummyText() {
- return dummyText;
+ public TextSpan getDummyText() {
+ TextSpan textSpan = new TextSpan(new NullTextStyle(), "");
+ textSpan.addChild(new TextSpan(getStyle("base"), "Bats: "));
+ textSpan.addChild(new TextSpan(getStyle("batsamm"), "9999"));
+ return textSpan;
}
@Override
- public List<StyledText> getText() {
+ public TextSpan getText() {
List<Entity> bats = Minecraft.getMinecraft().theWorld.getEntities(EntityBat.class, e -> true);
- List<StyledText> actualBit = new ArrayList<>();
- actualBit.add(new StyledText("Bats: ","base"));
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("base"), "Bats: "));
- actualBit.add(new StyledText(String.valueOf(getAvgTimeItTookToPacket()),"batsamm"));
+ actualBit.addChild(new TextSpan(getStyle("batsamm"), String.valueOf(getAvgTimeItTookToPacket())));
return actualBit;
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureDetectFreeze.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureDetectFreeze.java
index b996c86f..8101f060 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureDetectFreeze.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureDetectFreeze.java
@@ -20,8 +20,6 @@ package kr.syeyoung.dungeonsguide.mod.features.impl.advanced;
import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler;
-import kr.syeyoung.dungeonsguide.mod.events.impl.DGTickEvent;
-import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
import kr.syeyoung.dungeonsguide.mod.features.SimpleFeature;
import net.minecraftforge.fml.common.gameevent.TickEvent;
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureRoomCoordDisplay.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureRoomCoordDisplay.java
index 1b5357eb..1e1b622b 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureRoomCoordDisplay.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureRoomCoordDisplay.java
@@ -25,35 +25,29 @@ import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
import kr.syeyoung.dungeonsguide.mod.dungeon.DungeonContext;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.util.BlockPos;
import java.awt.*;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
public class FeatureRoomCoordDisplay extends TextHUDFeature {
public FeatureRoomCoordDisplay() {
super("Debug", "Display Coordinate Relative to the Dungeon Room and room's rotation", "X: 0 Y: 3 Z: 5 Facing: Z+" , "advanced.coords");
this.setEnabled(false);
- getStyles().add(new TextStyle("coord", new AColor(Color.yellow.getRGB(),true), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("coord", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(Color.yellow.getRGB(),true)).setBackgroundShader(new AColor(0, 0,0,0)));
}
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
- private static final List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("X: 0 Y: 3 Z: 5 Facing: Z+","coord"));
- }
@Override
- public List<StyledText> getDummyText() {
- return dummyText;
+ public TextSpan getDummyText() {
+ return new TextSpan(getStyle("coord"), "X: 0 Y: 3 Z: 5 Facing: Z+");
}
private static final String[] facing = {"Z+", "X-", "Z-", "X+"};
@@ -75,21 +69,16 @@ public class FeatureRoomCoordDisplay extends TextHUDFeature {
}
@Override
- public List<String> getUsedTextStyle() {
- return Collections.singletonList("coord");
- }
-
- @Override
- public List<StyledText> getText() {
- if (!skyblockStatus.isOnDungeon()) return Collections.emptyList();
+ public TextSpan getText() {
+ if (!skyblockStatus.isOnDungeon()) return new TextSpan(new NullTextStyle(), "");
DungeonContext context = DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext();
- if (context == null) return Collections.emptyList();
+ if (context == null) return new TextSpan(new NullTextStyle(), "");
EntityPlayerSP thePlayer = Minecraft.getMinecraft().thePlayer;
Point roomPt = context.getScaffoldParser().getDungeonMapLayout().worldPointToRoomPoint(thePlayer.getPosition());
DungeonRoom dungeonRoom = context.getScaffoldParser().getRoomMap().get(roomPt);
if (dungeonRoom == null) {
- return Collections.emptyList();
+ return new TextSpan(new NullTextStyle(), "");
}
int facing = (int) (thePlayer.rotationYaw + 45) % 360;
@@ -98,7 +87,7 @@ public class FeatureRoomCoordDisplay extends TextHUDFeature {
OffsetPoint offsetPoint = new OffsetPoint(dungeonRoom, new BlockPos((int)thePlayer.posX, (int)thePlayer.posY, (int)thePlayer.posZ));
- return Collections.singletonList(new StyledText("X: "+offsetPoint.getX()+" Y: "+offsetPoint.getY()+" Z: "+offsetPoint.getZ()+" Facing: "+ FeatureRoomCoordDisplay.facing[real], "coord"));
+ return new TextSpan(getStyle("coord"), "X: "+offsetPoint.getX()+" Y: "+offsetPoint.getY()+" Z: "+offsetPoint.getZ()+" Facing: "+ FeatureRoomCoordDisplay.facing[real]);
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureRoomDebugInfo.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureRoomDebugInfo.java
index ac7c7b90..3ecea83b 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureRoomDebugInfo.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureRoomDebugInfo.java
@@ -24,41 +24,29 @@ import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
import kr.syeyoung.dungeonsguide.mod.dungeon.DungeonContext;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.FontRenderer;
import org.apache.commons.lang3.StringUtils;
import java.awt.*;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
public class FeatureRoomDebugInfo extends TextHUDFeature {
public FeatureRoomDebugInfo() {
super("Debug", "Display Room Debug Info", "ONLY WORKS WITH SECRET SETTING", "advanced.debug.roominfo");
this.setEnabled(false);
- getStyles().add(new TextStyle("info", new AColor(Color.white.getRGB(),true), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("info", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(Color.white.getRGB(),true)).setBackgroundShader(new AColor(0, 0,0,0)));
}
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
- private static final List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Line 1\nLine 2\nLine 3\nLine 4\nLine 5","info"));
- }
-
- @Override
- public List<StyledText> getDummyText() {
- return dummyText;
- }
-
@Override
- public List<String> getUsedTextStyle() {
- return Collections.singletonList("info");
+ public TextSpan getDummyText() {
+ return new TextSpan(getStyle("info"), "Line 1\nLine 2\nLine 3\nLine 4\nLine 5");
}
@Override
@@ -71,13 +59,13 @@ public class FeatureRoomDebugInfo extends TextHUDFeature {
}
@Override
- public List<StyledText> getText() {
- if (!skyblockStatus.isOnDungeon()) return Collections.emptyList();
- if (!FeatureRegistry.DEBUG.isEnabled()) return Collections.emptyList();
+ public TextSpan getText() {
+ if (!skyblockStatus.isOnDungeon()) return new TextSpan(new NullTextStyle(), "");
+ if (!FeatureRegistry.DEBUG.isEnabled()) return new TextSpan(new NullTextStyle(), "");
DungeonContext context = DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext();
- if (context == null) return Collections.emptyList();
+ if (context == null) return new TextSpan(new NullTextStyle(), "");
EntityPlayerSP thePlayer = Minecraft.getMinecraft().thePlayer;
- if (context.getScaffoldParser() == null) return Collections.emptyList();
+ if (context.getScaffoldParser() == null) return new TextSpan(new NullTextStyle(), "");
Point roomPt = context.getScaffoldParser().getDungeonMapLayout().worldPointToRoomPoint(thePlayer.getPosition());
DungeonRoom dungeonRoom = context.getScaffoldParser().getRoomMap().get(roomPt);
FontRenderer fontRenderer = Minecraft.getMinecraft().fontRendererObj;
@@ -100,6 +88,6 @@ public class FeatureRoomDebugInfo extends TextHUDFeature {
str +="room name: " + dungeonRoom.getDungeonRoomInfo().getName()+"\n";
str +="room state / max secret: " + dungeonRoom.getCurrentState() + " / "+dungeonRoom.getTotalSecrets();
}
- return Collections.singletonList(new StyledText(str, "info"));
+ return new TextSpan(getStyle("info"), str);
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureBossHealth.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureBossHealth.java
index 9c534176..9f761821 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureBossHealth.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureBossHealth.java
@@ -25,13 +25,14 @@ import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
import kr.syeyoung.dungeonsguide.mod.config.types.TCBoolean;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.bossfight.HealthData;
import kr.syeyoung.dungeonsguide.mod.features.FeatureParameter;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
-import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
public class FeatureBossHealth extends TextHUDFeature {
@@ -42,11 +43,11 @@ public class FeatureBossHealth extends TextHUDFeature {
addParameter("formatHealth", new FeatureParameter<Boolean>("formatHealth", "format health", "1234568 -> 1m", true, TCBoolean.INSTANCE, nval -> formatHealth = nval));
addParameter("ignoreInattackable", new FeatureParameter<Boolean>("ignoreInattackable", "Don't show health of in-attackable enemy", "For example, do not show guardians health when they're not attackable", false, TCBoolean.INSTANCE, nval -> ignoreInattackable = nval));
- getStyles().add(new TextStyle("title", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("health", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator2", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("maxHealth", new AColor(0x55, 0x55,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("title", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("health", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("separator2", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("maxHealth", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
@@ -61,13 +62,8 @@ public class FeatureBossHealth extends TextHUDFeature {
}
@Override
- public java.util.List<String> getUsedTextStyle() {
- return Arrays.asList("title", "separator", "health", "separator2", "maxHealth");
- }
-
- @Override
- public java.util.List<StyledText> getDummyText() {
- List<StyledText> actualBit = new ArrayList<StyledText>();
+ public TextSpan getDummyText() {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
addLine(new HealthData("The Professor", 3300000, 5000000, false), actualBit);
addLine(new HealthData("Chaos Guardian", 500000, 2000000, true), actualBit);
addLine(new HealthData("Healing Guardian", 1000000, 3000000, true), actualBit);
@@ -76,21 +72,21 @@ public class FeatureBossHealth extends TextHUDFeature {
return actualBit;
}
- public void addLine(HealthData data, List<StyledText> actualBit) {
+ public void addLine(HealthData data, TextSpan actualBit) {
if (ignoreInattackable && !data.isAttackable()) return;
- actualBit.add(new StyledText(data.getName(),"title"));
- actualBit.add(new StyledText(": ","separator"));
- actualBit.add(new StyledText( (formatHealth ? TextUtils.format(data.getHealth()) : data.getHealth()) + (totalHealth ? "" : "\n"),"health"));
+ actualBit.addChild(new TextSpan(getStyle("title"), data.getName()));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("health"), (formatHealth ? TextUtils.format(data.getHealth()) : data.getHealth()) + (totalHealth ? "" : "\n")));
if (totalHealth) {
- actualBit.add(new StyledText("/", "separator2"));
- actualBit.add(new StyledText( (formatHealth ? TextUtils.format(data.getMaxHealth()) : data.getMaxHealth()) +"\n","maxHealth"));
+ actualBit.addChild(new TextSpan(getStyle("separator2"), "/"));
+ actualBit.addChild(new TextSpan(getStyle("maxHealth"), (formatHealth ? TextUtils.format(data.getMaxHealth()) : data.getMaxHealth()) +"\n"));
}
}
@Override
- public java.util.List<StyledText> getText() {
- List<StyledText> actualBit = new ArrayList<StyledText>();
+ public TextSpan getText() {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
List<HealthData> healths = DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getBossfightProcessor().getHealths();
for (HealthData heal : healths) {
addLine(heal, actualBit);
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureCurrentPhase.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureCurrentPhase.java
index bfc32c74..ef97deb1 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureCurrentPhase.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureCurrentPhase.java
@@ -22,53 +22,45 @@ package kr.syeyoung.dungeonsguide.mod.features.impl.boss;
import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
public class FeatureCurrentPhase extends TextHUDFeature {
public FeatureCurrentPhase() {
super("Dungeon.Bossfight", "Display Current Phase", "Displays the current phase of bossfight", "bossfight.phasedisplay");
this.setEnabled(true);
- getStyles().add(new TextStyle("title", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("phase", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("title", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("phase", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
- private static final List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Current Phase","title"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("fight-2","phase"));
- }
@Override
public boolean isHUDViewable() {
return skyblockStatus.isOnDungeon() && DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext() != null && DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getBossfightProcessor() != null;
}
@Override
- public List<String> getUsedTextStyle() {
- return Arrays.asList("title", "separator", "phase");
- }
-
- @Override
- public List<StyledText> getDummyText() {
- return dummyText;
+ public TextSpan getDummyText() {
+ TextSpan textSpan = new TextSpan(new NullTextStyle(), "");
+ textSpan.addChild(new TextSpan(getStyle("title"), "Current Phase"));
+ textSpan.addChild(new TextSpan(getStyle("separator"), ": "));
+ textSpan.addChild(new TextSpan(getStyle("phase"), "fight-2"));
+ return textSpan;
}
@Override
- public List<StyledText> getText() {
+ public TextSpan getText() {
String currentPhase = DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getBossfightProcessor().getCurrentPhase();
- List<StyledText> actualBit = new ArrayList<StyledText>();
- actualBit.add(new StyledText("Current Phase","title"));
- actualBit.add(new StyledText(": ","separator"));
- actualBit.add(new StyledText(currentPhase,"phase"));
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("title"), "Current Phase"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("phase"), currentPhase));
return actualBit;
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureTerracotaTimer.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureTerracotaTimer.java
index 61ca037c..a93c62c5 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureTerracotaTimer.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureTerracotaTimer.java
@@ -23,33 +23,26 @@ import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.bossfight.BossfightProcessorSadan;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
import net.minecraft.entity.boss.BossStatus;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
public class FeatureTerracotaTimer extends TextHUDFeature {
public FeatureTerracotaTimer() {
super("Dungeon.Bossfight.Floor 6", "Display Terracotta phase timer", "Displays Terracotta phase timer", "bossfight.terracota");
this.setEnabled(true);
- getStyles().add(new TextStyle("title", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("time", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("title", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("time", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
- private static final List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Terracottas","title"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("1m 99s","time"));
- }
@Override
public boolean isHUDViewable() {
return skyblockStatus.isOnDungeon() && DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext() != null && DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getBossfightProcessor() instanceof BossfightProcessorSadan &&
@@ -57,21 +50,20 @@ public class FeatureTerracotaTimer extends TextHUDFeature {
}
@Override
- public List<String> getUsedTextStyle() {
- return Arrays.asList("title", "separator", "number", "unit");
- }
-
- @Override
- public List<StyledText> getDummyText() {
- return dummyText;
+ public TextSpan getDummyText() {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("title"), "Terracottas"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("time"), "1m 99s"));
+ return actualBit;
}
@Override
- public List<StyledText> getText() {
- List<StyledText> actualBit = new ArrayList<StyledText>();
- actualBit.add(new StyledText("Terracottas","title"));
- actualBit.add(new StyledText(": ","separator"));
- actualBit.add(new StyledText(TextUtils.formatTime((long) (BossStatus.healthScale * 1000 * 60 * 1.5)),"time"));
+ public TextSpan getText() {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("title"), "Terracottas"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("time"), TextUtils.formatTime((long) (BossStatus.healthScale * 1000 * 60 * 1.5))));
return actualBit;
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureThornBearPercentage.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureThornBearPercentage.java
index 0c712337..8e52ee32 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureThornBearPercentage.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureThornBearPercentage.java
@@ -23,56 +23,47 @@ import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.bossfight.BossfightProcessorThorn;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
public class FeatureThornBearPercentage extends TextHUDFeature {
public FeatureThornBearPercentage() {
super("Dungeon.Bossfight.Floor 4", "Display Spirit Bear Summon Percentage", "Displays spirit bear summon percentage in hud", "bossfight.spiritbear");
this.setEnabled(true);
- getStyles().add(new TextStyle("title", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("number", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("unit", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("title", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("number", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("unit", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
- private static final java.util.List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Spirit Bear","title"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("50","number"));
- dummyText.add(new StyledText("%","unit"));
- }
@Override
public boolean isHUDViewable() {
return skyblockStatus.isOnDungeon() && DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext() != null && DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getBossfightProcessor() instanceof BossfightProcessorThorn;
}
-
- @Override
- public java.util.List<String> getUsedTextStyle() {
- return Arrays.asList("title", "separator", "number", "unit");
- }
-
@Override
- public java.util.List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummyText = new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("title"), "Spirit Bear"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("number"), "50"));
+ dummyText.addChild(new TextSpan(getStyle("unit"), "%"));
return dummyText;
}
@Override
- public java.util.List<StyledText> getText() {
+ public TextSpan getText() {
int percentage = (int) (((BossfightProcessorThorn) DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getBossfightProcessor()).calculatePercentage() * 100);
- List<StyledText> actualBit = new ArrayList<StyledText>();
- actualBit.add(new StyledText("Spirit Bear","title"));
- actualBit.add(new StyledText(": ","separator"));
- actualBit.add(new StyledText(percentage+"","number"));
- actualBit.add(new StyledText("%","unit"));
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("title"), "Spirit Bear"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("number"), percentage+""));
+ actualBit.addChild(new TextSpan(getStyle("unit"), "%"));
return actualBit;
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureThornSpiritBowTimer.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureThornSpiritBowTimer.java
index 11ea4247..212f1019 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureThornSpiritBowTimer.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureThornSpiritBowTimer.java
@@ -25,53 +25,46 @@ import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.bossfight.BossfightProcessorThorn;
import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler;
import kr.syeyoung.dungeonsguide.mod.events.impl.TitleEvent;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
import net.minecraftforge.client.event.ClientChatReceivedEvent;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
public class FeatureThornSpiritBowTimer extends TextHUDFeature {
public FeatureThornSpiritBowTimer() {
super("Dungeon.Bossfight.Floor 4", "Display Spirit bow timer", "Displays how long until spirit bow gets destroyed", "bossfight.spiritbowdisplay");
- getStyles().add(new TextStyle("title", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("time", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("title", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("time", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
- private static final List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Spirit Bow Destruction","title"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("1s","time"));
- }
@Override
public boolean isHUDViewable() {
return skyblockStatus.isOnDungeon() && DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext() != null && DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getBossfightProcessor() instanceof BossfightProcessorThorn && time > System.currentTimeMillis();
}
- @Override
- public List<String> getUsedTextStyle() {
- return Arrays.asList("title", "separator", "time");
- }
@Override
- public List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummyText = new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("title"), "Spirit Bow Destruction"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("time"), "1s"));
return dummyText;
}
@Override
- public List<StyledText> getText() {
- List<StyledText> actualBit = new ArrayList<StyledText>();
- actualBit.add(new StyledText("Spirit Bow Destruction","title"));
- actualBit.add(new StyledText(": ","separator"));
- actualBit.add(new StyledText(TextUtils.formatTime(time - System.currentTimeMillis()),"time"));
+ public TextSpan getText() {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("title"), "Spirit Bow Destruction"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("time"), TextUtils.formatTime(time - System.currentTimeMillis())));
return actualBit;
}
private long time = 0;
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/inviteViewer/PartyInviteViewer.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/inviteViewer/PartyInviteViewer.java
index 5ea37c96..a0d796e9 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/inviteViewer/PartyInviteViewer.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/inviteViewer/PartyInviteViewer.java
@@ -19,7 +19,6 @@
package kr.syeyoung.dungeonsguide.mod.features.impl.discord.inviteViewer;
-import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
import kr.syeyoung.dungeonsguide.mod.config.types.TCInteger;
import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler;
@@ -32,9 +31,6 @@ import kr.syeyoung.dungeonsguide.mod.overlay.OverlayType;
import kr.syeyoung.dungeonsguide.mod.overlay.OverlayWidget;
import kr.syeyoung.dungeonsguide.mod.overlay.WholeScreenPositioner;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
public class PartyInviteViewer extends AbstractGuiFeature {
private WidgetPartyInviteViewer partyInviteViewer;
private OverlayWidget widget;
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonCurrentRoomSecrets.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonCurrentRoomSecrets.java
index 5b408f5f..a54a8861 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonCurrentRoomSecrets.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonCurrentRoomSecrets.java
@@ -23,51 +23,41 @@ import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import net.minecraftforge.client.event.ClientChatReceivedEvent;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
public class FeatureDungeonCurrentRoomSecrets extends TextHUDFeature {
public FeatureDungeonCurrentRoomSecrets() {
super("Dungeon.HUDs", "Display # Secrets in current room", "Display what your actionbar says", "dungeon.stats.secretsroom");
this.setEnabled(false);
- getStyles().add(new TextStyle("title", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("currentSecrets", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator2", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("totalSecrets", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("title", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("currentSecrets", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("separator2", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("totalSecrets", DefaultingDelegatingTextStyle.ofDefault().setTextShader( new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
-
- private static final List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Secrets In Room","title"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("5","currentSecrets"));
- dummyText.add(new StyledText("/","separator2"));
- dummyText.add(new StyledText("8","totalSecrets"));
- }
-
@Override
public boolean isHUDViewable() {
return skyblockStatus.isOnDungeon();
}
@Override
- public List<String> getUsedTextStyle() {
- return Arrays.asList("title", "separator", "currentSecrets", "separator2", "totalSecrets");
- }
-
- @Override
- public List<StyledText> getDummyText() {
- return dummyText;
+ public TextSpan getDummyText() {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("title"), "Secrets In Room"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("currentSecrets"), "5"));
+ actualBit.addChild(new TextSpan(getStyle("separator2"), "/"));
+ actualBit.addChild(new TextSpan(getStyle("totalSecrets"), "8"));
+ return actualBit;
}
private int latestCurrSecrets = 0;
@@ -75,14 +65,14 @@ public class FeatureDungeonCurrentRoomSecrets extends TextHUDFeature {
@Override
- public List<StyledText> getText() {
- if (DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getBossfightProcessor() != null) return new ArrayList<StyledText>();
- List<StyledText> actualBit = new ArrayList<StyledText>();
- actualBit.add(new StyledText("Secrets In Room","title"));
- actualBit.add(new StyledText(": ","separator"));
- actualBit.add(new StyledText(latestCurrSecrets +"","currentSecrets"));
- actualBit.add(new StyledText("/","separator2"));
- actualBit.add(new StyledText(latestTotalSecrets +"","totalSecrets"));
+ public TextSpan getText() {
+ if (DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getBossfightProcessor() != null) return new TextSpan(new NullTextStyle(), "");
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("title"), "Secrets In Room"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("currentSecrets"), latestCurrSecrets +""));
+ actualBit.addChild(new TextSpan(getStyle("separator2"), "/"));
+ actualBit.addChild(new TextSpan(getStyle("totalSecrets"), latestTotalSecrets +""));
return actualBit;
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonDeaths.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonDeaths.java
index 3b961cef..d45ad441 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonDeaths.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonDeaths.java
@@ -27,9 +27,12 @@ import kr.syeyoung.dungeonsguide.mod.dungeon.DungeonContext;
import kr.syeyoung.dungeonsguide.mod.dungeon.events.impl.DungeonDeathEvent;
import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler;
import kr.syeyoung.dungeonsguide.mod.events.impl.DungeonLeftEvent;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabList;
import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabListEntry;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
@@ -38,7 +41,8 @@ import net.minecraft.client.Minecraft;
import net.minecraft.util.ChatComponentText;
import net.minecraftforge.client.event.ClientChatReceivedEvent;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -46,11 +50,11 @@ public class FeatureDungeonDeaths extends TextHUDFeature {
public FeatureDungeonDeaths() {
super("Dungeon.HUDs", "Display Deaths", "Display names of player and death count in dungeon run", "dungeon.stats.deaths");
this.setEnabled(false);
- getStyles().add(new TextStyle("username", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("total", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("deaths", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("totalDeaths", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("username", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("total", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("deaths", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("totalDeaths", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
@@ -61,58 +65,51 @@ public class FeatureDungeonDeaths extends TextHUDFeature {
return context != null;
}
- @Override
- public List<String> getUsedTextStyle() {
- return Arrays.asList("username", "separator", "deaths", "total", "totalDeaths");
- }
@Getter
private final Map<String, Integer> deaths = new HashMap<>();
@Override
- public List<StyledText> getText() {
+ public TextSpan getText() {
- List<StyledText> text= new ArrayList<StyledText>();
+ TextSpan text= new TextSpan(new NullTextStyle(), "");
Map<String, Integer> deaths = getDeaths();
int i = 0;
int deathsCnt = 0;
for (Map.Entry<String, Integer> death:deaths.entrySet()) {
- text.add(new StyledText(death.getKey(),"username"));
- text.add(new StyledText(": ","separator"));
- text.add(new StyledText(death.getValue()+"\n","deaths"));
+ text.addChild(new TextSpan(getStyle("username"), death.getKey()));
+ text.addChild(new TextSpan(getStyle("separator"), ": "));
+ text.addChild(new TextSpan(getStyle("deaths"), death.getValue()+"\n"));
deathsCnt += death.getValue();
}
- text.add(new StyledText("Total Deaths","total"));
- text.add(new StyledText(": ","separator"));
- text.add(new StyledText(getTotalDeaths()+"","totalDeaths"));
+ text.addChild(new TextSpan(getStyle("total"), "Total Deaths"));
+ text.addChild(new TextSpan(getStyle("separator"), ": "));
+ text.addChild(new TextSpan(getStyle("totalDeaths"), getTotalDeaths()+""));
return text;
}
- private static final List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("syeyoung","username"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("-130\n","deaths"));
- dummyText.add(new StyledText("rioho","username"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("-999999\n","deaths"));
- dummyText.add(new StyledText("dungeonsguide","username"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("-42\n","deaths"));
- dummyText.add(new StyledText("penguinman","username"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("0\n","deaths"));
- dummyText.add(new StyledText("probablysalt","username"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("0\n","deaths"));
- dummyText.add(new StyledText("Total Deaths","total"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("0","totalDeaths"));
- }
-
@Override
- public List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummyText= new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("username"), "syeyoung"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("deaths"), "-130\n"));
+ dummyText.addChild(new TextSpan(getStyle("username"), "rioho"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("deaths"), "-999999\n"));
+ dummyText.addChild(new TextSpan(getStyle("username"), "dungeonsguide"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("deaths"), "-42\n"));
+ dummyText.addChild(new TextSpan(getStyle("username"), "penguinman"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("deaths"), "0\n"));
+ dummyText.addChild(new TextSpan(getStyle("username"), "probablysalt"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("deaths"), "0\n"));
+ dummyText.addChild(new TextSpan(getStyle("total"), "Total Deaths"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("totalDeaths"), "0"));
return dummyText;
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonMilestone.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonMilestone.java
index 0db654c4..2c4b0562 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonMilestone.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonMilestone.java
@@ -27,9 +27,11 @@ import kr.syeyoung.dungeonsguide.mod.dungeon.DungeonContext;
import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler;
import kr.syeyoung.dungeonsguide.mod.events.impl.DungeonLeftEvent;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabList;
import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabListEntry;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
@@ -38,7 +40,6 @@ import net.minecraft.util.ChatComponentText;
import net.minecraftforge.client.event.ClientChatReceivedEvent;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
@@ -46,19 +47,13 @@ public class FeatureDungeonMilestone extends TextHUDFeature {
public FeatureDungeonMilestone() {
super("Dungeon.HUDs", "Display Current Class Milestone", "Display current class milestone of yourself", "dungeon.stats.milestone");
this.setEnabled(false);
- getStyles().add(new TextStyle("title", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("number", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("title", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("number", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
- private static final List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Milestone","title"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("9","number"));
- }
@Override
public boolean isHUDViewable() {
@@ -66,25 +61,24 @@ public class FeatureDungeonMilestone extends TextHUDFeature {
}
@Override
- public List<String> getUsedTextStyle() {
- return Arrays.asList("title", "separator", "number");
- }
-
- @Override
- public List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummyText = new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("title"), "Milestone"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("number"), "9"));
return dummyText;
}
@Override
- public List<StyledText> getText() {
- List<StyledText> actualBit = new ArrayList<StyledText>();
- actualBit.add(new StyledText("Milestone","title"));
- actualBit.add(new StyledText(": ","separator"));
+ public TextSpan getText() {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("title"), "Milestone"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
for (TabListEntry tabListEntry : TabList.INSTANCE.getTabListEntries()) {
String name = tabListEntry.getEffectiveName();
if (name.startsWith("§r Milestone: §r")) {
String milestone = TextUtils.stripColor(name).substring(13);
- actualBit.add(new StyledText(milestone+"","number"));
+ actualBit.addChild(new TextSpan(getStyle("number"), milestone+""));
break;
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonRealTime.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonRealTime.java
index a3c6952a..cb97b9b0 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonRealTime.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonRealTime.java
@@ -23,23 +23,22 @@ import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler;
import kr.syeyoung.dungeonsguide.mod.events.impl.DungeonLeftEvent;
import kr.syeyoung.dungeonsguide.mod.events.impl.DungeonStartedEvent;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
public class FeatureDungeonRealTime extends TextHUDFeature {
public FeatureDungeonRealTime() {
super("Dungeon.HUDs", "Display Real Time-Dungeon Time", "Display how much real time has passed since dungeon run started", "dungeon.stats.realtime");
this.setEnabled(false);
- getStyles().add(new TextStyle("title", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("discriminator", new AColor(0xAA,0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("number", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("title", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("discriminator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0xAA,0xAA,0xAA,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("number", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
private long started = -1;
@@ -48,36 +47,30 @@ public class FeatureDungeonRealTime extends TextHUDFeature {
return System.currentTimeMillis() - started;
}
- private static final java.util.List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Time ","title"));
- dummyText.add(new StyledText("(Real)","discriminator"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("-42h","number"));
- }
@Override
public boolean isHUDViewable() {
return started != -1;
}
- @Override
- public java.util.List<String> getUsedTextStyle() {
- return Arrays.asList("title", "discriminator", "separator", "number");
- }
@Override
- public java.util.List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummyText = new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("title"), "Time "));
+ dummyText.addChild(new TextSpan(getStyle("discriminator"), "(Real)"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("number"), "-42h"));
return dummyText;
}
@Override
- public java.util.List<StyledText> getText() {
- List<StyledText> actualBit = new ArrayList<StyledText>();
- actualBit.add(new StyledText("Time","title"));
- actualBit.add(new StyledText("(Real)","discriminator"));
- actualBit.add(new StyledText(": ","separator"));
- actualBit.add(new StyledText(TextUtils.formatTime(getTimeElapsed()),"number"));
+ public TextSpan getText() {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("title"), "Time"));
+ actualBit.addChild(new TextSpan(getStyle("discriminator"), "(Real)"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("number"), TextUtils.formatTime(getTimeElapsed())));
return actualBit;
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonRoomName.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonRoomName.java
index ed006124..9916ba8f 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonRoomName.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonRoomName.java
@@ -24,22 +24,22 @@ import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
import kr.syeyoung.dungeonsguide.mod.dungeon.DungeonContext;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import java.awt.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
public class FeatureDungeonRoomName extends TextHUDFeature {
public FeatureDungeonRoomName() {
super("Dungeon.HUDs", "Display name of the room you are in", "Display name of the room you are in", "dungeon.roomname");
- getStyles().add(new TextStyle("in", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("roomname", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("in", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("roomname", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
@@ -54,39 +54,32 @@ public class FeatureDungeonRoomName extends TextHUDFeature {
return totalSecrets;
}
- private static final List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("You're in ","in"));
- dummyText.add(new StyledText("puzzle-tictactoe","roomname"));
- }
-
@Override
public boolean isHUDViewable() {
return skyblockStatus.isOnDungeon() && DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext() != null && DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getScaffoldParser() != null;
}
- @Override
- public List<String> getUsedTextStyle() {
- return Arrays.asList("roomname", "in");
- }
@Override
- public List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummyText = new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("in"), "You're in "));
+ dummyText.addChild(new TextSpan(getStyle("roomname"), "puzzle-tictactoe"));
return dummyText;
}
@Override
- public List<StyledText> getText() {
+ public TextSpan getText() {
EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
Point roomPt = DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getScaffoldParser().getDungeonMapLayout().worldPointToRoomPoint(player.getPosition());
DungeonRoom dungeonRoom = DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getScaffoldParser().getRoomMap().get(roomPt);
- List<StyledText> actualBit = new ArrayList<StyledText>();
- actualBit.add(new StyledText("You're in ","in"));
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("in"), "You're in "));
if (dungeonRoom == null) {
- actualBit.add(new StyledText("Unknown","roomname"));
+ actualBit.addChild(new TextSpan(getStyle("roomname"), "Unknown"));
} else {
- actualBit.add(new StyledText(dungeonRoom.getDungeonRoomInfo().getName(),"roomname"));
+ actualBit.addChild(new TextSpan(getStyle("roomname"), dungeonRoom.getDungeonRoomInfo().getName()));
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonSBTime.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonSBTime.java
index 1a60e1a4..aa9efed8 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonSBTime.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonSBTime.java
@@ -21,9 +21,12 @@ package kr.syeyoung.dungeonsguide.mod.features.impl.dungeon;
import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.scoreboard.Score;
@@ -31,10 +34,7 @@ import net.minecraft.scoreboard.ScoreObjective;
import net.minecraft.scoreboard.ScorePlayerTeam;
import net.minecraft.scoreboard.Scoreboard;
-import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
-import java.util.List;
public class FeatureDungeonSBTime extends TextHUDFeature {
@@ -43,10 +43,10 @@ public class FeatureDungeonSBTime extends TextHUDFeature {
public FeatureDungeonSBTime() {
super("Dungeon.HUDs", "Display Ingame Dungeon Time", "Display how much time skyblock thinks has passed since dungeon run started", "dungeon.stats.igtime");
this.setEnabled(false);
- getStyles().add(new TextStyle("title", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("discriminator", new AColor(0xAA,0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("number", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("title", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("discriminator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0xAA,0xAA,0xAA,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("number", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
public int getTimeElapsed() {
@@ -72,35 +72,29 @@ public class FeatureDungeonSBTime extends TextHUDFeature {
return time2 * 1000;
}
- private static final java.util.List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Time ","title"));
- dummyText.add(new StyledText("(Ig)","discriminator"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("-42h","number"));
- }
@Override
public boolean isHUDViewable() {
return skyblockStatus.isOnDungeon();
}
- @Override
- public java.util.List<String> getUsedTextStyle() {
- return Arrays.asList("title", "discriminator", "separator", "number");
- }
@Override
- public java.util.List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummyText = new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("title"), "Time "));
+ dummyText.addChild(new TextSpan(getStyle("discriminator"), "(Ig)"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("number"), "-42h"));
return dummyText;
}
@Override
- public java.util.List<StyledText> getText() {
- List<StyledText> actualBit = new ArrayList<StyledText>();
- actualBit.add(new StyledText("Time","title"));
- actualBit.add(new StyledText("(Ig)","discriminator"));
- actualBit.add(new StyledText(": ","separator"));
+ public TextSpan getText() {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("title"), "Time"));
+ actualBit.addChild(new TextSpan(getStyle("discriminator"), "(Ig)"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
Scoreboard scoreboard = Minecraft.getMinecraft().theWorld.getScoreboard();
ScoreObjective objective = scoreboard.getObjectiveInDisplaySlot(1);
Collection<Score> scores = scoreboard.getSortedScores(objective);
@@ -112,7 +106,7 @@ public class FeatureDungeonSBTime extends TextHUDFeature {
time = strippedLine.substring(14);
}
}
- actualBit.add(new StyledText(time,"number"));
+ actualBit.addChild(new TextSpan(getStyle("number"), time));
return actualBit;
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonScore.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonScore.java
index e5f6a581..133e2f44 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonScore.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonScore.java
@@ -28,9 +28,11 @@ import kr.syeyoung.dungeonsguide.mod.dungeon.map.DungeonRoomScaffoldParser;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
import kr.syeyoung.dungeonsguide.mod.features.FeatureParameter;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabList;
import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabListEntry;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
@@ -41,9 +43,6 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import net.minecraft.util.MathHelper;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
@@ -53,15 +52,15 @@ public class FeatureDungeonScore extends TextHUDFeature {
this.setEnabled(false);
addParameter("verbose", new FeatureParameter<Boolean>("verbose", "Show each score instead of sum", "Skill: 100 Explore: 58 S->S+(5 tombs) instead of Score: 305", true, TCBoolean.INSTANCE));
- getStyles().add(new TextStyle("scorename", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("score", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("brackets", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("etc", new AColor(0xAA,0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("currentScore", new AColor(0xFF, 0xAA,0x00,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("arrow", new AColor(0xAA,0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("nextScore", new AColor(0xFF, 0xAA,0x00,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("required", new AColor(0xAA,0xAA,0xAA,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("scorename", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("score", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("brackets", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("etc", DefaultingDelegatingTextStyle.ofDefault().setTextShader( new AColor(0xAA,0xAA,0xAA,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("currentScore", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0xFF, 0xAA,0x00,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("arrow", DefaultingDelegatingTextStyle.ofDefault().setTextShader( new AColor(0xAA,0xAA,0xAA,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("nextScore", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0xFF, 0xAA,0x00,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("required", DefaultingDelegatingTextStyle.ofDefault().setTextShader( new AColor(0xAA,0xAA,0xAA,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
@@ -70,98 +69,89 @@ public class FeatureDungeonScore extends TextHUDFeature {
return skyblockStatus.isOnDungeon();
}
- private static final java.util.List<StyledText> dummyText= new ArrayList<StyledText>();
- private static final java.util.List<StyledText> dummyText2= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Score","scorename"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("305 ","score"));
- dummyText.add(new StyledText("(","brackets"));
- dummyText.add(new StyledText("S+","currentScore"));
- dummyText.add(new StyledText(")","brackets"));
-
-
-
- dummyText2.add(new StyledText("Skill","scorename"));
- dummyText2.add(new StyledText(": ","separator"));
- dummyText2.add(new StyledText("100 ","score"));
- dummyText2.add(new StyledText("(","brackets"));
- dummyText2.add(new StyledText("0 Deaths","etc"));
- dummyText2.add(new StyledText(")\n","brackets"));
- dummyText2.add(new StyledText("Explorer","scorename"));
- dummyText2.add(new StyledText(": ","separator"));
- dummyText2.add(new StyledText("99 ","score"));
- dummyText2.add(new StyledText("(","brackets"));
- dummyText2.add(new StyledText("Rooms O Secrets 39/40","etc"));
- dummyText2.add(new StyledText(")\n","brackets"));
- dummyText2.add(new StyledText("Time","scorename"));
- dummyText2.add(new StyledText(": ","separator"));
- dummyText2.add(new StyledText("100 ","score"));
- dummyText2.add(new StyledText("Bonus","scorename"));
- dummyText2.add(new StyledText(": ","separator"));
- dummyText2.add(new StyledText("0 ","score"));
- dummyText2.add(new StyledText("Total","scorename"));
- dummyText2.add(new StyledText(": ","separator"));
- dummyText2.add(new StyledText("299\n","score"));
- dummyText2.add(new StyledText("S","currentScore"));
- dummyText2.add(new StyledText("->","arrow"));
- dummyText2.add(new StyledText("S+ ","nextScore"));
- dummyText2.add(new StyledText("(","brackets"));
- dummyText2.add(new StyledText("1 Required 1 crypt","required"));
- dummyText2.add(new StyledText(")","brackets"));
-
- }
-
@Override
- public java.util.List<String> getUsedTextStyle() {
- return Arrays.asList("scorename", "separator", "score", "brackets", "etc", "currentScore", "arrow", "nextScore", "required");
+ public TextSpan getDummyText() {
+ if (this.<Boolean>getParameter("verbose").getValue()) {
+ TextSpan dummyText2 = new TextSpan(new NullTextStyle(), "");
+ dummyText2.addChild(new TextSpan(getStyle("scorename"), "Skill"));
+ dummyText2.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText2.addChild(new TextSpan(getStyle("score"), "100 "));
+ dummyText2.addChild(new TextSpan(getStyle("brackets"), "("));
+ dummyText2.addChild(new TextSpan(getStyle("etc"), "0 Deaths"));
+ dummyText2.addChild(new TextSpan(getStyle("brackets"), ")\n"));
+ dummyText2.addChild(new TextSpan(getStyle("scorename"), "Explorer"));
+ dummyText2.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText2.addChild(new TextSpan(getStyle("score"), "99 "));
+ dummyText2.addChild(new TextSpan(getStyle("brackets"), "("));
+ dummyText2.addChild(new TextSpan(getStyle("etc"), "Rooms O Secrets 39/40"));
+ dummyText2.addChild(new TextSpan(getStyle("brackets"), ")\n"));
+ dummyText2.addChild(new TextSpan(getStyle("scorename"), "Time"));
+ dummyText2.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText2.addChild(new TextSpan(getStyle("score"), "100 "));
+ dummyText2.addChild(new TextSpan(getStyle("scorename"), "Bonus"));
+ dummyText2.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText2.addChild(new TextSpan(getStyle("score"), "0 "));
+ dummyText2.addChild(new TextSpan(getStyle("scorename"), "Total"));
+ dummyText2.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText2.addChild(new TextSpan(getStyle("score"), "299\n"));
+ dummyText2.addChild(new TextSpan(getStyle("currentScore"), "S"));
+ dummyText2.addChild(new TextSpan(getStyle("arrow"), "->"));
+ dummyText2.addChild(new TextSpan(getStyle("nextScore"), "S+ "));
+ dummyText2.addChild(new TextSpan(getStyle("brackets"), "("));
+ dummyText2.addChild(new TextSpan(getStyle("required"), "1 Required 1 crypt"));
+ dummyText2.addChild(new TextSpan(getStyle("brackets"), ")"));
+ return dummyText2;
+ } else {
+ TextSpan dummyText = new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("scorename"), "Score"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("score"), "305 "));
+ dummyText.addChild(new TextSpan(getStyle("brackets"), "("));
+ dummyText.addChild(new TextSpan(getStyle("currentScore"), "S+"));
+ dummyText.addChild(new TextSpan(getStyle("brackets"), ")"));
+ return dummyText;
+ }
}
@Override
- public java.util.List<StyledText> getDummyText() {
-
- if (this.<Boolean>getParameter("verbose").getValue()) {return dummyText2;} else return dummyText;
- }
-
- @Override
- public java.util.List<StyledText> getText() {
- List<StyledText> actualBit = new ArrayList<StyledText>();
+ public TextSpan getText() {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
ScoreCalculation score = calculateScore();
- if (score == null) return new ArrayList<StyledText>();
+ if (score == null) return new TextSpan(new NullTextStyle(), "");
int sum = score.time + score.skill + score.explorer + score.bonus;
if (this.<Boolean>getParameter("verbose").getValue()) {
- actualBit.add(new StyledText("Skill", "scorename"));
- actualBit.add(new StyledText(": ", "separator"));
- actualBit.add(new StyledText(score.skill + " ", "score"));
- actualBit.add(new StyledText("(", "brackets"));
- actualBit.add(new StyledText(score.deaths + " Deaths", "etc"));
- actualBit.add(new StyledText(")\n", "brackets"));
- actualBit.add(new StyledText("Explorer", "scorename"));
- actualBit.add(new StyledText(": ", "separator"));
- actualBit.add(new StyledText(score.explorer + " ", "score"));
- actualBit.add(new StyledText("(", "brackets"));
- actualBit.add(new StyledText("Rooms " + (score.fullyCleared ? "O" : "X") + " Secrets " + score.secrets + "/" + score.effectiveTotalSecrets +" of "+score.getTotalSecrets() + (score.totalSecretsKnown ? "" : "?"), "etc"));
- actualBit.add(new StyledText(")\n", "brackets"));
- actualBit.add(new StyledText("Time", "scorename"));
- actualBit.add(new StyledText(": ", "separator"));
- actualBit.add(new StyledText(score.time + " ", "score"));
- actualBit.add(new StyledText("Bonus", "scorename"));
- actualBit.add(new StyledText(": ", "separator"));
- actualBit.add(new StyledText(score.bonus + " ", "score"));
- actualBit.add(new StyledText("Total", "scorename"));
- actualBit.add(new StyledText(": ", "separator"));
- actualBit.add(new StyledText(sum + "\n", "score"));
- actualBit.addAll(buildRequirement(score));
+ actualBit.addChild(new TextSpan(getStyle("scorename"), "Skill"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("score"), score.skill + " "));
+ actualBit.addChild(new TextSpan(getStyle("brackets"), "("));
+ actualBit.addChild(new TextSpan(getStyle("etc"), score.deaths + " Deaths"));
+ actualBit.addChild(new TextSpan(getStyle("brackets"), ")\n"));
+ actualBit.addChild(new TextSpan(getStyle("scorename"), "Explorer"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("score"), score.explorer + " "));
+ actualBit.addChild(new TextSpan(getStyle("brackets"), "("));
+ actualBit.addChild(new TextSpan(getStyle("etc"), "Rooms " + (score.fullyCleared ? "O" : "X") + " Secrets " + score.secrets + "/" + score.effectiveTotalSecrets +" of "+score.getTotalSecrets() + (score.totalSecretsKnown ? "" : "?")));
+ actualBit.addChild(new TextSpan(getStyle("brackets"), ")\n"));
+ actualBit.addChild(new TextSpan(getStyle("scorename"), "Time"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("score"), score.time + " "));
+ actualBit.addChild(new TextSpan(getStyle("scorename"), "Bonus"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("score"), score.bonus + " "));
+ actualBit.addChild(new TextSpan(getStyle("scorename"), "Total"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("score"), sum + "\n"));
+ actualBit.addChild(buildRequirement(score));
} else {
String letter = getLetter(sum);
- actualBit.add(new StyledText("Score", "scorename"));
- actualBit.add(new StyledText(": ", "separator"));
- actualBit.add(new StyledText(sum + " ", "score"));
- actualBit.add(new StyledText("(", "brackets"));
- actualBit.add(new StyledText(letter, "currentScore"));
- actualBit.add(new StyledText(")", "brackets"));
+ actualBit.addChild(new TextSpan(getStyle("scorename"), "Score"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("score"), sum + " "));
+ actualBit.addChild(new TextSpan(getStyle("brackets"), "("));
+ actualBit.addChild(new TextSpan(getStyle("currentScore"), letter));
+ actualBit.addChild(new TextSpan(getStyle("brackets"), ")"));
}
return actualBit;
@@ -325,13 +315,13 @@ public class FeatureDungeonScore extends TextHUDFeature {
if (letter.equals("S")) return "S+";
else return null;
}
- public List<StyledText> buildRequirement(ScoreCalculation calculation) {
- List<StyledText> actualBit = new ArrayList<StyledText>();
+ public TextSpan buildRequirement(ScoreCalculation calculation) {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
int current = calculation.time + calculation.bonus + calculation.explorer + calculation.skill;
String currentLetter = getLetter(current);
String nextLetter= getNextLetter(currentLetter);
if (nextLetter == null) {
- actualBit.add(new StyledText("S+ Expected","nextScore"));
+ actualBit.addChild(new TextSpan(getStyle("nextScore"), "S+ Expected"));
return actualBit;
}
int req = getScoreRequirement(nextLetter);
@@ -344,12 +334,12 @@ public class FeatureDungeonScore extends TextHUDFeature {
double secretPer = 40.0 / calculation.effectiveTotalSecrets;
int secrets = (int) Math.ceil(reqPT / secretPer);
- actualBit.add(new StyledText(currentLetter,"currentScore"));
- actualBit.add(new StyledText("->","arrow"));
- actualBit.add(new StyledText(nextLetter+" ","nextScore"));
- actualBit.add(new StyledText("(","brackets"));
- actualBit.add(new StyledText(reqPT2+" required "+tombsBreakable+" crypt "+secrets+" secrets","required"));
- actualBit.add(new StyledText(")","brackets"));
+ actualBit.addChild(new TextSpan(getStyle("currentScore"), currentLetter));
+ actualBit.addChild(new TextSpan(getStyle("arrow"), "->"));
+ actualBit.addChild(new TextSpan(getStyle("nextScore"), nextLetter+" "));
+ actualBit.addChild(new TextSpan(getStyle("brackets"), "("));
+ actualBit.addChild(new TextSpan(getStyle("required"), reqPT2+" required "+tombsBreakable+" crypt "+secrets+" secrets"));
+ actualBit.addChild(new TextSpan(getStyle("brackets"), ")"));
return actualBit;
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonSecrets.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonSecrets.java
index da9553a9..fd5a3e72 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonSecrets.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonSecrets.java
@@ -24,27 +24,26 @@ import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
import kr.syeyoung.dungeonsguide.mod.dungeon.DungeonContext;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabList;
import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabListEntry;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
public class FeatureDungeonSecrets extends TextHUDFeature {
public FeatureDungeonSecrets() {
super("Dungeon.HUDs", "Display Total # of Secrets", "Display how much total secrets have been found in a dungeon run.\n+ sign means DG does not know the correct number, but it's somewhere above that number.", "dungeon.stats.secrets");
this.setEnabled(false);
- getStyles().add(new TextStyle("title", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("currentSecrets", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator2", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("totalSecrets", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("unknown", new AColor(0xFF, 0xFF,0x55,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("title", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("currentSecrets", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("separator2", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("totalSecrets", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("unknown", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0xFF, 0xFF,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
@@ -107,15 +106,6 @@ public class FeatureDungeonSecrets extends TextHUDFeature {
}
- private static final java.util.List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Secrets","title"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("999","currentSecrets"));
- dummyText.add(new StyledText("/","separator2"));
- dummyText.add(new StyledText("2","totalSecrets"));
- dummyText.add(new StyledText("+","unknown"));
- }
@Override
public boolean isHUDViewable() {
@@ -123,25 +113,27 @@ public class FeatureDungeonSecrets extends TextHUDFeature {
}
@Override
- public java.util.List<String> getUsedTextStyle() {
- return Arrays.asList("title", "separator", "currentSecrets", "separator2", "totalSecrets", "unknown");
- }
-
- @Override
- public java.util.List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummyText = new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("title"), "Secrets"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("currentSecrets"), "999"));
+ dummyText.addChild(new TextSpan(getStyle("separator2"), "/"));
+ dummyText.addChild(new TextSpan(getStyle("totalSecrets"), "2"));
+ dummyText.addChild(new TextSpan(getStyle("unknown"), "+"));
return dummyText;
}
@Override
- public java.util.List<StyledText> getText() {
- List<StyledText> actualBit = new ArrayList<StyledText>();
- actualBit.add(new StyledText("Secrets","title"));
- actualBit.add(new StyledText(": ","separator"));
- actualBit.add(new StyledText(getSecretsFound() +"","currentSecrets"));
- actualBit.add(new StyledText("/","separator2"));
-
- actualBit.add(new StyledText((int)Math.ceil(getTotalSecretsInt() * DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getSecretPercentage())+" of "+getTotalSecretsInt(),"totalSecrets"));
- actualBit.add(new StyledText(getTotalSecrets().contains("+") ? "+" : "","unknown"));
+ public TextSpan getText() {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("title"), "Secrets"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("currentSecrets"), getSecretsFound() +""));
+ actualBit.addChild(new TextSpan(getStyle("separator2"), "/"));
+
+ actualBit.addChild(new TextSpan(getStyle("totalSecrets"), (int)Math.ceil(getTotalSecretsInt() * DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getSecretPercentage())+" of "+getTotalSecretsInt()));
+ actualBit.addChild(new TextSpan(getStyle("unknown"), getTotalSecrets().contains("+") ? "+" : ""));
return actualBit;
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonTombs.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonTombs.java
index f62d755f..788ac509 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonTombs.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonTombs.java
@@ -22,24 +22,23 @@ package kr.syeyoung.dungeonsguide.mod.features.impl.dungeon;
import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabList;
import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabListEntry;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
public class FeatureDungeonTombs extends TextHUDFeature {
public FeatureDungeonTombs() {
super("Dungeon.HUDs", "Display # of Crypts", "Display how much total crypts have been blown up in a dungeon run", "dungeon.stats.tombs");
this.setEnabled(false);
- getStyles().add(new TextStyle("title", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("number", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("title", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("number", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
@@ -54,12 +53,6 @@ public class FeatureDungeonTombs extends TextHUDFeature {
return 0;
}
- private static final java.util.List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Crypts","title"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("42","number"));
- }
@Override
public boolean isHUDViewable() {
@@ -67,21 +60,20 @@ public class FeatureDungeonTombs extends TextHUDFeature {
}
@Override
- public java.util.List<String> getUsedTextStyle() {
- return Arrays.asList("title", "separator", "number");
- }
-
- @Override
- public java.util.List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummyText = new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("title"), "Crypts"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("number"), "42"));
return dummyText;
}
@Override
- public java.util.List<StyledText> getText() {
- List<StyledText> actualBit = new ArrayList<StyledText>();
- actualBit.add(new StyledText("Crypts","title"));
- actualBit.add(new StyledText(": ","separator"));
- actualBit.add(new StyledText(getTombsFound()+"","number"));
+ public TextSpan getText() {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("title"), "Crypts"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("number"), getTombsFound()+""));
return actualBit;
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureWarnLowHealth.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureWarnLowHealth.java
index c48b9046..e14ccb8b 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureWarnLowHealth.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureWarnLowHealth.java
@@ -24,28 +24,26 @@ import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
import kr.syeyoung.dungeonsguide.mod.config.types.TCInteger;
import kr.syeyoung.dungeonsguide.mod.features.FeatureParameter;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.parallelUniverse.scoreboard.Objective;
import kr.syeyoung.dungeonsguide.mod.parallelUniverse.scoreboard.Score;
import kr.syeyoung.dungeonsguide.mod.parallelUniverse.scoreboard.ScoreboardManager;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
public class FeatureWarnLowHealth extends TextHUDFeature {
public FeatureWarnLowHealth() {
super("Dungeon.Teammates", "Low Health Warning", "Warn if someone is on low health", "dungeon.lowhealthwarn");
addParameter("threshold", new FeatureParameter<Integer>("threshold", "Health Threshold", "Health Threshold for this feature to be toggled. default to 500", 500, TCInteger.INSTANCE));
- getStyles().add(new TextStyle("title", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("number", new AColor(0xFF, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("unit", new AColor(0xFF, 0x55,0x55,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("title", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("number", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0xFF, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("unit", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0xFF, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
setEnabled(false);
}
@@ -59,29 +57,21 @@ public class FeatureWarnLowHealth extends TextHUDFeature {
}
@Override
- public List<String> getUsedTextStyle() {
- return Arrays.asList("title", "separator", "number", "unit");
- }
-
- private static final java.util.List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("DungeonsGuide","title"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("500","number"));
- dummyText.add(new StyledText("hp","unit"));
- }
-
- @Override
- public List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummyText = new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("title"), "DungeonsGuide"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("number"), "500"));
+ dummyText.addChild(new TextSpan(getStyle("unit"), "hp"));
return dummyText;
}
@Override
- public List<StyledText> getText() {
+ public TextSpan getText() {
String lowestHealthName = "";
int lowestHealth = 999999999;
Objective objective = ScoreboardManager.INSTANCE.getSidebarObjective();
- if (objective == null) return Collections.emptyList();
+ if (objective == null) return new TextSpan(new NullTextStyle(), "");
for (Score sc : objective.getScores()) {
String line = sc.getVisibleName();
String stripped = TextUtils.keepScoreboardCharacters(TextUtils.stripColor(line));
@@ -94,13 +84,13 @@ public class FeatureWarnLowHealth extends TextHUDFeature {
}
}
}
- if (lowestHealth > this.<Integer>getParameter("threshold").getValue()) return new ArrayList<StyledText>();
+ if (lowestHealth > this.<Integer>getParameter("threshold").getValue()) return new TextSpan(new NullTextStyle(), "");
- List<StyledText> actualBit = new ArrayList<StyledText>();
- actualBit.add(new StyledText(lowestHealthName,"title"));
- actualBit.add(new StyledText(": ","separator"));
- actualBit.add(new StyledText(lowestHealth+"","number"));
- actualBit.add(new StyledText("hp","unit"));
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("title"), lowestHealthName));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("number"), lowestHealth+""));
+ actualBit.addChild(new TextSpan(getStyle("unit"), "hp"));
return actualBit;
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureWatcherWarning.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureWatcherWarning.java
index 71241ff3..fe2c28d5 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureWatcherWarning.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureWatcherWarning.java
@@ -26,21 +26,18 @@ import kr.syeyoung.dungeonsguide.mod.dungeon.DungeonContext;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler;
import kr.syeyoung.dungeonsguide.mod.events.impl.DungeonLeftEvent;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import net.minecraftforge.client.event.ClientChatReceivedEvent;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
import java.util.UUID;
-public class FeatureWatcherWarning extends TextHUDFeature {
+public class FeatureWatcherWarning extends TextHUDFeature {
public FeatureWatcherWarning() {
super("Dungeon.Blood Room","Watcher Spawn Alert", "Alert when watcher says 'That will be enough for now'", "dungen.watcherwarn");
- getStyles().add(new TextStyle("warning", new AColor(0xFF, 0x69,0x17,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("warning", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0xFF, 0x69,0x17,255)).setBackgroundShader(new AColor(0, 0,0,0)));
setEnabled(false);
}
@@ -50,24 +47,15 @@ public class FeatureWatcherWarning extends TextHUDFeature {
return warning > System.currentTimeMillis();
}
- @Override
- public List<String> getUsedTextStyle() {
- return Collections.singletonList("warning");
- }
-
private final UUID lastRoomUID = UUID.randomUUID();
private long warning = 0;
- private static final List<StyledText> text = new ArrayList<StyledText>();
- static {
- text.add(new StyledText("Watcher finished spawning all mobs!", "warning"));
- }
-
@Override
- public List<StyledText> getText() {
- return text;
+ public TextSpan getText() {
+ return new TextSpan(getStyle("warning"), "Watcher finished spawning all mobs!");
}
+
@DGEventHandler()
public void onChat(ClientChatReceivedEvent clientChatReceivedEvent) {
if (clientChatReceivedEvent.message.getFormattedText().equals("§r§c[BOSS] The Watcher§r§f: That will be enough for now.§r")) {
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureCooldownCounter.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureCooldownCounter.java
index e879e45c..c7d6b21d 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureCooldownCounter.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureCooldownCounter.java
@@ -22,36 +22,33 @@ package kr.syeyoung.dungeonsguide.mod.features.impl.etc;
import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler;
import kr.syeyoung.dungeonsguide.mod.events.impl.DungeonLeftEvent;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import net.minecraft.client.gui.inventory.GuiChest;
import net.minecraft.inventory.ContainerChest;
import net.minecraftforge.client.event.GuiOpenEvent;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
public class FeatureCooldownCounter extends TextHUDFeature {
public FeatureCooldownCounter() {
super("Dungeon", "Dungeon Cooldown Counter", "Counts 10 seconds after leaving dungeon", "qol.cooldown");
- getStyles().add(new TextStyle("title", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("number", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("title", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("number", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
private long leftDungeonTime = 0L;
- private static final java.util.List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Cooldown","title"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("20s","number"));
- }
@Override
- public List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummyText = new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("title"), "Cooldown"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("number"), "20s"));
return dummyText;
}
@@ -59,18 +56,13 @@ public class FeatureCooldownCounter extends TextHUDFeature {
public boolean isHUDViewable() {
return System.currentTimeMillis() - leftDungeonTime < 20000;
}
-
- @Override
- public java.util.List<String> getUsedTextStyle() {
- return Arrays.asList("title", "separator", "number");
- }
-
+
@Override
- public List<StyledText> getText() {
- List<StyledText> actualBit = new ArrayList<StyledText>();
- actualBit.add(new StyledText("Cooldown","title"));
- actualBit.add(new StyledText(": ","separator"));
- actualBit.add(new StyledText((20 - (System.currentTimeMillis() - leftDungeonTime) / 1000)+"s","number"));
+ public TextSpan getText() {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
+ actualBit.addChild(new TextSpan(getStyle("title"), "Cooldown"));
+ actualBit.addChild(new TextSpan(getStyle("separator"), ": "));
+ actualBit.addChild(new TextSpan(getStyle("number"), (20 - (System.currentTimeMillis() - leftDungeonTime) / 1000)+"s"));
return actualBit;
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/ability/FeatureAbilityCooldown.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/ability/FeatureAbilityCooldown.java
index 5f06ccd6..af21fcb1 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/ability/FeatureAbilityCooldown.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/ability/FeatureAbilityCooldown.java
@@ -26,9 +26,12 @@ import kr.syeyoung.dungeonsguide.mod.config.types.TCInteger;
import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler;
import kr.syeyoung.dungeonsguide.mod.events.impl.DGTickEvent;
import kr.syeyoung.dungeonsguide.mod.features.FeatureParameter;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
@@ -45,11 +48,11 @@ public class FeatureAbilityCooldown extends TextHUDFeature {
public FeatureAbilityCooldown() {
super("Misc", "View Ability Cooldowns", "A handy hud for viewing cooldown abilities", "etc.abilitycd2");
- getStyles().add(new TextStyle("abilityname", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("number", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("unit",new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("ready",new AColor(0xDF, 0x00,0x67,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("abilityname", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("number", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("unit",DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("ready",DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0xDF, 0x00,0x67,255)).setBackgroundShader(new AColor(0, 0,0,0)));
addParameter("disable", new FeatureParameter<Boolean>("disable", "Disable outside of dungeon", "Disable the feature when out of dungeon", false, TCBoolean.INSTANCE));
addParameter("decimal", new FeatureParameter<Integer>("decimal", "Decimal places", "ex) 2 -> Cooldown: 3.21 3-> Cooldown: 3.210", 0, TCInteger.INSTANCE));
}
@@ -59,31 +62,23 @@ public class FeatureAbilityCooldown extends TextHUDFeature {
return SkyblockStatus.isOnSkyblock() && (!this.<Boolean>getParameter("disable").getValue() || (this.<Boolean>getParameter("disable").getValue() && SkyblockStatus.isOnSkyblock()));
}
- @Override
- public List<String> getUsedTextStyle() {
- return Arrays.asList("abilityname", "separator", "number", "unit", "ready");
- }
-
- private static final List<StyledText> dummy = new ArrayList<>();
-
- static {
- dummy.add(new StyledText("Random Ability", "abilityname"));
- dummy.add(new StyledText(": ", "separator"));
- dummy.add(new StyledText("10", "number"));
- dummy.add(new StyledText("s\n", "unit"));
- dummy.add(new StyledText("Random Ability2", "abilityname"));
- dummy.add(new StyledText(": ", "separator"));
- dummy.add(new StyledText("10", "number"));
- dummy.add(new StyledText("m ", "unit"));
- dummy.add(new StyledText("9", "number"));
- dummy.add(new StyledText("s\n", "unit"));
- dummy.add(new StyledText("Random Ability", "abilityname"));
- dummy.add(new StyledText(": ", "separator"));
- dummy.add(new StyledText("READY", "ready"));
- }
@Override
- public List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummy = new TextSpan(new NullTextStyle(), "");
+ dummy.addChild(new TextSpan(getStyle("abilityname"), "Random Ability"));
+ dummy.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummy.addChild(new TextSpan(getStyle("number"), "10"));
+ dummy.addChild(new TextSpan(getStyle("unit"), "s\n"));
+ dummy.addChild(new TextSpan(getStyle("abilityname"), "Random Ability2"));
+ dummy.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummy.addChild(new TextSpan(getStyle("number"), "10"));
+ dummy.addChild(new TextSpan(getStyle("unit"), "m "));
+ dummy.addChild(new TextSpan(getStyle("number"), "9"));
+ dummy.addChild(new TextSpan(getStyle("unit"), "s\n"));
+ dummy.addChild(new TextSpan(getStyle("abilityname"), "Random Ability"));
+ dummy.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummy.addChild(new TextSpan(getStyle("ready"), "READY"));
return dummy;
}
@@ -250,24 +245,24 @@ public class FeatureAbilityCooldown extends TextHUDFeature {
});
@Override
- public List<StyledText> getText() {
- List<StyledText> cooldowns = new ArrayList<>();
+ public TextSpan getText() {
+ TextSpan cooldowns = new TextSpan(new NullTextStyle(), "");
for (UsedAbility usedAbility : usedAbilities) {
long end = usedAbility.getCooldownEnd();
if (System.currentTimeMillis() >= end) {
if (System.currentTimeMillis() <= end + 20000) {
- cooldowns.add(new StyledText(usedAbility.getAbility().getName(), "abilityname"));
- cooldowns.add(new StyledText(": ", "separator"));
- cooldowns.add(new StyledText("READY\n", "ready"));
+ cooldowns.addChild(new TextSpan(getStyle("abilityname"), usedAbility.getAbility().getName()));
+ cooldowns.addChild(new TextSpan(getStyle("separator"), ": "));
+ cooldowns.addChild(new TextSpan(getStyle("ready"), "READY\n"));
}
} else {
- cooldowns.add(new StyledText(usedAbility.getAbility().getName(), "abilityname"));
- cooldowns.add(new StyledText(": ", "separator"));
+ cooldowns.addChild(new TextSpan(getStyle("abilityname"), usedAbility.getAbility().getName()));
+ cooldowns.addChild(new TextSpan(getStyle("separator"), ": "));
long millies = end-System.currentTimeMillis();
double decimalPlaces = (double ) Math.pow(10, 3- this.<Integer>getParameter("decimal").getValue());
if (decimalPlaces == 0) {
- cooldowns.add(new StyledText( this.<Integer>getParameter("decimal").getValue()+" decimal places? You'd be joking\n", "unit"));
+ cooldowns.addChild(new TextSpan(getStyle("unit"), this.<Integer>getParameter("decimal").getValue()+" decimal places? You'd be joking\n"));
continue;
}
millies = (long) (((millies-1) / decimalPlaces + 1) * decimalPlaces);
@@ -277,18 +272,18 @@ public class FeatureAbilityCooldown extends TextHUDFeature {
String secondStr = String.format("%."+(this.<Integer>getParameter("decimal").getValue())+"f", seconds);
if (hr > 0) {
- cooldowns.add(new StyledText(String.valueOf(hr), "number"));
- cooldowns.add(new StyledText("h ", "unit"));
+ cooldowns.addChild(new TextSpan(getStyle("number"), String.valueOf(hr)));
+ cooldowns.addChild(new TextSpan(getStyle("unit"), "h "));
}
if (hr > 0 || min > 0) {
- cooldowns.add(new StyledText(String.valueOf(min), "number"));
- cooldowns.add(new StyledText("m ", "unit"));
+ cooldowns.addChild(new TextSpan(getStyle("number"), String.valueOf(min)));
+ cooldowns.addChild(new TextSpan(getStyle("unit"), "m "));
}
if (hr > 0 || min > 0 || seconds > 0) {
- cooldowns.add(new StyledText(secondStr, "number"));
- cooldowns.add(new StyledText("s ", "unit"));
+ cooldowns.addChild(new TextSpan(getStyle("number"), secondStr));
+ cooldowns.addChild(new TextSpan(getStyle("unit"), "s "));
}
- cooldowns.add(new StyledText("\n", "unit"));
+ cooldowns.addChild(new TextSpan(getStyle("unit"), "\n"));
}
}
return cooldowns;
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeaturePartyList.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeaturePartyList.java
index 229bcfaf..3117b60f 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeaturePartyList.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeaturePartyList.java
@@ -20,23 +20,22 @@ package kr.syeyoung.dungeonsguide.mod.features.impl.party;
import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.party.PartyContext;
import kr.syeyoung.dungeonsguide.mod.party.PartyManager;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
public class FeaturePartyList extends TextHUDFeature {
public FeaturePartyList() {
super("Party","Party List", "Party List as GUI", "party.list");
- getStyles().add(new TextStyle("name", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("player", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("allinvite", new AColor(0xAA,0xAA,0xAA,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("name", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("player", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("allinvite", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0xAA,0xAA,0xAA,255)).setBackgroundShader(new AColor(0, 0,0,0)));
setEnabled(false);
}
@@ -44,50 +43,43 @@ public class FeaturePartyList extends TextHUDFeature {
public boolean isHUDViewable() {
return PartyManager.INSTANCE.getPartyContext() != null;
}
+
@Override
- public java.util.List<String> getUsedTextStyle() {
- return Arrays.asList("name" ,"separator", "player", "allinvite");
- }
-
- private static final List<StyledText> dummyText = new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Leader","name"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("syeyoung","player"));
- dummyText.add(new StyledText("\nModerator","name"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("rioho, RaidShadowLegends, Tricked","player"));
- dummyText.add(new StyledText("\nMember","name"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("Everyone","player"));
- dummyText.add(new StyledText("\nAll invite Off","allinvite"));
- }
-
- @Override
- public List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummyText = new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("name"), "Leader"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("player"), "syeyoung"));
+ dummyText.addChild(new TextSpan(getStyle("name"), "\nModerator"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("player"), "rioho, RaidShadowLegends, Tricked"));
+ dummyText.addChild(new TextSpan(getStyle("name"), "\nMember"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("player"), "Everyone"));
+ dummyText.addChild(new TextSpan(getStyle("allinvite"), "\nAll invite Off"));
return dummyText;
}
@Override
- public List<StyledText> getText() {
+ public TextSpan getText() {
PartyContext pc = PartyManager.INSTANCE.getPartyContext();
- List<StyledText> text= new ArrayList<>();
- text.add(new StyledText("Leader","name"));
- text.add(new StyledText(": ","separator"));
- text.add(new StyledText(pc.getPartyOwner()+"","player"));
- text.add(new StyledText("\nModerator","name"));
- text.add(new StyledText(": ","separator"));
- text.add(new StyledText(pc.getPartyModerator() == null ? "????" : String.join(", ", pc.getPartyModerator()) + (pc.isModeratorComplete() ? "" : " ?"),"player"));
- text.add(new StyledText("\nMember","name"));
- text.add(new StyledText(": ","separator"));
- text.add(new StyledText(pc.getPartyMember() == null ? "????" : String.join(", ", pc.getPartyMember()) + (pc.isMemberComplete() ? "" : " ?"),"player"));
+ TextSpan text = new TextSpan(new NullTextStyle(), "");
+ text.addChild(new TextSpan(getStyle("name"), "Leader"));
+ text.addChild(new TextSpan(getStyle("separator"), ": "));
+ text.addChild(new TextSpan(getStyle("player"), pc.getPartyOwner()+""));
+ text.addChild(new TextSpan(getStyle("name"), "\nModerator"));
+ text.addChild(new TextSpan(getStyle("separator"), ": "));
+ text.addChild(new TextSpan(getStyle("player"), pc.getPartyModerator() == null ? "????" : String.join(", ", pc.getPartyModerator()) + (pc.isModeratorComplete() ? "" : " ?")));
+ text.addChild(new TextSpan(getStyle("name"), "\nMember"));
+ text.addChild(new TextSpan(getStyle("separator"), ": "));
+ text.addChild(new TextSpan(getStyle("player"), pc.getPartyMember() == null ? "????" : String.join(", ", pc.getPartyMember()) + (pc.isMemberComplete() ? "" : " ?")));
if (pc.getAllInvite() != null && !pc.getAllInvite())
- text.add(new StyledText("\nAll invite Off","allinvite"));
+ text.addChild(new TextSpan(getStyle("allinvite"), "\nAll invite Off"));
else if (pc.getAllInvite() != null)
- text.add(new StyledText("\nAll invite On","allinvite"));
+ text.addChild(new TextSpan(getStyle("allinvite"), "\nAll invite On"));
else
- text.add(new StyledText("\nAll invite Unknown","allinvite"));
+ text.addChild(new TextSpan(getStyle("allinvite"), "\nAll invite Unknown"));
return text;
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeaturePartyReady.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeaturePartyReady.java
index f061188b..8fa350e6 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeaturePartyReady.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeaturePartyReady.java
@@ -23,9 +23,12 @@ import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler;
import kr.syeyoung.dungeonsguide.mod.events.impl.DungeonStartedEvent;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.party.PartyContext;
import kr.syeyoung.dungeonsguide.mod.party.PartyManager;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
@@ -36,11 +39,11 @@ import java.util.*;
public class FeaturePartyReady extends TextHUDFeature {
public FeaturePartyReady() {
super("Party","Party Ready List", "Check if your party member have said r or not", "party.readylist");
- getStyles().add(new TextStyle("player", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("ready", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("notready", new AColor(0xFF, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("terminal", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("player", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("ready", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("notready", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0xFF, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("terminal", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
setEnabled(true);
}
@@ -49,37 +52,30 @@ public class FeaturePartyReady extends TextHUDFeature {
return PartyManager.INSTANCE.getPartyContext() != null && PartyManager.INSTANCE.getPartyContext().isPartyExistHypixel() && "Dungeon Hub".equals(SkyblockStatus.locationName);
}
- @Override
- public List<String> getUsedTextStyle() {
- return Arrays.asList("separator", "player", "ready", "notready", "terminal");
- }
-
- private static final List<StyledText> dummyText = new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("syeyoung","player"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("Ready","ready"));
- dummyText.add(new StyledText(" 4","terminal"));
- dummyText.add(new StyledText("\nrioho","player"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("Ready","ready"));
- dummyText.add(new StyledText(" 3","terminal"));
- dummyText.add(new StyledText("\nRaidShadowLegends","player"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("Not Ready","notready"));
- dummyText.add(new StyledText(" 2t","terminal"));
- dummyText.add(new StyledText("\nTricked","player"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("Ready","ready"));
- dummyText.add(new StyledText(" ss","terminal"));
- dummyText.add(new StyledText("\nMr. Penguin","player"));
- dummyText.add(new StyledText(": ","separator"));
- dummyText.add(new StyledText("Not Ready","notready"));
- dummyText.add(new StyledText(" 2b","terminal"));
- }
@Override
- public List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummyText = new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("player"), "syeyoung"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("ready"), "Ready"));
+ dummyText.addChild(new TextSpan(getStyle("terminal"), " 4"));
+ dummyText.addChild(new TextSpan(getStyle("player"), "\nrioho"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("ready"), "Ready"));
+ dummyText.addChild(new TextSpan(getStyle("terminal"), " 3"));
+ dummyText.addChild(new TextSpan(getStyle("player"), "\nRaidShadowLegends"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("notready"), "Not Ready"));
+ dummyText.addChild(new TextSpan(getStyle("terminal"), " 2t"));
+ dummyText.addChild(new TextSpan(getStyle("player"), "\nTricked"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("ready"), "Ready"));
+ dummyText.addChild(new TextSpan(getStyle("terminal"), " ss"));
+ dummyText.addChild(new TextSpan(getStyle("player"), "\nMr. Penguin"));
+ dummyText.addChild(new TextSpan(getStyle("separator"), ": "));
+ dummyText.addChild(new TextSpan(getStyle("notready"), "Not Ready"));
+ dummyText.addChild(new TextSpan(getStyle("terminal"), " 2b"));
return dummyText;
}
@@ -87,19 +83,19 @@ public class FeaturePartyReady extends TextHUDFeature {
private Map<String, String> terminal = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
@Override
- public List<StyledText> getText() {
+ public TextSpan getText() {
PartyContext pc = PartyManager.INSTANCE.getPartyContext();
- List<StyledText> text= new ArrayList<>();
+ TextSpan text = new TextSpan(new NullTextStyle(), "");
boolean first = true;
for (String partyRawMember : pc.getPartyRawMembers()) {
- text.add(new StyledText((first ? "":"\n") + partyRawMember, "player"));
- text.add(new StyledText(": ","separator"));
+ text.addChild(new TextSpan(getStyle("player"), (first ? "":"\n") + partyRawMember));
+ text.addChild(new TextSpan(getStyle("separator"), ": "));
if (ready.contains(partyRawMember))
- text.add(new StyledText("Ready","ready"));
+ text.addChild(new TextSpan(getStyle("ready"), "Ready"));
else
- text.add(new StyledText("Not Ready","notready"));
+ text.addChild(new TextSpan(getStyle("notready"), "Not Ready"));
if (terminal.get(partyRawMember) != null) {
- text.add(new StyledText(" "+ terminal.get(partyRawMember), "terminal"));
+ text.addChild(new TextSpan(getStyle("terminal"), " "+ terminal.get(partyRawMember)));
}
first =false;
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyFinder.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyFinder.java
index b7ec2730..fe6410cc 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyFinder.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyFinder.java
@@ -23,7 +23,6 @@ import kr.syeyoung.dungeonsguide.mod.config.guiconfig.configv3.CategoryPageWidge
import kr.syeyoung.dungeonsguide.mod.config.guiconfig.configv3.MainConfigWidget;
import kr.syeyoung.dungeonsguide.mod.discord.DiscordIntegrationManager;
import kr.syeyoung.dungeonsguide.mod.events.impl.WindowUpdateEvent;
-import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
import kr.syeyoung.dungeonsguide.mod.features.impl.discord.invteTooltip.MTooltipInvite;
import kr.syeyoung.dungeonsguide.mod.gui.MPanel;
import kr.syeyoung.dungeonsguide.mod.gui.elements.*;
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureActions.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureActions.java
index 0622c683..a642c5c5 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureActions.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureActions.java
@@ -27,30 +27,30 @@ import kr.syeyoung.dungeonsguide.mod.dungeon.actions.AbstractAction;
import kr.syeyoung.dungeonsguide.mod.dungeon.actions.tree.ActionRoute;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.GeneralRoomProcessor;
-import kr.syeyoung.dungeonsguide.mod.features.text.StyledText;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultTextHUDFeatureStyleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.NullTextStyle;
import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
-import kr.syeyoung.dungeonsguide.mod.features.text.TextStyle;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import java.awt.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
public class FeatureActions extends TextHUDFeature {
public FeatureActions() {
super("Dungeon.Secrets", "Action Viewer", "View List of actions that needs to be taken", "secret.actionview");
- getStyles().add(new TextStyle("pathfinding", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("mechanic", new AColor(0x55, 0xFF,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("separator", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("state", new AColor(0x55, 0xFF,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("current", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("number", new AColor(0x00, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("dot", new AColor(0x55, 0x55,0x55,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("action", new AColor(0x55, 0xFF,0xFF,255), new AColor(0, 0,0,0), false));
- getStyles().add(new TextStyle("afterline", new AColor(0xAA, 0xAA,0xAA,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("pathfinding", DefaultingDelegatingTextStyle.derive(() -> FeatureRegistry.DEFAULT_STYLE.getStyle(DefaultTextHUDFeatureStyleFeature.Styles.NAME)));
+ registerDefaultStyle("mechanic", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("separator", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("state", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("current", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("number", DefaultingDelegatingTextStyle.ofDefault().setTextShader( new AColor(0x00, 0xAA,0xAA,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("dot", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0x55,0x55,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("action", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x55, 0xFF,0xFF,255)).setBackgroundShader(new AColor(0, 0,0,0)));
+ registerDefaultStyle("afterline", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0xAA, 0xAA,0xAA,255)).setBackgroundShader(new AColor(0, 0,0,0)));
}
@@ -67,42 +67,35 @@ public class FeatureActions extends TextHUDFeature {
return dungeonRoom.getRoomProcessor() instanceof GeneralRoomProcessor;
}
- private static final List<StyledText> dummyText= new ArrayList<StyledText>();
- static {
- dummyText.add(new StyledText("Pathfinding ","pathfinding"));
- dummyText.add(new StyledText("Secret ","mechanic"));
- dummyText.add(new StyledText("-> ","separator"));
- dummyText.add(new StyledText("Found\n","state"));
- dummyText.add(new StyledText("> ","current"));
- dummyText.add(new StyledText("1","number"));
- dummyText.add(new StyledText(". ","dot"));
- dummyText.add(new StyledText("Move ","action"));
- dummyText.add(new StyledText("OffsetPoint{x=1,y=42,z=1} \n","afterline"));
- dummyText.add(new StyledText(" ","current"));
- dummyText.add(new StyledText("2","number"));
- dummyText.add(new StyledText(". ","dot"));
- dummyText.add(new StyledText("Click ","action"));
- dummyText.add(new StyledText("OffsetPoint{x=1,y=42,z=1} \n","afterline"));
- dummyText.add(new StyledText(" ","current"));
- dummyText.add(new StyledText("3","number"));
- dummyText.add(new StyledText(". ","dot"));
- dummyText.add(new StyledText("Profit ","action"));
- }
-
- @Override
- public List<String> getUsedTextStyle() {
- return Arrays.asList("pathfinding","mechanic","separator","state","current", "number", "dot", "action", "afterline");
- }
@Override
- public List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
+ TextSpan dummyText = new TextSpan(new NullTextStyle(), "");
+ dummyText.addChild(new TextSpan(getStyle("pathfinding"), "Pathfinding "));
+ dummyText.addChild(new TextSpan(getStyle("mechanic"), "Secret "));
+ dummyText.addChild(new TextSpan(getStyle("separator"), "-> "));
+ dummyText.addChild(new TextSpan(getStyle("state"), "Found\n"));
+ dummyText.addChild(new TextSpan(getStyle("current"), "> "));
+ dummyText.addChild(new TextSpan(getStyle("number"), "1"));
+ dummyText.addChild(new TextSpan(getStyle("dot"), ". "));
+ dummyText.addChild(new TextSpan(getStyle("action"), "Move "));
+ dummyText.addChild(new TextSpan(getStyle("afterline"), "OffsetPoint{x=1,y=42,z=1} \n"));
+ dummyText.addChild(new TextSpan(getStyle("current"), " "));
+ dummyText.addChild(new TextSpan(getStyle("number"), "2"));
+ dummyText.addChild(new TextSpan(getStyle("dot"), ". "));
+ dummyText.addChild(new TextSpan(getStyle("action"), "Click "));
+ dummyText.addChild(new TextSpan(getStyle("afterline"), "OffsetPoint{x=1,y=42,z=1} \n"));
+ dummyText.addChild(new TextSpan(getStyle("current"), " "));
+ dummyText.addChild(new TextSpan(getStyle("number"), "3"));
+ dummyText.addChild(new TextSpan(getStyle("dot"), ". "));
+ dummyText.addChild(new TextSpan(getStyle("action"), "Profit "));
return dummyText;
}
@Override
- public List<StyledText> getText() {
- List<StyledText> actualBit = new ArrayList<StyledText>();
+ public TextSpan getText() {
+ TextSpan actualBit = new TextSpan(new NullTextStyle(), "");
DungeonContext context = DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext();
@@ -111,27 +104,27 @@ public class FeatureActions extends TextHUDFeature {
DungeonRoom dungeonRoom = context.getScaffoldParser().getRoomMap().get(roomPt);
for (ActionRoute path : ((GeneralRoomProcessor) dungeonRoom.getRoomProcessor()).getPath().values()) {
- actualBit.add(new StyledText("Pathfinding ","pathfinding"));
- actualBit.add(new StyledText(path.getMechanic()+" ","mechanic"));
- actualBit.add(new StyledText("-> ","separator"));
- actualBit.add(new StyledText(path.getState()+"\n","state"));
+ actualBit.addChild(new TextSpan(getStyle("pathfinding"), "Pathfinding "));
+ actualBit.addChild(new TextSpan(getStyle("mechanic"), path.getMechanic()+" "));
+ actualBit.addChild(new TextSpan(getStyle("separator"), "-> "));
+ actualBit.addChild(new TextSpan(getStyle("state"), path.getState()+"\n"));
for (int i = Math.max(0,path.getCurrent()-2); i < path.getActions().size(); i++) {
- actualBit.add(new StyledText((i == path.getCurrent() ? ">" : " ") +" ","current"));
- actualBit.add(new StyledText(i+"","number"));
- actualBit.add(new StyledText(". ","dot"));
+ actualBit.addChild(new TextSpan(getStyle("current"), (i == path.getCurrent() ? ">" : " ") +" "));
+ actualBit.addChild(new TextSpan(getStyle("number"), i+""));
+ actualBit.addChild(new TextSpan(getStyle("dot"), ". "));
AbstractAction action = path.getActions().get(i);
String[] str = action.toString().split("\n");
- actualBit.add(new StyledText(str[0] + " ","action"));
- actualBit.add(new StyledText("(","afterline"));
+ actualBit.addChild(new TextSpan(getStyle("action"), str[0] + " "));
+ actualBit.addChild(new TextSpan(getStyle("afterline"), "("));
for (int i1 = 1; i1 < str.length; i1++) {
String base = str[i1].trim();
if (base.startsWith("-"))
base = base.substring(1);
base = base.trim();
- actualBit.add(new StyledText(base+" ","afterline"));
+ actualBit.addChild(new TextSpan(getStyle("afterline"), base+" "));
}
- actualBit.add(new StyledText(")\n","afterline"));
+ actualBit.addChild(new TextSpan(getStyle("afterline"), ")\n"));
}
}
return actualBit;
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureSoulRoomWarning.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureSoulRoomWarning.java
index 1496fa92..545f8629 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureSoulRoomWarning.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureSoulRoomWarning.java
@@ -32,8 +32,10 @@ import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.GeneralRoomProcessor;
import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler;
import kr.syeyoung.dungeonsguide.mod.events.impl.DGTickEvent;
import kr.syeyoung.dungeonsguide.mod.features.FeatureParameter;
-import kr.syeyoung.dungeonsguide.mod.features.text.*;
+import kr.syeyoung.dungeonsguide.mod.features.text.DefaultingDelegatingTextStyle;
+import kr.syeyoung.dungeonsguide.mod.features.text.TextHUDFeature;
import kr.syeyoung.dungeonsguide.mod.guiv2.BindableAttribute;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
import kr.syeyoung.dungeonsguide.mod.guiv2.xml.AnnotatedImportOnlyWidget;
import kr.syeyoung.dungeonsguide.mod.guiv2.xml.annotations.Bind;
import kr.syeyoung.dungeonsguide.mod.guiv2.xml.annotations.On;
@@ -51,7 +53,7 @@ public class FeatureSoulRoomWarning extends TextHUDFeature {
public FeatureSoulRoomWarning() {
super("Dungeon.HUDs","Secret Soul Alert", "Alert if there is an fairy soul in the room", "secret.fairysoulwarn");
- getStyles().add(new TextStyle("warning", new AColor(0xFF, 0x69,0x17,255), new AColor(0, 0,0,0), false));
+ registerDefaultStyle("warning", DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0xFF, 0x69,0x17,255)).setBackgroundShader(new AColor(0, 0,0,0)));
addParameter("roomuids", new FeatureParameter<>("roomuids", "Disabled room Names", "Disable for these rooms", new ArrayList<>(), TCStringList.INSTANCE)
.setWidgetGenerator(RoomConfiguration::new));
@@ -63,22 +65,14 @@ public class FeatureSoulRoomWarning extends TextHUDFeature {
return warning > System.currentTimeMillis();
}
- @Override
- public List<String> getUsedTextStyle() {
- return Collections.singletonList("warning");
- }
private UUID lastRoomUID = UUID.randomUUID();
private long warning = 0;
- private static final List<StyledText> text = new ArrayList<StyledText>();
- static {
- text.add(new StyledText("There is a fairy soul in this room!", "warning"));
- }
@Override
- public List<StyledText> getText() {
- return text;
+ public TextSpan getText() {
+ return new TextSpan(getStyle("warning"), "There is a fairy soul in this room!");
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/DefaultTextHUDFeatureStyleFeature.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/DefaultTextHUDFeatureStyleFeature.java
new file mode 100644
index 00000000..e01aa909
--- /dev/null
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/DefaultTextHUDFeatureStyleFeature.java
@@ -0,0 +1,70 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2023 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.features.text;
+
+import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
+import kr.syeyoung.dungeonsguide.mod.config.types.TCRTextStyleMap;
+import kr.syeyoung.dungeonsguide.mod.features.FeatureParameter;
+import kr.syeyoung.dungeonsguide.mod.features.SimpleFeature;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+public class DefaultTextHUDFeatureStyleFeature extends SimpleFeature {
+ public enum Styles {
+ NAME
+ }
+
+ public DefaultTextHUDFeatureStyleFeature() {
+ super("Misc", "Quick HUD Style Settings", "Configure the default hud style", "misc.defaulthud");
+
+ registerDefaultStyle(Styles.NAME, DefaultingDelegatingTextStyle.ofDefault().setTextShader(new AColor(0x00, 0xAA,0xAA,255)));
+
+ addParameter("newstyle", new FeatureParameter<>("newstyle", "TextStyle", "", styleMap, new TCRTextStyleMap(), this::updateStyle));
+ }
+
+ public DefaultingDelegatingTextStyle getStyle(Styles styles) {
+ return styleMap.get(styles.name());
+ }
+
+
+ private Map<String, DefaultingDelegatingTextStyle> defaultStyleMap = new HashMap<>();
+ private Map<String, DefaultingDelegatingTextStyle> styleMap = new HashMap<>();
+ public void registerDefaultStyle(Styles styles, DefaultingDelegatingTextStyle style) {
+ defaultStyleMap.put(styles.name(), style);
+ }
+ public void updateStyle(Map<String, DefaultingDelegatingTextStyle> map) {
+ styleMap.clear();
+ Set<String> wasIn = new HashSet<>(map.keySet());
+ Set<String> needsToBeIn = new HashSet<>(defaultStyleMap.keySet());
+ needsToBeIn.removeAll(wasIn);
+ for (Map.Entry<String, DefaultingDelegatingTextStyle> stringDefaultingDelegatingTextStyleEntry : map.entrySet()) {
+ if (!defaultStyleMap.containsKey(stringDefaultingDelegatingTextStyleEntry.getKey())) continue;
+ DefaultingDelegatingTextStyle newStyle = stringDefaultingDelegatingTextStyleEntry.getValue();
+ newStyle.setParent(() -> defaultStyleMap.get(stringDefaultingDelegatingTextStyleEntry.getKey()));
+ styleMap.put(stringDefaultingDelegatingTextStyleEntry.getKey(), newStyle);
+ }
+ for (String s : needsToBeIn) {
+ styleMap.put(s, new DefaultingDelegatingTextStyle().setParent(() -> defaultStyleMap.get(s)));
+ map.put(s, styleMap.get(s));
+ }
+ }
+}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/DefaultingDelegatingTextStyle.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/DefaultingDelegatingTextStyle.java
index 3c6915be..c60bb4dd 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/DefaultingDelegatingTextStyle.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/DefaultingDelegatingTextStyle.java
@@ -18,17 +18,19 @@
package kr.syeyoung.dungeonsguide.mod.features.text;
+import kr.syeyoung.dungeonsguide.mod.config.types.AColor;
import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.fonts.DefaultFontRenderer;
import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.fonts.FontRenderer;
import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.shaders.Shader;
-import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.shaders.SingleColorShader;
import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.styles.ITextStyle;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
+import java.util.function.Supplier;
+
@Setter @Accessors(chain = true)
-public class DefaultingDelegatingTextStyle implements ITextStyle {
+public class DefaultingDelegatingTextStyle implements ITextStyle, Cloneable {
public Double size;
public Double topAscent;
public Double bottomAscent;
@@ -42,18 +44,24 @@ public class DefaultingDelegatingTextStyle implements ITextStyle {
public Boolean outline;
public Boolean shadow;
- public Shader backgroundShader;
- public Shader textShader;
- public Shader strikeThroughShader;
- public Shader underlineShader;
- public Shader outlineShader;
- public Shader shadowShader;
+ public AColor backgroundShader;
+ public AColor textShader;
+ public AColor strikeThroughShader;
+ public AColor underlineShader;
+ public AColor outlineShader;
+ public AColor shadowShader;
@Getter @Setter
- public DefaultingDelegatingTextStyle parent;
+ public Supplier<DefaultingDelegatingTextStyle> parent;
public FontRenderer fontRenderer;
+ public static DefaultingDelegatingTextStyle derive(Supplier<DefaultingDelegatingTextStyle> parent) {
+ DefaultingDelegatingTextStyle defaultTextHUDFeatureStyleFeature = new DefaultingDelegatingTextStyle();
+ defaultTextHUDFeatureStyleFeature.setParent(parent);
+ return defaultTextHUDFeatureStyleFeature;
+ }
+
public static DefaultingDelegatingTextStyle ofDefault() {
DefaultingDelegatingTextStyle parentDelegatingTextStyle = new DefaultingDelegatingTextStyle();
parentDelegatingTextStyle.size = 8.0;
@@ -66,94 +74,106 @@ public class DefaultingDelegatingTextStyle implements ITextStyle {
parentDelegatingTextStyle.shadow = false;
parentDelegatingTextStyle.outline = false;
- parentDelegatingTextStyle.backgroundShader = new SingleColorShader(0x00FFFFFF);
- parentDelegatingTextStyle.textShader = new SingleColorShader(0xFFFFFFFF);
- parentDelegatingTextStyle.strikeThroughShader = new SingleColorShader(0xFF000000);
- parentDelegatingTextStyle.underlineShader = new SingleColorShader(0xFF000000);
- parentDelegatingTextStyle.outlineShader = new SingleColorShader(0xFF000000);
- parentDelegatingTextStyle.shadowShader = new SingleColorShader(0xFF000000);
+ parentDelegatingTextStyle.backgroundShader = null;
+ parentDelegatingTextStyle.textShader = new AColor(0xFFFFFFFF, true);
+ parentDelegatingTextStyle.strikeThroughShader = new AColor(0xFF000000, true);
+ parentDelegatingTextStyle.underlineShader = new AColor(0xFF000000, true);
+ parentDelegatingTextStyle.outlineShader = new AColor(0xFF000000, true);
+ parentDelegatingTextStyle.shadowShader = new AColor(0xFF000000, true);
parentDelegatingTextStyle.fontRenderer = DefaultFontRenderer.DEFAULT_RENDERER;
return parentDelegatingTextStyle;
}
+
+ public DefaultingDelegatingTextStyle getParent() {
+ return parent.get();
+ }
@Override
public Double getSize() {
- return parent != null && size == null ? parent.getSize() : size;
+ return parent != null && size == null ? getParent().getSize() : size;
}
@Override
public Double getTopAscent() {
- return parent != null && topAscent == null ? parent.getTopAscent() : topAscent;
+ return parent != null && topAscent == null ? getParent().getTopAscent() : topAscent;
}
@Override
public Double getBottomAscent() {
- return parent != null && bottomAscent == null ? parent.getBottomAscent() : bottomAscent;
+ return parent != null && bottomAscent == null ? getParent().getBottomAscent() : bottomAscent;
}
@Override
public Boolean isBold() {
- return parent != null && bold == null ? parent.isBold() : bold;
+ return parent != null && bold == null ? getParent().isBold() : bold;
}
@Override
public Boolean isItalics() {
- return parent != null && italics == null ? parent.isItalics() : italics;
+ return parent != null && italics == null ? getParent().isItalics() : italics;
}
@Override
public Boolean isOutline() {
- return parent != null && outline == null ? parent.isOutline() : outline;
+ return parent != null && outline == null ? getParent().isOutline() : outline;
}
@Override
public Boolean isShadow() {
- return parent != null && shadow == null ? parent.isShadow() : shadow;
+ return parent != null && shadow == null ? getParent().isShadow() : shadow;
}
@Override
public Boolean isStrikeThrough() {
- return parent != null && strikeThrough == null ? parent.isStrikeThrough() : strikeThrough;
+ return parent != null && strikeThrough == null ? getParent().isStrikeThrough() : strikeThrough;
}
@Override
public Boolean isUnderline() {
- return parent != null && underline == null ? parent.isUnderline() : underline;
+ return parent != null && underline == null ? getParent().isUnderline() : underline;
}
@Override
public FontRenderer getFontRenderer() {
- return parent != null && fontRenderer == null ? parent.getFontRenderer() : fontRenderer;
+ return parent != null && fontRenderer == null ? getParent().getFontRenderer() : fontRenderer;
}
@Override
public Shader getShadowShader() {
- return parent != null && shadowShader == null ? parent.getShadowShader() : shadowShader;
+ return parent != null && shadowShader == null ? getParent().getShadowShader() : shadowShader.getShader();
}
@Override
public Shader getBackgroundShader() {
- return parent != null && backgroundShader == null ? parent.getBackgroundShader() : backgroundShader;
+ return parent != null && backgroundShader == null ? getParent().getBackgroundShader() : backgroundShader.getShader();
}
@Override
public Shader getOutlineShader() {
- return parent != null && outlineShader == null ? parent.getOutlineShader() : outlineShader;
+ return parent != null && outlineShader == null ? getParent().getOutlineShader() : outlineShader.getShader();
}
@Override
public Shader getStrikeThroughShader() {
- return parent != null && strikeThroughShader == null ? parent.getStrikeThroughShader() : strikeThroughShader;
+ return parent != null && strikeThroughShader == null ? getParent().getStrikeThroughShader() : strikeThroughShader.getShader();
}
@Override
public Shader getTextShader() {
- return parent != null && textShader == null ? parent.getTextShader() : textShader;
+ return parent != null && textShader == null ? getParent().getTextShader() : textShader.getShader();
}
@Override
public Shader getUnderlineShader() {
- return parent != null && underlineShader == null ? parent.getUnderlineShader() : underlineShader;
+ return parent != null && underlineShader == null ? getParent().getUnderlineShader() : underlineShader.getShader();
+ }
+
+ public DefaultingDelegatingTextStyle clone() {
+ try {
+ return (DefaultingDelegatingTextStyle) super.clone();
+ } catch (CloneNotSupportedException e) {
+ throw new RuntimeException(e);
+ }
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/NullTextStyle.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/NullTextStyle.java
new file mode 100644
index 00000000..06869ecd
--- /dev/null
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/NullTextStyle.java
@@ -0,0 +1,110 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2023 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.features.text;
+
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.fonts.DefaultFontRenderer;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.fonts.FontRenderer;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.shaders.Shader;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.shaders.SingleColorShader;
+import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.styles.ITextStyle;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+@Setter @Accessors(chain = true)
+public class NullTextStyle implements ITextStyle, Cloneable {
+ @Override
+ public Double getSize() {
+ return 0.0;
+ }
+
+ @Override
+ public Double getTopAscent() {
+ return 0.0;
+ }
+
+ @Override
+ public Double getBottomAscent() {
+ return 0.0;
+ }
+
+ @Override
+ public Boolean isBold() {
+ return false;
+ }
+
+ @Override
+ public Boolean isItalics() {
+ return false;
+ }
+
+ @Override
+ public Boolean isStrikeThrough() {
+ return false;
+ }
+
+ @Override
+ public Boolean isUnderline() {
+ return false;
+ }
+
+ @Override
+ public Boolean isOutline() {
+ return false;
+ }
+
+ @Override
+ public Boolean isShadow() {
+ return false;
+ }
+
+ @Override
+ public Shader getBackgroundShader() {
+ return null;
+ }
+
+ @Override
+ public Shader getTextShader() {
+ return new SingleColorShader(0);
+ }
+
+ @Override
+ public Shader getStrikeThroughShader() {
+ return null;
+ }
+
+ @Override
+ public Shader getUnderlineShader() {
+ return null;
+ }
+
+ @Override
+ public Shader getOutlineShader() {
+ return null;
+ }
+
+ @Override
+ public Shader getShadowShader() {
+ return null;
+ }
+
+ @Override
+ public FontRenderer getFontRenderer() {
+ return DefaultFontRenderer.DEFAULT_RENDERER;
+ }
+}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/StyledText.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/StyledText.java
index d9f936fa..9d463175 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/StyledText.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/StyledText.java
@@ -18,12 +18,15 @@
package kr.syeyoung.dungeonsguide.mod.features.text;
-import lombok.AllArgsConstructor;
import lombok.Data;
@Data
-@AllArgsConstructor
public class StyledText {
private String text;
private String group;
+
+ public StyledText(String group, String text) {
+ this.text = text;
+ this.group = group;
+ }
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/StyledTextSpan.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/StyledTextSpan.java
new file mode 100644
index 00000000..f38ac82f
--- /dev/null
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/StyledTextSpan.java
@@ -0,0 +1,32 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * 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.features.text;
+
+import lombok.Data;
+
+@Data
+public class StyledTextSpan {
+ private String text;
+ private String group;
+
+ public StyledTextSpan(String group, String text) {
+ this.text = text;
+ this.group = group;
+ }
+}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/TextHUDFeature.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/TextHUDFeature.java
index 179a21f0..aacb770b 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/TextHUDFeature.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/TextHUDFeature.java
@@ -18,16 +18,15 @@
package kr.syeyoung.dungeonsguide.mod.features.text;
-import kr.syeyoung.dungeonsguide.mod.config.guiconfig.configv3.ParameterItem;
import kr.syeyoung.dungeonsguide.mod.config.guiconfig.location2.MarkerProvider;
-import kr.syeyoung.dungeonsguide.mod.config.types.*;
+import kr.syeyoung.dungeonsguide.mod.config.types.TCEnum;
+import kr.syeyoung.dungeonsguide.mod.config.types.TCRTextStyleMap;
import kr.syeyoung.dungeonsguide.mod.events.annotations.DGEventHandler;
import kr.syeyoung.dungeonsguide.mod.events.impl.DGTickEvent;
import kr.syeyoung.dungeonsguide.mod.features.AbstractHUDFeature;
import kr.syeyoung.dungeonsguide.mod.features.FeatureParameter;
import kr.syeyoung.dungeonsguide.mod.guiv2.DomElement;
import kr.syeyoung.dungeonsguide.mod.guiv2.Widget;
-import kr.syeyoung.dungeonsguide.mod.guiv2.elements.CompatLayer;
import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.BreakWord;
import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.RichText;
import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.TextSpan;
@@ -40,18 +39,15 @@ import kr.syeyoung.dungeonsguide.mod.overlay.OverlayWidget;
import lombok.RequiredArgsConstructor;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
-import net.minecraft.client.renderer.GlStateManager;
import java.util.*;
-public abstract class TextHUDFeature extends AbstractHUDFeature implements StyledTextProvider {
+public abstract class TextHUDFeature extends AbstractHUDFeature {
protected TextHUDFeature(String category, String name, String description, String key) {
super(category, name, description, key);
- addParameter("textStylesNEW", new FeatureParameter<List<TextStyle>>("textStylesNEW", "", "", new ArrayList<TextStyle>(), TCTextStyleList.INSTANCE)
- .setWidgetGenerator((param) -> new CompatLayer(new PanelTextParameterConfig(TextHUDFeature.this))));
- addParameter("alignment", new FeatureParameter<RichText.TextAlign>("alignment", "Alignment", "Alignment", RichText.TextAlign.LEFT, new TCEnum<>(RichText.TextAlign.values()), richText::setAlign));
- addParameter("scale", new FeatureParameter<Double>("scale", "Scale", "Scale", 1.0, TCDouble.INSTANCE)
- .setWidgetGenerator((param) -> new ParameterItem(param, new TCDouble.DoubleEditWidget(param, 0.1, Double.POSITIVE_INFINITY))));
+
+ addParameter("alignment", new FeatureParameter<>("alignment", "Alignment", "Alignment", RichText.TextAlign.LEFT, new TCEnum<>(RichText.TextAlign.values()), richText::setAlign));
+ addParameter("newstyle", new FeatureParameter<>("newstyle", "TextStyle", "", styleMap, new TCRTextStyleMap(), this::updateStyle));
}
@Override
@@ -68,27 +64,13 @@ public abstract class TextHUDFeature extends AbstractHUDFeature implements Style
public OverlayWidget instantiateWidget() {
return new OverlayWidget(richText, OverlayType.UNDER_CHAT, new GUIRectPositioner(this::getFeatureRect));
}
-
- private Map<String, ParentDelegatingTextStyle> builtTextStyles = new HashMap<>();
-
@DGEventHandler
public void onTick0(DGTickEvent dgTickEvent) {
try {
checkVisibility();
if (isHUDViewable()) {
- List<StyledText> asd = getText();
-
- ParentDelegatingTextStyle defaultStyle = ParentDelegatingTextStyle.ofDefault();
- defaultStyle.setSize((double) (this.<Double>getParameter("scale").getValue() * 8));
-
- TextSpan span = new TextSpan(defaultStyle, "");
-
- for (StyledText styledText : asd) {
- TextStyle style = getStylesMap().get(styledText.getGroup());
- TextSpan textSpan = new TextSpan(style.getLinked(), styledText.getText());
- span.addChild(textSpan);
- }
- richText.setRootSpan(span);
+ TextSpan asd = getText();
+ richText.setRootSpan(asd);
}
} catch (Exception e) {
e.printStackTrace();
@@ -127,27 +109,14 @@ public abstract class TextHUDFeature extends AbstractHUDFeature implements Style
@Override
public List<Widget> build(DomElement buildContext) {
- List<StyledText> asd = hudFeature.getDummyText();
+ TextSpan textSpan = hudFeature.getDummyText();
RichText richText = new RichText(new TextSpan(
ParentDelegatingTextStyle.ofDefault(),
""
- ), BreakWord.WORD, false, RichText.TextAlign.LEFT);
- richText.setAlign(
- hudFeature.<RichText.TextAlign>getParameter("alignment").getValue()
- );
-
- ParentDelegatingTextStyle defaultStyle = ParentDelegatingTextStyle.ofDefault();
- defaultStyle.setSize((double) (hudFeature.<Double>getParameter("scale").getValue() * 8));
+ ), BreakWord.WORD, false, hudFeature.<RichText.TextAlign>getParameter("alignment").getValue());
- TextSpan span = new TextSpan(defaultStyle, "");
-
- for (StyledText styledText : asd) {
- TextStyle style = hudFeature.getStylesMap().get(styledText.getGroup());
- TextSpan textSpan = new TextSpan(style.getLinked(), styledText.getText());
- span.addChild(textSpan);
- }
- richText.setRootSpan(span);
+ richText.setRootSpan(textSpan);
return Collections.singletonList(richText);
}
@@ -158,50 +127,41 @@ public abstract class TextHUDFeature extends AbstractHUDFeature implements Style
return new TextHUDDemo(this);
}
- public int countLines(List<StyledText> texts) {
- StringBuilder things = new StringBuilder();
- for (StyledText text : texts) {
- things.append(text.getText());
- }
- String things2 = things.toString().trim();
- int lines = 1;
- for (char c : things2.toCharArray()) {
- if (c == '\n') lines++;
- }
- return lines;
- }
public abstract boolean isHUDViewable();
- public abstract List<String> getUsedTextStyle();
- public List<StyledText> getDummyText() {
+ public TextSpan getDummyText() {
return getText();
}
- public abstract List<StyledText> getText();
+ public abstract TextSpan getText();
- public List<TextStyle> getStyles() {
- return this.<List<TextStyle>>getParameter("textStylesNEW").getValue();
- }
+ private Map<String, DefaultingDelegatingTextStyle> defaultStyleMap = new HashMap<>();
+ private Map<String, DefaultingDelegatingTextStyle> styleMap = new HashMap<>();
+ public void registerDefaultStyle(String name, DefaultingDelegatingTextStyle style) {
+ defaultStyleMap.put(name, style);
+ }
+ public DefaultingDelegatingTextStyle getStyle(String name) {
+ return styleMap.get(name);
+ }
- private Map<String, TextStyle> stylesMap;
- public Map<String, TextStyle> getStylesMap() {
- if (stylesMap == null) {
- List<TextStyle> styles = getStyles();
- Map<String, TextStyle> res = new HashMap<String, TextStyle>();
- for (TextStyle ts : styles) {
- res.put(ts.getGroupName(), ts);
- }
- for (String str : getUsedTextStyle()) {
- if (!res.containsKey(str))
- res.put(str, new TextStyle(str, new AColor(0xffffffff, true), new AColor(0x00777777, true), false, new ParentDelegatingTextStyle()));
- }
- stylesMap = res;
+ public void updateStyle(Map<String, DefaultingDelegatingTextStyle> map) {
+ styleMap.clear();
+ Set<String> wasIn = new HashSet<>(map.keySet());
+ Set<String> needsToBeIn = new HashSet<>(defaultStyleMap.keySet());
+ needsToBeIn.removeAll(wasIn);
+ for (Map.Entry<String, DefaultingDelegatingTextStyle> stringDefaultingDelegatingTextStyleEntry : map.entrySet()) {
+ if (!defaultStyleMap.containsKey(stringDefaultingDelegatingTextStyleEntry.getKey())) continue;
+ DefaultingDelegatingTextStyle newStyle = stringDefaultingDelegatingTextStyleEntry.getValue();
+ newStyle.setParent(() -> defaultStyleMap.get(stringDefaultingDelegatingTextStyleEntry.getKey()));
+ styleMap.put(stringDefaultingDelegatingTextStyleEntry.getKey(), newStyle);
+ }
+ for (String s : needsToBeIn) {
+ styleMap.put(s, new DefaultingDelegatingTextStyle().setParent(() -> defaultStyleMap.get(s)));
+ map.put(s, styleMap.get(s));
}
- return stylesMap;
}
-
@Override
public void getTooltipForEditor(List<Widget> widgets) {
super.getTooltipForEditor(widgets);
@@ -223,7 +183,7 @@ public abstract class TextHUDFeature extends AbstractHUDFeature implements Style
@Override
public void onParameterReset() {
- stylesMap = null;
+
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/richtext/styles/ParentDelegatingTextStyle.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/richtext/styles/ParentDelegatingTextStyle.java
index e8f74858..f9d4909d 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/richtext/styles/ParentDelegatingTextStyle.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/richtext/styles/ParentDelegatingTextStyle.java
@@ -65,7 +65,7 @@ public class ParentDelegatingTextStyle implements ITextStyle {
parentDelegatingTextStyle.shadow = false;
parentDelegatingTextStyle.outline = false;
- parentDelegatingTextStyle.backgroundShader = new SingleColorShader(0xFFFFFFFF);
+ parentDelegatingTextStyle.backgroundShader = new SingleColorShader(0x00000000);
parentDelegatingTextStyle.textShader = new SingleColorShader(0xFFFFFFFF);
parentDelegatingTextStyle.strikeThroughShader = new SingleColorShader(0xFF000000);
parentDelegatingTextStyle.underlineShader = new SingleColorShader(0xFF000000);