瀏覽代碼

Flesh out RepairCost some more

nossr50 6 年之前
父節點
當前提交
1e338e6aec

+ 22 - 0
src/main/java/com/gmail/nossr50/config/hocon/serializers/RepairCostSerializer.java

@@ -0,0 +1,22 @@
+package com.gmail.nossr50.config.hocon.serializers;
+
+import com.gmail.nossr50.skills.repair.RepairCost;
+import com.google.common.reflect.TypeToken;
+import ninja.leaping.configurate.ConfigurationNode;
+import ninja.leaping.configurate.objectmapping.ObjectMappingException;
+import ninja.leaping.configurate.objectmapping.serialize.TypeSerializer;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.checker.nullness.qual.Nullable;
+
+public class RepairCostSerializer implements TypeSerializer<RepairCost> {
+    @Nullable
+    @Override
+    public RepairCost deserialize(@NonNull TypeToken<?> type, @NonNull ConfigurationNode value) throws ObjectMappingException {
+        return null;
+    }
+
+    @Override
+    public void serialize(@NonNull TypeToken<?> type, @Nullable RepairCost obj, @NonNull ConfigurationNode value) throws ObjectMappingException {
+
+    }
+}

+ 22 - 0
src/main/java/com/gmail/nossr50/config/hocon/serializers/RepairTransactionSerializer.java

@@ -0,0 +1,22 @@
+package com.gmail.nossr50.config.hocon.serializers;
+
+import com.gmail.nossr50.skills.repair.RepairTransaction;
+import com.google.common.reflect.TypeToken;
+import ninja.leaping.configurate.ConfigurationNode;
+import ninja.leaping.configurate.objectmapping.ObjectMappingException;
+import ninja.leaping.configurate.objectmapping.serialize.TypeSerializer;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.checker.nullness.qual.Nullable;
+
+public class RepairTransactionSerializer implements TypeSerializer<RepairTransaction> {
+    @Nullable
+    @Override
+    public RepairTransaction deserialize(@NonNull TypeToken<?> type, @NonNull ConfigurationNode value) throws ObjectMappingException {
+        return null;
+    }
+
+    @Override
+    public void serialize(@NonNull TypeToken<?> type, @Nullable RepairTransaction obj, @NonNull ConfigurationNode value) throws ObjectMappingException {
+
+    }
+}

+ 5 - 7
src/main/java/com/gmail/nossr50/config/hocon/serializers/RepairableSerializer.java

@@ -38,15 +38,13 @@ public class RepairableSerializer implements TypeSerializer<Repairable> {
                 .baseXP(value.getNode(BASE_XP).getValue(TypeToken.of(Integer.class)))
                 .repairCount(value.getNode(REPAIR_COUNT).getValue(TypeToken.of(Integer.class)));
 
-        StringBuilder w;
-
         if(value.getNode(MINIMUM_LEVEL).getValueType() != ValueType.NULL) {
             builder = builder.minLevel(value.getNode(MINIMUM_LEVEL).getValue(TypeToken.of(Integer.class)));
         }
 
-        if(value.getNode(NBT).getValueType() != ValueType.NULL) {
-            builder = builder.rawNBT(value.getNode(NBT).getValue(TypeToken.of(RawNBT.class)));
-        }
+//        if(value.getNode(NBT).getValueType() != ValueType.NULL) {
+//            builder = builder.rawNBT(value.getNode(NBT).getValue(TypeToken.of(RawNBT.class)));
+//        }
 
         if(value.getNode(PERMISSION).getValueType() != ValueType.NULL) {
             builder = builder.permissionWrapper(value.getNode(PERMISSION).getValue(TypeToken.of(PermissionWrapper.class)));
@@ -67,8 +65,8 @@ public class RepairableSerializer implements TypeSerializer<Repairable> {
         if(obj.getMinimumLevel() > 0)
             value.getNode(MINIMUM_LEVEL).setValue(obj.getMinimumLevel());
 
-        if(obj.hasNBT())
-            value.getNode(NBT).setValue(obj.getRawNBT());
+//        if(obj.hasNBT())
+//            value.getNode(NBT).setValue(obj.getRawNBT());
 
         if(obj.hasPermission())
             value.getNode(PERMISSION).setValue(obj.getPermissionWrapper());

+ 0 - 9
src/main/java/com/gmail/nossr50/skills/repair/ArcaneForging.java

@@ -1,9 +0,0 @@
-/*
-package com.gmail.nossr50.skills.repair;
-
-import com.gmail.nossr50.config.AdvancedConfig;
-
-public class ArcaneForging {
-
-}
-*/

+ 8 - 59
src/main/java/com/gmail/nossr50/skills/repair/RepairCost.java

@@ -1,70 +1,19 @@
 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;
-    }
+public interface RepairCost {
 
-    @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());
-    }
+    /**
+     * Searches a player inventory for a matching ItemStack that can be used to pay for the repair transaction
+     * @param playerInventory inventory of player attempting to pay the cost
+     * @param strictMatching whether or not to match repair cost items strictly with items in a players inventory
+     * @return any compatible payment items if found
+     */
+    ItemStack findPayment(PlayerInventory playerInventory, boolean strictMatching);
 
-    @Override
-    public int hashCode() {
-        return Objects.hash(getCompatibleRepairItems());
-    }
 }

+ 51 - 0
src/main/java/com/gmail/nossr50/skills/repair/RepairCostItem.java

@@ -0,0 +1,51 @@
+package com.gmail.nossr50.skills.repair;
+
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.PlayerInventory;
+
+import java.util.Objects;
+
+public class RepairCostItem implements RepairCost {
+
+    private ItemStack repairCostItem;
+
+    public RepairCostItem(ItemStack repairCostItem) {
+        this.repairCostItem = repairCostItem;
+    }
+
+    @Override
+    public ItemStack findPayment(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
+            if(strictMatching) {
+                //TODO: Replace with strict matching code
+                if(itemStack.isSimilar(repairCostItem))
+                    return itemStack;
+            } else {
+                if(itemStack.getType() == repairCostItem.getType()) {
+                    return itemStack;
+                }
+            }
+        }
+
+        return null;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(repairCostItem);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof RepairCostItem)) return false;
+        RepairCostItem that = (RepairCostItem) o;
+        return repairCostItem.equals(that.repairCostItem);
+    }
+}

+ 49 - 0
src/main/java/com/gmail/nossr50/skills/repair/RepairCostWildcard.java

@@ -0,0 +1,49 @@
+package com.gmail.nossr50.skills.repair;
+
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.PlayerInventory;
+
+/**
+ * Represents a piece of a RepairTransaction
+ * Multiple RepairCost pieces are used to pay for a RepairTransaction
+ * This one represents a wildcard cost, which can be paid for with multiple items
+ *
+ */
+public class RepairCostWildcard implements RepairCost {
+
+    private RepairWildcard repairWildcard;
+
+    @Override
+    public ItemStack findPayment(PlayerInventory playerInventory, boolean strictMatching) {
+        for(ItemStack itemStack : playerInventory.getContents()) {
+            if(itemStack == null || itemStack.getType() == Material.AIR) {
+                continue;
+            }
+
+            for(ItemStack wildCardItem : repairWildcard.getMatchingItems()) {
+                //Attempt to match the item in the inventory to any of the compatible repair items
+                if(strictMatching) {
+                    //TODO: Replace with strict matching code
+                    if(itemStack.isSimilar(wildCardItem))
+                        return itemStack;
+                } else {
+                    if(itemStack.getType() == wildCardItem.getType()) {
+                        return itemStack;
+                    }
+                }
+            }
+        }
+
+        return null;
+    }
+
+    public RepairWildcard getRepairWildcard() {
+        return repairWildcard;
+    }
+
+    public void setRepairWildcard(RepairWildcard repairWildcard) {
+        this.repairWildcard = repairWildcard;
+    }
+
+}

+ 11 - 2
src/main/java/com/gmail/nossr50/skills/repair/RepairTransaction.java

@@ -1,8 +1,6 @@
 package com.gmail.nossr50.skills.repair;
 
 
-import com.gmail.nossr50.skills.repair.RepairCost;
-
 import java.util.HashSet;
 
 /**
@@ -15,7 +13,18 @@ public class RepairTransaction {
     private HashSet<RepairCost> repairItems;
 
     public RepairTransaction() {
+        repairItems = new HashSet<>();
+    }
 
+    public void addRepairCost(RepairCost repairCost) {
+        repairItems.add(repairCost);
     }
 
+    public HashSet<RepairCost> getRepairItems() {
+        return repairItems;
+    }
+
+    public void setRepairItems(HashSet<RepairCost> repairItems) {
+        this.repairItems = repairItems;
+    }
 }