aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCow <cow@volloeko.de>2021-03-20 00:50:13 +0100
committerCow <cow@volloeko.de>2021-03-20 02:10:31 +0100
commit27811afe485ce639bbc920d885fb98d4b052bcc6 (patch)
tree8814e2900b183622e92e980e042b9013f1928131
parente09fc0d1f07da1fe5def7cb80c2128cf71a6ad4f (diff)
downloadCowlection-27811afe485ce639bbc920d885fb98d4b052bcc6.tar.gz
Cowlection-27811afe485ce639bbc920d885fb98d4b052bcc6.tar.bz2
Cowlection-27811afe485ce639bbc920d885fb98d4b052bcc6.zip
Added Auction house related features
- show price for each lvl 1 enchantment book required to craft a higher tier book - mark sold/ended/expired auctions
-rw-r--r--CHANGELOG.md6
-rw-r--r--src/main/java/de/cowtipper/cowlection/config/MooConfig.java41
-rw-r--r--src/main/java/de/cowtipper/cowlection/config/gui/MooConfigCategoryScrolling.java7
-rw-r--r--src/main/java/de/cowtipper/cowlection/listener/skyblock/SkyBlockListener.java201
-rw-r--r--src/main/java/de/cowtipper/cowlection/util/Utils.java2
-rw-r--r--src/main/resources/assets/cowlection/lang/en_US.lang6
6 files changed, 227 insertions, 36 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ef853ee..5acff3c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -17,6 +17,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Added 'last profile save' (= last time user played SkyBlock)
- Added Enchanting, Farming, Mining, and Combat 51-60
- Added missing Runecrafting 25
+- Auction house: Mark sold/ended/expired auctions
+ - either one letter (S, E, E) or the full word
+- Auction house: show price for each lvl 1 enchantment book required to craft a higher tier book
+ - only works on enchanted books with *one* enchantment
+ - enabled for all ultimate and Turbo-crop enchantments
+ - additional enchantments can be added via `/moo config` *(Keep in mind that not all high-level enchantments can be created by combining lower level books!)*
### Changed
- Refined the comma representation of large numbers abbreviated with k, m, b
diff --git a/src/main/java/de/cowtipper/cowlection/config/MooConfig.java b/src/main/java/de/cowtipper/cowlection/config/MooConfig.java
index 533a767..a19218e 100644
--- a/src/main/java/de/cowtipper/cowlection/config/MooConfig.java
+++ b/src/main/java/de/cowtipper/cowlection/config/MooConfig.java
@@ -77,6 +77,8 @@ public class MooConfig {
private static String showPetExp;
private static String numeralSystem;
private static String tooltipAuctionHousePriceEach;
+ public static String[] tooltipAuctionHousePriceEachEnchantments;
+ private static String auctionHouseMarkEndedAuctions;
private static String bazaarConnectGraphsNodes;
public static int bazaarConnectGraphsLineWidth;
public static String bestiaryOverviewOrder;
@@ -112,6 +114,7 @@ public class MooConfig {
private final Cowlection main;
private Property propMooCmdAlias;
private Property propTabCompletableNamesCommands;
+ private Property propTooltipAuctionHousePriceEachEnchantments;
private List<Property> logSearchProperties;
public MooConfig(Cowlection main, Configuration configuration) {
@@ -362,7 +365,7 @@ public class MooConfig {
"notifyServerAge", true, "Show server age notifications?"));
// Sub-Category: Tooltip enhancements
- subCat = configCat.addSubCategory("Tooltip enhancements");
+ subCat = configCat.addSubCategory("Tooltip & GUI enhancements");
Property propTooltipToggleKeyBinding = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
"tooltipToggleKeyBinding", Keyboard.KEY_LSHIFT, "Key to toggle tooltip"));
@@ -399,6 +402,13 @@ public class MooConfig {
Property propTooltipAuctionHousePriceEach = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
"tooltipAuctionHousePriceEach", "always", "Add price per item if multiple items are bought or sold", new String[]{"always", "key press", "never"}), ahItemPreview);
+ propTooltipAuctionHousePriceEachEnchantments = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
+ "tooltipAuctionHousePriceEachEnchantments", new String[]{"overload", "rejuvenate"}, "Price per lvl 1 book enchantment")
+ .setValidationPattern(Pattern.compile("^[A-Za-z_ -]+$")));
+
+ Property propAuctionHouseMarkEndedAuctions = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
+ "auctionHouseMarkEndedAuctions", "a letter", "Mark ended auctions", new String[]{"a letter", "a word", "disabled"}));
+
MooConfigPreview bazaarGraphPreview = new MooConfigPreview(MooConfigPreview.createDemoItem("paper", "§aBuy Price §731d §77d §e24h", new String[]{
"§7The price at which buy orders have been filled.", "",
"§r┌----------------------------------------------┐", "§r│§66. 1k§r+§bxxxxxx§8·································§bxx§r│",
@@ -571,6 +581,8 @@ public class MooConfig {
String mooCmdAliasPreChange = mooCmdAlias;
boolean modifiedTabCompletableCommandsList = false;
String[] tabCompletableCommandsPreChange = tabCompletableNamesCommands != null ? tabCompletableNamesCommands.clone() : null;
+ boolean modifiedTooltipAuctionHousePriceEachEnchantments = false;
+ String[] tooltipAuctionHousePriceEachEnchantmentsPreChange = tooltipAuctionHousePriceEachEnchantments != null ? tooltipAuctionHousePriceEachEnchantments.clone() : null;
if (readFieldsFromConfig) {
// Category: General
configGuiExplanations = propConfigGuiExplanations.getString();
@@ -600,6 +612,8 @@ public class MooConfig {
showPetExp = propShowPetExp.getString();
numeralSystem = propNumeralSystem.getString();
tooltipAuctionHousePriceEach = propTooltipAuctionHousePriceEach.getString();
+ tooltipAuctionHousePriceEachEnchantments = propTooltipAuctionHousePriceEachEnchantments.getStringList();
+ auctionHouseMarkEndedAuctions = propAuctionHouseMarkEndedAuctions.getString();
bazaarConnectGraphsNodes = propBazaarConnectGraphsNodes.getString();
bazaarConnectGraphsLineWidth = propBazaarConnectGraphsLineWidth.getInt();
bestiaryOverviewOrder = propBestiaryOverviewOrder.getString();
@@ -629,13 +643,15 @@ public class MooConfig {
dungMarkPartiesWithMage = propDungMarkPartiesWithMage.getString();
dungMarkPartiesWithTank = propDungMarkPartiesWithTank.getString();
-
if (!StringUtils.equals(mooCmdAliasPreChange, mooCmdAlias)) {
modifiedMooCmdAlias = true;
}
if (!Arrays.equals(tabCompletableCommandsPreChange, tabCompletableNamesCommands)) {
modifiedTabCompletableCommandsList = true;
}
+ if (!Arrays.equals(tooltipAuctionHousePriceEachEnchantmentsPreChange, tooltipAuctionHousePriceEachEnchantments)) {
+ modifiedTooltipAuctionHousePriceEachEnchantments = true;
+ }
}
// Category: General
@@ -666,6 +682,8 @@ public class MooConfig {
propShowPetExp.set(showPetExp);
propNumeralSystem.set(numeralSystem);
propTooltipAuctionHousePriceEach.set(tooltipAuctionHousePriceEach);
+ propTooltipAuctionHousePriceEachEnchantments.set(tooltipAuctionHousePriceEachEnchantments);
+ propAuctionHouseMarkEndedAuctions.set(auctionHouseMarkEndedAuctions);
propBazaarConnectGraphsNodes.set(bazaarConnectGraphsNodes);
propBazaarConnectGraphsLineWidth.set(bazaarConnectGraphsLineWidth);
propBestiaryOverviewOrder.set(bestiaryOverviewOrder);
@@ -736,6 +754,15 @@ public class MooConfig {
propTabCompletableNamesCommands.set(tabCompletableNamesCommands);
}
}
+ if (modifiedTooltipAuctionHousePriceEachEnchantments) {
+ for (int i = 0, enchantmentsLength = tooltipAuctionHousePriceEachEnchantments.length; i < enchantmentsLength; i++) {
+ // standardize enchantment names to match their names in the NBT data
+ String enchantmentName = tooltipAuctionHousePriceEachEnchantments[i];
+ String standardizedEnchantmentName = enchantmentName.toLowerCase().replace(' ', '_');
+ tooltipAuctionHousePriceEachEnchantments[i] = standardizedEnchantmentName;
+ }
+ propTooltipAuctionHousePriceEachEnchantments.set(tooltipAuctionHousePriceEachEnchantments);
+ }
cfg.save();
}
@@ -803,6 +830,10 @@ public class MooConfig {
return Setting.get(tooltipAuctionHousePriceEach);
}
+ public static Setting getMarkAuctionHouseEndedAuctions() {
+ return Setting.get(auctionHouseMarkEndedAuctions);
+ }
+
public static Setting getBazaarConnectGraphsNodes() {
return Setting.get(bazaarConnectGraphsNodes);
}
@@ -965,6 +996,10 @@ public class MooConfig {
return logSearchProperties;
}
+ public Property getTooltipAuctionHousePriceEachEnchantmentsProperty() {
+ return propTooltipAuctionHousePriceEachEnchantments;
+ }
+
public class ConfigEventHandler {
@SubscribeEvent(priority = EventPriority.NORMAL)
@@ -989,6 +1024,7 @@ public class MooConfig {
return TOOLTIP;
case "in chat":
case "as text":
+ case "a word":
return TEXT;
case "hidden":
case "never":
@@ -997,6 +1033,7 @@ public class MooConfig {
case "on SkyBlock":
case "key press":
case "as tooltip ①§0⬛":
+ case "a letter":
return SPECIAL;
default:
return UNKNOWN;
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 7e8f3eb..27e6914 100644
--- a/src/main/java/de/cowtipper/cowlection/config/gui/MooConfigCategoryScrolling.java
+++ b/src/main/java/de/cowtipper/cowlection/config/gui/MooConfigCategoryScrolling.java
@@ -133,6 +133,13 @@ public class MooConfigCategoryScrolling extends GuiListExtended {
Cowlection.MODID, "cowlectionMooCmdAlias", false, false,
EnumChatFormatting.GOLD + "Press Done to save changes. " + EnumChatFormatting.RED + "Requires a game restart to take effect!"))));
continue;
+ } else if (configEntry.equals(Cowlection.getInstance().getConfig().getTooltipAuctionHousePriceEachEnchantmentsProperty())) {
+ this.listEntries.add(new GuiSwitchEntry("tooltipAuctionHousePriceEachEnchantments", "➡ modify", () ->
+ mc.displayGuiScreen(new GuiConfig(MooConfigCategoryScrolling.this.parent,
+ Lists.newArrayList(new ConfigElement(Cowlection.getInstance().getConfig().getTooltipAuctionHousePriceEachEnchantmentsProperty())),
+ Cowlection.MODID, "cowlectionTooltipAuctionHousePriceEachEnchantments", false, false,
+ EnumChatFormatting.GOLD + "Press 2x Done to save changes. " + EnumChatFormatting.LIGHT_PURPLE + EnumChatFormatting.BOLD + "Ultimate" + EnumChatFormatting.RESET + EnumChatFormatting.RED + " and " + EnumChatFormatting.YELLOW + "Turbo-Crop" + EnumChatFormatting.RED + " enchants are always included!"))));
+ continue;
} else if (configEntry.getValidValues() != null && configEntry.getValidValues().length > 0) {
if ("dungOverlayTextBorder".equals(configEntry.getName())) {
// special case: Dung Performance Overlay: show preview on button click
diff --git a/src/main/java/de/cowtipper/cowlection/listener/skyblock/SkyBlockListener.java b/src/main/java/de/cowtipper/cowlection/listener/skyblock/SkyBlockListener.java
index 1555e2d..09a8152 100644
--- a/src/main/java/de/cowtipper/cowlection/listener/skyblock/SkyBlockListener.java
+++ b/src/main/java/de/cowtipper/cowlection/listener/skyblock/SkyBlockListener.java
@@ -13,20 +13,25 @@ import de.cowtipper.cowlection.util.Utils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.audio.SoundCategory;
+import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.inventory.GuiChest;
import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.command.NumberInvalidException;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
+import net.minecraft.inventory.Container;
import net.minecraft.inventory.ContainerChest;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagInt;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.ResourceLocation;
@@ -36,6 +41,7 @@ import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import net.minecraftforge.fml.relauncher.ReflectionHelper;
import org.apache.commons.lang3.StringUtils;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
@@ -395,48 +401,179 @@ public class SkyBlockListener {
}
}
- // for auction house: show price for each item if multiple items are sold at once
+ // for auction house: show price for each item if multiple items are sold at once or if higher tier ultimate enchantment books are sold
MooConfig.Setting tooltipAuctionHousePriceEachDisplay = MooConfig.getTooltipAuctionHousePriceEachDisplay();
if ((tooltipAuctionHousePriceEachDisplay == MooConfig.Setting.ALWAYS || tooltipAuctionHousePriceEachDisplay == MooConfig.Setting.SPECIAL && MooConfig.isTooltipToggleKeyBindingPressed())
&& (e.entityPlayer.openContainer instanceof ContainerChest || Minecraft.getMinecraft().currentScreen instanceof MooConfigGui)) {
- int stackSize = e.itemStack.stackSize;
- boolean isSubmitBidItem = isSubmitBidItem(e.itemStack);
- if ((stackSize == 1 && !isSubmitBidItem) || e.toolTip.size() < 4) {
- // only 1 item or irrelevant tooltip - nothing to do here, abort!
- return;
- }
- if (isSubmitBidItem) {
- // special case: "place bid on an item" interface ("Auction View")
- ItemStack auctionedItem = e.entityPlayer.openContainer.getInventory().get(13);
- if (auctionedItem == null || auctionedItem.stackSize == 1) {
- // still only 1 item, abort!
+ int itemAmount = -1;
+ String superEnchant = null;
+ if (e.itemStack.getItem() == Items.enchanted_book && extraAttributes != null && extraAttributes.hasKey("enchantments", Constants.NBT.TAG_COMPOUND)) {
+ NBTTagCompound enchants = extraAttributes.getCompoundTag("enchantments");
+ try {
+ Map<String, NBTBase> enchantmentsMap = ReflectionHelper.getPrivateValue(NBTTagCompound.class, enchants, "tagMap", "field_74784_a");
+
+ if (enchantmentsMap.size() == 1) {
+ for (Map.Entry<String, NBTBase> enchant : enchantmentsMap.entrySet()) {
+ String enchantKey = enchant.getKey();
+ if (enchantKey.startsWith("ultimate_") && enchant.getValue() instanceof NBTTagInt) {
+ // enchanted book with 1 enchantment (which is an ultimate enchant)
+ // enchantment tier => amount of books needed
+ // I = 2^0 = 1
+ // II = 2^1 = 2
+ // III = 2^2 = 4
+ // IV = 2^3 = 8
+ // V = 2^4 = 16
+ itemAmount = (int) Math.pow(2, ((NBTTagInt) enchant.getValue()).getInt() - 1);
+ superEnchant = Utils.fancyCase(enchantKey.substring("ultimate_".length()));
+ break;
+ } else if (enchantKey.startsWith("turbo_") && enchant.getValue() instanceof NBTTagInt) {
+ itemAmount = (int) Math.pow(2, ((NBTTagInt) enchant.getValue()).getInt() - 1);
+ superEnchant = "Turbo-" + Utils.fancyCase(enchantKey.substring("turbo_".length()));
+ if (superEnchant.equals("Turbo-Cactus")) {
+ // (╯°□°)╯︵ ┻━┻
+ superEnchant = "Turbo-Cacti";
+ }
+ break;
+ }
+ for (String priceEachEnchantment : MooConfig.tooltipAuctionHousePriceEachEnchantments) {
+ String priceEachEnchantKey = priceEachEnchantment;
+ int dashInEnchantName = priceEachEnchantKey.indexOf('-');
+ if (dashInEnchantName > 0) {
+ priceEachEnchantKey = priceEachEnchantKey.replace('-', '_');
+ }
+ if (enchantKey.equals(priceEachEnchantKey) && enchant.getValue() instanceof NBTTagInt) {
+ itemAmount = (int) Math.pow(2, ((NBTTagInt) enchant.getValue()).getInt() - 1);
+ superEnchant = Utils.fancyCase(priceEachEnchantment);
+ }
+ }
+ }
+ }
+ } catch (ReflectionHelper.UnableToAccessFieldException ignored) {
+ return;
+ }
+ } else {
+ itemAmount = e.itemStack.stackSize;
+ boolean isSubmitBidItem = isSubmitBidItem(e.itemStack);
+ if ((itemAmount == 1 && !isSubmitBidItem) || e.toolTip.size() < 4) {
+ // only 1 item or irrelevant tooltip - nothing to do here, abort!
return;
}
- stackSize = auctionedItem.stackSize;
+
+ if (isSubmitBidItem) {
+ // special case: "place bid on an item" interface ("Auction View")
+ ItemStack auctionedItem = e.entityPlayer.openContainer.getInventory().get(13);
+ if (auctionedItem == null || auctionedItem.stackSize == 1) {
+ // still only 1 item, abort!
+ return;
+ }
+ itemAmount = auctionedItem.stackSize;
+ }
}
+ if (itemAmount > 1) {
+ List<String> toolTip = e.toolTip;
+ String superEnchantName = null;
+
+ // starting with i=1 because first line is never the one we're looking for
+ for (int i = 1; i < toolTip.size(); i++) {
+ String toolTipLine = toolTip.get(i);
+ String toolTipLineUnformatted = EnumChatFormatting.getTextWithoutFormattingCodes(toolTipLine);
+ if (superEnchant != null && superEnchantName == null && (toolTipLineUnformatted.startsWith(superEnchant) || toolTipLineUnformatted.startsWith("Ultimate " + superEnchant))) {
+ int lastSpace = toolTipLine.lastIndexOf(' ');
+ if (lastSpace > 0) {
+ superEnchantName = toolTipLine.substring(0, lastSpace);
+ }
+ }
+ if (toolTipLineUnformatted.startsWith("Top bid: ")
+ || toolTipLineUnformatted.startsWith("Starting bid: ")
+ || toolTipLineUnformatted.startsWith("Item price: ")
+ || toolTipLineUnformatted.startsWith("Buy it now: ")
+ || toolTipLineUnformatted.startsWith("Sold for: ")
+ || toolTipLineUnformatted.startsWith("New bid: ") /* special case: 'Submit Bid' item */) {
- List<String> toolTip = e.toolTip;
+ try {
+ long price = numberFormatter.parse(StringUtils.substringBetween(toolTipLineUnformatted, ": ", " coins")).longValue();
+ double priceEach = price / (double) itemAmount;
+ String formattedPriceEach = priceEach < 5000 ? numberFormatter.format(priceEach) : Utils.formatNumberWithAbbreviations(priceEach);
+ if (superEnchantName != null) {
+ toolTip.add(i + 1, EnumChatFormatting.YELLOW + " (≙ " + itemAmount + "x " + superEnchantName + " " + (MooConfig.useRomanNumerals() ? "I" : "1") + EnumChatFormatting.RESET + EnumChatFormatting.YELLOW + " for " + formattedPriceEach + " each)");
+ } else {
+ String pricePerItem = EnumChatFormatting.YELLOW + " (" + formattedPriceEach + " each)";
+ toolTip.set(i, toolTipLine + pricePerItem);
+ }
+ return;
+ } catch (ParseException ex) {
+ return;
+ }
+ }
+ }
+ }
+ }
+ }
- // starting with i=1 because first line is never the one we're looking for
- for (int i = 1; i < toolTip.size(); i++) {
- String toolTipLineUnformatted = EnumChatFormatting.getTextWithoutFormattingCodes(toolTip.get(i));
- if (toolTipLineUnformatted.startsWith("Top bid: ")
- || toolTipLineUnformatted.startsWith("Starting bid: ")
- || toolTipLineUnformatted.startsWith("Item price: ")
- || toolTipLineUnformatted.startsWith("Buy it now: ")
- || toolTipLineUnformatted.startsWith("Sold for: ")
- || toolTipLineUnformatted.startsWith("New bid: ") /* special case: 'Submit Bid' item */) {
+ @SubscribeEvent
+ public void onRenderGuiBackground(GuiScreenEvent.DrawScreenEvent.Pre e) {
+ if (e.gui instanceof GuiChest) {
+ MooConfig.Setting markAuctionHouseEndedAuctions = MooConfig.getMarkAuctionHouseEndedAuctions();
+ if (markAuctionHouseEndedAuctions == MooConfig.Setting.DISABLED) {
+ return;
+ }
+ GuiChest guiChest = (GuiChest) e.gui;
- try {
- long price = numberFormatter.parse(StringUtils.substringBetween(toolTipLineUnformatted, ": ", " coins")).longValue();
- double priceEach = price / (double) stackSize;
- String formattedPriceEach = priceEach < 5000 ? numberFormatter.format(priceEach) : Utils.formatNumberWithAbbreviations(priceEach);
- String pricePerItem = EnumChatFormatting.YELLOW + " (" + formattedPriceEach + " each)";
- toolTip.set(i, toolTip.get(i) + pricePerItem);
- return;
- } catch (ParseException ex) {
- return;
+ Container inventorySlots = guiChest.inventorySlots;
+ IInventory inventory = inventorySlots.getSlot(0).inventory;
+ if (inventory.getName().contains("Auction")) {
+ // Auctions Browser, Auction: "<search term>", <player>'s Auctions, Auction View
+ FontRenderer fontRenderer = e.gui.mc.fontRendererObj;
+ // formulas from GuiContainer#initGui (guiLeft, guiTop) and GuiChest (ySize)
+ int guiLeft = (guiChest.width - 176) / 2;
+ int inventoryRows = inventory.getSizeInventory() / 9;
+ int ySize = 222 - 108 + inventoryRows * 18;
+ int guiTop = (guiChest.height - ySize) / 2;
+
+ for (Slot inventorySlot : inventorySlots.inventorySlots) {
+ if (inventorySlot.getHasStack()) {
+ int slotRow = inventorySlot.slotNumber / 9;
+ int slotColumn = inventorySlot.slotNumber % 9;
+ // check if slot is one of the middle slots with parties
+ if (slotRow == 0 || slotRow == (inventoryRows - 1) || slotColumn == 0 || slotColumn == 8) {
+ // one of the glass pane borders
+ continue;
+ }
+ NBTTagCompound itemNbtDisplay = inventorySlot.getStack().getSubCompound("display", false);
+ if (itemNbtDisplay != null && itemNbtDisplay.hasKey("Lore", Constants.NBT.TAG_LIST)) {
+ NBTTagList loreList = itemNbtDisplay.getTagList("Lore", Constants.NBT.TAG_STRING);
+ if (loreList.tagCount() < 5) {
+ continue;
+ }
+ for (int loreLineNr = loreList.tagCount() - 1; loreLineNr >= 0; --loreLineNr) {
+ String loreLineFormatted = loreList.getStringTagAt(loreLineNr);
+ String loreLine = EnumChatFormatting.getTextWithoutFormattingCodes(loreLineFormatted);
+
+ String auctionStatus;
+ if (loreLine.startsWith("Ends in: ")) {
+ // auction is still going
+ break;
+ } else if (loreLine.equals("Status: Expired!")) {
+ auctionStatus = EnumChatFormatting.RED + (markAuctionHouseEndedAuctions == MooConfig.Setting.TEXT ? "Expired" : "E");
+ } else if (loreLine.equals("Status: Ended!")) {
+ auctionStatus = EnumChatFormatting.GREEN + (markAuctionHouseEndedAuctions == MooConfig.Setting.TEXT ? "Ended" : "E");
+ } else if (loreLine.equals("Status: Sold!")) {
+ auctionStatus = EnumChatFormatting.GREEN + (markAuctionHouseEndedAuctions == MooConfig.Setting.TEXT ? "Sold" : "S");
+ } else {
+ continue;
+ }
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(0, 0, 281);
+ double scaleFactor = markAuctionHouseEndedAuctions == MooConfig.Setting.TEXT ? 0.4 : 0.5;
+ GlStateManager.scale(scaleFactor, scaleFactor, 0);
+ int slotX = guiLeft + inventorySlot.xDisplayPosition;
+ int slotY = guiTop + inventorySlot.yDisplayPosition;
+ fontRenderer.drawStringWithShadow(auctionStatus, (float) (slotX / scaleFactor), (float) (slotY / scaleFactor), 0xffcc00);
+ GlStateManager.popMatrix();
+ break;
+ }
+ }
}
}
}
diff --git a/src/main/java/de/cowtipper/cowlection/util/Utils.java b/src/main/java/de/cowtipper/cowlection/util/Utils.java
index d5c846d..bfeef4b 100644
--- a/src/main/java/de/cowtipper/cowlection/util/Utils.java
+++ b/src/main/java/de/cowtipper/cowlection/util/Utils.java
@@ -41,7 +41,7 @@ public final class Utils {
}
public static String fancyCase(String string) {
- return WordUtils.capitalizeFully(string.replace('_', ' '));
+ return WordUtils.capitalizeFully(string.replace('_', ' '), ' ', '-');
}
/**
diff --git a/src/main/resources/assets/cowlection/lang/en_US.lang b/src/main/resources/assets/cowlection/lang/en_US.lang
index e9d9091..c531329 100644
--- a/src/main/resources/assets/cowlection/lang/en_US.lang
+++ b/src/main/resources/assets/cowlection/lang/en_US.lang
@@ -53,7 +53,11 @@ cowlection.config.showPetExp.tooltip=Show pet exp?\n§7§oExp for max level pets
cowlection.config.numeralSystem=Numeral system
cowlection.config.numeralSystem.tooltip=Use Roman or Arabic numeral system?\nThis is currently used to display numbers in the commands /moo stalkSkyBlock and /moo analyzeIsland
cowlection.config.tooltipAuctionHousePriceEach=§7Auction house: §rprice per item
-cowlection.config.tooltipAuctionHousePriceEach.tooltip=Add price per item if multiple items are bought or sold?
+cowlection.config.tooltipAuctionHousePriceEach.tooltip=Add price per item if multiple items are bought or sold?\nAlso add price for level 1 books for enchanted books with one single enchant.
+cowlection.config.tooltipAuctionHousePriceEachEnchantments=§7AH: §rprice per lvl 1 enchantment
+cowlection.config.tooltipAuctionHousePriceEachEnchantments.tooltip=Breaks down the price of enchanted books with one higher-tiered enchantment into their potential level 1 book prices.\n§d§lUltimate§r and §eTurbo-Crop §renchantments are always included. Enchantments set in this config option get broken down additionally.\n§7Keep in mind that not all high-level enchantments can be created by combining lower level books!
+cowlection.config.auctionHouseMarkEndedAuctions=§7AH: §rmark sold/ended/expired auctions with...
+cowlection.config.auctionHouseMarkEndedAuctions.tooltip=Add indicators to auctions that...\n ‣ sold: §aSold §ror §aS\n ‣ ended: §aEnded §ror §aE\n ‣ expired: §cExpired §ror §cE
cowlection.config.bazaarConnectGraphsNodes=§7Bazaar: §rconnect the graph nodes
cowlection.config.bazaarConnectGraphsNodes.tooltip=Draw a line through the nodes of the bazaar graphs?\n§7§oThis also (tries to) fix the graphs when using the MC unicode font.
cowlection.config.bazaarConnectGraphsLineWidth=§7Bazaar: §rline width