Moved price and it's methods to Utilities
This commit is contained in:
parent
5dd6cb44e5
commit
22e05d140f
|
|
@ -2,8 +2,8 @@ package com.alttd.GUI.windows;
|
|||
|
||||
import com.alttd.GUI.GUIMerchant;
|
||||
import com.alttd.config.Config;
|
||||
import com.alttd.economy.Calculation;
|
||||
import com.alttd.objects.VillagerType;
|
||||
import com.alttd.util.Utilities;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import org.bukkit.Material;
|
||||
|
|
@ -19,7 +19,7 @@ public class BuyGUI extends GUIMerchant {
|
|||
Template.of("trader", villagerType.getDisplayName()),
|
||||
Template.of("percentage", "100")), villagerType); //TODO get percentage from player somehow
|
||||
for (ItemStack itemStack : villagerType.getBuying()) {
|
||||
double price = Calculation.price(itemStack);
|
||||
double price = Utilities.price(itemStack);
|
||||
addItem(itemStack,
|
||||
getPriceItem(price),
|
||||
null,
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ package com.alttd.GUI.windows;
|
|||
|
||||
import com.alttd.GUI.GUIMerchant;
|
||||
import com.alttd.config.Config;
|
||||
import com.alttd.economy.Calculation;
|
||||
import com.alttd.objects.VillagerType;
|
||||
import com.alttd.util.Utilities;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import org.bukkit.Material;
|
||||
|
|
@ -19,7 +19,7 @@ public class SellGUI extends GUIMerchant {
|
|||
Template.of("trader", villagerType.getDisplayName()),
|
||||
Template.of("percentage", "100")), villagerType); //TODO get percentage from player somehow
|
||||
for (ItemStack itemStack : villagerType.getSelling()) {
|
||||
double price = Calculation.price(itemStack);
|
||||
double price = Utilities.price(itemStack);
|
||||
addItem(itemStack,
|
||||
getPriceItem(price),
|
||||
null,
|
||||
|
|
|
|||
|
|
@ -1,67 +0,0 @@
|
|||
package com.alttd.economy;
|
||||
|
||||
import com.alttd.config.WorthConfig;
|
||||
import com.alttd.util.Utilities;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.*;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class Calculation {
|
||||
|
||||
/**
|
||||
* Calculate the price for an item
|
||||
* @param item to calculate price for
|
||||
* @return price or int < 0 for error
|
||||
*/
|
||||
public static double price(ItemStack item) {
|
||||
if (WorthConfig.prices.containsKey(item.getType()))
|
||||
return Utilities.round(WorthConfig.prices.getDouble(item.getType()) * item.getAmount(), 2);
|
||||
|
||||
WorthConfig.prices.put(item.getType(), Utilities.round(getPrice(item, null), 2));
|
||||
|
||||
return WorthConfig.prices.getDouble(item.getType()) * item.getAmount();
|
||||
}
|
||||
|
||||
private static double getPrice(ItemStack item, Material blockedMaterial) {
|
||||
if (WorthConfig.prices.containsKey(item.getType()))
|
||||
return WorthConfig.prices.getDouble(item.getType());
|
||||
double price = -1;
|
||||
List<Recipe> recipes = Bukkit.getRecipesFor(item);
|
||||
for (Recipe recipe : recipes) {
|
||||
double possiblePrice;
|
||||
if (recipe instanceof ShapedRecipe shapedRecipe) {
|
||||
Collection<ItemStack> values = shapedRecipe.getIngredientMap().values();
|
||||
if (values.stream().anyMatch(itemStack -> itemStack.getType().equals(blockedMaterial)))
|
||||
continue;
|
||||
possiblePrice = getPrice(values.stream().toList(), item.getType());
|
||||
if (price == -1 || price > possiblePrice)
|
||||
price = possiblePrice;
|
||||
} else if (recipe instanceof ShapelessRecipe shapelessRecipe) {
|
||||
if (shapelessRecipe.getIngredientList().stream().anyMatch(itemStack -> itemStack.getType().equals(blockedMaterial)))
|
||||
continue;
|
||||
possiblePrice = getPrice(shapelessRecipe.getIngredientList(), item.getType());
|
||||
if (price == -1 || price > possiblePrice)
|
||||
price = possiblePrice;
|
||||
} else if (recipe instanceof FurnaceRecipe furnaceRecipe) {
|
||||
possiblePrice = getPrice(furnaceRecipe.getInput(), item.getType());
|
||||
if (price == -1 || price > possiblePrice)
|
||||
price = possiblePrice;
|
||||
}
|
||||
}
|
||||
return price;
|
||||
}
|
||||
|
||||
private static double getPrice(List<ItemStack> items, Material blockedMaterial) {
|
||||
double price = 0;
|
||||
for (ItemStack item : items) {
|
||||
double tmp = getPrice(item, blockedMaterial);
|
||||
if (tmp == -1)
|
||||
return -1;
|
||||
price += tmp;
|
||||
}
|
||||
return price;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,13 @@
|
|||
package com.alttd.util;
|
||||
|
||||
import com.alttd.config.WorthConfig;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.*;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class Utilities {
|
||||
/**
|
||||
* Rounds num down to precision (rounds up if last cut off decimal is bigger than 4)
|
||||
|
|
@ -22,4 +30,59 @@ public class Utilities {
|
|||
|
||||
return total;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the price for an ItemStack (this considers stack size)
|
||||
*
|
||||
* @param item to calculate price for
|
||||
* @return price or int < 0 for error
|
||||
*/
|
||||
public static double price(ItemStack item) {
|
||||
if (WorthConfig.prices.containsKey(item.getType()))
|
||||
return Utilities.round(WorthConfig.prices.getDouble(item.getType()) * item.getAmount(), 2);
|
||||
|
||||
WorthConfig.prices.put(item.getType(), Utilities.round(getPrice(item, null), 2));
|
||||
|
||||
return WorthConfig.prices.getDouble(item.getType()) * item.getAmount();
|
||||
}
|
||||
|
||||
private static double getPrice(ItemStack item, Material blockedMaterial) {
|
||||
if (WorthConfig.prices.containsKey(item.getType()))
|
||||
return WorthConfig.prices.getDouble(item.getType());
|
||||
double price = -1;
|
||||
List<Recipe> recipes = Bukkit.getRecipesFor(item);
|
||||
for (Recipe recipe : recipes) {
|
||||
double possiblePrice;
|
||||
if (recipe instanceof ShapedRecipe shapedRecipe) {
|
||||
Collection<ItemStack> values = shapedRecipe.getIngredientMap().values();
|
||||
if (values.stream().anyMatch(itemStack -> itemStack.getType().equals(blockedMaterial)))
|
||||
continue;
|
||||
possiblePrice = getPrice(values.stream().toList(), item.getType());
|
||||
if (price == -1 || price > possiblePrice)
|
||||
price = possiblePrice;
|
||||
} else if (recipe instanceof ShapelessRecipe shapelessRecipe) {
|
||||
if (shapelessRecipe.getIngredientList().stream().anyMatch(itemStack -> itemStack.getType().equals(blockedMaterial)))
|
||||
continue;
|
||||
possiblePrice = getPrice(shapelessRecipe.getIngredientList(), item.getType());
|
||||
if (price == -1 || price > possiblePrice)
|
||||
price = possiblePrice;
|
||||
} else if (recipe instanceof FurnaceRecipe furnaceRecipe) {
|
||||
possiblePrice = getPrice(furnaceRecipe.getInput(), item.getType());
|
||||
if (price == -1 || price > possiblePrice)
|
||||
price = possiblePrice;
|
||||
}
|
||||
}
|
||||
return price;
|
||||
}
|
||||
|
||||
private static double getPrice(List<ItemStack> items, Material blockedMaterial) {
|
||||
double price = 0;
|
||||
for (ItemStack item : items) {
|
||||
double tmp = getPrice(item, blockedMaterial);
|
||||
if (tmp == -1)
|
||||
return -1;
|
||||
price += tmp;
|
||||
}
|
||||
return price;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user