From c553002ccaac367cf1e9abcd71316b80720db37b Mon Sep 17 00:00:00 2001 From: syeyoung Date: Wed, 8 Feb 2023 21:19:03 +0900 Subject: - Name Signed-off-by: syeyoung --- .../dungeonsguide/mod/config/types/AColor.java | 8 + .../mod/config/types/TCRTextStyle.java | 73 ++++++++ .../mod/config/types/TCRTextStyleMap.java | 49 +++++ .../mod/features/AbstractFeature.java | 2 - .../mod/features/AbstractHUDFeature.java | 7 - .../mod/features/FeatureRegistry.java | 3 + .../features/impl/advanced/FeatureDebugTrap.java | 41 ++--- .../impl/advanced/FeatureDetectFreeze.java | 2 - .../impl/advanced/FeatureRoomCoordDisplay.java | 33 ++-- .../impl/advanced/FeatureRoomDebugInfo.java | 36 ++-- .../mod/features/impl/boss/FeatureBossHealth.java | 44 +++-- .../features/impl/boss/FeatureCurrentPhase.java | 46 ++--- .../features/impl/boss/FeatureTerracotaTimer.java | 46 ++--- .../impl/boss/FeatureThornBearPercentage.java | 51 +++--- .../impl/boss/FeatureThornSpiritBowTimer.java | 43 ++--- .../discord/inviteViewer/PartyInviteViewer.java | 4 - .../dungeon/FeatureDungeonCurrentRoomSecrets.java | 62 +++---- .../impl/dungeon/FeatureDungeonDeaths.java | 83 +++++---- .../impl/dungeon/FeatureDungeonMilestone.java | 40 ++--- .../impl/dungeon/FeatureDungeonRealTime.java | 49 +++-- .../impl/dungeon/FeatureDungeonRoomName.java | 39 ++-- .../impl/dungeon/FeatureDungeonSBTime.java | 48 +++-- .../features/impl/dungeon/FeatureDungeonScore.java | 198 ++++++++++----------- .../impl/dungeon/FeatureDungeonSecrets.java | 64 +++---- .../features/impl/dungeon/FeatureDungeonTombs.java | 44 ++--- .../impl/dungeon/FeatureWarnLowHealth.java | 56 +++--- .../impl/dungeon/FeatureWatcherWarning.java | 26 +-- .../features/impl/etc/FeatureCooldownCounter.java | 46 ++--- .../impl/etc/ability/FeatureAbilityCooldown.java | 85 +++++---- .../mod/features/impl/party/FeaturePartyList.java | 80 ++++----- .../mod/features/impl/party/FeaturePartyReady.java | 82 ++++----- .../impl/party/customgui/PanelPartyFinder.java | 1 - .../mod/features/impl/secret/FeatureActions.java | 101 +++++------ .../impl/secret/FeatureSoulRoomWarning.java | 18 +- .../text/DefaultTextHUDFeatureStyleFeature.java | 70 ++++++++ .../text/DefaultingDelegatingTextStyle.java | 82 +++++---- .../mod/features/text/NullTextStyle.java | 110 ++++++++++++ .../mod/features/text/StyledText.java | 7 +- .../mod/features/text/StyledTextSpan.java | 32 ++++ .../mod/features/text/TextHUDFeature.java | 112 ++++-------- .../richtext/styles/ParentDelegatingTextStyle.java | 2 +- 41 files changed, 1072 insertions(+), 953 deletions(-) create mode 100644 mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCRTextStyle.java create mode 100644 mod/src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCRTextStyleMap.java create mode 100644 mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/DefaultTextHUDFeatureStyleFeature.java create mode 100644 mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/NullTextStyle.java create mode 100644 mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/StyledTextSpan.java (limited to 'mod/src/main/java') 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 . + */ + +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 { + 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 . + */ + +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> { + public static final TCRTextStyleMap INSTANCE = new TCRTextStyleMap(); + @Override + public Map deserialize(JsonElement element) { + JsonObject jsonObject = element.getAsJsonObject(); + Map map = new HashMap<>(); + for (Map.Entry stringJsonElementEntry : jsonObject.entrySet()) { + map.put(stringJsonElementEntry.getKey(), TCRTextStyle.INSTANCE.deserialize(stringJsonElementEntry.getValue())); + } + return map; + } + + @Override + public JsonElement serialize(Map element) { + JsonObject jsonObject = new JsonObject(); + for (Map.Entry 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 dummyText= new ArrayList<>(); - static { - dummyText.add(new StyledText("Bats: ","base")); - dummyText.add(new StyledText("9999","batsamm")); - } - - static List avgStorage = new ArrayList<>(); public static void updateVal(long timeItTookForThePacketToProcess){ @@ -72,26 +65,24 @@ public class FeatureDebugTrap extends TextHUDFeature { } @Override - public List getUsedTextStyle() { - return Arrays.asList("batsamm", "base"); - } - - @Override - public List 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 getText() { + public TextSpan getText() { List bats = Minecraft.getMinecraft().theWorld.getEntities(EntityBat.class, e -> true); - List 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 dummyText= new ArrayList(); - static { - dummyText.add(new StyledText("X: 0 Y: 3 Z: 5 Facing: Z+","coord")); - } @Override - public List 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 getUsedTextStyle() { - return Collections.singletonList("coord"); - } - - @Override - public List 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 dummyText= new ArrayList(); - static { - dummyText.add(new StyledText("Line 1\nLine 2\nLine 3\nLine 4\nLine 5","info")); - } - - @Override - public List getDummyText() { - return dummyText; - } - @Override - public List 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 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("formatHealth", "format health", "1234568 -> 1m", true, TCBoolean.INSTANCE, nval -> formatHealth = nval)); addParameter("ignoreInattackable", new FeatureParameter("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 getUsedTextStyle() { - return Arrays.asList("title", "separator", "health", "separator2", "maxHealth"); - } - - @Override - public java.util.List getDummyText() { - List actualBit = new ArrayList(); + 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 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 getText() { - List actualBit = new ArrayList(); + public TextSpan getText() { + TextSpan actualBit = new TextSpan(new NullTextStyle(), ""); List 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 dummyText= new ArrayList(); - 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 getUsedTextStyle() { - return Arrays.asList("title", "separator", "phase"); - } - - @Override - public List 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 getText() { + public TextSpan getText() { String currentPhase = DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getBossfightProcessor().getCurrentPhase(); - List actualBit = new ArrayList(); - 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 dummyText= new ArrayList(); - 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 getUsedTextStyle() { - return Arrays.asList("title", "separator", "number", "unit"); - } - - @Override - public List 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 getText() { - List actualBit = new ArrayList(); - 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 dummyText= new ArrayList(); - 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 getUsedTextStyle() { - return Arrays.asList("title", "separator", "number", "unit"); - } - @Override - public java.util.List 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 getText() { + public TextSpan getText() { int percentage = (int) (((BossfightProcessorThorn) DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getBossfightProcessor()).calculatePercentage() * 100); - List actualBit = new ArrayList(); - 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 dummyText= new ArrayList(); - 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 getUsedTextStyle() { - return Arrays.asList("title", "separator", "time"); - } @Override - public List 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 getText() { - List actualBit = new ArrayList(); - 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 dummyText= new ArrayList(); - 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 getUsedTextStyle() { - return Arrays.asList("title", "separator", "currentSecrets", "separator2", "totalSecrets"); - } - - @Override - public List 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 getText() { - if (DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext().getBossfightProcessor() != null) return new ArrayList(); - List actualBit = new ArrayList(); - 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