aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/main/java/de/cowtipper/cowlection/Cowlection.java2
-rw-r--r--src/main/java/de/cowtipper/cowlection/config/MooConfig.java151
-rw-r--r--src/main/java/de/cowtipper/cowlection/config/gui/MooConfigCategoryScrolling.java19
-rw-r--r--src/main/java/de/cowtipper/cowlection/config/gui/MooConfigPreview.java74
-rw-r--r--src/main/java/de/cowtipper/cowlection/listener/skyblock/DungeonsListener.java41
-rw-r--r--src/main/resources/assets/cowlection/lang/en_US.lang26
7 files changed, 239 insertions, 76 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b458704..a4c51f2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Changed
- Refined the comma representation of large numbers abbreviated with k, m, b
+- Dungeon Party Finder: Parties with specific classes can now *always* be marked as 'unideal' (additionally to the already existing option to mark a party when 2+ members use the same specific class)
+- Dungeon Performance Overlay: added an alternative text border option
### Fixed
- Fixed issue with 'no dung class selected'
diff --git a/src/main/java/de/cowtipper/cowlection/Cowlection.java b/src/main/java/de/cowtipper/cowlection/Cowlection.java
index f278a1a..92a6397 100644
--- a/src/main/java/de/cowtipper/cowlection/Cowlection.java
+++ b/src/main/java/de/cowtipper/cowlection/Cowlection.java
@@ -64,7 +64,7 @@ public class Cowlection {
friendsHandler = new FriendsHandler(this, new File(configDir, "friends.json"));
moo = new CredentialStorage(new Configuration(new File(configDir, "do-not-share-me-with-other-players.cfg")));
- config = new MooConfig(this, new Configuration(new File(configDir, MODID + ".cfg"), "1"));
+ config = new MooConfig(this, new Configuration(new File(configDir, MODID + ".cfg"), "0.12.0"));
}
@EventHandler
diff --git a/src/main/java/de/cowtipper/cowlection/config/MooConfig.java b/src/main/java/de/cowtipper/cowlection/config/MooConfig.java
index 85b55b1..c422236 100644
--- a/src/main/java/de/cowtipper/cowlection/config/MooConfig.java
+++ b/src/main/java/de/cowtipper/cowlection/config/MooConfig.java
@@ -90,7 +90,7 @@ public class MooConfig {
public static int dungOverlayPositionX;
public static int dungOverlayPositionY;
public static int dungOverlayGuiScale;
- public static boolean dungOverlayTextShadow;
+ private static String dungOverlayTextBorder;
private static String dungPartyFinderPlayerLookup;
public static boolean dungPartyFullLookup;
public static boolean dungPartyFinderPartyLookup;
@@ -98,11 +98,11 @@ public class MooConfig {
public static int dungClassMin;
private static String dungMarkPartiesWithCarry;
private static String dungMarkPartiesWithHyperion;
- private static boolean dungFilterPartiesWithArcherDupes;
- private static boolean dungFilterPartiesWithBerserkDupes;
- private static boolean dungFilterPartiesWithHealerDupes;
- private static boolean dungFilterPartiesWithMageDupes;
- private static boolean dungFilterPartiesWithTankDupes;
+ private static String dungMarkPartiesWithArcher;
+ private static String dungMarkPartiesWithBerserk;
+ private static String dungMarkPartiesWithHealer;
+ private static String dungMarkPartiesWithMage;
+ private static String dungMarkPartiesWithTank;
private static Configuration cfg = null;
private static final List<MooConfigCategory> configCategories = new ArrayList<>();
@@ -115,14 +115,18 @@ public class MooConfig {
this.main = main;
cfg = configuration;
- if (cfg.getLoadedConfigVersion() == null || !cfg.getLoadedConfigVersion().equals(cfg.getDefinedConfigVersion())) {
- updateConfig(cfg.getLoadedConfigVersion());
+ String oldLoadedConfigVersion = cfg.getLoadedConfigVersion();
+ boolean configVersionChanged = oldLoadedConfigVersion == null || !oldLoadedConfigVersion.equals(cfg.getDefinedConfigVersion());
+ if (configVersionChanged) {
+ updateConfigPreInit(oldLoadedConfigVersion);
}
-
initConfig();
+ if (configVersionChanged) {
+ updateConfigPostInit(oldLoadedConfigVersion);
+ }
}
- private void updateConfig(String oldVersion) {
+ private void updateConfigPreInit(String oldVersion) {
if (oldVersion == null) {
// config of Cowlection v1.8.9-0.10.2 and older
@@ -146,6 +150,34 @@ public class MooConfig {
}
}
+ private void updateConfigPostInit(String oldVersion) {
+ if ("1".equals(oldVersion)) {
+ // config of Cowlection v1.8.9-0.12.0 and older
+ ConfigCategory sbDungCategory = cfg.getCategory("skyblockdungeons");
+ if (sbDungCategory.containsKey("dungOverlayTextShadow")) {
+ boolean dungOverlayTextShadow = sbDungCategory.get("dungOverlayTextShadow").getBoolean();
+ if (!dungOverlayTextShadow) {
+ sbDungCategory.get("dungOverlayTextBorder").set("no border");
+ }
+ sbDungCategory.remove("dungOverlayTextShadow");
+ }
+
+ for (String dungClass : new String[]{"Archer", "Berserk", "Healer", "Mage", "Tank"}) {
+ String configKey = "dungFilterPartiesWith" + dungClass + "Dupes";
+ if (sbDungCategory.containsKey(configKey)) {
+ boolean filterPartiesWithX = sbDungCategory.get(configKey).getBoolean();
+ String configKeyNew = "dungMarkPartiesWith" + dungClass;
+ if (filterPartiesWithX) {
+ sbDungCategory.get(configKeyNew).set("if duplicated");
+ }
+ sbDungCategory.remove(configKey);
+ }
+ }
+ cfg.save();
+ syncFromFile();
+ }
+ }
+
private void initConfig() {
syncFromFile();
MinecraftForge.EVENT_BUS.register(new ConfigEventHandler());
@@ -456,8 +488,8 @@ public class MooConfig {
MooConfigGui.showDungeonPerformanceOverlayUntil = System.currentTimeMillis() + 500;
});
- Property propDungOverlayTextShadow = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
- "dungOverlayTextShadow", true, "Dungeon performance overlay GUI scale"));
+ Property propDungOverlayTextBorder = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
+ "dungOverlayTextBorder", "drop shadow", "Dungeon performance overlay text border", new String[]{"drop shadow", "full outline", "no border"}));
// Sub-Category: Party Finder
subCat = configCat.addSubCategory("Dungeon Party Finder");
@@ -500,25 +532,25 @@ public class MooConfig {
new String[]{"suitable " + EnumChatFormatting.GREEN + "⬛", "unideal " + EnumChatFormatting.GOLD + "⬛", "block " + EnumChatFormatting.RED + "⬛", "do not mark"}),
new MooConfigPreview(new MooChatComponent("Marked with: " + EnumChatFormatting.AQUA + "hyper").gray()));
- Property propDungFilterPartiesWithArcherDupes = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
- "dungFilterPartiesWithArcherDupes", true, "Mark parties with duplicated Archer class?"),
- new MooConfigPreview(new MooChatComponent("Marked with: " + EnumChatFormatting.GOLD + "²⁺" + EnumChatFormatting.YELLOW + "A").gray()));
+ Property propDungMarkPartiesWithArcher = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
+ "dungMarkPartiesWithArcher", "if duplicated", "Mark parties with Archer class?", new String[]{"always", "if duplicated", "do not mark"}),
+ new MooConfigPreview(DataHelper.DungeonClass.ARCHER));
- Property propDungFilterPartiesWithBerserkDupes = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
- "dungFilterPartiesWithBerserkDupes", false, "Mark parties with duplicated Berserk class?"),
- new MooConfigPreview(new MooChatComponent("Marked with: " + EnumChatFormatting.GOLD + "²⁺" + EnumChatFormatting.YELLOW + "B").gray()));
+ Property propDungMarkPartiesWithBerserk = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
+ "dungMarkPartiesWithBerserk", "do not mark", "Mark parties with Berserk class?", new String[]{"always", "if duplicated", "do not mark"}),
+ new MooConfigPreview(DataHelper.DungeonClass.BERSERK));
- Property propDungFilterPartiesWithHealerDupes = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
- "dungFilterPartiesWithHealerDupes", false, "Mark parties with duplicated Healer class?"),
- new MooConfigPreview(new MooChatComponent("Marked with: " + EnumChatFormatting.GOLD + "²⁺" + EnumChatFormatting.YELLOW + "H").gray()));
+ Property propDungMarkPartiesWithHealer = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
+ "dungMarkPartiesWithHealer", "do not mark", "Mark parties with Healer class?", new String[]{"always", "if duplicated", "do not mark"}),
+ new MooConfigPreview(DataHelper.DungeonClass.HEALER));
- Property propDungFilterPartiesWithMageDupes = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
- "dungFilterPartiesWithMageDupes", false, "Mark parties with duplicated Mage class?"),
- new MooConfigPreview(new MooChatComponent("Marked with: " + EnumChatFormatting.GOLD + "²⁺" + EnumChatFormatting.YELLOW + "M").gray()));
+ Property propDungMarkPartiesWithMage = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
+ "dungMarkPartiesWithMage", "do not mark", "Mark parties with Mage class?", new String[]{"always", "if duplicated", "do not mark"}),
+ new MooConfigPreview(DataHelper.DungeonClass.MAGE));
- Property propDungFilterPartiesWithTankDupes = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
- "dungFilterPartiesWithTankDupes", false, "Mark parties with duplicated Tank class?"),
- new MooConfigPreview(new MooChatComponent("Marked with: " + EnumChatFormatting.GOLD + "²⁺" + EnumChatFormatting.YELLOW + "T").gray()));
+ Property propDungMarkPartiesWithTank = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
+ "dungMarkPartiesWithTank", "do not mark", "Mark parties with Tank class?", new String[]{"always", "if duplicated", "do not mark"}),
+ new MooConfigPreview(DataHelper.DungeonClass.TANK));
boolean modifiedMooCmdAlias = false;
String mooCmdAliasPreChange = mooCmdAlias;
@@ -566,7 +598,7 @@ public class MooConfig {
dungOverlayPositionX = propDungOverlayPositionX.getInt();
dungOverlayPositionY = propDungOverlayPositionY.getInt();
dungOverlayGuiScale = propDungOverlayGuiScale.getInt();
- dungOverlayTextShadow = propDungOverlayTextShadow.getBoolean();
+ dungOverlayTextBorder = propDungOverlayTextBorder.getString();
dungPartyFinderPlayerLookup = propDungPartyFinderPlayerLookup.getString();
dungPartyFullLookup = propDungPartyFullLookup.getBoolean();
dungPartyFinderPartyLookup = propDungPartyFinderPartyLookup.getBoolean();
@@ -574,11 +606,11 @@ public class MooConfig {
dungClassMin = propDungClassMin.getInt();
dungMarkPartiesWithCarry = propDungMarkPartiesWithCarry.getString();
dungMarkPartiesWithHyperion = propDungMarkPartiesWithHyperion.getString();
- dungFilterPartiesWithArcherDupes = propDungFilterPartiesWithArcherDupes.getBoolean();
- dungFilterPartiesWithBerserkDupes = propDungFilterPartiesWithBerserkDupes.getBoolean();
- dungFilterPartiesWithHealerDupes = propDungFilterPartiesWithHealerDupes.getBoolean();
- dungFilterPartiesWithMageDupes = propDungFilterPartiesWithMageDupes.getBoolean();
- dungFilterPartiesWithTankDupes = propDungFilterPartiesWithTankDupes.getBoolean();
+ dungMarkPartiesWithArcher = propDungMarkPartiesWithArcher.getString();
+ dungMarkPartiesWithBerserk = propDungMarkPartiesWithBerserk.getString();
+ dungMarkPartiesWithHealer = propDungMarkPartiesWithHealer.getString();
+ dungMarkPartiesWithMage = propDungMarkPartiesWithMage.getString();
+ dungMarkPartiesWithTank = propDungMarkPartiesWithTank.getString();
if (!StringUtils.equals(mooCmdAliasPreChange, mooCmdAlias)) {
@@ -630,7 +662,7 @@ public class MooConfig {
propDungOverlayPositionX.set(dungOverlayPositionX);
propDungOverlayPositionY.set(dungOverlayPositionY);
propDungOverlayGuiScale.set(dungOverlayGuiScale);
- propDungOverlayTextShadow.set(dungOverlayTextShadow);
+ propDungOverlayTextBorder.set(dungOverlayTextBorder);
propDungPartyFinderPlayerLookup.set(dungPartyFinderPlayerLookup);
propDungPartyFullLookup.set(dungPartyFullLookup);
propDungPartyFinderPartyLookup.set(dungPartyFinderPartyLookup);
@@ -638,11 +670,11 @@ public class MooConfig {
propDungClassMin.set(dungClassMin);
propDungMarkPartiesWithCarry.set(dungMarkPartiesWithCarry);
propDungMarkPartiesWithHyperion.set(dungMarkPartiesWithHyperion);
- propDungFilterPartiesWithArcherDupes.set(dungFilterPartiesWithArcherDupes);
- propDungFilterPartiesWithBerserkDupes.set(dungFilterPartiesWithBerserkDupes);
- propDungFilterPartiesWithHealerDupes.set(dungFilterPartiesWithHealerDupes);
- propDungFilterPartiesWithMageDupes.set(dungFilterPartiesWithMageDupes);
- propDungFilterPartiesWithTankDupes.set(dungFilterPartiesWithTankDupes);
+ propDungMarkPartiesWithArcher.set(dungMarkPartiesWithArcher);
+ propDungMarkPartiesWithBerserk.set(dungMarkPartiesWithBerserk);
+ propDungMarkPartiesWithHealer.set(dungMarkPartiesWithHealer);
+ propDungMarkPartiesWithMage.set(dungMarkPartiesWithMage);
+ propDungMarkPartiesWithTank.set(dungMarkPartiesWithTank);
if (saveToFile && cfg.hasChanged()) {
boolean isPlayerIngame = Minecraft.getMinecraft().thePlayer != null;
@@ -793,6 +825,18 @@ public class MooConfig {
return dungItemToolTipToggleKeyBinding > 0 && Keyboard.isKeyDown(dungItemToolTipToggleKeyBinding);
}
+ public static Setting getDungOverlayTextBorder() {
+ switch (dungOverlayTextBorder) {
+ case "drop shadow":
+ return Setting.TEXT;
+ case "full outline":
+ return Setting.ALWAYS;
+ default:
+ // everything else: "no border"
+ return Setting.DISABLED;
+ }
+ }
+
public static Setting getDungPartyFinderPlayerLookupDisplay() {
return Setting.get(dungPartyFinderPlayerLookup);
}
@@ -819,20 +863,35 @@ public class MooConfig {
}
}
- public static boolean filterDungPartiesWithDupes(DataHelper.DungeonClass dungeonClass) {
+ public static Setting filterDungPartiesWithDupes(DataHelper.DungeonClass dungeonClass) {
+ String setting;
switch (dungeonClass) {
case ARCHER:
- return dungFilterPartiesWithArcherDupes;
+ setting = dungMarkPartiesWithArcher;
+ break;
case BERSERK:
- return dungFilterPartiesWithBerserkDupes;
+ setting = dungMarkPartiesWithBerserk;
+ break;
case HEALER:
- return dungFilterPartiesWithHealerDupes;
+ setting = dungMarkPartiesWithHealer;
+ break;
case MAGE:
- return dungFilterPartiesWithMageDupes;
+ setting = dungMarkPartiesWithMage;
+ break;
case TANK:
- return dungFilterPartiesWithTankDupes;
+ setting = dungMarkPartiesWithTank;
+ break;
default:
- return false;
+ setting = "do not mark";
+ break;
+ }
+ switch (setting) {
+ case "always":
+ return Setting.ALWAYS;
+ case "if duplicated":
+ return Setting.SPECIAL;
+ default: // do not mark
+ return Setting.DISABLED;
}
}
diff --git a/src/main/java/de/cowtipper/cowlection/config/gui/MooConfigCategoryScrolling.java b/src/main/java/de/cowtipper/cowlection/config/gui/MooConfigCategoryScrolling.java
index 4ffa9f0..7e8f3eb 100644
--- a/src/main/java/de/cowtipper/cowlection/config/gui/MooConfigCategoryScrolling.java
+++ b/src/main/java/de/cowtipper/cowlection/config/gui/MooConfigCategoryScrolling.java
@@ -134,7 +134,12 @@ public class MooConfigCategoryScrolling extends GuiListExtended {
EnumChatFormatting.GOLD + "Press Done to save changes. " + EnumChatFormatting.RED + "Requires a game restart to take effect!"))));
continue;
} else if (configEntry.getValidValues() != null && configEntry.getValidValues().length > 0) {
- this.listEntries.add(new CycleConfigEntry(configEntry));
+ if ("dungOverlayTextBorder".equals(configEntry.getName())) {
+ // special case: Dung Performance Overlay: show preview on button click
+ this.listEntries.add(new DungCycleConfigEntry(configEntry));
+ } else {
+ this.listEntries.add(new CycleConfigEntry(configEntry));
+ }
continue;
}
}
@@ -671,6 +676,18 @@ public class MooConfigCategoryScrolling extends GuiListExtended {
}
}
+ private class DungCycleConfigEntry extends CycleConfigEntry {
+ private DungCycleConfigEntry(Property property) {
+ super(property);
+ }
+
+ @Override
+ protected void changeConfigEntryButtonPressed() {
+ super.changeConfigEntryButtonPressed();
+ MooConfigGui.showDungeonPerformanceOverlayUntil = System.currentTimeMillis() + 3000;
+ }
+ }
+
private class CycleConfigEntry extends ButtonConfigEntry {
protected final int beforeIndex;
protected final int defaultIndex;
diff --git a/src/main/java/de/cowtipper/cowlection/config/gui/MooConfigPreview.java b/src/main/java/de/cowtipper/cowlection/config/gui/MooConfigPreview.java
index 32fb6d9..675c392 100644
--- a/src/main/java/de/cowtipper/cowlection/config/gui/MooConfigPreview.java
+++ b/src/main/java/de/cowtipper/cowlection/config/gui/MooConfigPreview.java
@@ -1,5 +1,7 @@
package de.cowtipper.cowlection.config.gui;
+import de.cowtipper.cowlection.config.MooConfig;
+import de.cowtipper.cowlection.data.DataHelper;
import de.cowtipper.cowlection.util.MooChatComponent;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
@@ -40,6 +42,11 @@ public class MooConfigPreview {
this.items = items;
}
+ public MooConfigPreview(PreviewChatRunnable previewRunnable) {
+ this.type = Type.RUNNABLE;
+ this.previewRunnable = previewRunnable;
+ }
+
public MooConfigPreview(String sound, float volume, float pitch) {
this.type = Type.RUNNABLE_ON_HOVER;
previewRunnable = () -> {
@@ -49,6 +56,26 @@ public class MooConfigPreview {
};
}
+ public MooConfigPreview(DataHelper.DungeonClass dungeonClass) {
+ this(new MooConfigPreview.PreviewChatRunnable() {
+ @Override
+ public IChatComponent getText() {
+ String markWith;
+ switch (MooConfig.filterDungPartiesWithDupes(dungeonClass)) {
+ case ALWAYS:
+ markWith = "" + EnumChatFormatting.WHITE + dungeonClass.getShortName();
+ break;
+ case SPECIAL:
+ markWith = EnumChatFormatting.GOLD + "²⁺" + EnumChatFormatting.YELLOW + dungeonClass.getShortName();
+ break;
+ default: // disabled/"do not mark":
+ markWith = "" + EnumChatFormatting.DARK_GRAY + EnumChatFormatting.ITALIC + "not marked";
+ }
+ return new MooChatComponent("Marked with: " + markWith).gray();
+ }
+ });
+ }
+
public void drawPreview(int x, int y, int mouseX, int mouseY, boolean enablePreview) {
switch (type) {
case ITEM:
@@ -57,8 +84,11 @@ public class MooConfigPreview {
case CHAT:
drawChatPreview(x, y, mouseX, mouseY, enablePreview);
break;
+ case RUNNABLE:
+ drawButtonWithRunnablePreview(x, y, mouseX, mouseY, false);
+ break;
case RUNNABLE_ON_HOVER:
- drawButtonWithRunnablePreview(x, y, mouseX, mouseY, enablePreview);
+ drawButtonWithRunnablePreview(x, y, mouseX, mouseY, true);
break;
default:
// do nothing
@@ -187,22 +217,48 @@ public class MooConfigPreview {
return new MooChatComponent(name).darkGreen().setHover(new MooChatComponent(gameMode).yellow().appendFreshSibling(new MooChatComponent("Online for " + onlineTime).white()));
}
- private void drawButtonWithRunnablePreview(int x, int y, int mouseX, int mouseY, boolean enablePreview) {
+ private void drawButtonWithRunnablePreview(int x, int y, int mouseX, int mouseY, boolean checkHover) {
FontRenderer fontRenderer = Minecraft.getMinecraft().fontRendererObj;
int currentX = x + 15;
int chatY = y + 20 / 2 - fontRenderer.FONT_HEIGHT / 2;
- String previewText = "(hover me to preview)";
- fontRenderer.drawStringWithShadow(previewText, currentX, chatY, 0xffffffff);
- if (nextPreviewAt < Minecraft.getSystemTime()
- && mouseY >= chatY && mouseY <= chatY + fontRenderer.FONT_HEIGHT
- && mouseX > currentX && mouseX < currentX + fontRenderer.getStringWidth(previewText)) {
- nextPreviewAt = Minecraft.getSystemTime() + 3000;
+ if (previewRunnable instanceof PreviewChatRunnable) {
+ ((PreviewChatRunnable) previewRunnable).setPos(x, y);
previewRunnable.run();
+ } else {
+ String previewText = "(hover me to preview)";
+ fontRenderer.drawStringWithShadow(previewText, currentX, chatY, 0xffffffff);
+ if (checkHover && nextPreviewAt < Minecraft.getSystemTime()
+ && mouseY >= chatY && mouseY <= chatY + fontRenderer.FONT_HEIGHT
+ && mouseX > currentX && mouseX < currentX + fontRenderer.getStringWidth(previewText)) {
+ nextPreviewAt = Minecraft.getSystemTime() + 3000;
+ previewRunnable.run();
+ }
+ }
+ }
+
+ public abstract static class PreviewChatRunnable implements Runnable {
+ private int x;
+ private int y;
+
+ public void setPos(int x, int y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ public abstract IChatComponent getText();
+
+ @Override
+ public void run() {
+ FontRenderer fontRenderer = Minecraft.getMinecraft().fontRendererObj;
+ int currentX = x + 15;
+ int chatY = y + 20 / 2 - fontRenderer.FONT_HEIGHT / 2;
+
+ fontRenderer.drawStringWithShadow(getText().getFormattedText(), currentX, chatY, 0xffffffff);
}
}
private enum Type {
- CHAT, ITEM, RUNNABLE_ON_HOVER
+ CHAT, ITEM, RUNNABLE, RUNNABLE_ON_HOVER
}
}
diff --git a/src/main/java/de/cowtipper/cowlection/listener/skyblock/DungeonsListener.java b/src/main/java/de/cowtipper/cowlection/listener/skyblock/DungeonsListener.java
index 63927c6..deb4385 100644
--- a/src/main/java/de/cowtipper/cowlection/listener/skyblock/DungeonsListener.java
+++ b/src/main/java/de/cowtipper/cowlection/listener/skyblock/DungeonsListener.java
@@ -359,22 +359,40 @@ public class DungeonsListener {
font.drawStringWithShadow(EnumChatFormatting.BOLD + "ᐯ", x + 1, y + 8, new Color(220, 20, 20, 255).getRGB());
GlStateManager.popMatrix();
}
+ StringBuilder unwantedClasses = new StringBuilder();
StringBuilder dupedClasses = new StringBuilder();
for (Map.Entry<DungeonClass, AtomicInteger> partyClassInfo : dungClassesInParty.entrySet()) {
- if (partyClassInfo.getValue().get() > 1 && MooConfig.filterDungPartiesWithDupes(partyClassInfo.getKey())) {
- dupedClasses.append(partyClassInfo.getKey().getShortName());
+ switch (MooConfig.filterDungPartiesWithDupes(partyClassInfo.getKey())) {
+ case ALWAYS:
+ unwantedClasses.append(partyClassInfo.getKey().getShortName());
+ break;
+ case SPECIAL:
+ if (partyClassInfo.getValue().get() > 1) {
+ // 2+ class
+ dupedClasses.append(partyClassInfo.getKey().getShortName());
+ }
+ break;
+ default: // DISABLED
+ // do nothing
}
}
+ StringBuilder badClasses = new StringBuilder();
+ if (unwantedClasses.length() > 0) {
+ badClasses.append(EnumChatFormatting.WHITE).append(unwantedClasses);
+ }
if (dupedClasses.length() > 0) {
- // party has class duplicates
+ badClasses.append(EnumChatFormatting.GOLD).append("²⁺").append(EnumChatFormatting.YELLOW).append(dupedClasses); // 2+
+ }
+
+ if (badClasses.length() > 0) {
+ // party has unwanted classes or class duplicates
partyType = DataHelper.PartyType.UNIDEAL;
- dupedClasses.insert(0, EnumChatFormatting.YELLOW).insert(0, "²⁺"); // 2+
GlStateManager.pushMatrix();
GlStateManager.translate(0, 0, 280);
double scaleFactor = 0.8;
GlStateManager.scale(scaleFactor, scaleFactor, 0);
- font.drawStringWithShadow(dupedClasses.toString(), (float) (x / scaleFactor), (float) (y / scaleFactor), new Color(255, 170, 0, 255).getRGB());
+ font.drawStringWithShadow(badClasses.toString(), (float) (x / scaleFactor), (float) (y / scaleFactor), new Color(255, 170, 0, 255).getRGB());
GlStateManager.popMatrix();
} else if (!memberTooLowLevel && middleText == null) {
// party matches our criteria!
@@ -624,9 +642,20 @@ public class DungeonsListener {
String dungeonPerformanceEntry = dungeonPerformanceEntries.get(line);
int xPos = (int) ((e.resolution.getScaledWidth() * (MooConfig.dungOverlayPositionX / 1000d)) / scaleFactor);
int yPos = (int) ((e.resolution.getScaledHeight() * (MooConfig.dungOverlayPositionY / 1000d) + 2) / scaleFactor + fontRenderer.FONT_HEIGHT * line + 2);
- if (MooConfig.dungOverlayTextShadow) {
+ MooConfig.Setting dungOverlayTextBorder = MooConfig.getDungOverlayTextBorder();
+ if (dungOverlayTextBorder == MooConfig.Setting.TEXT) {
+ // normal mc text shadow (drop shadow)
fontRenderer.drawStringWithShadow(dungeonPerformanceEntry, xPos, yPos, 0xffFFAA00);
+ } else if (dungOverlayTextBorder == MooConfig.Setting.ALWAYS) {
+ // full outline
+ String dungeonPerformanceEntryShadow = EnumChatFormatting.getTextWithoutFormattingCodes(dungeonPerformanceEntry);
+ fontRenderer.drawString(dungeonPerformanceEntryShadow, xPos + 1, yPos, 0xff3F2A00);
+ fontRenderer.drawString(dungeonPerformanceEntryShadow, xPos - 1, yPos, 0xff3F2A00);
+ fontRenderer.drawString(dungeonPerformanceEntryShadow, xPos, yPos + 1, 0xff3F2A00);
+ fontRenderer.drawString(dungeonPerformanceEntryShadow, xPos, yPos - 1, 0xff3F2A00);
+ fontRenderer.drawString(dungeonPerformanceEntry, xPos, yPos, 0xffFFAA00);
} else {
+ // no border, just plain text
fontRenderer.drawString(dungeonPerformanceEntry, xPos, yPos, 0xffFFAA00);
}
}
diff --git a/src/main/resources/assets/cowlection/lang/en_US.lang b/src/main/resources/assets/cowlection/lang/en_US.lang
index ede0dda..bcb84d7 100644
--- a/src/main/resources/assets/cowlection/lang/en_US.lang
+++ b/src/main/resources/assets/cowlection/lang/en_US.lang
@@ -29,7 +29,7 @@ cowlection.config.showFriendNotifications.tooltip=Set to true to receive friends
cowlection.config.showGuildNotifications=Show guild notifications
cowlection.config.showGuildNotifications.tooltip=Set to true to receive guild members' login/logout messages, set to false hide them.
cowlection.config.doBestFriendsOnlineCheck=Do best friends online check §d§l⚷
-cowlection.config.doBestFriendsOnlineCheck.tooltip=Set to true to check best friends' online status when joining a server, set to false to disable.\n§fDoes §dnot §fwork for staff members and players hiding their online status.\n§d§l⚷ §eRequires a valid API key!
+cowlection.config.doBestFriendsOnlineCheck.tooltip=Set to true to check best friends' online status when joining a server, set to false to disable.\n§fDoes §dnot §fwork for staff members and players hiding their online status.\n§aHover over a player name to see their current gamemode.\n§d§l⚷ §eRequires a valid API key!
cowlection.config.enableSkyBlockOnlyFeatures=Enable SkyBlock-only features
cowlection.config.enableSkyBlockOnlyFeatures.tooltip=§6When should SkyBlock-only features be active?\n§7§o(relog or change worlds after changing this option)\n §d➊ §fonly while being on SkyBlock §e(= disabled on other servers and in other gamemodes\n §d➋ §falways §e(= including other servers and gamemodes)\n §d➌ §fnever §e(§cNone §eof the SkyBlock-only features will work!)
cowlection.config.notifyFreshServer=Notify when world is loaded <X days
@@ -78,8 +78,8 @@ cowlection.config.dungOverlayPositionY=Overlay y position (⇦/⇨ keys to fine-
cowlection.config.dungOverlayPositionY.tooltip=Use left and right arrow key to increment/decrement the y position by 1
cowlection.config.dungOverlayGuiScale=Overlay Gui Scale
cowlection.config.dungOverlayGuiScale.tooltip=Adjust the size of the dungeon performance overlay (50%%-200%%)
-cowlection.config.dungOverlayTextShadow=Add text shadow
-cowlection.config.dungOverlayTextShadow.tooltip=Enable or disable text shadow
+cowlection.config.dungOverlayTextBorder=Text border/shadow
+cowlection.config.dungOverlayTextBorder.tooltip=Change or disable text border/shadow
cowlection.config.dungPartyFinderPlayerLookup=Show info of joining players §d§l⚷
cowlection.config.dungPartyFinderPlayerLookup.tooltip=Show armor and dungeons stats of player joining via party finder as a tooltip or in chat?\n§d§l⚷ §eRequires a valid API key!
cowlection.config.dungPartyFullLookup=Lookup info when party full? §d§l⚷
@@ -94,16 +94,16 @@ cowlection.config.dungMarkPartiesWithCarry=Mark 'carry' parties?
cowlection.config.dungMarkPartiesWithCarry.tooltip=Mark parties that have 'carry' in their notes?
cowlection.config.dungMarkPartiesWithHyperion=Mark 'hyperion' parties?
cowlection.config.dungMarkPartiesWithHyperion.tooltip=Mark parties that have 'hyperion' in their notes?
-cowlection.config.dungFilterPartiesWithArcherDupes=Mark duplicated Archer class?
-cowlection.config.dungFilterPartiesWithArcherDupes.tooltip=Mark parties with duplicated Archer class?
-cowlection.config.dungFilterPartiesWithBerserkDupes=Mark duplicated Berserk class?
-cowlection.config.dungFilterPartiesWithBerserkDupes.tooltip=Mark parties with duplicated Berserk class?
-cowlection.config.dungFilterPartiesWithHealerDupes=Mark duplicated Healer class?
-cowlection.config.dungFilterPartiesWithHealerDupes.tooltip=Mark parties with duplicated Healer class?
-cowlection.config.dungFilterPartiesWithMageDupes=Mark duplicated Mage class?
-cowlection.config.dungFilterPartiesWithMageDupes.tooltip=Mark parties with duplicated Mage class?
-cowlection.config.dungFilterPartiesWithTankDupes=Mark duplicated Tank class?
-cowlection.config.dungFilterPartiesWithTankDupes.tooltip=Mark parties with duplicated Tank class?
+cowlection.config.dungMarkPartiesWithArcher=Mark parties with Archer class as unideal?
+cowlection.config.dungMarkPartiesWithArcher.tooltip=Mark parties with Archer class as unideal (orange background)?
+cowlection.config.dungMarkPartiesWithBerserk=Mark parties with Berserk class as unideal?
+cowlection.config.dungMarkPartiesWithBerserk.tooltip=Mark parties with Berserk class as unideal (orange background)?
+cowlection.config.dungMarkPartiesWithHealer=Mark parties with Healer class as unideal?
+cowlection.config.dungMarkPartiesWithHealer.tooltip=Mark parties with Healer class as unideal (orange background)?
+cowlection.config.dungMarkPartiesWithMage=Mark parties with Mage class as unideal?
+cowlection.config.dungMarkPartiesWithMage.tooltip=Mark parties with Mage class as unideal (orange background)?
+cowlection.config.dungMarkPartiesWithTank=Mark parties with Tank class as unideal?
+cowlection.config.dungMarkPartiesWithTank.tooltip=Mark parties with Tank class as unideal (orange background)?
cowlection.commands.generic.exception=%s
key.cowlection.category=Cowlection
key.cowlection.moo=Open Command