From 02b4c7f1e430813de78c4ef1d4ef8777a7f759f9 Mon Sep 17 00:00:00 2001 From: Alex 'mcmonkey' Goodwin Date: Thu, 17 Jun 2021 11:19:58 -0700 Subject: [PATCH] tradetag villager_xp and price_multiplier --- .../objects/properties/PropertyRegistry.java | 2 + .../properties/entity/EntityColor.java | 2 +- .../properties/entity/EntityDarkDuration.java | 2 +- .../trade/TradePriceMultiplier.java | 73 +++++++++++++++++++ .../properties/trade/TradeVillagerXP.java | 73 +++++++++++++++++++ 5 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradePriceMultiplier.java create mode 100644 plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradeVillagerXP.java diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java index e8bbda859d..0745e769f3 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java @@ -200,7 +200,9 @@ public static void registerMainProperties() { PropertyParser.registerProperty(TradeHasXp.class, TradeTag.class); PropertyParser.registerProperty(TradeInputs.class, TradeTag.class); PropertyParser.registerProperty(TradeMaxUses.class, TradeTag.class); + PropertyParser.registerProperty(TradePriceMultiplier.class, TradeTag.class); PropertyParser.registerProperty(TradeResult.class, TradeTag.class); PropertyParser.registerProperty(TradeUses.class, TradeTag.class); + PropertyParser.registerProperty(TradeVillagerXP.class, TradeTag.class); } } diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityColor.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityColor.java index d924ff3e9d..2ecfea1a46 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityColor.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityColor.java @@ -243,7 +243,7 @@ public ObjectTag getObjectAttribute(Attribute attribute) { // <--[tag] // @attribute - // @returns ElementTag + // @returns ListTag // @mechanism EntityTag.color // @group properties // @description diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityDarkDuration.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityDarkDuration.java index 3f795d8c10..27e619ff58 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityDarkDuration.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityDarkDuration.java @@ -44,7 +44,7 @@ public String getPropertyString() { @Override public String getPropertyId() { - return "dark_time_remaining"; + return "dark_duration"; } @Override diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradePriceMultiplier.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradePriceMultiplier.java new file mode 100644 index 0000000000..178eb9c367 --- /dev/null +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradePriceMultiplier.java @@ -0,0 +1,73 @@ +package com.denizenscript.denizen.objects.properties.trade; + +import com.denizenscript.denizen.objects.TradeTag; +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.objects.core.ElementTag; +import com.denizenscript.denizencore.objects.properties.Property; +import com.denizenscript.denizencore.objects.properties.PropertyParser; + +public class TradePriceMultiplier implements Property { + + public static boolean describes(ObjectTag recipe) { + return recipe instanceof TradeTag; + } + + public static TradePriceMultiplier getFrom(ObjectTag recipe) { + if (!describes(recipe)) { + return null; + } + return new TradePriceMultiplier((TradeTag) recipe); + } + + public static final String[] handledMechs = new String[] { + "price_multiplier" + }; + + private TradeTag recipe; + + public TradePriceMultiplier(TradeTag recipe) { + this.recipe = recipe; + } + + public String getPropertyString() { + if (recipe.getRecipe() == null) { + return null; + } + return String.valueOf(recipe.getRecipe().getPriceMultiplier()); + } + + public String getPropertyId() { + return "price_multiplier"; + } + + public static void registerTags() { + + // <--[tag] + // @attribute + // @returns ElementTag(Decimal) + // @mechanism TradeTag.price_multiplier + // @description + // Returns the price multiplier for this trade. + // --> + PropertyParser.registerTag("price_multiplier", (attribute, recipe) -> { + return new ElementTag(recipe.recipe.getRecipe().getPriceMultiplier()); + }); + } + + public void adjust(Mechanism mechanism) { + + // <--[mechanism] + // @object TradeTag + // @name price_multiplier + // @input ElementTag(Decimal) + // @description + // Sets the price multiplier for this trade. + // @tags + // + // --> + if (mechanism.matches("price_multiplier") && mechanism.requireFloat()) { + recipe.getRecipe().setPriceMultiplier(mechanism.getValue().asFloat()); + } + } +} diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradeVillagerXP.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradeVillagerXP.java new file mode 100644 index 0000000000..da4e8ae423 --- /dev/null +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradeVillagerXP.java @@ -0,0 +1,73 @@ +package com.denizenscript.denizen.objects.properties.trade; + +import com.denizenscript.denizen.objects.TradeTag; +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.objects.core.ElementTag; +import com.denizenscript.denizencore.objects.properties.Property; +import com.denizenscript.denizencore.objects.properties.PropertyParser; + +public class TradeVillagerXP implements Property { + + public static boolean describes(ObjectTag recipe) { + return recipe instanceof TradeTag; + } + + public static TradeVillagerXP getFrom(ObjectTag recipe) { + if (!describes(recipe)) { + return null; + } + return new TradeVillagerXP((TradeTag) recipe); + } + + public static final String[] handledMechs = new String[] { + "villager_xp" + }; + + private TradeTag recipe; + + public TradeVillagerXP(TradeTag recipe) { + this.recipe = recipe; + } + + public String getPropertyString() { + if (recipe.getRecipe() == null) { + return null; + } + return String.valueOf(recipe.getRecipe().getVillagerExperience()); + } + + public String getPropertyId() { + return "villager_xp"; + } + + public static void registerTags() { + + // <--[tag] + // @attribute + // @returns ElementTag(Number) + // @mechanism TradeTag.villager_xp + // @description + // Returns the amount of experience a villager gains from this trade. + // --> + PropertyParser.registerTag("villager_xp", (attribute, recipe) -> { + return new ElementTag(recipe.recipe.getRecipe().getVillagerExperience()); + }); + } + + public void adjust(Mechanism mechanism) { + + // <--[mechanism] + // @object TradeTag + // @name villager_xp + // @input ElementTag(Number) + // @description + // Sets the amount of experience a villager gains from this trade. + // @tags + // + // --> + if (mechanism.matches("villager_xp") && mechanism.requireInteger()) { + recipe.getRecipe().setVillagerExperience(mechanism.getValue().asInt()); + } + } +}