Added support for item metadata for "currencyItems" settings (List of registry names of items which wizard trades can use as currency)
This commit is contained in:
@@ -1213,7 +1213,7 @@ public final class Settings {
|
|||||||
bookshelfSearchRadius = property.getInt();
|
bookshelfSearchRadius = property.getInt();
|
||||||
propOrder.add(property.getName());
|
propOrder.add(property.getName());
|
||||||
|
|
||||||
property = config.get(TWEAKS_CATEGORY, "currencyItems", new String[]{"gold_ingot 3", "emerald 6"}, "List of registry names of items which wizard trades can use as currency (in the first slot; the second slot is unaffected). Each entry in this list should consist of an item registry name, followed by a single space, then an integer which defines the 'value' of the item. Higher values mean fewer of that currency item are required for a given trade.",
|
property = config.get(TWEAKS_CATEGORY, "currencyItems", new String[]{"gold_ingot 3", "emerald 6"}, "List of registry names of items which wizard trades can use as currency (in the first slot; the second slot is unaffected). Each entry in this list should consist of an item registry name, followed by a single space, then an integer which defines the 'value' of the item. Higher values mean fewer of that currency item are required for a given trade. To specify metadata, use the format 'modid:item:meta value'. For example, 'minecraft:wool:1 5'. If no metadata is given, any metadata will be accepted.",
|
||||||
Pattern.compile("[A-Za-z0-9:_]+ [0-9]+"));
|
Pattern.compile("[A-Za-z0-9:_]+ [0-9]+"));
|
||||||
property.setLanguageKey("config." + Wizardry.MODID + ".currency_items");
|
property.setLanguageKey("config." + Wizardry.MODID + ".currency_items");
|
||||||
propOrder.add(property.getName());
|
propOrder.add(property.getName());
|
||||||
@@ -1817,16 +1817,46 @@ public final class Settings {
|
|||||||
|
|
||||||
string = string.toLowerCase(Locale.ROOT).trim();
|
string = string.toLowerCase(Locale.ROOT).trim();
|
||||||
|
|
||||||
String[] itemArgs = string.split(":");
|
|
||||||
String item;
|
String item;
|
||||||
short meta;
|
short meta;
|
||||||
|
|
||||||
try {
|
int lastColon = string.lastIndexOf(':');
|
||||||
meta = Short.parseShort(itemArgs[itemArgs.length-1]);
|
|
||||||
item = String.join(":", Arrays.copyOfRange(itemArgs, 0, itemArgs.length-1));
|
if (lastColon > -1 && lastColon < string.length() - 1) { // if there is a colon and it's not the last char
|
||||||
}catch(NumberFormatException e){ // If no metadata is specified
|
String metaString = string.substring(lastColon + 1);
|
||||||
meta = OreDictionary.WILDCARD_VALUE;
|
try {
|
||||||
|
short parsedMeta = Short.parseShort(metaString);
|
||||||
|
String itemString = string.substring(0, lastColon);
|
||||||
|
|
||||||
|
// If itemString has no colon, it could be 'item:meta' or 'namespace:numeric_path'.
|
||||||
|
// e.g., 'wool:1' vs 'mod:123'. We want to support 'wool:1' as item 'wool' with meta 1.
|
||||||
|
// We can't reliably distinguish the two cases without knowing all namespaces, so we have to use
|
||||||
|
// a heuristic. The original code favoured the 'item:meta' interpretation, let's stick with that.
|
||||||
|
// The issue was with 'namespace:numeric_path' which this logic now handles.
|
||||||
|
if (itemString.indexOf(':') == -1) {
|
||||||
|
item = itemString;
|
||||||
|
meta = parsedMeta;
|
||||||
|
} else {
|
||||||
|
// Disambiguate things like 'mod:123:4' (item 'mod:123' with meta 4) vs 'mod:item:123' (item 'mod:item' with meta 123)
|
||||||
|
// If the bit before the last colon is a valid resource location, it's probably item:meta
|
||||||
|
try {
|
||||||
|
new ResourceLocation(itemString);
|
||||||
|
item = itemString;
|
||||||
|
meta = parsedMeta;
|
||||||
|
} catch (Exception e) {
|
||||||
|
item = string;
|
||||||
|
meta = OreDictionary.WILDCARD_VALUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
// The part after colon is not a number, so it's part of the name
|
||||||
|
item = string;
|
||||||
|
meta = OreDictionary.WILDCARD_VALUE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
item = string;
|
item = string;
|
||||||
|
meta = OreDictionary.WILDCARD_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Pair.of(new ResourceLocation(item), meta);
|
return Pair.of(new ResourceLocation(item), meta);
|
||||||
|
|||||||
Reference in New Issue
Block a user