mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-04 11:03:43 +01:00 
			
		
		
		
	Flesh out RepairCost some more
This commit is contained in:
		@@ -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 {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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 {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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());
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
package com.gmail.nossr50.skills.repair;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.config.AdvancedConfig;
 | 
			
		||||
 | 
			
		||||
public class ArcaneForging {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
@@ -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 {
 | 
			
		||||
public interface RepairCost {
 | 
			
		||||
 | 
			
		||||
    private final ArrayList<ItemStack> compatibleRepairItems;
 | 
			
		||||
    /**
 | 
			
		||||
     * 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);
 | 
			
		||||
 | 
			
		||||
    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,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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user