Speeds up smith presets by using caching and sets
All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
This commit is contained in:
parent
3dd8467a58
commit
3ed3c99c15
@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* The command for displaying which materials are contained in a preset
|
||||
@ -26,7 +27,7 @@ public class PresetCommand implements CommandExecutor {
|
||||
}
|
||||
|
||||
String presetName = args[0].toUpperCase().replace('-', '_');
|
||||
List<Material> includedMaterials;
|
||||
Set<Material> includedMaterials;
|
||||
|
||||
try {
|
||||
//Display the preset with the filter applied
|
||||
|
@ -19,7 +19,7 @@ import org.bukkit.enchantments.Enchantment;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* The command used for changing global blacksmith configuration options
|
||||
@ -215,7 +215,7 @@ public class BlackSmithConfigCommand implements CommandExecutor {
|
||||
private void updateAllMatchedPrices(@NotNull GlobalBlacksmithSettings settings,
|
||||
@NotNull BlacksmithSetting blacksmithSetting,
|
||||
@NotNull String materialName, double newPrice) {
|
||||
List<Material> materials = ItemHelper.getWildcardMatch(materialName, false);
|
||||
Set<Material> materials = ItemHelper.getWildcardMatch(materialName, false);
|
||||
for (Material material : materials) {
|
||||
if (blacksmithSetting == BlacksmithSetting.BASE_PRICE) {
|
||||
settings.setBasePrice(material, newPrice);
|
||||
|
@ -7,7 +7,10 @@ import org.bukkit.Tag;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
|
||||
@ -41,6 +44,12 @@ public enum SmithPreset {
|
||||
SmithPresetFilter.AXE, SmithPresetFilter.HOE, SmithPresetFilter.SHOVEL, SmithPresetFilter.MISC});
|
||||
|
||||
private final SmithPresetFilter[] filters;
|
||||
private static final Map<SmithPreset, Set<String>> presetMaterialNames = new HashMap<>();
|
||||
private static final Map<SmithPresetFilter, Set<String>> filterMaterialNames = new HashMap<>();
|
||||
private static Set<Material> armor = null;
|
||||
private static Set<Material> ranged = null;
|
||||
private static Set<Material> weapons = null;
|
||||
private static Set<Material> tools = null;
|
||||
|
||||
/**
|
||||
* Instantiates a new smith preset
|
||||
@ -128,12 +137,27 @@ public enum SmithPreset {
|
||||
return "";
|
||||
}
|
||||
|
||||
// Check if the preset result has been stored
|
||||
Set<String> materialNames = null;
|
||||
if (filter == null) {
|
||||
if (presetMaterialNames.containsKey(preset)) {
|
||||
materialNames = presetMaterialNames.get(preset);
|
||||
}
|
||||
} else {
|
||||
if (filterMaterialNames.containsKey(filter)) {
|
||||
materialNames = filterMaterialNames.get(filter);
|
||||
}
|
||||
}
|
||||
|
||||
//Return the list of materials included in the preset
|
||||
List<String> materialNames;
|
||||
if (materialNames == null) {
|
||||
if (filter != null) {
|
||||
materialNames = preset.getMaterialNames(filter);
|
||||
filterMaterialNames.put(filter, materialNames);
|
||||
} else {
|
||||
materialNames = preset.getMaterialNames();
|
||||
presetMaterialNames.put(preset, materialNames);
|
||||
}
|
||||
}
|
||||
if (negated) {
|
||||
materialNames = negateMaterials(materialNames);
|
||||
@ -148,8 +172,8 @@ public enum SmithPreset {
|
||||
* @return <p>The materials included in this preset, filtered using the given filter</p>
|
||||
*/
|
||||
@NotNull
|
||||
public List<Material> getFilteredMaterials(SmithPresetFilter filter) {
|
||||
List<Material> materials = new ArrayList<>(this.getMaterials());
|
||||
public Set<Material> getFilteredMaterials(SmithPresetFilter filter) {
|
||||
Set<Material> materials = new HashSet<>(this.getMaterials());
|
||||
materials.removeIf((item) -> !filter.isIncluded(item));
|
||||
return materials;
|
||||
}
|
||||
@ -160,7 +184,7 @@ public enum SmithPreset {
|
||||
* @return <p>All materials in this preset</p>
|
||||
*/
|
||||
@NotNull
|
||||
public List<Material> getMaterials() {
|
||||
public Set<Material> getMaterials() {
|
||||
return switch (this) {
|
||||
case BLACKSMITH -> ItemHelper.getAllReforgeAbleMaterials();
|
||||
case WEAPON_SMITH -> getWeapons();
|
||||
@ -175,11 +199,13 @@ public enum SmithPreset {
|
||||
* @return <p>All ranged weapon materials</p>
|
||||
*/
|
||||
@NotNull
|
||||
private List<Material> getRanged() {
|
||||
List<Material> ranged = new ArrayList<>();
|
||||
private Set<Material> getRanged() {
|
||||
if (ranged == null) {
|
||||
ranged = new HashSet<>();
|
||||
ranged.add(Material.TRIDENT);
|
||||
ranged.add(Material.BOW);
|
||||
ranged.add(Material.CROSSBOW);
|
||||
}
|
||||
return ranged;
|
||||
}
|
||||
|
||||
@ -189,8 +215,9 @@ public enum SmithPreset {
|
||||
* @return <p>All tool materials</p>
|
||||
*/
|
||||
@NotNull
|
||||
private List<Material> getTools() {
|
||||
List<Material> tools = new ArrayList<>();
|
||||
private Set<Material> getTools() {
|
||||
if (tools == null) {
|
||||
tools = new HashSet<>();
|
||||
tools.addAll(Tag.ITEMS_HOES.getValues());
|
||||
tools.addAll(Tag.ITEMS_SHOVELS.getValues());
|
||||
tools.addAll(Tag.ITEMS_AXES.getValues());
|
||||
@ -198,6 +225,7 @@ public enum SmithPreset {
|
||||
tools.add(Material.FLINT_AND_STEEL);
|
||||
tools.add(Material.FISHING_ROD);
|
||||
tools.add(Material.SHEARS);
|
||||
}
|
||||
return tools;
|
||||
}
|
||||
|
||||
@ -207,10 +235,12 @@ public enum SmithPreset {
|
||||
* @return <p>All weapon materials</p>
|
||||
*/
|
||||
@NotNull
|
||||
private List<Material> getWeapons() {
|
||||
List<Material> weapons = new ArrayList<>(getSwords());
|
||||
private Set<Material> getWeapons() {
|
||||
if (weapons == null) {
|
||||
weapons = new HashSet<>(getSwords());
|
||||
weapons.addAll(getRanged());
|
||||
weapons.add(Material.SHIELD);
|
||||
}
|
||||
return weapons;
|
||||
}
|
||||
|
||||
@ -230,13 +260,15 @@ public enum SmithPreset {
|
||||
* @return <p>All armor types</p>
|
||||
*/
|
||||
@NotNull
|
||||
private List<Material> getArmor() {
|
||||
List<Material> armor = new ArrayList<>();
|
||||
private Set<Material> getArmor() {
|
||||
if (armor == null) {
|
||||
armor = new HashSet<>();
|
||||
armor.addAll(getMaterialsEndingWith("HELMET"));
|
||||
armor.addAll(getMaterialsEndingWith("CHESTPLATE"));
|
||||
armor.addAll(getMaterialsEndingWith("LEGGINGS"));
|
||||
armor.addAll(getMaterialsEndingWith("BOOTS"));
|
||||
armor.add(Material.ELYTRA);
|
||||
}
|
||||
return armor;
|
||||
}
|
||||
|
||||
@ -247,8 +279,8 @@ public enum SmithPreset {
|
||||
* @return <p>The resulting materials</p>
|
||||
*/
|
||||
@NotNull
|
||||
private List<Material> getMaterialsEndingWith(@NotNull String end) {
|
||||
List<Material> matchedMaterials = new ArrayList<>();
|
||||
private Set<Material> getMaterialsEndingWith(@NotNull String end) {
|
||||
Set<Material> matchedMaterials = new HashSet<>();
|
||||
for (Material material : ItemHelper.getAllReforgeAbleMaterials()) {
|
||||
if (!material.name().startsWith("LEGACY") && material.name().endsWith(end)) {
|
||||
matchedMaterials.add(material);
|
||||
@ -258,12 +290,12 @@ public enum SmithPreset {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets material names of all materials reforge-able by this smith
|
||||
* Gets material names of all materials reforge-able by this smith preset
|
||||
*
|
||||
* @return <p>All material names for this smith</p>
|
||||
* @return <p>All material names for this smith preset</p>
|
||||
*/
|
||||
@NotNull
|
||||
private List<String> getMaterialNames() {
|
||||
private Set<String> getMaterialNames() {
|
||||
return getNames(this.getMaterials());
|
||||
}
|
||||
|
||||
@ -274,7 +306,7 @@ public enum SmithPreset {
|
||||
* @return <p>All material names for this smith</p>
|
||||
*/
|
||||
@NotNull
|
||||
private List<String> getMaterialNames(@NotNull SmithPresetFilter filter) {
|
||||
private Set<String> getMaterialNames(@NotNull SmithPresetFilter filter) {
|
||||
return getNames(this.getFilteredMaterials(filter));
|
||||
}
|
||||
|
||||
@ -285,8 +317,8 @@ public enum SmithPreset {
|
||||
* @return <p>The names of the materials</p>
|
||||
*/
|
||||
@NotNull
|
||||
private List<String> getNames(@NotNull List<Material> materials) {
|
||||
List<String> items = new ArrayList<>();
|
||||
private Set<String> getNames(@NotNull Set<Material> materials) {
|
||||
Set<String> items = new HashSet<>();
|
||||
for (Material material : materials) {
|
||||
items.add(material.name().toLowerCase().replace("_", "-"));
|
||||
}
|
||||
@ -300,8 +332,8 @@ public enum SmithPreset {
|
||||
* @return <p>The negated material names</p>
|
||||
*/
|
||||
@NotNull
|
||||
private static List<String> negateMaterials(@NotNull List<String> materials) {
|
||||
List<String> negatedMaterials = new ArrayList<>(materials.size());
|
||||
private static Set<String> negateMaterials(@NotNull Set<String> materials) {
|
||||
Set<String> negatedMaterials = new HashSet<>(materials.size());
|
||||
materials.forEach((material) -> {
|
||||
if (material != null && !material.isBlank()) {
|
||||
negatedMaterials.add("-" + material);
|
||||
|
@ -101,10 +101,12 @@ public final class ItemHelper {
|
||||
/**
|
||||
* Gets a complete list of all reforge-able materials
|
||||
*
|
||||
* <p>Note: As this loops through all materials, the result should be cached</p>
|
||||
*
|
||||
* @return <p>A complete list of reforge-able materials</p>
|
||||
*/
|
||||
public static @NotNull List<Material> getAllReforgeAbleMaterials() {
|
||||
List<Material> reforgeAbleMaterials = new ArrayList<>();
|
||||
public static @NotNull Set<Material> getAllReforgeAbleMaterials() {
|
||||
Set<Material> reforgeAbleMaterials = new HashSet<>();
|
||||
for (Material material : Material.values()) {
|
||||
ItemStack item = new ItemStack(material);
|
||||
if (isRepairable(item)) {
|
||||
@ -207,12 +209,12 @@ public final class ItemHelper {
|
||||
* @param extended <p>Whether to use an extended match, allowing any material</p>
|
||||
* @return <p>The matched material(s)</p>
|
||||
*/
|
||||
public static @NotNull List<Material> getWildcardMatch(@NotNull String materialName, boolean extended) {
|
||||
public static @NotNull Set<Material> getWildcardMatch(@NotNull String materialName, boolean extended) {
|
||||
String search = InputParsingHelper.regExIfy(materialName);
|
||||
List<Material> materials = new ArrayList<>();
|
||||
List<Material> all;
|
||||
Set<Material> materials = new HashSet<>();
|
||||
Set<Material> all;
|
||||
if (extended) {
|
||||
all = List.of(Material.values());
|
||||
all = Set.of(Material.values());
|
||||
} else {
|
||||
all = ItemHelper.getAllReforgeAbleMaterials();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user