mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-03 18:43:43 +01:00 
			
		
		
		
	Correcting issues with deserializing SkillRankProperty
This commit is contained in:
		@@ -20,20 +20,24 @@ public class SkillRankPropertySerializer implements TypeSerializer<SkillRankProp
 | 
				
			|||||||
    @Nullable
 | 
					    @Nullable
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public SkillRankProperty deserialize(@NonNull TypeToken<?> type, @NonNull ConfigurationNode value) throws ObjectMappingException {
 | 
					    public SkillRankProperty deserialize(@NonNull TypeToken<?> type, @NonNull ConfigurationNode value) throws ObjectMappingException {
 | 
				
			||||||
        HashMap<Integer, Integer> standardMap;
 | 
					        HashMap<Integer, Integer> standardHashMap;
 | 
				
			||||||
        HashMap<Integer, Integer> retroMap;
 | 
					        HashMap<Integer, Integer> retroHashMap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            standardMap = (HashMap<Integer, Integer>) value.getNode(STANDARD_RANK_UNLOCK_LEVEL_REQUIREMENTS).getValue(new TypeToken<Map<?, ?>>() {});
 | 
					            Map<? extends Integer, ? extends Integer> standardMap = value.getNode(STANDARD_RANK_UNLOCK_LEVEL_REQUIREMENTS).getValue(new TypeToken<Map<? extends Integer, ? extends Integer>>() {});
 | 
				
			||||||
            retroMap = (HashMap<Integer, Integer>) value.getNode(RETRO_RANK_UNLOCK_LEVEL_REQUIREMENTS).getValue(new TypeToken<Map<?, ?>>() {});
 | 
					            Map<? extends Integer, ? extends Integer> retroMap = value.getNode(RETRO_RANK_UNLOCK_LEVEL_REQUIREMENTS).getValue(new TypeToken<Map<? extends Integer, ? extends Integer>>() {});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            standardHashMap = new HashMap<>(standardMap);
 | 
				
			||||||
 | 
					            retroHashMap = new HashMap<>(retroMap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } catch (ObjectMappingException e) {
 | 
					        } catch (ObjectMappingException e) {
 | 
				
			||||||
            mcMMO.p.getLogger().severe("Unable to deserialize rank property information from the config, make sure the ranks are correctly set in the config. You can delete the rank config to generate a new one if problems persist.");
 | 
					            mcMMO.p.getLogger().severe("Unable to deserialize rank property information from the config, make sure the ranks are correctly set in the config. You can delete the rank config to generate a new one if problems persist.");
 | 
				
			||||||
            throw e;
 | 
					            throw e;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        SkillRankProperty skillRankProperty = new SkillRankProperty();
 | 
					        SkillRankProperty skillRankProperty = new SkillRankProperty();
 | 
				
			||||||
        skillRankProperty.setStandardRanks(standardMap);
 | 
					        skillRankProperty.setStandardRanks(standardHashMap);
 | 
				
			||||||
        skillRankProperty.setRetroRanks(retroMap);
 | 
					        skillRankProperty.setRetroRanks(retroHashMap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return skillRankProperty;
 | 
					        return skillRankProperty;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -41,6 +45,6 @@ public class SkillRankPropertySerializer implements TypeSerializer<SkillRankProp
 | 
				
			|||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void serialize(@NonNull TypeToken<?> type, @Nullable SkillRankProperty obj, @NonNull ConfigurationNode value) throws ObjectMappingException {
 | 
					    public void serialize(@NonNull TypeToken<?> type, @Nullable SkillRankProperty obj, @NonNull ConfigurationNode value) throws ObjectMappingException {
 | 
				
			||||||
        value.getNode(STANDARD_RANK_UNLOCK_LEVEL_REQUIREMENTS).setValue(obj.getStandardRanks());
 | 
					        value.getNode(STANDARD_RANK_UNLOCK_LEVEL_REQUIREMENTS).setValue(obj.getStandardRanks());
 | 
				
			||||||
        value.getNode(RETRO_RANK_UNLOCK_LEVEL_REQUIREMENTS).setValue(obj.getStandardRanks());
 | 
					        value.getNode(RETRO_RANK_UNLOCK_LEVEL_REQUIREMENTS).setValue(obj.getRetroRanks());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
 | 
				
			|||||||
@ConfigSerializable
 | 
					@ConfigSerializable
 | 
				
			||||||
public class ConfigRanksArchery {
 | 
					public class ConfigRanksArchery {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Setting(value = "Limit-Break")
 | 
					    @Setting(value = "Archery-Limit-Break")
 | 
				
			||||||
    private SkillRankProperty limitBreak = new SkillRankProperty(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
 | 
					    private SkillRankProperty limitBreak = new SkillRankProperty(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Setting(value = "Arrow-Retrieval")
 | 
					    @Setting(value = "Arrow-Retrieval")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
 | 
				
			|||||||
@ConfigSerializable
 | 
					@ConfigSerializable
 | 
				
			||||||
public class ConfigRanksAxes {
 | 
					public class ConfigRanksAxes {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Setting(value = "Limit-Break")
 | 
					    @Setting(value = "Axes-Limit-Break")
 | 
				
			||||||
    private SkillRankProperty limitBreak = new SkillRankProperty(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
 | 
					    private SkillRankProperty limitBreak = new SkillRankProperty(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Setting(value = "Skull-Splitter")
 | 
					    @Setting(value = "Skull-Splitter")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,29 @@
 | 
				
			|||||||
package com.gmail.nossr50.config.hocon.skills.ranks;
 | 
					package com.gmail.nossr50.config.hocon.skills.ranks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import ninja.leaping.configurate.objectmapping.Setting;
 | 
				
			||||||
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
 | 
					import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ConfigSerializable
 | 
					@ConfigSerializable
 | 
				
			||||||
public class ConfigRanksRepair {
 | 
					public class ConfigRanksRepair {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Setting(value = "Arcane-Forging")
 | 
				
			||||||
 | 
					    private SkillRankProperty arcaneForging = new SkillRankProperty(10, 25, 35, 50, 65, 75, 85, 100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Setting(value = "Repair-Mastery")
 | 
				
			||||||
 | 
					    private SkillRankProperty repairMastery = new SkillRankProperty(75);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Setting(value = "Super-Repair")
 | 
				
			||||||
 | 
					    private SkillRankProperty superRepair = new SkillRankProperty(40);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public SkillRankProperty getArcaneForging() {
 | 
				
			||||||
 | 
					        return arcaneForging;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public SkillRankProperty getRepairMastery() {
 | 
				
			||||||
 | 
					        return repairMastery;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public SkillRankProperty getSuperRepair() {
 | 
				
			||||||
 | 
					        return superRepair;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
 | 
				
			|||||||
@ConfigSerializable
 | 
					@ConfigSerializable
 | 
				
			||||||
public class ConfigRanksSwords {
 | 
					public class ConfigRanksSwords {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Setting(value = "Limit-Break")
 | 
					    @Setting(value = "Swords-Limit-Break")
 | 
				
			||||||
    private SkillRankProperty limitBreak = new SkillRankProperty(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
 | 
					    private SkillRankProperty limitBreak = new SkillRankProperty(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Setting(value = "Stab")
 | 
					    @Setting(value = "Stab")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
 | 
				
			|||||||
@ConfigSerializable
 | 
					@ConfigSerializable
 | 
				
			||||||
public class ConfigRanksUnarmed {
 | 
					public class ConfigRanksUnarmed {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Setting(value = "Limit-Break")
 | 
					    @Setting(value = "Unarmed-Limit-Break")
 | 
				
			||||||
    private SkillRankProperty limitBreak = new SkillRankProperty(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
 | 
					    private SkillRankProperty limitBreak = new SkillRankProperty(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Setting(value = "Berserk")
 | 
					    @Setting(value = "Berserk")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,7 +36,7 @@ public enum PrimarySkillType {
 | 
				
			|||||||
    ACROBATICS(AcrobaticsManager.class, Color.WHITE,
 | 
					    ACROBATICS(AcrobaticsManager.class, Color.WHITE,
 | 
				
			||||||
            ImmutableList.of(SubSkillType.ACROBATICS_DODGE, SubSkillType.ACROBATICS_ROLL), "Acrobatics"),
 | 
					            ImmutableList.of(SubSkillType.ACROBATICS_DODGE, SubSkillType.ACROBATICS_ROLL), "Acrobatics"),
 | 
				
			||||||
    ALCHEMY(AlchemyManager.class, Color.FUCHSIA,
 | 
					    ALCHEMY(AlchemyManager.class, Color.FUCHSIA,
 | 
				
			||||||
            ImmutableList.of(SubSkillType.ALCHEMY_CATALYSIS, SubSkillType.ALCHEMY_CONCOCTIONS), "Alchemy"),
 | 
					            ImmutableList.of(), "Alchemy"),
 | 
				
			||||||
    ARCHERY(ArcheryManager.class, Color.MAROON,
 | 
					    ARCHERY(ArcheryManager.class, Color.MAROON,
 | 
				
			||||||
            ImmutableList.of(SubSkillType.ARCHERY_DAZE, SubSkillType.ARCHERY_ARCHERY_LIMIT_BREAK, SubSkillType.ARCHERY_ARROW_RETRIEVAL, SubSkillType.ARCHERY_SKILL_SHOT), "Archery"),
 | 
					            ImmutableList.of(SubSkillType.ARCHERY_DAZE, SubSkillType.ARCHERY_ARCHERY_LIMIT_BREAK, SubSkillType.ARCHERY_ARROW_RETRIEVAL, SubSkillType.ARCHERY_SKILL_SHOT), "Archery"),
 | 
				
			||||||
    AXES(AxesManager.class, Color.AQUA, SuperAbilityType.SKULL_SPLITTER, ToolType.AXE,
 | 
					    AXES(AxesManager.class, Color.AQUA, SuperAbilityType.SKULL_SPLITTER, ToolType.AXE,
 | 
				
			||||||
@@ -44,7 +44,7 @@ public enum PrimarySkillType {
 | 
				
			|||||||
    EXCAVATION(ExcavationManager.class, Color.fromRGB(139, 69, 19), SuperAbilityType.GIGA_DRILL_BREAKER, ToolType.SHOVEL,
 | 
					    EXCAVATION(ExcavationManager.class, Color.fromRGB(139, 69, 19), SuperAbilityType.GIGA_DRILL_BREAKER, ToolType.SHOVEL,
 | 
				
			||||||
            ImmutableList.of(SubSkillType.EXCAVATION_GIGA_DRILL_BREAKER, SubSkillType.EXCAVATION_ARCHAEOLOGY), "Excavation"),
 | 
					            ImmutableList.of(SubSkillType.EXCAVATION_GIGA_DRILL_BREAKER, SubSkillType.EXCAVATION_ARCHAEOLOGY), "Excavation"),
 | 
				
			||||||
    FISHING(FishingManager.class, Color.NAVY,
 | 
					    FISHING(FishingManager.class, Color.NAVY,
 | 
				
			||||||
            ImmutableList.of(SubSkillType.FISHING_FISHERMANS_DIET, SubSkillType.FISHING_TREASURE_HUNTER, SubSkillType.FISHING_ICE_FISHING, SubSkillType.FISHING_MAGIC_HUNTER, SubSkillType.FISHING_MASTER_ANGLER, SubSkillType.FISHING_SHAKE), "Fishing"),
 | 
					            ImmutableList.of(SubSkillType.FISHING_FISHERMANS_DIET, SubSkillType.FISHING_TREASURE_HUNTER, SubSkillType.FISHING_ICE_FISHING, SubSkillType.FISHING_MAGIC_HUNTER, SubSkillType.FISHING_MASTER_ANGLER, SubSkillType.FISHING_SHAKE, SubSkillType.FISHING_INNER_PEACE), "Fishing"),
 | 
				
			||||||
    HERBALISM(HerbalismManager.class, Color.GREEN, SuperAbilityType.GREEN_TERRA, ToolType.HOE,
 | 
					    HERBALISM(HerbalismManager.class, Color.GREEN, SuperAbilityType.GREEN_TERRA, ToolType.HOE,
 | 
				
			||||||
            ImmutableList.of(SubSkillType.HERBALISM_GREEN_TERRA, SubSkillType.HERBALISM_FARMERS_DIET, SubSkillType.HERBALISM_GREEN_THUMB, SubSkillType.HERBALISM_DOUBLE_DROPS, SubSkillType.HERBALISM_HYLIAN_LUCK, SubSkillType.HERBALISM_SHROOM_THUMB), "Herbalism"),
 | 
					            ImmutableList.of(SubSkillType.HERBALISM_GREEN_TERRA, SubSkillType.HERBALISM_FARMERS_DIET, SubSkillType.HERBALISM_GREEN_THUMB, SubSkillType.HERBALISM_DOUBLE_DROPS, SubSkillType.HERBALISM_HYLIAN_LUCK, SubSkillType.HERBALISM_SHROOM_THUMB), "Herbalism"),
 | 
				
			||||||
    MINING(MiningManager.class, Color.GRAY, SuperAbilityType.SUPER_BREAKER, ToolType.PICKAXE,
 | 
					    MINING(MiningManager.class, Color.GRAY, SuperAbilityType.SUPER_BREAKER, ToolType.PICKAXE,
 | 
				
			||||||
@@ -151,6 +151,8 @@ public enum PrimarySkillType {
 | 
				
			|||||||
                return type;
 | 
					                return type;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        mcMMO.p.getLogger().severe("Unable to locate parent for "+subSkillType.toString());
 | 
				
			||||||
        return null;
 | 
					        return null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,8 +12,6 @@ public enum SubSkillType {
 | 
				
			|||||||
    ACROBATICS_ROLL,
 | 
					    ACROBATICS_ROLL,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* ALCHEMY */
 | 
					    /* ALCHEMY */
 | 
				
			||||||
    ALCHEMY_CATALYSIS(1),
 | 
					 | 
				
			||||||
    ALCHEMY_CONCOCTIONS(8),
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* ARCHERY */
 | 
					    /* ARCHERY */
 | 
				
			||||||
    ARCHERY_ARROW_RETRIEVAL(1),
 | 
					    ARCHERY_ARROW_RETRIEVAL(1),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -222,9 +222,13 @@ public class InventoryListener implements Listener {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        HumanEntity whoClicked = event.getWhoClicked();
 | 
					        HumanEntity whoClicked = event.getWhoClicked();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!UserManager.hasPlayerDataKey(event.getWhoClicked()) || !Permissions.isSubSkillEnabled(whoClicked, SubSkillType.ALCHEMY_CONCOCTIONS)) {
 | 
					        //TODO: This is where Alchemy permissions used to be checked
 | 
				
			||||||
 | 
					        //TODO: This is where Alchemy permissions used to be checked
 | 
				
			||||||
 | 
					        //TODO: This is where Alchemy permissions used to be checked
 | 
				
			||||||
 | 
					        //TODO: This is where Alchemy permissions used to be checked
 | 
				
			||||||
 | 
					        /*if (!UserManager.hasPlayerDataKey(event.getWhoClicked()) || !Permissions.isSubSkillEnabled(whoClicked, SubSkillType.ALCHEMY_CONCOCTIONS)) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Player player = (Player) whoClicked;
 | 
					        Player player = (Player) whoClicked;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -328,9 +332,13 @@ public class InventoryListener implements Listener {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        HumanEntity whoClicked = event.getWhoClicked();
 | 
					        HumanEntity whoClicked = event.getWhoClicked();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!UserManager.hasPlayerDataKey(event.getWhoClicked()) || !Permissions.isSubSkillEnabled(whoClicked, SubSkillType.ALCHEMY_CONCOCTIONS)) {
 | 
					        //TODO: This is where alchemy permissions used to be checked
 | 
				
			||||||
 | 
					        //TODO: This is where alchemy permissions used to be checked
 | 
				
			||||||
 | 
					        //TODO: This is where alchemy permissions used to be checked
 | 
				
			||||||
 | 
					        //TODO: This is where alchemy permissions used to be checked
 | 
				
			||||||
 | 
					        /*if (!UserManager.hasPlayerDataKey(event.getWhoClicked()) || !Permissions.isSubSkillEnabled(whoClicked, SubSkillType.ALCHEMY_CONCOCTIONS)) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//        if (!event.getInventorySlots().contains(Alchemy.INGREDIENT_SLOT)) {
 | 
					//        if (!event.getInventorySlots().contains(Alchemy.INGREDIENT_SLOT)) {
 | 
				
			||||||
//            return;
 | 
					//            return;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -380,12 +380,14 @@ public class RankUtils {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            SkillRankProperty skillRankProperty
 | 
					            SkillRankProperty skillRankProperty
 | 
				
			||||||
                    = rankConfigRoot.getNode(subSkillType.getParentSkill())
 | 
					                    = (SkillRankProperty) rankConfigRoot.getNode(subSkillType.getParentSkill().getCapitalizedName())
 | 
				
			||||||
                    .getNode(subSkillType.getHoconFriendlyConfigName())
 | 
					                    .getNode(subSkillType.getHoconFriendlyConfigName())
 | 
				
			||||||
                    .getValue(TypeToken.of(SkillRankProperty.class));
 | 
					                    .getValue(TypeToken.of(SkillRankProperty.class));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return skillRankProperty.getUnlockLevel(mcMMO.isRetroModeEnabled(), rank);
 | 
					            int unlockLevel = skillRankProperty.getUnlockLevel(mcMMO.isRetroModeEnabled(), rank);
 | 
				
			||||||
        } catch (ObjectMappingException | MissingSkillPropertyDefinition e) {
 | 
					            return unlockLevel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } catch (ObjectMappingException | MissingSkillPropertyDefinition | NullPointerException e) {
 | 
				
			||||||
            mcMMO.p.getLogger().severe("Error traversing nodes to SkillRankProperty for "+subSkillType.toString());
 | 
					            mcMMO.p.getLogger().severe("Error traversing nodes to SkillRankProperty for "+subSkillType.toString());
 | 
				
			||||||
            mcMMO.p.getLogger().severe("This indicates a problem with your rank config file, edit the file and correct the issue or delete it to generate a new default one with correct values.");
 | 
					            mcMMO.p.getLogger().severe("This indicates a problem with your rank config file, edit the file and correct the issue or delete it to generate a new default one with correct values.");
 | 
				
			||||||
            e.printStackTrace();
 | 
					            e.printStackTrace();
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user