mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-25 06:36:45 +01:00
Flesh out RepairCost some more
This commit is contained in:
parent
8f04b83954
commit
1e338e6aec
@ -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)))
|
.baseXP(value.getNode(BASE_XP).getValue(TypeToken.of(Integer.class)))
|
||||||
.repairCount(value.getNode(REPAIR_COUNT).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) {
|
if(value.getNode(MINIMUM_LEVEL).getValueType() != ValueType.NULL) {
|
||||||
builder = builder.minLevel(value.getNode(MINIMUM_LEVEL).getValue(TypeToken.of(Integer.class)));
|
builder = builder.minLevel(value.getNode(MINIMUM_LEVEL).getValue(TypeToken.of(Integer.class)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(value.getNode(NBT).getValueType() != ValueType.NULL) {
|
// if(value.getNode(NBT).getValueType() != ValueType.NULL) {
|
||||||
builder = builder.rawNBT(value.getNode(NBT).getValue(TypeToken.of(RawNBT.class)));
|
// builder = builder.rawNBT(value.getNode(NBT).getValue(TypeToken.of(RawNBT.class)));
|
||||||
}
|
// }
|
||||||
|
|
||||||
if(value.getNode(PERMISSION).getValueType() != ValueType.NULL) {
|
if(value.getNode(PERMISSION).getValueType() != ValueType.NULL) {
|
||||||
builder = builder.permissionWrapper(value.getNode(PERMISSION).getValue(TypeToken.of(PermissionWrapper.class)));
|
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)
|
if(obj.getMinimumLevel() > 0)
|
||||||
value.getNode(MINIMUM_LEVEL).setValue(obj.getMinimumLevel());
|
value.getNode(MINIMUM_LEVEL).setValue(obj.getMinimumLevel());
|
||||||
|
|
||||||
if(obj.hasNBT())
|
// if(obj.hasNBT())
|
||||||
value.getNode(NBT).setValue(obj.getRawNBT());
|
// value.getNode(NBT).setValue(obj.getRawNBT());
|
||||||
|
|
||||||
if(obj.hasPermission())
|
if(obj.hasPermission())
|
||||||
value.getNode(PERMISSION).setValue(obj.getPermissionWrapper());
|
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;
|
package com.gmail.nossr50.skills.repair;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents one item in a Repair Transaction
|
* 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;
|
package com.gmail.nossr50.skills.repair;
|
||||||
|
|
||||||
|
|
||||||
import com.gmail.nossr50.skills.repair.RepairCost;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -15,7 +13,18 @@ public class RepairTransaction {
|
|||||||
private HashSet<RepairCost> repairItems;
|
private HashSet<RepairCost> repairItems;
|
||||||
|
|
||||||
public RepairTransaction() {
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user