mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-25 06:36:45 +01:00
Repair rewrite pt 2 WIP
This commit is contained in:
parent
18fd9bbf9b
commit
a6a734befe
@ -37,7 +37,7 @@ import com.gmail.nossr50.config.hocon.skills.mining.ConfigMining;
|
|||||||
import com.gmail.nossr50.config.hocon.skills.ranks.ConfigRanks;
|
import com.gmail.nossr50.config.hocon.skills.ranks.ConfigRanks;
|
||||||
import com.gmail.nossr50.config.hocon.skills.ranks.SkillRankProperty;
|
import com.gmail.nossr50.config.hocon.skills.ranks.SkillRankProperty;
|
||||||
import com.gmail.nossr50.config.hocon.skills.repair.ConfigRepair;
|
import com.gmail.nossr50.config.hocon.skills.repair.ConfigRepair;
|
||||||
import com.gmail.nossr50.config.hocon.skills.repair.RepairWildcard;
|
import com.gmail.nossr50.skills.repair.RepairWildcard;
|
||||||
import com.gmail.nossr50.config.hocon.skills.salvage.ConfigSalvage;
|
import com.gmail.nossr50.config.hocon.skills.salvage.ConfigSalvage;
|
||||||
import com.gmail.nossr50.config.hocon.skills.smelting.ConfigSmelting;
|
import com.gmail.nossr50.config.hocon.skills.smelting.ConfigSmelting;
|
||||||
import com.gmail.nossr50.config.hocon.skills.swords.ConfigSwords;
|
import com.gmail.nossr50.config.hocon.skills.swords.ConfigSwords;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.gmail.nossr50.config.hocon.serializers;
|
package com.gmail.nossr50.config.hocon.serializers;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.hocon.skills.repair.RepairWildcard;
|
import com.gmail.nossr50.skills.repair.RepairWildcard;
|
||||||
import com.google.common.reflect.TypeToken;
|
import com.google.common.reflect.TypeToken;
|
||||||
import ninja.leaping.configurate.ConfigurationNode;
|
import ninja.leaping.configurate.ConfigurationNode;
|
||||||
import ninja.leaping.configurate.ValueType;
|
import ninja.leaping.configurate.ValueType;
|
||||||
@ -10,7 +10,6 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class RepairWildcardSerializer implements TypeSerializer<RepairWildcard> {
|
public class RepairWildcardSerializer implements TypeSerializer<RepairWildcard> {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.gmail.nossr50.config.hocon.serializers;
|
package com.gmail.nossr50.config.hocon.serializers;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.skills.repair.RepairTransaction;
|
||||||
import com.gmail.nossr50.skills.repair.repairables.Repairable;
|
import com.gmail.nossr50.skills.repair.repairables.Repairable;
|
||||||
import com.gmail.nossr50.util.nbt.RawNBT;
|
import com.gmail.nossr50.util.nbt.RawNBT;
|
||||||
import com.google.common.reflect.TypeToken;
|
import com.google.common.reflect.TypeToken;
|
||||||
@ -15,7 +16,7 @@ import java.util.Set;
|
|||||||
|
|
||||||
public class RepairableSerializer implements TypeSerializer<Repairable> {
|
public class RepairableSerializer implements TypeSerializer<Repairable> {
|
||||||
private static final String ITEM = "Item";
|
private static final String ITEM = "Item";
|
||||||
private static final String ITEMS_USED_TO_REPAIR = "Items-Used-To-Repair";
|
private static final String ITEMS_USED_TO_REPAIR = "Repair-Transaction-Cost";
|
||||||
private static final String OVERRIDE_LEVEL_REQUIREMENT = "Level-Requirement";
|
private static final String OVERRIDE_LEVEL_REQUIREMENT = "Level-Requirement";
|
||||||
private static final String BASE_XP = "XP-Per-Repair";
|
private static final String BASE_XP = "XP-Per-Repair";
|
||||||
private static final String FULL_REPAIR_TRANSACTIONS = "Repair-Count";
|
private static final String FULL_REPAIR_TRANSACTIONS = "Repair-Count";
|
||||||
@ -25,14 +26,14 @@ public class RepairableSerializer implements TypeSerializer<Repairable> {
|
|||||||
@Override
|
@Override
|
||||||
public Repairable deserialize(TypeToken<?> type, ConfigurationNode value) throws ObjectMappingException {
|
public Repairable deserialize(TypeToken<?> type, ConfigurationNode value) throws ObjectMappingException {
|
||||||
String itemMaterial = value.getNode(ITEM).getValue(TypeToken.of(String.class));
|
String itemMaterial = value.getNode(ITEM).getValue(TypeToken.of(String.class));
|
||||||
HashSet<ItemStack> repairItems = new HashSet(value.getNode(ITEMS_USED_TO_REPAIR).getValue(new TypeToken<Set<ItemStack>>() {}));
|
RepairTransaction repairTransaction = value.getNode(ITEMS_USED_TO_REPAIR).getValue(TypeToken.of(RepairTransaction.class));
|
||||||
Integer minimumLevel = value.getNode(OVERRIDE_LEVEL_REQUIREMENT).getValue(TypeToken.of(Integer.class));
|
Integer minimumLevel = value.getNode(OVERRIDE_LEVEL_REQUIREMENT).getValue(TypeToken.of(Integer.class));
|
||||||
Integer baseXP = value.getNode(BASE_XP).getValue(TypeToken.of(Integer.class));
|
Integer baseXP = value.getNode(BASE_XP).getValue(TypeToken.of(Integer.class));
|
||||||
Integer minRepairs = value.getNode(FULL_REPAIR_TRANSACTIONS).getValue(TypeToken.of(Integer.class));
|
Integer minRepairs = value.getNode(FULL_REPAIR_TRANSACTIONS).getValue(TypeToken.of(Integer.class));
|
||||||
Boolean strictMatching = value.getNode(STRICT_MATCHING).getValue(TypeToken.of(Boolean.class));
|
Boolean strictMatching = value.getNode(STRICT_MATCHING).getValue(TypeToken.of(Boolean.class));
|
||||||
String rawNBT = value.getNode(RAW_NBT).getValue(TypeToken.of(String.class));
|
String rawNBT = value.getNode(RAW_NBT).getValue(TypeToken.of(String.class));
|
||||||
|
|
||||||
return new Repairable(itemMaterial, repairItems, minimumLevel, minRepairs, baseXP, strictMatching, new RawNBT(rawNBT));
|
return new Repairable(itemMaterial, repairTransaction, minimumLevel, minRepairs, baseXP, strictMatching, new RawNBT(rawNBT));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -4,10 +4,10 @@ import com.gmail.nossr50.config.ConfigConstants;
|
|||||||
import com.gmail.nossr50.config.hocon.skills.repair.general.ConfigRepairGeneral;
|
import com.gmail.nossr50.config.hocon.skills.repair.general.ConfigRepairGeneral;
|
||||||
import com.gmail.nossr50.config.hocon.skills.repair.repairmastery.ConfigRepairRepairMastery;
|
import com.gmail.nossr50.config.hocon.skills.repair.repairmastery.ConfigRepairRepairMastery;
|
||||||
import com.gmail.nossr50.config.hocon.skills.repair.subskills.ConfigRepairSubSkills;
|
import com.gmail.nossr50.config.hocon.skills.repair.subskills.ConfigRepairSubSkills;
|
||||||
|
import com.gmail.nossr50.skills.repair.RepairWildcard;
|
||||||
import com.gmail.nossr50.skills.repair.repairables.Repairable;
|
import com.gmail.nossr50.skills.repair.repairables.Repairable;
|
||||||
import ninja.leaping.configurate.objectmapping.Setting;
|
import ninja.leaping.configurate.objectmapping.Setting;
|
||||||
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
|
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
package com.gmail.nossr50.skills.repair;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents one item in a Repair Transaction
|
||||||
|
*/
|
||||||
|
public class RepairCost {
|
||||||
|
|
||||||
|
private final ArrayList<ItemStack> compatibleRepairItems;
|
||||||
|
|
||||||
|
public RepairCost(ArrayList<ItemStack> compatibleRepairItems) {
|
||||||
|
this.compatibleRepairItems = compatibleRepairItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RepairCost(RepairWildcard repairWildcard) {
|
||||||
|
compatibleRepairItems = new ArrayList<>();
|
||||||
|
compatibleRepairItems.addAll(repairWildcard.getMatchingItems());
|
||||||
|
}
|
||||||
|
|
||||||
|
public RepairCost(ItemStack repairItem) {
|
||||||
|
compatibleRepairItems = new ArrayList<>();
|
||||||
|
compatibleRepairItems.add(repairItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack getCost(PlayerInventory playerInventory, boolean strictMatching) {
|
||||||
|
for(ItemStack itemStack : playerInventory.getContents()) {
|
||||||
|
if(itemStack == null || itemStack.getType() == Material.AIR) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Attempt to match the item in the inventory to any of the compatible repair items
|
||||||
|
for(ItemStack repairItem : compatibleRepairItems) {
|
||||||
|
if(strictMatching) {
|
||||||
|
if(itemStack.isSimilar(repairItem))
|
||||||
|
return itemStack;
|
||||||
|
} else {
|
||||||
|
if(itemStack.getType() == repairItem.getType()) {
|
||||||
|
return itemStack;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<ItemStack> getCompatibleRepairItems() {
|
||||||
|
return compatibleRepairItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (!(o instanceof RepairCost)) return false;
|
||||||
|
RepairCost that = (RepairCost) o;
|
||||||
|
return getCompatibleRepairItems().equals(that.getCompatibleRepairItems());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(getCompatibleRepairItems());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.gmail.nossr50.skills.repair;
|
||||||
|
|
||||||
|
|
||||||
|
import com.gmail.nossr50.skills.repair.RepairCost;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a complete repair transaction
|
||||||
|
* A repair transaction is made up of a multiple RepairCost objects
|
||||||
|
* A RepairCost object is used to find a matching ItemStack in a players inventory if one exists
|
||||||
|
* A RepairCost object can be a single item or it can be multiple items representing a range of compatible items to pay that part of the RepairTransaction
|
||||||
|
*/
|
||||||
|
public class RepairTransaction {
|
||||||
|
private HashSet<RepairCost> repairItems;
|
||||||
|
|
||||||
|
public RepairTransaction() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,9 +1,7 @@
|
|||||||
package com.gmail.nossr50.config.hocon.skills.repair;
|
package com.gmail.nossr50.skills.repair;
|
||||||
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
@ -1,30 +1,28 @@
|
|||||||
package com.gmail.nossr50.skills.repair.repairables;
|
package com.gmail.nossr50.skills.repair.repairables;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.skills.repair.RepairTransaction;
|
||||||
import com.gmail.nossr50.util.nbt.RawNBT;
|
import com.gmail.nossr50.util.nbt.RawNBT;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
public class Repairable {
|
public class Repairable {
|
||||||
private final Material itemMaterial;
|
private final Material itemMaterial;
|
||||||
private final int minimumLevel;
|
private final int minimumLevel;
|
||||||
private final short maximumDurability;
|
private final short maximumDurability;
|
||||||
private HashSet<ItemStack> repairTransaction;
|
private RepairTransaction repairTransaction;
|
||||||
private boolean strictMatching;
|
private boolean strictMatching;
|
||||||
private int baseXP;
|
private int baseXP;
|
||||||
private RawNBT rawNBT;
|
private RawNBT rawNBT;
|
||||||
private int repairCount;
|
private int repairCount;
|
||||||
|
|
||||||
public Repairable(Material itemMaterial, HashSet<ItemStack> repairTransaction, int minimumLevel, int repairCount, int baseXP, RawNBT rawNBT) {
|
public Repairable(Material itemMaterial, RepairTransaction repairTransaction, int minimumLevel, int repairCount, int baseXP, RawNBT rawNBT) {
|
||||||
this(itemMaterial.getKey().getKey(), repairTransaction, minimumLevel, repairCount, baseXP, false, rawNBT);
|
this(itemMaterial.getKey().getKey(), repairTransaction, minimumLevel, repairCount, baseXP, false, rawNBT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Repairable(Material itemMaterial, HashSet<ItemStack> repairTransaction, int minimumLevel, int repairCount, int baseXP) {
|
public Repairable(Material itemMaterial, RepairTransaction repairTransaction, int minimumLevel, int repairCount, int baseXP) {
|
||||||
this(itemMaterial.getKey().getKey(), repairTransaction, minimumLevel, repairCount, baseXP, false, null);
|
this(itemMaterial.getKey().getKey(), repairTransaction, minimumLevel, repairCount, baseXP, false, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Repairable(String itemMaterial, HashSet<ItemStack> repairTransaction, int minimumLevel, int repairCount, int baseXP, boolean strictMatching, RawNBT rawNBT) {
|
public Repairable(String itemMaterial, RepairTransaction repairTransaction, int minimumLevel, int repairCount, int baseXP, boolean strictMatching, RawNBT rawNBT) {
|
||||||
this.itemMaterial = Material.matchMaterial(itemMaterial);
|
this.itemMaterial = Material.matchMaterial(itemMaterial);
|
||||||
this.minimumLevel = Math.max(0, minimumLevel);
|
this.minimumLevel = Math.max(0, minimumLevel);
|
||||||
|
|
||||||
@ -48,7 +46,7 @@ public class Repairable {
|
|||||||
return itemMaterial;
|
return itemMaterial;
|
||||||
}
|
}
|
||||||
|
|
||||||
public HashSet<ItemStack> getRepairTransaction() {
|
public RepairTransaction getRepairTransaction() {
|
||||||
return repairTransaction;
|
return repairTransaction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user