From 406429f4e3cbe318f9c593b714b308408b6ffd1e Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Thu, 16 Jan 2020 18:21:35 +0000 Subject: [PATCH 01/21] Use ThreadedLocalRandom for RNG utils --- Changelog.txt | 2 ++ .../com/gmail/nossr50/util/random/RandomChanceUtil.java | 7 ++----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 4f1e6c865..9efef47b0 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,5 @@ +Version 2.1.112 + Use ThreadedLocalRandom for RNG utils, random is seeded, thus creating new instances of Random breaks randomness Version 2.1.112 Correct locale usage for enum access, now enforces using the english locale to prevent issues with oddball locales for configs/commands Fixed a NPE that can occur if a player engages in combat with specific skills before their profile is loaded diff --git a/src/main/java/com/gmail/nossr50/util/random/RandomChanceUtil.java b/src/main/java/com/gmail/nossr50/util/random/RandomChanceUtil.java index ae9511bd0..f01c56e60 100644 --- a/src/main/java/com/gmail/nossr50/util/random/RandomChanceUtil.java +++ b/src/main/java/com/gmail/nossr50/util/random/RandomChanceUtil.java @@ -13,6 +13,7 @@ import org.bukkit.entity.Player; import java.text.DecimalFormat; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; public class RandomChanceUtil { @@ -78,9 +79,7 @@ public class RandomChanceUtil } public static boolean rollDice(double chanceOfSuccess, int bound) { - Random random = new Random(); - - return chanceOfSuccess > random.nextInt(bound); + return chanceOfSuccess > ThreadLocalRandom.current().nextInt(bound); } /** @@ -100,8 +99,6 @@ public class RandomChanceUtil { double chanceOfSuccess = calculateChanceOfSuccess(randomChance); - Random random = new Random(); - //Check the odds return rollDice(chanceOfSuccess, 100); } From 539cd7290e1e0568bad61152e2dec74fe33489e3 Mon Sep 17 00:00:00 2001 From: andrewkm Date: Fri, 17 Jan 2020 08:21:31 +0100 Subject: [PATCH 02/21] Retro mode documentation. (#4104) This commit will save lives, believe me. --- src/main/resources/treasures.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/resources/treasures.yml b/src/main/resources/treasures.yml index 3d4401a36..e98f2db9a 100755 --- a/src/main/resources/treasures.yml +++ b/src/main/resources/treasures.yml @@ -443,6 +443,7 @@ Enchantment_Drop_Rates: LEGENDARY: 0.75 # # Settings for Excavation's Archaeology +# If you are in retro mode, Drop_Level is multiplied by 10. ### Excavation: CAKE: @@ -573,6 +574,7 @@ Excavation: Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand] # # Settings for Hylian Luck +# If you are in retro mode, Drop_Level is multiplied by 10. ### Hylian_Luck: MELON_SEEDS: @@ -630,7 +632,8 @@ Hylian_Luck: Drop_Level: 0 Drops_From: [Pots] # -# Settings for Shake +# Settings for Shake +# If you are in retro mode, Drop_Level is multiplied by 10. ### Shake: BLAZE: From 0c1fa07079f0ad385b8b910e1664cd6c0dc6a311 Mon Sep 17 00:00:00 2001 From: Lane Date: Fri, 17 Jan 2020 18:23:28 +1100 Subject: [PATCH 03/21] Fixed typo in config for potato (#4096) --- src/main/resources/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 3343d0564..a73b3ddc7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -442,7 +442,7 @@ Bonus_Drops: Melon_Slice: true Nether_Wart: true Potatoes: true - Potatoe: true + Potato: true Pumpkin: true Red_Mushroom: true Sugar_Cane: true From 7b941baa1cbc48e84182c8efd02a75766a872583 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Thu, 23 Jan 2020 20:34:00 -0800 Subject: [PATCH 04/21] Update changelog --- Changelog.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Changelog.txt b/Changelog.txt index 4f1e6c865..c06f25b46 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,6 @@ +Version 2.1.113 + Check player's PTP world permissions before executing a party teleport + Version 2.1.112 Correct locale usage for enum access, now enforces using the english locale to prevent issues with oddball locales for configs/commands Fixed a NPE that can occur if a player engages in combat with specific skills before their profile is loaded From cd6ce5a19de8eaa45c1e6547e5c321b1fe75417e Mon Sep 17 00:00:00 2001 From: nossr50 Date: Thu, 23 Jan 2020 20:34:54 -0800 Subject: [PATCH 05/21] Correct changelog --- Changelog.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 59ab2cbd7..7e5ce2b5f 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,8 +1,7 @@ Version 2.1.113 Check player's PTP world permissions before executing a party teleport - -Version 2.1.112 Use ThreadedLocalRandom for RNG utils, random is seeded, thus creating new instances of Random breaks randomness + Version 2.1.112 Correct locale usage for enum access, now enforces using the english locale to prevent issues with oddball locales for configs/commands Fixed a NPE that can occur if a player engages in combat with specific skills before their profile is loaded From 055391e908037d671abe2c386c98d2ea00705bc0 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Fri, 24 Jan 2020 00:43:18 -0800 Subject: [PATCH 06/21] Hacky fix for spigot bug --- .../nossr50/listeners/EntityListener.java | 21 ------------------- src/main/java/com/gmail/nossr50/mcMMO.java | 1 - .../nossr50/skills/mining/MiningManager.java | 4 +++- .../nossr50/util/random/RandomChanceUtil.java | 1 - 4 files changed, 3 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java index 4b6d92ce4..c74c7d74d 100644 --- a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java @@ -841,27 +841,6 @@ public class EntityListener implements Listener { } } - /** - * Handle EntityExplode events that involve modifying the event. - * - * @param event - * The event to modify - */ - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityExplodeMonitor(EntityExplodeEvent event) { - /* WORLD BLACKLIST CHECK */ - if(WorldBlacklist.isWorldBlacklisted(event.getEntity().getWorld())) - return; - - Entity entity = event.getEntity(); - - if (!(entity instanceof TNTPrimed) || !entity.hasMetadata(mcMMO.tntsafeMetadataKey)) { - return; - } - - event.blockList().clear(); - } - /** * Handle FoodLevelChange events that involve modifying the event. * diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index ef68ff0ec..4244069f5 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -115,7 +115,6 @@ public class mcMMO extends JavaPlugin { public final static String furnaceMetadataKey = "mcMMO: Tracked Furnace"; public final static String tntMetadataKey = "mcMMO: Tracked TNT"; public final static String funfettiMetadataKey = "mcMMO: Funfetti"; - public final static String tntsafeMetadataKey = "mcMMO: Safe TNT"; public final static String customNameKey = "mcMMO: Custom Name"; public final static String customVisibleKey = "mcMMO: Name Visibility"; public final static String droppedItemKey = "mcMMO: Tracked Item"; diff --git a/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java b/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java index 490ba011b..00853db63 100644 --- a/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java +++ b/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java @@ -134,6 +134,7 @@ public class MiningManager extends SkillManager { int xp = 0; float oreBonus = (float) (getOreBonus() / 100); + //TODO: Pretty sure something is fucked with debrisReduction stuff float debrisReduction = (float) (getDebrisReduction() / 100); int dropMultiplier = getDropMultiplier(); @@ -145,7 +146,8 @@ public class MiningManager extends SkillManager { if (BlockUtils.isOre(blockState)) { ores.add(blockState); } - else { + //Server bug that allows beacons to be duped when yield is set to 0 + else if(blockState.getType() != Material.BEACON) { debris.add(blockState); } } diff --git a/src/main/java/com/gmail/nossr50/util/random/RandomChanceUtil.java b/src/main/java/com/gmail/nossr50/util/random/RandomChanceUtil.java index f01c56e60..bcc29ee1f 100644 --- a/src/main/java/com/gmail/nossr50/util/random/RandomChanceUtil.java +++ b/src/main/java/com/gmail/nossr50/util/random/RandomChanceUtil.java @@ -12,7 +12,6 @@ import com.gmail.nossr50.util.skills.SkillActivationType; import org.bukkit.entity.Player; import java.text.DecimalFormat; -import java.util.Random; import java.util.concurrent.ThreadLocalRandom; public class RandomChanceUtil From 7b8c90d362e0676eb2be185cdeb428fbea2d98e3 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Fri, 24 Jan 2020 00:56:16 -0800 Subject: [PATCH 07/21] BlockCracker fix for infested stone bricks --- Changelog.txt | 2 ++ src/main/java/com/gmail/nossr50/util/MaterialMapStore.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Changelog.txt b/Changelog.txt index 7e5ce2b5f..56fbd7277 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,4 +1,6 @@ Version 2.1.113 + Fixed bug where BlockCracker didn't work on infested_stone_bricks + Fixed a bug where beacons could be duplicated Check player's PTP world permissions before executing a party teleport Use ThreadedLocalRandom for RNG utils, random is seeded, thus creating new instances of Random breaks randomness diff --git a/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java b/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java index c8e03ce75..08492be44 100644 --- a/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java +++ b/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java @@ -170,6 +170,8 @@ public class MaterialMapStore { private void fillBlockCrackerWhiteList() { blockCrackerWhiteList.add("stone_bricks"); + blockCrackerWhiteList.add("infested_stone_bricks"); + } private void fillHerbalismAbilityBlackList() From ac731258c7d5bfefa0527ab931d4b6d14d6ae0bc Mon Sep 17 00:00:00 2001 From: nossr50 Date: Fri, 24 Jan 2020 01:09:19 -0800 Subject: [PATCH 08/21] Berserk now breaks glass and makes noise when doing so --- Changelog.txt | 2 + .../datatypes/skills/SuperAbilityType.java | 4 +- .../nossr50/listeners/BlockListener.java | 7 ++- .../gmail/nossr50/util/MaterialMapStore.java | 44 +++++++++++++++++++ .../nossr50/util/sounds/SoundManager.java | 2 + .../gmail/nossr50/util/sounds/SoundType.java | 1 + src/main/resources/sounds.yml | 4 ++ 7 files changed, 62 insertions(+), 2 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 56fbd7277..abacdf51a 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,4 +1,6 @@ Version 2.1.113 + Berserk will now break glass and glass pane blocks + Added GLASS settings to sounds.yml for Berserk Fixed bug where BlockCracker didn't work on infested_stone_bricks Fixed a bug where beacons could be duplicated Check player's PTP world permissions before executing a party teleport diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/SuperAbilityType.java b/src/main/java/com/gmail/nossr50/datatypes/skills/SuperAbilityType.java index b89365279..30581df01 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/SuperAbilityType.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/SuperAbilityType.java @@ -1,7 +1,9 @@ package com.gmail.nossr50.datatypes.skills; import com.gmail.nossr50.config.Config; +import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.BlockUtils; +import com.gmail.nossr50.util.MaterialMapStore; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.StringUtils; import org.bukkit.Material; @@ -198,7 +200,7 @@ public enum SuperAbilityType { public boolean blockCheck(BlockState blockState) { switch (this) { case BERSERK: - return (BlockUtils.affectedByGigaDrillBreaker(blockState) || blockState.getType() == Material.SNOW); + return (BlockUtils.affectedByGigaDrillBreaker(blockState) || blockState.getType() == Material.SNOW || mcMMO.getMaterialMapStore().isGlass(blockState.getType())); case GIGA_DRILL_BREAKER: return BlockUtils.affectedByGigaDrillBreaker(blockState); diff --git a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java index 308ca9ade..b8e4324cc 100644 --- a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java @@ -595,7 +595,12 @@ public class BlockListener implements Listener { } else if (SuperAbilityType.BERSERK.blockCheck(block.getState()) && EventUtils.simulateBlockBreak(block, player, true)) { event.setInstaBreak(true); - SoundManager.sendSound(player, block.getLocation(), SoundType.POP); + + if(block.getState().getType().getKey().getKey().contains("glass")) { + SoundManager.worldSendSound(player.getWorld(), block.getLocation(), SoundType.GLASS); + } else { + SoundManager.sendSound(player, block.getLocation(), SoundType.POP); + } } } else if (mcMMOPlayer.getWoodcuttingManager().canUseLeafBlower(heldItem) && BlockUtils.isLeaves(blockState) && EventUtils.simulateBlockBreak(block, player, true)) { diff --git a/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java b/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java index 08492be44..81c827111 100644 --- a/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java +++ b/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java @@ -22,6 +22,7 @@ public class MaterialMapStore { private HashSet canMakeShroomyWhiteList; private HashSet multiBlockPlant; private HashSet foodItemWhiteList; + private HashSet glassBlocks; public MaterialMapStore() { @@ -34,6 +35,7 @@ public class MaterialMapStore { canMakeShroomyWhiteList = new HashSet<>(); multiBlockPlant = new HashSet<>(); foodItemWhiteList = new HashSet<>(); + glassBlocks = new HashSet<>(); fillHardcodedHashSets(); } @@ -89,6 +91,44 @@ public class MaterialMapStore { fillShroomyWhiteList(); fillMultiBlockPlantSet(); fillFoodWhiteList(); + fillGlassBlockWhiteList(); + } + + private void fillGlassBlockWhiteList() { + glassBlocks.add("glass"); + glassBlocks.add("glass_pane"); + glassBlocks.add("black_stained_glass"); + glassBlocks.add("black_stained_glass_pane"); + glassBlocks.add("blue_stained_glass"); + glassBlocks.add("blue_stained_glass_pane"); + glassBlocks.add("brown_stained_glass"); + glassBlocks.add("brown_stained_glass_pane"); + glassBlocks.add("cyan_stained_glass"); + glassBlocks.add("cyan_stained_glass_pane"); + glassBlocks.add("gray_stained_glass"); + glassBlocks.add("gray_stained_glass_pane"); + glassBlocks.add("green_stained_glass"); + glassBlocks.add("green_stained_glass_pane"); + glassBlocks.add("light_blue_stained_glass"); + glassBlocks.add("light_blue_stained_glass_pane"); + glassBlocks.add("light_gray_stained_glass"); + glassBlocks.add("light_gray_stained_glass_pane"); + glassBlocks.add("lime_stained_glass"); + glassBlocks.add("lime_stained_glass_pane"); + glassBlocks.add("magenta_stained_glass"); + glassBlocks.add("magenta_stained_glass_pane"); + glassBlocks.add("orange_stained_glass"); + glassBlocks.add("orange_stained_glass_pane"); + glassBlocks.add("pink_stained_glass"); + glassBlocks.add("pink_stained_glass_pane"); + glassBlocks.add("purple_stained_glass"); + glassBlocks.add("purple_stained_glass_pane"); + glassBlocks.add("red_stained_glass"); + glassBlocks.add("red_stained_glass_pane"); + glassBlocks.add("white_stained_glass"); + glassBlocks.add("white_stained_glass_pane"); + glassBlocks.add("yellow_stained_glass"); + glassBlocks.add("yellow_stained_glass_pane"); } private void fillFoodWhiteList() { @@ -130,6 +170,10 @@ public class MaterialMapStore { foodItemWhiteList.add("tropical_fish"); } + public boolean isGlass(Material material) { + return glassBlocks.contains(material.getKey().getKey()); + } + public boolean isFood(Material material) { return foodItemWhiteList.contains(material.getKey().getKey()); } diff --git a/src/main/java/com/gmail/nossr50/util/sounds/SoundManager.java b/src/main/java/com/gmail/nossr50/util/sounds/SoundManager.java index 73a4905e1..8bf24461f 100644 --- a/src/main/java/com/gmail/nossr50/util/sounds/SoundManager.java +++ b/src/main/java/com/gmail/nossr50/util/sounds/SoundManager.java @@ -91,6 +91,8 @@ public class SoundManager { return Sound.BLOCK_CONDUIT_AMBIENT; case BLEED: return Sound.ENTITY_ENDER_EYE_DEATH; + case GLASS: + return Sound.BLOCK_GLASS_BREAK; default: return null; } diff --git a/src/main/java/com/gmail/nossr50/util/sounds/SoundType.java b/src/main/java/com/gmail/nossr50/util/sounds/SoundType.java index 6ebaa3a71..3a0e37eda 100644 --- a/src/main/java/com/gmail/nossr50/util/sounds/SoundType.java +++ b/src/main/java/com/gmail/nossr50/util/sounds/SoundType.java @@ -14,6 +14,7 @@ public enum SoundType { ABILITY_ACTIVATED_GENERIC, ABILITY_ACTIVATED_BERSERK, BLEED, + GLASS, TIRED; public boolean usesCustomPitch() diff --git a/src/main/resources/sounds.yml b/src/main/resources/sounds.yml index d34ddddcd..837559568 100644 --- a/src/main/resources/sounds.yml +++ b/src/main/resources/sounds.yml @@ -4,6 +4,10 @@ Sounds: # 1.0 = Max volume # 0.0 = No Volume MasterVolume: 1.0 + GLASS: + Enable: true + Volume: 1.0 + Pitch: 1.0 ANVIL: Enable: true Volume: 1.0 From 4fd94bfe29443f7c2562b7a8dd58ff248b350e97 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Fri, 24 Jan 2020 01:11:23 -0800 Subject: [PATCH 09/21] 2.1.113 --- Changelog.txt | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index abacdf51a..7cb31025c 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -4,7 +4,7 @@ Version 2.1.113 Fixed bug where BlockCracker didn't work on infested_stone_bricks Fixed a bug where beacons could be duplicated Check player's PTP world permissions before executing a party teleport - Use ThreadedLocalRandom for RNG utils, random is seeded, thus creating new instances of Random breaks randomness + Improved how mcMMO handles randomness Version 2.1.112 Correct locale usage for enum access, now enforces using the english locale to prevent issues with oddball locales for configs/commands diff --git a/pom.xml b/pom.xml index fb6f36e08..3a227f4e4 100755 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.113-SNAPSHOT + 2.1.113 mcMMO https://github.com/mcMMO-Dev/mcMMO From 15d3119627357000005bcc6bd2a025d922077d75 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Fri, 24 Jan 2020 01:25:55 -0800 Subject: [PATCH 10/21] Berserk now breaks a soft block if it was used to activate it --- Changelog.txt | 2 ++ .../nossr50/datatypes/player/McMMOPlayer.java | 1 - .../nossr50/listeners/BlockListener.java | 21 ++++++++++++++++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 7cb31025c..298e6c8de 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,5 +1,7 @@ Version 2.1.113 + Activating Berserk on a soft block (glass, snow, dirts) will break that material right away instead of only breaking subsequent blocks hit by the player Berserk will now break glass and glass pane blocks + Hitting glass with berserk readied will activate it Added GLASS settings to sounds.yml for Berserk Fixed bug where BlockCracker didn't work on infested_stone_bricks Fixed a bug where beacons could be duplicated diff --git a/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java b/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java index 3495bbab4..bf7a385c5 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java +++ b/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java @@ -849,7 +849,6 @@ public class McMMOPlayer { return; } - //TODO: This is hacky and temporary solution until skills are move to the new system //Potential problems with this include skills with two super abilities (ie mining) if(!skill.isSuperAbilityUnlocked(getPlayer())) diff --git a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java index b8e4324cc..af9916cdc 100644 --- a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java @@ -512,8 +512,23 @@ public class BlockListener implements Listener { else if (mcMMOPlayer.getToolPreparationMode(ToolType.SHOVEL) && ItemUtils.isShovel(heldItem) && BlockUtils.affectedByGigaDrillBreaker(blockState) && Permissions.gigaDrillBreaker(player)) { mcMMOPlayer.checkAbilityActivation(PrimarySkillType.EXCAVATION); } - else if (mcMMOPlayer.getToolPreparationMode(ToolType.FISTS) && heldItem.getType() == Material.AIR && (BlockUtils.affectedByGigaDrillBreaker(blockState) || blockState.getType() == Material.SNOW || BlockUtils.affectedByBlockCracker(blockState) && Permissions.berserk(player))) { + else if (mcMMOPlayer.getToolPreparationMode(ToolType.FISTS) && heldItem.getType() == Material.AIR && (BlockUtils.affectedByGigaDrillBreaker(blockState) + || mcMMO.getMaterialMapStore().isGlass(blockState.getType()) + || blockState.getType() == Material.SNOW + || BlockUtils.affectedByBlockCracker(blockState) && Permissions.berserk(player))) { mcMMOPlayer.checkAbilityActivation(PrimarySkillType.UNARMED); + + if(mcMMOPlayer.getAbilityMode(SuperAbilityType.BERSERK)) { + if (SuperAbilityType.BERSERK.blockCheck(blockState) && EventUtils.simulateBlockBreak(blockState.getBlock(), player, true)) { + event.setInstaBreak(true); + + if(blockState.getType().getKey().getKey().contains("glass")) { + SoundManager.worldSendSound(player.getWorld(), blockState.getLocation(), SoundType.GLASS); + } else { + SoundManager.sendSound(player, blockState.getLocation(), SoundType.POP); + } + } + } } } @@ -593,10 +608,10 @@ public class BlockListener implements Listener { blockState.update(); } } - else if (SuperAbilityType.BERSERK.blockCheck(block.getState()) && EventUtils.simulateBlockBreak(block, player, true)) { + else if (!event.getInstaBreak() && SuperAbilityType.BERSERK.blockCheck(blockState) && EventUtils.simulateBlockBreak(block, player, true)) { event.setInstaBreak(true); - if(block.getState().getType().getKey().getKey().contains("glass")) { + if(blockState.getType().getKey().getKey().contains("glass")) { SoundManager.worldSendSound(player.getWorld(), block.getLocation(), SoundType.GLASS); } else { SoundManager.sendSound(player, block.getLocation(), SoundType.POP); From 33f4ac14b531938296ee8190313ef4c7cc0d1a45 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Fri, 24 Jan 2020 18:28:41 -0800 Subject: [PATCH 11/21] Add toggle for snow golem exploit to experience.yml - SnowGolemExcavation --- pom.xml | 2 +- .../com/gmail/nossr50/config/experience/ExperienceConfig.java | 1 + .../com/gmail/nossr50/datatypes/skills/SuperAbilityType.java | 1 - src/main/java/com/gmail/nossr50/listeners/BlockListener.java | 2 +- src/main/resources/experience.yml | 1 + 5 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 3a227f4e4..28aec646e 100755 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.113 + 2.1.114-SNAPSHOT mcMMO https://github.com/mcMMO-Dev/mcMMO diff --git a/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java b/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java index 13c88d329..8454ec908 100644 --- a/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java +++ b/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java @@ -144,6 +144,7 @@ public class ExperienceConfig extends AutoUpdateConfigLoader { */ /* EXPLOIT TOGGLES */ + public boolean isSnowExploitPrevented() { return config.getBoolean("SnowGolemExcavation", true); } public boolean isEndermanEndermiteFarmingPrevented() { return config.getBoolean("ExploitFix.EndermanEndermiteFarms", true); } public boolean isPistonCheatingPrevented() { return config.getBoolean("ExploitFix.PistonCheating", true); } public boolean isPistonExploitPrevented() { return config.getBoolean("ExploitFix.Pistons", false); } diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/SuperAbilityType.java b/src/main/java/com/gmail/nossr50/datatypes/skills/SuperAbilityType.java index 30581df01..4aa3df817 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/SuperAbilityType.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/SuperAbilityType.java @@ -3,7 +3,6 @@ package com.gmail.nossr50.datatypes.skills; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.BlockUtils; -import com.gmail.nossr50.util.MaterialMapStore; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.StringUtils; import org.bukkit.Material; diff --git a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java index af9916cdc..9023caa3d 100644 --- a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java @@ -178,7 +178,7 @@ public class BlockListener implements Listener { BlockState blockState = event.getNewState(); - if(BlockUtils.shouldBeWatched(blockState)) + if(ExperienceConfig.getInstance().isSnowExploitPrevented() && BlockUtils.shouldBeWatched(blockState)) { mcMMO.getPlaceStore().setTrue(blockState.getBlock()); } diff --git a/src/main/resources/experience.yml b/src/main/resources/experience.yml index 24496392a..37e5921c8 100644 --- a/src/main/resources/experience.yml +++ b/src/main/resources/experience.yml @@ -34,6 +34,7 @@ ExploitFix: LavaStoneAndCobbleFarming: true TreeFellerReducedXP: true PistonCheating: true + SnowGolemExcavation: true Experience_Bars: # Turn this to false if you wanna disable XP bars Enable: true From 0ffcff53b37c8fcda5553f5f4bcdb454f4f238d8 Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Sun, 26 Jan 2020 17:48:14 +0000 Subject: [PATCH 12/21] Further address locale issues (Targets #4083) --- Changelog.txt | 3 ++ .../nossr50/commands/McImportCommand.java | 3 +- .../nossr50/commands/skills/SkillCommand.java | 3 +- .../nossr50/database/SQLDatabaseManager.java | 10 ++-- .../datatypes/skills/SubSkillType.java | 4 +- .../skills/subskills/acrobatics/Roll.java | 4 +- .../nossr50/listeners/InteractionManager.java | 5 +- .../nossr50/listeners/PlayerListener.java | 8 ++-- src/main/java/com/gmail/nossr50/mcMMO.java | 5 +- .../gmail/nossr50/util/MaterialMapStore.java | 3 +- .../java/com/gmail/nossr50/util/Misc.java | 3 +- .../com/gmail/nossr50/util/Permissions.java | 48 ++++++++++--------- .../com/gmail/nossr50/util/StringUtils.java | 4 +- .../nossr50/util/TextComponentFactory.java | 3 +- .../commands/CommandRegistrationManager.java | 5 +- .../nossr50/util/commands/CommandUtils.java | 3 +- .../util/scoreboards/ScoreboardWrapper.java | 2 +- .../java/mcMMO/PotionConfigGenerator.java | 2 +- 18 files changed, 70 insertions(+), 48 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 298e6c8de..602d80e88 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,6 @@ +Version 2.1.114 + Fix some more locale usages, should aim to further prevent issues with oddball locales + Version 2.1.113 Activating Berserk on a soft block (glass, snow, dirts) will break that material right away instead of only breaking subsequent blocks hit by the player Berserk will now break glass and glass pane blocks diff --git a/src/main/java/com/gmail/nossr50/commands/McImportCommand.java b/src/main/java/com/gmail/nossr50/commands/McImportCommand.java index 1eac84979..7c953a88a 100644 --- a/src/main/java/com/gmail/nossr50/commands/McImportCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/McImportCommand.java @@ -11,6 +11,7 @@ import org.bukkit.command.CommandSender; import java.io.*; import java.util.ArrayList; import java.util.HashMap; +import java.util.Locale; public class McImportCommand implements CommandExecutor { int fileAmount; @@ -129,7 +130,7 @@ public class McImportCommand implements CommandExecutor { } FileWriter out = null; - String type = modConfigType.name().toLowerCase(); + String type = modConfigType.name().toLowerCase(Locale.ENGLISH); for (String modName : materialNames.keySet()) { File outputFile = new File(outputFilePath, modName + "." + type + ".yml"); diff --git a/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java b/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java index 6b4b1c19f..1241b9e11 100644 --- a/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java @@ -30,6 +30,7 @@ import org.bukkit.entity.Player; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.Set; public abstract class SkillCommand implements TabExecutor { @@ -134,7 +135,7 @@ public abstract class SkillCommand implements TabExecutor { } } - player.sendMessage(LocaleLoader.getString("Guides.Available", skillName, skillName.toLowerCase())); + player.sendMessage(LocaleLoader.getString("Guides.Available", skillName, skillName.toLowerCase(Locale.ENGLISH))); } private void sendSkillCommandHeader(Player player, McMMOPlayer mcMMOPlayer, int skillValue) { diff --git a/src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java b/src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java index f2bac01d6..3a75c7ecb 100644 --- a/src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java +++ b/src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java @@ -347,7 +347,7 @@ public final class SQLDatabaseManager implements DatabaseManager { public List readLeaderboard(PrimarySkillType skill, int pageNumber, int statsPerPage) { List stats = new ArrayList(); - String query = skill == null ? ALL_QUERY_VERSION : skill.name().toLowerCase(); + String query = skill == null ? ALL_QUERY_VERSION : skill.name().toLowerCase(Locale.ENGLISH); ResultSet resultSet = null; PreparedStatement statement = null; Connection connection = null; @@ -391,7 +391,7 @@ public final class SQLDatabaseManager implements DatabaseManager { try { connection = getConnection(PoolIdentifier.MISC); for (PrimarySkillType primarySkillType : PrimarySkillType.NON_CHILD_SKILLS) { - String skillName = primarySkillType.name().toLowerCase(); + String skillName = primarySkillType.name().toLowerCase(Locale.ENGLISH); // Get count of all users with higher skill level than player String sql = "SELECT COUNT(*) AS rank FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE " + skillName + " > 0 " + "AND " + skillName + " > (SELECT " + skillName + " FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id " + @@ -911,7 +911,7 @@ public final class SQLDatabaseManager implements DatabaseManager { for (PrimarySkillType skill : PrimarySkillType.NON_CHILD_SKILLS) { int cap = Config.getInstance().getLevelCap(skill); if (cap != Integer.MAX_VALUE) { - statement = connection.prepareStatement("UPDATE `" + tablePrefix + "skills` SET `" + skill.name().toLowerCase() + "` = " + cap + " WHERE `" + skill.name().toLowerCase() + "` > " + cap); + statement = connection.prepareStatement("UPDATE `" + tablePrefix + "skills` SET `" + skill.name().toLowerCase(Locale.ENGLISH) + "` = " + cap + " WHERE `" + skill.name().toLowerCase(Locale.ENGLISH) + "` > " + cap); statement.executeUpdate(); tryClose(statement); } @@ -951,7 +951,7 @@ public final class SQLDatabaseManager implements DatabaseManager { break; } if (connection == null) { - throw new RuntimeException("getConnection() for " + identifier.name().toLowerCase() + " pool timed out. Increase max connections settings."); + throw new RuntimeException("getConnection() for " + identifier.name().toLowerCase(Locale.ENGLISH) + " pool timed out. Increase max connections settings."); } return connection; } @@ -1262,7 +1262,7 @@ public final class SQLDatabaseManager implements DatabaseManager { mcMMO.p.getLogger().info("Indexing tables, this may take a while on larger databases"); for (PrimarySkillType skill : PrimarySkillType.NON_CHILD_SKILLS) { - String skill_name = skill.name().toLowerCase(); + String skill_name = skill.name().toLowerCase(Locale.ENGLISH); try { statement.executeUpdate("ALTER TABLE `" + tablePrefix + "skills` ADD INDEX `idx_" + skill_name + "` (`" + skill_name + "`) USING BTREE"); diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java b/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java index ec1613a32..1e67e9b38 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java @@ -3,6 +3,8 @@ package com.gmail.nossr50.datatypes.skills; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.util.StringUtils; +import java.util.Locale; + public enum SubSkillType { /* !! Warning -- Do not let subskills share a name with any existing PrimarySkillType as it will clash with the static import !! */ @@ -157,7 +159,7 @@ public enum SubSkillType { public String getPermissionNodeAddress() { //TODO: This could be optimized - return "mcmmo.ability." + getParentSkill().toString().toLowerCase() + "." + getConfigName(toString()).toLowerCase(); + return "mcmmo.ability." + getParentSkill().toString().toLowerCase(Locale.ENGLISH) + "." + getConfigName(toString()).toLowerCase(Locale.ENGLISH); } /** diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java b/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java index 5e28dd901..eae0f6c7d 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java @@ -33,6 +33,8 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.inventory.ItemStack; +import java.util.Locale; + public class Roll extends AcrobaticsSubSkill { @@ -100,7 +102,7 @@ public class Roll extends AcrobaticsSubSkill { */ @Override public String getPermissionNode() { - return ("mcmmo.ability."+getPrimaryKeyName()+"."+getConfigKeyName()).toLowerCase(); + return ("mcmmo.ability."+getPrimaryKeyName()+"."+getConfigKeyName()).toLowerCase(Locale.ENGLISH); } /** diff --git a/src/main/java/com/gmail/nossr50/listeners/InteractionManager.java b/src/main/java/com/gmail/nossr50/listeners/InteractionManager.java index 56cf1b5e3..43705073a 100644 --- a/src/main/java/com/gmail/nossr50/listeners/InteractionManager.java +++ b/src/main/java/com/gmail/nossr50/listeners/InteractionManager.java @@ -9,6 +9,7 @@ import org.bukkit.event.Event; import java.util.ArrayList; import java.util.HashMap; +import java.util.Locale; public class InteractionManager { private static HashMap> interactRegister; @@ -47,7 +48,7 @@ public class InteractionManager { //Register skill arrayRef.add(abstractSubSkill); - String lowerCaseName = abstractSubSkill.getConfigKeyName().toLowerCase(); + String lowerCaseName = abstractSubSkill.getConfigKeyName().toLowerCase(Locale.ENGLISH); //Register in name map if(subSkillNameMap.get(lowerCaseName) == null) @@ -64,7 +65,7 @@ public class InteractionManager { */ public static AbstractSubSkill getAbstractByName(String name) { - return subSkillNameMap.get(name.toLowerCase()); + return subSkillNameMap.get(name.toLowerCase(Locale.ENGLISH)); } /** diff --git a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java index c889e09a5..0313655c9 100644 --- a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java @@ -51,6 +51,8 @@ import org.bukkit.event.player.*; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; +import java.util.Locale; + public class PlayerListener implements Listener { private final mcMMO plugin; @@ -909,12 +911,12 @@ public class PlayerListener implements Listener { if (!Config.getInstance().getLocale().equalsIgnoreCase("en_US")) { String message = event.getMessage(); String command = message.substring(1).split(" ")[0]; - String lowerCaseCommand = command.toLowerCase(); + String lowerCaseCommand = command.toLowerCase(Locale.ENGLISH); // Do these ACTUALLY have to be lower case to work properly? for (PrimarySkillType skill : PrimarySkillType.values()) { - String skillName = skill.toString().toLowerCase(); - String localizedName = skill.getName().toLowerCase(); + String skillName = skill.toString().toLowerCase(Locale.ENGLISH); + String localizedName = skill.getName().toLowerCase(Locale.ENGLISH); if (lowerCaseCommand.equals(localizedName)) { event.setMessage(message.replace(command, skillName)); diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index 4244069f5..b28777238 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -62,6 +62,7 @@ import java.io.InputStreamReader; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import java.util.Locale; public class mcMMO extends JavaPlugin { /* Managers */ @@ -286,9 +287,9 @@ public class mcMMO extends JavaPlugin { private ServerSoftwareType getServerSoftware() { - if(Bukkit.getVersion().toLowerCase().contains("paper")) + if(Bukkit.getVersion().toLowerCase(Locale.ENGLISH).contains("paper")) return ServerSoftwareType.PAPER; - else if(Bukkit.getVersion().toLowerCase().contains("spigot")) + else if(Bukkit.getVersion().toLowerCase(Locale.ENGLISH).contains("spigot")) return ServerSoftwareType.SPIGOT; else return ServerSoftwareType.CRAFTBUKKIT; diff --git a/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java b/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java index 81c827111..ee9b39296 100644 --- a/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java +++ b/src/main/java/com/gmail/nossr50/util/MaterialMapStore.java @@ -3,6 +3,7 @@ package com.gmail.nossr50.util; import org.bukkit.Material; import java.util.HashSet; +import java.util.Locale; /** * Stores hash tables for item and block names @@ -503,6 +504,6 @@ public class MaterialMapStore { private void addToHashSet(String string, HashSet stringHashSet) { - stringHashSet.add(string.toLowerCase()); + stringHashSet.add(string.toLowerCase(Locale.ENGLISH)); } } diff --git a/src/main/java/com/gmail/nossr50/util/Misc.java b/src/main/java/com/gmail/nossr50/util/Misc.java index 945b39eef..f3746829b 100644 --- a/src/main/java/com/gmail/nossr50/util/Misc.java +++ b/src/main/java/com/gmail/nossr50/util/Misc.java @@ -13,6 +13,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; import java.util.Collection; +import java.util.Locale; import java.util.Random; import java.util.Set; @@ -225,7 +226,7 @@ public final class Misc { String[] materialSplit = materialName.split("_"); if (materialSplit.length > 1) { - return materialSplit[0].toLowerCase(); + return materialSplit[0].toLowerCase(Locale.ENGLISH); } return "UnknownMods"; diff --git a/src/main/java/com/gmail/nossr50/util/Permissions.java b/src/main/java/com/gmail/nossr50/util/Permissions.java index 483fa9c43..b1acacdb1 100644 --- a/src/main/java/com/gmail/nossr50/util/Permissions.java +++ b/src/main/java/com/gmail/nossr50/util/Permissions.java @@ -16,6 +16,8 @@ import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.PluginManager; +import java.util.Locale; + public final class Permissions { private Permissions() {} @@ -79,17 +81,17 @@ public final class Permissions { public static boolean mcrefresh(Permissible permissible) { return (permissible.hasPermission("mcmmo.commands.mcrefresh")); } public static boolean mcrefreshOthers(Permissible permissible) { return (permissible.hasPermission("mcmmo.commands.mcrefresh.others")); } - public static boolean mctop(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.commands.mctop." + skill.toString().toLowerCase()); } + public static boolean mctop(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.commands.mctop." + skill.toString().toLowerCase(Locale.ENGLISH)); } public static boolean mmoedit(Permissible permissible) { return permissible.hasPermission("mcmmo.commands.mmoedit"); } public static boolean mmoeditOthers(Permissible permissible) { return permissible.hasPermission("mcmmo.commands.mmoedit.others"); } public static boolean skillreset(Permissible permissible) { return permissible.hasPermission("mcmmo.commands.skillreset"); } - public static boolean skillreset(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.commands.skillreset." + skill.toString().toLowerCase()); } + public static boolean skillreset(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.commands.skillreset." + skill.toString().toLowerCase(Locale.ENGLISH)); } public static boolean skillresetOthers(Permissible permissible) { return permissible.hasPermission("mcmmo.commands.skillreset.others"); } - public static boolean skillresetOthers(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.commands.skillreset.others." + skill.toString().toLowerCase()); } + public static boolean skillresetOthers(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.commands.skillreset.others." + skill.toString().toLowerCase(Locale.ENGLISH)); } - public static boolean xplock(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.commands.xplock." + skill.toString().toLowerCase()); } + public static boolean xplock(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.commands.xplock." + skill.toString().toLowerCase(Locale.ENGLISH)); } public static boolean xprateSet(Permissible permissible) { return permissible.hasPermission("mcmmo.commands.xprate.set"); } public static boolean xprateReset(Permissible permissible) { return permissible.hasPermission("mcmmo.commands.xprate.reset"); } @@ -111,16 +113,16 @@ public final class Permissions { public static boolean hasRepairEnchantBypassPerk(Permissible permissible) { return permissible.hasPermission("mcmmo.perks.bypass.repairenchant"); } public static boolean hasSalvageEnchantBypassPerk(Permissible permissible) { return permissible.hasPermission("mcmmo.perks.bypass.salvageenchant"); } - public static boolean lucky(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.lucky." + skill.toString().toLowerCase()); } + public static boolean lucky(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.lucky." + skill.toString().toLowerCase(Locale.ENGLISH)); } /* XP PERKS */ - public static boolean quadrupleXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.quadruple." + skill.toString().toLowerCase()); } - public static boolean tripleXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.triple." + skill.toString().toLowerCase()); } - public static boolean doubleAndOneHalfXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.150percentboost." + skill.toString().toLowerCase()); } - public static boolean doubleXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.double." + skill.toString().toLowerCase()); } - public static boolean oneAndOneHalfXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.50percentboost." + skill.toString().toLowerCase()); } - public static boolean oneAndOneTenthXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.10percentboost." + skill.toString().toLowerCase()); } - public static boolean customXpBoost(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.customboost." + skill.toString().toLowerCase()); } + public static boolean quadrupleXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.quadruple." + skill.toString().toLowerCase(Locale.ENGLISH)); } + public static boolean tripleXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.triple." + skill.toString().toLowerCase(Locale.ENGLISH)); } + public static boolean doubleAndOneHalfXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.150percentboost." + skill.toString().toLowerCase(Locale.ENGLISH)); } + public static boolean doubleXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.double." + skill.toString().toLowerCase(Locale.ENGLISH)); } + public static boolean oneAndOneHalfXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.50percentboost." + skill.toString().toLowerCase(Locale.ENGLISH)); } + public static boolean oneAndOneTenthXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.10percentboost." + skill.toString().toLowerCase(Locale.ENGLISH)); } + public static boolean customXpBoost(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.customboost." + skill.toString().toLowerCase(Locale.ENGLISH)); } /* ACTIVATION PERKS */ public static boolean twelveSecondActivationBoost(Permissible permissible) { return permissible.hasPermission("mcmmo.perks.activationtime.twelveseconds"); } @@ -136,11 +138,11 @@ public final class Permissions { * SKILLS */ - public static boolean skillEnabled(Permissible permissible, PrimarySkillType skill) {return permissible.hasPermission("mcmmo.skills." + skill.toString().toLowerCase()); } - public static boolean vanillaXpBoost(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.ability." + skill.toString().toLowerCase() + ".vanillaxpboost"); } + public static boolean skillEnabled(Permissible permissible, PrimarySkillType skill) {return permissible.hasPermission("mcmmo.skills." + skill.toString().toLowerCase(Locale.ENGLISH)); } + public static boolean vanillaXpBoost(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.ability." + skill.toString().toLowerCase(Locale.ENGLISH) + ".vanillaxpboost"); } public static boolean isSubSkillEnabled(Permissible permissible, SubSkillType subSkillType) { return permissible.hasPermission(subSkillType.getPermissionNodeAddress()); } public static boolean isSubSkillEnabled(Permissible permissible, AbstractSubSkill abstractSubSkill) { return permissible.hasPermission(abstractSubSkill.getPermissionNode()); } - public static boolean bonusDamage(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.ability." + skill.toString().toLowerCase() + ".bonusdamage"); } + public static boolean bonusDamage(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.ability." + skill.toString().toLowerCase(Locale.ENGLISH) + ".bonusdamage"); } /* ACROBATICS */ public static boolean dodge(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.acrobatics.dodge"); } @@ -163,8 +165,8 @@ public final class Permissions { /* HERBALISM */ public static boolean greenTerra(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.herbalism.greenterra"); } - public static boolean greenThumbBlock(Permissible permissible, Material material) { return permissible.hasPermission("mcmmo.ability.herbalism.greenthumb.blocks." + material.toString().replace("_", "").toLowerCase()); } - public static boolean greenThumbPlant(Permissible permissible, Material material) { return permissible.hasPermission("mcmmo.ability.herbalism.greenthumb.plants." + material.toString().replace("_", "").toLowerCase()); } + public static boolean greenThumbBlock(Permissible permissible, Material material) { return permissible.hasPermission("mcmmo.ability.herbalism.greenthumb.blocks." + material.toString().replace("_", "").toLowerCase(Locale.ENGLISH)); } + public static boolean greenThumbPlant(Permissible permissible, Material material) { return permissible.hasPermission("mcmmo.ability.herbalism.greenthumb.plants." + material.toString().replace("_", "").toLowerCase(Locale.ENGLISH)); } /* MINING */ public static boolean biggerBombs(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.mining.blastmining.biggerbombs"); } @@ -173,15 +175,15 @@ public final class Permissions { public static boolean superBreaker(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.mining.superbreaker"); } /* REPAIR */ - public static boolean repairItemType(Permissible permissible, ItemType repairItemType) { return permissible.hasPermission("mcmmo.ability.repair." + repairItemType.toString().toLowerCase() + "repair"); } - public static boolean repairMaterialType(Permissible permissible, MaterialType repairMaterialType) { return permissible.hasPermission("mcmmo.ability.repair." + repairMaterialType.toString().toLowerCase() + "repair"); } + public static boolean repairItemType(Permissible permissible, ItemType repairItemType) { return permissible.hasPermission("mcmmo.ability.repair." + repairItemType.toString().toLowerCase(Locale.ENGLISH) + "repair"); } + public static boolean repairMaterialType(Permissible permissible, MaterialType repairMaterialType) { return permissible.hasPermission("mcmmo.ability.repair." + repairMaterialType.toString().toLowerCase(Locale.ENGLISH) + "repair"); } /* SALVAGE */ public static boolean advancedSalvage(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.salvage.advancedsalvage"); } public static boolean arcaneSalvage(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.salvage.arcanesalvage"); } - public static boolean salvageItemType(Permissible permissible, ItemType salvageItemType) { return permissible.hasPermission("mcmmo.ability.salvage." + salvageItemType.toString().toLowerCase() + "salvage"); } - public static boolean salvageMaterialType(Permissible permissible, MaterialType salvageMaterialType) { return permissible.hasPermission("mcmmo.ability.salvage." + salvageMaterialType.toString().toLowerCase() + "salvage"); } + public static boolean salvageItemType(Permissible permissible, ItemType salvageItemType) { return permissible.hasPermission("mcmmo.ability.salvage." + salvageItemType.toString().toLowerCase(Locale.ENGLISH) + "salvage"); } + public static boolean salvageMaterialType(Permissible permissible, MaterialType salvageMaterialType) { return permissible.hasPermission("mcmmo.ability.salvage." + salvageMaterialType.toString().toLowerCase(Locale.ENGLISH) + "salvage"); } /* SMELTING */ public static boolean fluxMining(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.smelting.fluxmining"); } @@ -191,7 +193,7 @@ public final class Permissions { public static boolean serratedStrikes(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.swords.serratedstrikes"); } /* TAMING */ - public static boolean callOfTheWild(Permissible permissible, EntityType type) { return permissible.hasPermission("mcmmo.ability.taming.callofthewild." + type.toString().toLowerCase()); } + public static boolean callOfTheWild(Permissible permissible, EntityType type) { return permissible.hasPermission("mcmmo.ability.taming.callofthewild." + type.toString().toLowerCase(Locale.ENGLISH)); } /* UNARMED */ public static boolean berserk(Permissible permissible) { return permissible.hasPermission("mcmmo.ability.unarmed.berserk"); } @@ -204,7 +206,7 @@ public final class Permissions { */ public static boolean partySizeBypass(Permissible permissible) { return permissible.hasPermission("mcmmo.bypass.partylimit" ); } public static boolean party(Permissible permissible) { return permissible.hasPermission("mcmmo.commands.party"); } - public static boolean partySubcommand(Permissible permissible, PartySubcommandType subcommand) { return permissible.hasPermission("mcmmo.commands.party." + subcommand.toString().toLowerCase()); } + public static boolean partySubcommand(Permissible permissible, PartySubcommandType subcommand) { return permissible.hasPermission("mcmmo.commands.party." + subcommand.toString().toLowerCase(Locale.ENGLISH)); } public static boolean friendlyFire(Permissible permissible) { return permissible.hasPermission("mcmmo.party.friendlyfire"); } /* TELEPORT */ diff --git a/src/main/java/com/gmail/nossr50/util/StringUtils.java b/src/main/java/com/gmail/nossr50/util/StringUtils.java index 31d1e77d4..1b90467bb 100644 --- a/src/main/java/com/gmail/nossr50/util/StringUtils.java +++ b/src/main/java/com/gmail/nossr50/util/StringUtils.java @@ -7,6 +7,8 @@ import org.bukkit.block.data.Ageable; import org.bukkit.block.data.BlockData; import org.bukkit.entity.EntityType; +import java.util.Locale; + public class StringUtils { /** @@ -17,7 +19,7 @@ public class StringUtils { * @return the capitalized string */ public static String getCapitalized(String target) { - return target.substring(0, 1).toUpperCase() + target.substring(1).toLowerCase(); + return target.substring(0, 1).toUpperCase() + target.substring(1).toLowerCase(Locale.ENGLISH); } public static String getPrettyItemString(Material material) { diff --git a/src/main/java/com/gmail/nossr50/util/TextComponentFactory.java b/src/main/java/com/gmail/nossr50/util/TextComponentFactory.java index 6d93218c8..70791e3b2 100644 --- a/src/main/java/com/gmail/nossr50/util/TextComponentFactory.java +++ b/src/main/java/com/gmail/nossr50/util/TextComponentFactory.java @@ -17,6 +17,7 @@ import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; +import java.util.Locale; /** * This class handles many of the JSON components that mcMMO makes and uses @@ -545,7 +546,7 @@ public class TextComponentFactory { TextComponent unlockMessage = new TextComponent(""); unlockMessage.setText(LocaleLoader.getString("JSON.SkillUnlockMessage", subSkillType.getLocaleName(), RankUtils.getRank(player, subSkillType))); unlockMessage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, getSubSkillHoverComponent(player, subSkillType))); - unlockMessage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/"+subSkillType.getParentSkill().toString().toLowerCase())); + unlockMessage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/"+subSkillType.getParentSkill().toString().toLowerCase(Locale.ENGLISH))); return unlockMessage; } } diff --git a/src/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java b/src/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java index b69f486e8..de34ad4cb 100644 --- a/src/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java +++ b/src/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java @@ -28,6 +28,7 @@ import org.bukkit.command.PluginCommand; import java.util.ArrayList; import java.util.List; +import java.util.Locale; public final class CommandRegistrationManager { private CommandRegistrationManager() {}; @@ -36,8 +37,8 @@ public final class CommandRegistrationManager { private static void registerSkillCommands() { for (PrimarySkillType skill : PrimarySkillType.values()) { - String commandName = skill.toString().toLowerCase(); - String localizedName = skill.getName().toLowerCase(); + String commandName = skill.toString().toLowerCase(Locale.ENGLISH); + String localizedName = skill.getName().toLowerCase(Locale.ENGLISH); PluginCommand command; diff --git a/src/main/java/com/gmail/nossr50/util/commands/CommandUtils.java b/src/main/java/com/gmail/nossr50/util/commands/CommandUtils.java index 1ba0448a3..ab938f20e 100644 --- a/src/main/java/com/gmail/nossr50/util/commands/CommandUtils.java +++ b/src/main/java/com/gmail/nossr50/util/commands/CommandUtils.java @@ -17,6 +17,7 @@ import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; +import java.util.Locale; public final class CommandUtils { public static final List TRUE_FALSE_OPTIONS = ImmutableList.of("on", "off", "true", "false", "enabled", "disabled"); @@ -302,7 +303,7 @@ public final class CommandUtils { break; } - if (playerName.toLowerCase().contains(partialName.toLowerCase())) { + if (playerName.toLowerCase(Locale.ENGLISH).contains(partialName.toLowerCase(Locale.ENGLISH))) { // Partial match matchedPlayers.add(playerName); } diff --git a/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java b/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java index bf5b4f367..36c58c17a 100644 --- a/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java +++ b/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java @@ -203,7 +203,7 @@ public class ScoreboardWrapper { revertTask = new ScoreboardChangeTask().runTaskLater(mcMMO.p, ticks); // TODO is there any way to do the time that looks acceptable? - // player.sendMessage(LocaleLoader.getString("Commands.Scoreboard.Timer", StringUtils.capitalize(sidebarType.toString().toLowerCase()), ticks / 20F)); + // player.sendMessage(LocaleLoader.getString("Commands.Scoreboard.Timer", StringUtils.capitalize(sidebarType.toString().toLowerCase(Locale.ENGLISH)), ticks / 20F)); if(UserManager.getPlayer(playerName) == null) return; diff --git a/src/util/java/mcMMO/PotionConfigGenerator.java b/src/util/java/mcMMO/PotionConfigGenerator.java index 0323b531e..083c502bf 100644 --- a/src/util/java/mcMMO/PotionConfigGenerator.java +++ b/src/util/java/mcMMO/PotionConfigGenerator.java @@ -245,7 +245,7 @@ public class PotionConfigGenerator { if (target.equals("II")) { // hacks return target; } - return target.substring(0, 1).toUpperCase() + target.substring(1).toLowerCase(); + return target.substring(0, 1).toUpperCase() + target.substring(1).toLowerCase(Locale.ENGLISH); } private static String getName(PotionEffectType type) { From 657abb76a76820de4df2216b6e25b9cda7e71424 Mon Sep 17 00:00:00 2001 From: apachezy <50116371+apachezy@users.noreply.github.com> Date: Tue, 28 Jan 2020 08:11:57 +0800 Subject: [PATCH 13/21] "EndermanEndermiteFarms" does not work. (#4111) This error causes the "ExploitFix.EndermanEndermiteFarms" option in ExperienceConfig to not work. --- src/main/java/com/gmail/nossr50/listeners/EntityListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java index c74c7d74d..17e18fb4d 100644 --- a/src/main/java/com/gmail/nossr50/listeners/EntityListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java @@ -81,7 +81,7 @@ public class EntityListener implements Listener { //Prevent entities from giving XP if they target endermite if(event.getTarget() instanceof Endermite) { - if(event.getEntity().hasMetadata(mcMMO.entityMetadataKey)) + if(!event.getEntity().hasMetadata(mcMMO.entityMetadataKey)) event.getEntity().setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue); } } From 550a3df6169b457fdea552b58861bb42c53420c2 Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Tue, 28 Jan 2020 00:12:50 +0000 Subject: [PATCH 14/21] place SnowGolemExcavation exploit fix under the correct section --- .../com/gmail/nossr50/config/experience/ExperienceConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java b/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java index 8454ec908..185c5c207 100644 --- a/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java +++ b/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java @@ -144,7 +144,7 @@ public class ExperienceConfig extends AutoUpdateConfigLoader { */ /* EXPLOIT TOGGLES */ - public boolean isSnowExploitPrevented() { return config.getBoolean("SnowGolemExcavation", true); } + public boolean isSnowExploitPrevented() { return config.getBoolean("ExploitFix.SnowGolemExcavation", true); } public boolean isEndermanEndermiteFarmingPrevented() { return config.getBoolean("ExploitFix.EndermanEndermiteFarms", true); } public boolean isPistonCheatingPrevented() { return config.getBoolean("ExploitFix.PistonCheating", true); } public boolean isPistonExploitPrevented() { return config.getBoolean("ExploitFix.Pistons", false); } From 3eb160a7941bf59d673a97b76cbff1d378c08922 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Mon, 27 Jan 2020 18:40:46 -0800 Subject: [PATCH 15/21] Missed a few merges --- .../commands/party/teleport/PtpCommand.java | 1 - .../nossr50/commands/skills/SkillCommand.java | 3 +- .../nossr50/config/SkillConfigFactory.java | 4 +- .../datatypes/skills/SubSkillType.java | 2 +- .../nossr50/dumpster/PotionGenerator.java | 2 +- .../nossr50/listeners/EntityListener.java | 32 +------------ .../main/java/com/gmail/nossr50/mcMMO.java | 5 +- .../MobHealthDisplayUpdaterTask.java | 1 - .../gmail/nossr50/util/PermissionTools.java | 46 ++++++++++--------- .../nossr50/util/TextComponentFactory.java | 3 +- .../commands/CommandRegistrationManager.java | 5 +- .../nossr50/util/commands/CommandTools.java | 3 +- 12 files changed, 42 insertions(+), 65 deletions(-) diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpCommand.java b/mcmmo-core/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpCommand.java index 138f3c16b..536ad0813 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpCommand.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/commands/party/teleport/PtpCommand.java @@ -7,7 +7,6 @@ import com.gmail.nossr50.datatypes.party.PartyTeleportRecord; import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.mcMMO; import com.google.common.collect.ImmutableList; - import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java b/mcmmo-core/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java index 68026f00c..d659cb07a 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java @@ -19,6 +19,7 @@ import org.bukkit.entity.Player; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.Set; public abstract class SkillCommand implements TabExecutor { @@ -131,7 +132,7 @@ public abstract class SkillCommand implements TabExecutor { } } - player.sendMessage(pluginRef.getLocaleManager().getString("Guides.Available", skillName, skillName.toLowerCase())); + player.sendMessage(pluginRef.getLocaleManager().getString("Guides.Available", skillName, skillName.toLowerCase(Locale.ENGLISH))); } private void sendSkillCommandHeader(Player player, McMMOPlayer mcMMOPlayer, int skillValue) { diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/SkillConfigFactory.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/SkillConfigFactory.java index 50eed1303..7f9f07ff0 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/SkillConfigFactory.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/SkillConfigFactory.java @@ -4,11 +4,13 @@ import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.StringUtils; +import java.util.Locale; + public class SkillConfigFactory { protected static SerializedConfigLoader initSkillConfig(mcMMO pluginRef, PrimarySkillType primarySkillType, Class clazz) { return new SerializedConfigLoader(pluginRef, clazz, - primarySkillType.toString().toLowerCase() + ".conf", + primarySkillType.toString().toLowerCase(Locale.ENGLISH) + ".conf", StringUtils.getCapitalized(primarySkillType.toString()), null); } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java b/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java index 56900e84b..3d4053580 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java @@ -144,7 +144,7 @@ public enum SubSkillType { */ public String getPermissionNodeAddress(mcMMO pluginRef) { //TODO: This could be optimized - return "mcmmo.ability." + getParentSkill(pluginRef).toString().toLowerCase() + "." + getConfigName(toString()).toLowerCase(Locale.ENGLISH); + return "mcmmo.ability." + getParentSkill(pluginRef).toString().toLowerCase(Locale.ENGLISH) + "." + getConfigName(toString()).toLowerCase(Locale.ENGLISH); } /** diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/dumpster/PotionGenerator.java b/mcmmo-core/src/main/java/com/gmail/nossr50/dumpster/PotionGenerator.java index e7107a645..b2540508b 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/dumpster/PotionGenerator.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/dumpster/PotionGenerator.java @@ -253,7 +253,7 @@ // if (target.equals("II")) { // hacks // return target; // } -// return target.substring(0, 1).toUpperCase() + target.substring(1).toLowerCase(); +// return target.substring(0, 1).toUpperCase() + target.substring(1).toLowerCase(Locale.ENGLISH); // } // // private static String getName(PotionEffectType type) { diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/listeners/EntityListener.java b/mcmmo-core/src/main/java/com/gmail/nossr50/listeners/EntityListener.java index 3923a460b..05bfd3333 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/listeners/EntityListener.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/listeners/EntityListener.java @@ -59,16 +59,9 @@ public class EntityListener implements Listener { } //Prevent entities from giving XP if they target endermite -<<<<<<< HEAD:mcmmo-core/src/main/java/com/gmail/nossr50/listeners/EntityListener.java if (event.getTarget() instanceof Endermite) { - if (event.getEntity().hasMetadata(MetadataConstants.UNNATURAL_MOB_METAKEY)) + if (!event.getEntity().hasMetadata(MetadataConstants.UNNATURAL_MOB_METAKEY)) event.getEntity().setMetadata(MetadataConstants.UNNATURAL_MOB_METAKEY, MetadataConstants.metadataValue); -======= - if(event.getTarget() instanceof Endermite) - { - if(!event.getEntity().hasMetadata(mcMMO.entityMetadataKey)) - event.getEntity().setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue); ->>>>>>> 550a3df6169b457fdea552b58861bb42c53420c2:src/main/java/com/gmail/nossr50/listeners/EntityListener.java } } @@ -801,29 +794,6 @@ public class EntityListener implements Listener { } /** -<<<<<<< HEAD:mcmmo-core/src/main/java/com/gmail/nossr50/listeners/EntityListener.java - * Handle EntityExplode events that involve modifying the event. - * - * @param event The event to modify - */ - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityExplodeMonitor(EntityExplodeEvent event) { - /* WORLD BLACKLIST CHECK */ - if (pluginRef.getDynamicSettingsManager().isWorldBlacklisted(event.getEntity().getWorld().getName())) - return; - - Entity entity = event.getEntity(); - - if (!(entity instanceof TNTPrimed) || !entity.hasMetadata(MetadataConstants.SAFE_TNT_METAKEY)) { - return; - } - - event.blockList().clear(); - } - - /** -======= ->>>>>>> 550a3df6169b457fdea552b58861bb42c53420c2:src/main/java/com/gmail/nossr50/listeners/EntityListener.java * Handle FoodLevelChange events that involve modifying the event. * * @param event The event to modify diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java b/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java index 75ad07e5d..5a78ebbd3 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java @@ -65,6 +65,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Locale; public class mcMMO extends JavaPlugin { /* Managers */ @@ -378,9 +379,9 @@ public class mcMMO extends JavaPlugin { * @return the ServerSoftwareType which likely matches the server */ private ServerSoftwareType getServerSoftware() { - if (Bukkit.getVersion().toLowerCase().contains("paper")) + if (Bukkit.getVersion().toLowerCase(Locale.ENGLISH).contains("paper")) return ServerSoftwareType.PAPER; - else if (Bukkit.getVersion().toLowerCase().contains("spigot")) + else if (Bukkit.getVersion().toLowerCase(Locale.ENGLISH).contains("spigot")) return ServerSoftwareType.SPIGOT; else return ServerSoftwareType.CRAFTBUKKIT; diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/runnables/MobHealthDisplayUpdaterTask.java b/mcmmo-core/src/main/java/com/gmail/nossr50/runnables/MobHealthDisplayUpdaterTask.java index 3577163b7..b156a5972 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/runnables/MobHealthDisplayUpdaterTask.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/runnables/MobHealthDisplayUpdaterTask.java @@ -2,7 +2,6 @@ package com.gmail.nossr50.runnables; import com.gmail.nossr50.core.MetadataConstants; import com.gmail.nossr50.mcMMO; - import org.bukkit.entity.LivingEntity; import org.bukkit.scheduler.BukkitRunnable; diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/util/PermissionTools.java b/mcmmo-core/src/main/java/com/gmail/nossr50/util/PermissionTools.java index e7fb54db5..784291b93 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/util/PermissionTools.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/util/PermissionTools.java @@ -18,6 +18,8 @@ import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.SimplePluginManager; +import java.util.Locale; + public final class PermissionTools { private final mcMMO pluginRef; @@ -175,7 +177,7 @@ public final class PermissionTools { } public boolean mctop(Permissible permissible, PrimarySkillType skill) { - return permissible.hasPermission("mcmmo.commands.mctop." + skill.toString().toLowerCase()); + return permissible.hasPermission("mcmmo.commands.mctop." + skill.toString().toLowerCase(Locale.ENGLISH)); } public boolean mmoedit(Permissible permissible) { @@ -195,7 +197,7 @@ public final class PermissionTools { } public boolean skillreset(Permissible permissible, PrimarySkillType skill) { - return permissible.hasPermission("mcmmo.commands.skillreset." + skill.toString().toLowerCase()); + return permissible.hasPermission("mcmmo.commands.skillreset." + skill.toString().toLowerCase(Locale.ENGLISH)); } public boolean skillresetOthers(Permissible permissible) { @@ -203,11 +205,11 @@ public final class PermissionTools { } public boolean skillresetOthers(Permissible permissible, PrimarySkillType skill) { - return permissible.hasPermission("mcmmo.commands.skillreset.others." + skill.toString().toLowerCase()); + return permissible.hasPermission("mcmmo.commands.skillreset.others." + skill.toString().toLowerCase(Locale.ENGLISH)); } public boolean xplock(Permissible permissible, PrimarySkillType skill) { - return permissible.hasPermission("mcmmo.commands.xplock." + skill.toString().toLowerCase()); + return permissible.hasPermission("mcmmo.commands.xplock." + skill.toString().toLowerCase(Locale.ENGLISH)); } public boolean xprateSet(Permissible permissible) { @@ -257,32 +259,32 @@ public final class PermissionTools { } public boolean lucky(Permissible permissible, PrimarySkillType skill) { - return permissible.hasPermission("mcmmo.perks.lucky." + skill.toString().toLowerCase()); + return permissible.hasPermission("mcmmo.perks.lucky." + skill.toString().toLowerCase(Locale.ENGLISH)); } /* XP PERKS */ public boolean quadrupleXp(Permissible permissible, PrimarySkillType skill) { - return permissible.hasPermission("mcmmo.perks.xp.quadruple." + skill.toString().toLowerCase()); + return permissible.hasPermission("mcmmo.perks.xp.quadruple." + skill.toString().toLowerCase(Locale.ENGLISH)); } public boolean tripleXp(Permissible permissible, PrimarySkillType skill) { - return permissible.hasPermission("mcmmo.perks.xp.triple." + skill.toString().toLowerCase()); + return permissible.hasPermission("mcmmo.perks.xp.triple." + skill.toString().toLowerCase(Locale.ENGLISH)); } public boolean doubleAndOneHalfXp(Permissible permissible, PrimarySkillType skill) { - return permissible.hasPermission("mcmmo.perks.xp.150percentboost." + skill.toString().toLowerCase()); + return permissible.hasPermission("mcmmo.perks.xp.150percentboost." + skill.toString().toLowerCase(Locale.ENGLISH)); } public boolean doubleXp(Permissible permissible, PrimarySkillType skill) { - return permissible.hasPermission("mcmmo.perks.xp.double." + skill.toString().toLowerCase()); + return permissible.hasPermission("mcmmo.perks.xp.double." + skill.toString().toLowerCase(Locale.ENGLISH)); } public boolean oneAndOneHalfXp(Permissible permissible, PrimarySkillType skill) { - return permissible.hasPermission("mcmmo.perks.xp.50percentboost." + skill.toString().toLowerCase()); + return permissible.hasPermission("mcmmo.perks.xp.50percentboost." + skill.toString().toLowerCase(Locale.ENGLISH)); } public boolean oneAndOneTenthXp(Permissible permissible, PrimarySkillType skill) { - return permissible.hasPermission("mcmmo.perks.xp.10percentboost." + skill.toString().toLowerCase()); + return permissible.hasPermission("mcmmo.perks.xp.10percentboost." + skill.toString().toLowerCase(Locale.ENGLISH)); } public boolean hasCustomXPPerk(Permissible permissible, CustomXPPerk customXPPerk) { @@ -320,11 +322,11 @@ public final class PermissionTools { */ public boolean skillEnabled(Permissible permissible, PrimarySkillType skill) { - return permissible.hasPermission("mcmmo.skills." + skill.toString().toLowerCase()); + return permissible.hasPermission("mcmmo.skills." + skill.toString().toLowerCase(Locale.ENGLISH)); } public boolean vanillaXpBoost(Permissible permissible, PrimarySkillType skill) { - return permissible.hasPermission("mcmmo.ability." + skill.toString().toLowerCase() + ".vanillaxpboost"); + return permissible.hasPermission("mcmmo.ability." + skill.toString().toLowerCase(Locale.ENGLISH) + ".vanillaxpboost"); } public boolean isSubSkillEnabled(Permissible permissible, SubSkillType subSkillType) { @@ -336,7 +338,7 @@ public final class PermissionTools { } public boolean bonusDamage(Permissible permissible, PrimarySkillType skill) { - return permissible.hasPermission("mcmmo.ability." + skill.toString().toLowerCase() + ".bonusdamage"); + return permissible.hasPermission("mcmmo.ability." + skill.toString().toLowerCase(Locale.ENGLISH) + ".bonusdamage"); } /* ACROBATICS */ @@ -386,11 +388,11 @@ public final class PermissionTools { } public boolean greenThumbBlock(Permissible permissible, Material material) { - return permissible.hasPermission("mcmmo.ability.herbalism.greenthumb.blocks." + material.toString().replace("_", "").toLowerCase()); + return permissible.hasPermission("mcmmo.ability.herbalism.greenthumb.blocks." + material.toString().replace("_", "").toLowerCase(Locale.ENGLISH)); } public boolean greenThumbPlant(Permissible permissible, Material material) { - return permissible.hasPermission("mcmmo.ability.herbalism.greenthumb.plants." + material.toString().replace("_", "").toLowerCase()); + return permissible.hasPermission("mcmmo.ability.herbalism.greenthumb.plants." + material.toString().replace("_", "").toLowerCase(Locale.ENGLISH)); } /* MINING */ @@ -412,11 +414,11 @@ public final class PermissionTools { /* REPAIR */ public boolean repairItemType(Permissible permissible, ItemType repairItemType) { - return permissible.hasPermission("mcmmo.ability.repair." + repairItemType.toString().toLowerCase() + "repair"); + return permissible.hasPermission("mcmmo.ability.repair." + repairItemType.toString().toLowerCase(Locale.ENGLISH) + "repair"); } public boolean repairMaterialType(Permissible permissible, ItemMaterialCategory repairItemMaterialCategory) { - return permissible.hasPermission("mcmmo.ability.repair." + repairItemMaterialCategory.toString().toLowerCase() + "repair"); + return permissible.hasPermission("mcmmo.ability.repair." + repairItemMaterialCategory.toString().toLowerCase(Locale.ENGLISH) + "repair"); } /* SALVAGE */ @@ -429,11 +431,11 @@ public final class PermissionTools { } public boolean salvageItemType(Permissible permissible, ItemType salvageItemType) { - return permissible.hasPermission("mcmmo.ability.salvage." + salvageItemType.toString().toLowerCase() + "salvage"); + return permissible.hasPermission("mcmmo.ability.salvage." + salvageItemType.toString().toLowerCase(Locale.ENGLISH) + "salvage"); } public boolean salvageMaterialType(Permissible permissible, ItemMaterialCategory salvageItemMaterialCategory) { - return permissible.hasPermission("mcmmo.ability.salvage." + salvageItemMaterialCategory.toString().toLowerCase() + "salvage"); + return permissible.hasPermission("mcmmo.ability.salvage." + salvageItemMaterialCategory.toString().toLowerCase(Locale.ENGLISH) + "salvage"); } /* SMELTING */ @@ -452,7 +454,7 @@ public final class PermissionTools { /* TAMING */ public boolean callOfTheWild(Permissible permissible, EntityType type) { - return permissible.hasPermission("mcmmo.ability.taming.callofthewild." + type.toString().toLowerCase()); + return permissible.hasPermission("mcmmo.ability.taming.callofthewild." + type.toString().toLowerCase(Locale.ENGLISH)); } /* UNARMED */ @@ -477,7 +479,7 @@ public final class PermissionTools { } public boolean partySubcommand(Permissible permissible, PartySubcommandType subcommand) { - return permissible.hasPermission("mcmmo.commands.party." + subcommand.toString().toLowerCase()); + return permissible.hasPermission("mcmmo.commands.party." + subcommand.toString().toLowerCase(Locale.ENGLISH)); } public boolean friendlyFire(Permissible permissible) { diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/util/TextComponentFactory.java b/mcmmo-core/src/main/java/com/gmail/nossr50/util/TextComponentFactory.java index 07259f7a8..00cd70ef1 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/util/TextComponentFactory.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/util/TextComponentFactory.java @@ -14,6 +14,7 @@ import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; +import java.util.Locale; /** * This class handles many of the JSON components that mcMMO makes and uses @@ -537,7 +538,7 @@ public class TextComponentFactory { TextComponent unlockMessage = new TextComponent(""); unlockMessage.setText(pluginRef.getLocaleManager().getString("JSON.SkillUnlockMessage", subSkillType.getLocaleName(pluginRef), pluginRef.getRankTools().getRank(player, subSkillType))); unlockMessage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, getSubSkillHoverComponent(player, subSkillType))); - unlockMessage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/" + pluginRef.getSkillTools().getPrimarySkillBySubSkill(subSkillType).toString().toLowerCase())); + unlockMessage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/" + pluginRef.getSkillTools().getPrimarySkillBySubSkill(subSkillType).toString().toLowerCase(Locale.ENGLISH))); return unlockMessage; } } \ No newline at end of file diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java b/mcmmo-core/src/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java index e60e09f27..8fc2f31a7 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java @@ -25,6 +25,7 @@ import org.bukkit.command.PluginCommand; import java.util.ArrayList; import java.util.List; +import java.util.Locale; public final class CommandRegistrationManager { private final mcMMO pluginRef; @@ -37,8 +38,8 @@ public final class CommandRegistrationManager { private void registerSkillCommands() { for (PrimarySkillType primarySkillType : PrimarySkillType.values()) { - String commandName = primarySkillType.toString().toLowerCase(); - String localizedName = pluginRef.getSkillTools().getLocalizedSkillName(primarySkillType).toLowerCase(); + String commandName = primarySkillType.toString().toLowerCase(Locale.ENGLISH); + String localizedName = pluginRef.getSkillTools().getLocalizedSkillName(primarySkillType).toLowerCase(Locale.ENGLISH); PluginCommand command; diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/util/commands/CommandTools.java b/mcmmo-core/src/main/java/com/gmail/nossr50/util/commands/CommandTools.java index 56a27f7ab..1ff315af4 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/util/commands/CommandTools.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/util/commands/CommandTools.java @@ -12,6 +12,7 @@ import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; +import java.util.Locale; public final class CommandTools { private final mcMMO pluginRef; @@ -288,7 +289,7 @@ public final class CommandTools { break; } - if (playerName.toLowerCase().contains(partialName.toLowerCase())) { + if (playerName.toLowerCase(Locale.ENGLISH).contains(partialName.toLowerCase(Locale.ENGLISH))) { // Partial match matchedPlayers.add(playerName); } From ea70c937f277e9c1b2e3e3d349ffc6f095509962 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Mon, 27 Jan 2020 18:45:19 -0800 Subject: [PATCH 16/21] Fix rank for new versions of MySQL --- .../java/com/gmail/nossr50/database/SQLDatabaseManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java b/src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java index 3a75c7ecb..8fdff41d8 100644 --- a/src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java +++ b/src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java @@ -393,7 +393,7 @@ public final class SQLDatabaseManager implements DatabaseManager { for (PrimarySkillType primarySkillType : PrimarySkillType.NON_CHILD_SKILLS) { String skillName = primarySkillType.name().toLowerCase(Locale.ENGLISH); // Get count of all users with higher skill level than player - String sql = "SELECT COUNT(*) AS rank FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE " + skillName + " > 0 " + + String sql = "SELECT COUNT(*) AS 'rank' FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id WHERE " + skillName + " > 0 " + "AND " + skillName + " > (SELECT " + skillName + " FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id " + "WHERE user = ?)"; @@ -427,7 +427,7 @@ public final class SQLDatabaseManager implements DatabaseManager { statement.close(); } - String sql = "SELECT COUNT(*) AS rank FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id " + + String sql = "SELECT COUNT(*) AS 'rank' FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON user_id = id " + "WHERE " + ALL_QUERY_VERSION + " > 0 " + "AND " + ALL_QUERY_VERSION + " > " + "(SELECT " + ALL_QUERY_VERSION + " " + From 2525ce9abeccff9daaf95e9b879faa5b03be8990 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Mon, 27 Jan 2020 18:53:39 -0800 Subject: [PATCH 17/21] 2.1.114 --- Changelog.txt | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Changelog.txt b/Changelog.txt index 602d80e88..354ea638e 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,5 +1,8 @@ Version 2.1.114 Fix some more locale usages, should aim to further prevent issues with oddball locales + Fixed a bug where newer versions of MySQL did not like our rank command + Added a new setting to turn off the Snow Golem Exploit prevention to experience.yml next to the other exploit fixes + Fixed a bug which stopped the optional Endermite XP exploit fix from working Version 2.1.113 Activating Berserk on a soft block (glass, snow, dirts) will break that material right away instead of only breaking subsequent blocks hit by the player diff --git a/pom.xml b/pom.xml index 28aec646e..24eb541ea 100755 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.114-SNAPSHOT + 2.1.114 mcMMO https://github.com/mcMMO-Dev/mcMMO From 8094be46c8e0355090084b85b144e76fa3889778 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Mon, 27 Jan 2020 19:01:08 -0800 Subject: [PATCH 18/21] Dev mode --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 24eb541ea..75680581b 100755 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.114 + 2.1.115-SNAPSHOT mcMMO https://github.com/mcMMO-Dev/mcMMO From 2e5a12a72b5a2dfd81e5b4034dbf9c6500376d61 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Mon, 27 Jan 2020 19:11:00 -0800 Subject: [PATCH 19/21] Add new Cosmetic Level Scaling setting to the leveling config --- Changelog.txt | 2 ++ .../config/playerleveling/ConfigLeveling.java | 8 ++++---- .../ConfigSectionLevelScaling.java | 19 ++++++++----------- .../ConfigSectionLevelingGeneral.java | 16 ++++++---------- 4 files changed, 20 insertions(+), 25 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index fc8dab762..633dcd1b5 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -5,6 +5,8 @@ Version 2.2.0 !!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!! mcMMO's config system has been rewritten + Retro and Standard mode have been removed, now levels are based around 1-1000 and are changed based on a new setting + Added Cosmetic Level Scaling setting to the leveling config, you can use this to for example, make the max level 100 instead of 1000 mcMMO build management is now handled by Gradle (KTS) instead of Maven Nearly every config setting has been renamed and most have brand new comments You can now add an unlimited number of custom XP perks with custom defined XP boosts diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/playerleveling/ConfigLeveling.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/playerleveling/ConfigLeveling.java index e98f6034c..eaa62dfe3 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/playerleveling/ConfigLeveling.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/playerleveling/ConfigLeveling.java @@ -129,6 +129,10 @@ public class ConfigLeveling { return configSectionLevelCaps; } + public int getCosmeticLevelScaleModifier() { + return configSectionLevelingGeneral.getCosmeticLevelScaleModifier(); + } + public ConfigSectionSkillLevelCap getPowerLevelSettings() { return configSectionLevelCaps.getPowerLevelSettings(); } @@ -161,10 +165,6 @@ public class ConfigLeveling { return configExperienceFormula.getFormulaType(); } - public boolean isRetroModeEnabled() { - return getConfigSectionLevelScaling().isRetroModeEnabled(); - } - public ConfigExperienceFormulaLinear getConfigExperienceFormulaLinear() { return configExperienceFormula.getConfigExperienceFormulaLinear(); } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/playerleveling/ConfigSectionLevelScaling.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/playerleveling/ConfigSectionLevelScaling.java index 224c5d406..07bac6d44 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/playerleveling/ConfigSectionLevelScaling.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/playerleveling/ConfigSectionLevelScaling.java @@ -7,22 +7,19 @@ import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; public class ConfigSectionLevelScaling { /* DEFAULT VALUES */ - public static final boolean USE_RETRO_MODE_DEFAULT = true; + public static final int LEVEL_SCALE_MODIFIER_DEFAULT = 1; /* * CONFIG NODES */ - @Setting(value = "Use-Retro-Mode", - comment = "Enables 1-1000 Level Scaling" + - "\nIf set to false, Standard Scaling is used instead (1-100 Level Scaling)") - private boolean useRetroMode = USE_RETRO_MODE_DEFAULT; + @Setting(value = "Cosmetic-Level-Scaling", + comment = "Changes the max number of levels and adjusts settings appropriately" + + "\nThe default value will make level 1000 the max level, settings in the configs are based around that and are mutated based on this setting." + + "\nLeave this setting at a value of 1 if you do not wish to change the cosmetic amount of levels") + private int cosmeticLevelScaleModifier = LEVEL_SCALE_MODIFIER_DEFAULT; - /* - * GETTER BOILERPLATE - */ - - public boolean isRetroModeEnabled() { - return useRetroMode; + public int getCosmeticLevelScaleModifier() { + return cosmeticLevelScaleModifier; } } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/playerleveling/ConfigSectionLevelingGeneral.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/playerleveling/ConfigSectionLevelingGeneral.java index a5a8fe53f..7c6081ab6 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/playerleveling/ConfigSectionLevelingGeneral.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/playerleveling/ConfigSectionLevelingGeneral.java @@ -15,16 +15,8 @@ public class ConfigSectionLevelingGeneral { @Setting(value = "Player-Level-Scaling", comment = "Level Scaling is a new feature of mcMMO." + - "\nServer admins can choose between two level scaling modes." + - "\nEach mode is meant to be identical to each other in terms of the speed of progression." + - "\nIn Retro player skills and levels scale the way they always have, on a 1-1000 scale." + - "\nIn Standard player skills scale instead from 1-100." + - "\nAs an example, reaching level 10 in Standard will take the same amount of time as reaching level 100 in Retro" + - "\n\nTo make upgrading mcMMO easier for the vast majority of existing servers, RetroMode will be turned on by default in the following circumstances" + - "\n1) That your server has a config.yml file that does not yet have a RetroMode setting (this means your server has not yet updated from the old system which did not have two level scaling options)" + - "\n2) You are already using RetroMode in your old YAML config files" + - "\n\nIf either of these is true, RetroMode will be turned on by default. If for some reason you had wiped your config files, you will need to come in here and turn RetroMode back on." + - "\nNOTE: RetroMode and Standard use the EXACT same DB, it does not alter any information within that DB. It is not dangerous to switch between Standard and Retro.") + "\nServer admins can adjust level scaling modifiers to tweak a bunch of settings related to progression at once." + + "\nIt is not recommended to change this away from defaults unless you know what you are doing.") private ConfigSectionLevelScaling configSectionLevelScaling = new ConfigSectionLevelScaling(); @Setting(value = "Player-Starting-Level", @@ -44,4 +36,8 @@ public class ConfigSectionLevelingGeneral { public ConfigSectionLevelScaling getConfigSectionLevelScaling() { return configSectionLevelScaling; } + + public int getCosmeticLevelScaleModifier() { + return configSectionLevelScaling.getCosmeticLevelScaleModifier(); + } } From aaffafb88be0799edadf24cc5f47d570e9d7ab4a Mon Sep 17 00:00:00 2001 From: nossr50 Date: Mon, 27 Jan 2020 20:13:36 -0800 Subject: [PATCH 20/21] No more Standard or Retro, use cosmetic scale modifier setting instead --- .../gmail/nossr50/config/ConfigManager.java | 13 --- .../serializers/MaxBonusLevelSerializer.java | 33 ------- .../SkillRankPropertySerializer.java | 14 +-- .../nossr50/config/skills/ConfigMaxLevel.java | 6 +- .../skills/acrobatics/dodge/ConfigDodge.java | 22 +---- .../skills/acrobatics/roll/ConfigRoll.java | 25 +----- .../archery/ConfigArcheryArrowRetrieval.java | 9 -- .../skills/archery/ConfigArcheryDaze.java | 9 -- .../axes/ConfigAxesCriticalStrikes.java | 11 +-- .../herbalism/ConfigHerbalismDoubleDrops.java | 6 -- .../herbalism/ConfigHerbalismGreenThumb.java | 6 -- .../herbalism/ConfigHerbalismHylianLuck.java | 6 -- .../herbalism/ConfigHerbalismShroomThumb.java | 5 -- .../mining/ConfigMiningDoubleDrops.java | 5 -- .../skills/ranks/SkillRankProperty.java | 90 +++++++------------ .../repair/ConfigRepairSuperRepair.java | 16 +--- .../ConfigRepairRepairMastery.java | 9 -- .../skills/smelting/ConfigSmelting.java | 7 +- .../smelting/ConfigSmeltingSecondSmelt.java | 9 -- .../smelting/ConfigSmeltingSubSkills.java | 5 -- .../config/skills/swords/ConfigSwords.java | 9 -- .../swords/ConfigSwordsCounterAttack.java | 9 -- .../skills/swords/ConfigSwordsRupture.java | 9 -- .../skills/swords/ConfigSwordsSubSkills.java | 9 -- .../skills/taming/ConfigTamingGore.java | 9 -- .../woodcutting/ConfigWoodcuttingHarvest.java | 9 -- .../nossr50/core/SkillPropertiesManager.java | 15 ++-- .../properties/AbstractMaxBonusLevel.java | 35 -------- .../properties/AbstractScalingProperty.java | 19 ---- .../skills/properties/MaxBonusLevel.java | 17 ---- .../skills/properties/ScalingProperty.java | 10 --- .../skills/subskills/acrobatics/Roll.java | 2 +- .../main/java/com/gmail/nossr50/mcMMO.java | 19 ++-- .../util/experience/FormulaManager.java | 41 +++------ .../gmail/nossr50/util/skills/RankTools.java | 2 +- 35 files changed, 76 insertions(+), 444 deletions(-) delete mode 100644 mcmmo-core/src/main/java/com/gmail/nossr50/config/serializers/MaxBonusLevelSerializer.java delete mode 100644 mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/AbstractMaxBonusLevel.java delete mode 100644 mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/AbstractScalingProperty.java delete mode 100644 mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/MaxBonusLevel.java delete mode 100644 mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/ScalingProperty.java diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/ConfigManager.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/ConfigManager.java index 0bbedea78..5dbf72d81 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/ConfigManager.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/ConfigManager.java @@ -51,7 +51,6 @@ import com.gmail.nossr50.datatypes.experience.FormulaType; import com.gmail.nossr50.datatypes.party.PartyFeature; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.datatypes.skills.properties.DamageProperty; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import com.gmail.nossr50.datatypes.skills.subskills.taming.CallOfTheWildType; import com.gmail.nossr50.datatypes.skills.subskills.taming.TamingSummon; import com.gmail.nossr50.mcMMO; @@ -266,7 +265,6 @@ public final class ConfigManager { customSerializers.registerType(TypeToken.of(CustomXPPerk.class), new CustomXPPerkSerializer()); customSerializers.registerType(TypeToken.of(DamageProperty.class), new DamagePropertySerializer()); customSerializers.registerType(TypeToken.of(SkillRankProperty.class), new SkillRankPropertySerializer()); - customSerializers.registerType(TypeToken.of(MaxBonusLevel.class), new MaxBonusLevelSerializer()); customSerializers.registerType(TypeToken.of(PlayerNotificationSettings.class), new PlayerNotificationSerializer()); customSerializers.registerType(TypeToken.of(SoundSetting.class), new SoundSettingSerializer()); // customSerializers.registerType(TypeToken.of(ItemWildcards.class), new ItemWildcardSerializer()); @@ -483,17 +481,6 @@ public final class ConfigManager { return configRanks.getRootNode(); } - /** - * Checks if this plugin is using retro mode - * Retro mode is a 0-1000 skill system - * Standard mode is scaled for 1-100 - * - * @return true if retro mode is enabled - */ - public boolean isRetroMode() { - return getConfigLeveling().getConfigSectionLevelingGeneral().getConfigSectionLevelScaling().isRetroModeEnabled(); - } - public ConfigExperience getConfigExperience() { return configExperience.getConfig(); } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/serializers/MaxBonusLevelSerializer.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/serializers/MaxBonusLevelSerializer.java deleted file mode 100644 index 5345d65fb..000000000 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/serializers/MaxBonusLevelSerializer.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.gmail.nossr50.config.serializers; - -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; -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 MaxBonusLevelSerializer implements TypeSerializer { - - public static final String STANDARD_NODE = "Standard-Max-Bonus-Level"; - public static final String RETRO_NODE = "Retro-Max-Bonus-Level"; - - @Nullable - @Override - public MaxBonusLevel deserialize(@NonNull TypeToken type, @NonNull ConfigurationNode value) throws ObjectMappingException { - int standard = value.getNode(STANDARD_NODE).getValue(TypeToken.of(Integer.class)); - int retro = value.getNode(RETRO_NODE).getValue(TypeToken.of(Integer.class)); - - AbstractMaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(standard, retro); - return maxBonusLevel; - } - - @Override - public void serialize(@NonNull TypeToken type, @Nullable MaxBonusLevel obj, @NonNull ConfigurationNode value) throws ObjectMappingException { - value.getNode(STANDARD_NODE).setValue(obj.getStandardScaleValue()); - value.getNode(RETRO_NODE).setValue(obj.getRetroScaleValue()); - } - -} diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/serializers/SkillRankPropertySerializer.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/serializers/SkillRankPropertySerializer.java index df55e4fa8..fc3608d42 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/serializers/SkillRankPropertySerializer.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/serializers/SkillRankPropertySerializer.java @@ -13,21 +13,17 @@ import java.util.Map; public class SkillRankPropertySerializer implements TypeSerializer { - private static final String STANDARD_RANK_UNLOCK_LEVEL_REQUIREMENTS = "Standard-Rank-Unlock-Level-Requirements"; - private static final String RETRO_RANK_UNLOCK_LEVEL_REQUIREMENTS = "Retro-Rank-Unlock-Level-Requirements"; + private static final String RANK_UNLOCK_LEVEL_REQUIREMENTS = "Standard-Rank-Unlock-Level-Requirements"; @Nullable @Override public SkillRankProperty deserialize(@NonNull TypeToken type, @NonNull ConfigurationNode value) throws ObjectMappingException { HashMap standardHashMap; - HashMap retroHashMap; try { - Map standardMap = value.getNode(STANDARD_RANK_UNLOCK_LEVEL_REQUIREMENTS).getValue(new TypeToken>() {}); - Map retroMap = value.getNode(RETRO_RANK_UNLOCK_LEVEL_REQUIREMENTS).getValue(new TypeToken>() {}); + Map standardMap = value.getNode(RANK_UNLOCK_LEVEL_REQUIREMENTS).getValue(new TypeToken>() {}); standardHashMap = new HashMap<>(standardMap); - retroHashMap = new HashMap<>(retroMap); } catch (ObjectMappingException e) { System.out.println("[mcMMO Deserializer Debug] 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."); @@ -35,15 +31,13 @@ public class SkillRankPropertySerializer implements TypeSerializer type, @Nullable SkillRankProperty obj, @NonNull ConfigurationNode value) throws ObjectMappingException { - value.getNode(STANDARD_RANK_UNLOCK_LEVEL_REQUIREMENTS).setValue(obj.getStandardRanks()); - value.getNode(RETRO_RANK_UNLOCK_LEVEL_REQUIREMENTS).setValue(obj.getRetroRanks()); + value.getNode(RANK_UNLOCK_LEVEL_REQUIREMENTS).setValue(obj.getRanks()); } } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/ConfigMaxLevel.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/ConfigMaxLevel.java index 55170d36f..0d648ad66 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/ConfigMaxLevel.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/ConfigMaxLevel.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -11,9 +9,9 @@ public class ConfigMaxLevel { @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME, comment = "Max bonus level is the level a player needs to reach in this skill to receive maximum benefits, such as better RNG odds or otherwise." + "\nSkills dynamically adjust their rewards to match the max bonus level, you can think of it as a curve that calculates what bonuses " + "\n a player should have based on how far they are from the max bonus level value, and the other parameters used for the scaling of the sub-skill.") - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); + private int maxBonusLevel = 1000; - public MaxBonusLevel getMaxBonusLevel() { + public int getMaxBonusLevel() { return maxBonusLevel; } } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/acrobatics/dodge/ConfigDodge.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/acrobatics/dodge/ConfigDodge.java index 2c0becdbf..f3ea06d03 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/acrobatics/dodge/ConfigDodge.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/acrobatics/dodge/ConfigDodge.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.acrobatics.dodge; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -22,25 +20,11 @@ public class ConfigDodge { "\nDefault value: " + DAMAGE_REDUCTION_DIVISOR_DEFAULT) private double damageReductionDivisor = DAMAGE_REDUCTION_DIVISOR_DEFAULT; - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME, comment = "Max bonus level is the level a player needs to reach in this skill to receive maximum benefits, such as better RNG odds or otherwise." + - "\nSkills dynamically adjust their rewards to match the max bonus level, you can think of it as a curve that calculates what bonuses " + - "\n a player should have based on how far they are from the max bonus level value, and the other parameters used for the scaling of the sub-skill.") - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - - @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = "The maximum success chance for this Sub-Skill." + - "\nA value of 100.0 would be equivalent to 100% chance of success." + - "\nPlayers only have Max-Success-Chance when their skill level has reached the maximum bonus level." + - "\nMax skill chance is dynamically adjusted based on the players level difference from the \"Max-Bonus-Level\", you can think of it as a curve where reaching \"Max-Bonus-Level\" is the peak." + - "\nAs an example, imagine \""+ConfigConstants.MAX_CHANCE_FIELD_NAME+"\" was set to " + FIFTY_PERCENT_EXAMPLE + " and the \""+ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME+"\" was " + MAX_BONUS_LEVEL_EXAMPLE + "," + - "\n and the player was level " + FIFTY_PERCENT_EXAMPLE + " for this skill, that would give the player " + ODDS_PERCENTAGE_EXAMPLE + " odds to succeed with this skill.") - private double chanceAtMaxSkill = CHANCE_AT_MAX_SKILL_DEFAULT; - - public MaxBonusLevel getMaxBonusLevel() { - return maxBonusLevel; - } + @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = ConfigConstants.MAX_CHANCE_FIELD_DESCRIPTION) + private double maxChance = 100.0; public double getChanceAtMaxSkill() { - return chanceAtMaxSkill; + return maxChance; } public double getDamageReductionDivisor() { diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/acrobatics/roll/ConfigRoll.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/acrobatics/roll/ConfigRoll.java index d13bcfeed..e32901511 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/acrobatics/roll/ConfigRoll.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/acrobatics/roll/ConfigRoll.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.acrobatics.roll; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -10,9 +8,6 @@ import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; public class ConfigRoll { public static final double ROLL_DAMAGE_THRESHOLD_DEFAULT = 7.0D; - public static final String FIFTY_PERCENT_EXAMPLE = "50"; - public static final String MAX_BONUS_LEVEL_EXAMPLE = "100"; - public static final String ODDS_PERCENTAGE_EXAMPLE = "25%"; public static final double CHANCE_AT_MAX_SKILL_DEFAULT = 100.0D; @Setting(value = "Damage-Threshold", comment = "Rolling will reduce up to this much damage." + @@ -24,24 +19,10 @@ public class ConfigRoll { return damageTheshold; } - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME, comment = "Max bonus level is the level a player needs to reach in this skill to receive maximum benefits, such as better RNG odds or otherwise." + - "\nSkills dynamically adjust their rewards to match the max bonus level, you can think of it as a curve that calculates what bonuses " + - "\n a player should have based on how far they are from the max bonus level value, and the other parameters used for the scaling of the sub-skill.") - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - - @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = "The maximum success chance for this Sub-Skill." + - "\nA value of 100.0 would be equivalent to 100% chance of success." + - "\nPlayers only have Max-Success-Chance when their skill level has reached the maximum bonus level." + - "\nMax skill chance is dynamically adjusted based on the players level difference from the \"Max-Bonus-Level\", you can think of it as a curve where reaching \"Max-Bonus-Level\" is the peak." + - "\nAs an example, imagine \""+ConfigConstants.MAX_CHANCE_FIELD_NAME+"\" was set to " + FIFTY_PERCENT_EXAMPLE + " and the \""+ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME+"\" was " + MAX_BONUS_LEVEL_EXAMPLE + "," + - "\n and the player was level " + FIFTY_PERCENT_EXAMPLE + " for this skill, that would give the player " + ODDS_PERCENTAGE_EXAMPLE + " odds to succeed with this skill.") - private double chanceAtMaxSkill = CHANCE_AT_MAX_SKILL_DEFAULT; - - public MaxBonusLevel getMaxBonusLevel() { - return maxBonusLevel; - } + @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = ConfigConstants.MAX_CHANCE_FIELD_DESCRIPTION) + private double maxChance = 100.0D; public double getChanceAtMaxSkill() { - return chanceAtMaxSkill; + return maxChance; } } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/archery/ConfigArcheryArrowRetrieval.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/archery/ConfigArcheryArrowRetrieval.java index cf0749122..7556df7ef 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/archery/ConfigArcheryArrowRetrieval.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/archery/ConfigArcheryArrowRetrieval.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.archery; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -12,14 +10,7 @@ public class ConfigArcheryArrowRetrieval { @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = ConfigConstants.MAX_CHANCE_FIELD_DESCRIPTION) private double maxChance = 100.0D; - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME) - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - public double getMaxChance() { return maxChance; } - - public MaxBonusLevel getMaxBonusLevel() { - return maxBonusLevel; - } } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/archery/ConfigArcheryDaze.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/archery/ConfigArcheryDaze.java index 844c78301..b9845c86b 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/archery/ConfigArcheryDaze.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/archery/ConfigArcheryDaze.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.archery; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -15,9 +13,6 @@ public class ConfigArcheryDaze { + "\nDefault value: "+DAZE_MAX_CHANCE_DEFAULT) private double maxChance = DAZE_MAX_CHANCE_DEFAULT; - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME) - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - @Setting(value = "Bonus-Damage", comment = "How much bonus damage is applied when daze is applied to a target." + "\nDefault value: "+DAZE_BONUS_DMG_DEFAULT) private double bonusDamage = DAZE_BONUS_DMG_DEFAULT; @@ -26,10 +21,6 @@ public class ConfigArcheryDaze { return maxChance; } - public MaxBonusLevel getMaxBonusLevel() { - return maxBonusLevel; - } - public double getDazeBonusDamage() { return bonusDamage; } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/axes/ConfigAxesCriticalStrikes.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/axes/ConfigAxesCriticalStrikes.java index 9c1d267a7..f72729318 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/axes/ConfigAxesCriticalStrikes.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/axes/ConfigAxesCriticalStrikes.java @@ -2,7 +2,6 @@ package com.gmail.nossr50.config.skills.axes; import com.gmail.nossr50.config.ConfigConstants; import com.gmail.nossr50.datatypes.skills.properties.AbstractDamageProperty; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; import com.gmail.nossr50.datatypes.skills.properties.DamageProperty; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -12,18 +11,14 @@ public class ConfigAxesCriticalStrikes { private static final double MAX_ACTIVATION_CHANCE_DEFAULT = 37.50D; - @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = "This is max percentage chance that is used to determine whether or not the ability is successful." + - "\nA value of 50.0 would mean at most the ability can only have a 50% chance to work at max skill level.") - private double maxActivationChance = MAX_ACTIVATION_CHANCE_DEFAULT; - - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME, comment = ConfigConstants.MAX_BONUS_LEVEL_DESCRIPTION) - private AbstractMaxBonusLevel maximumProgressionLevel = new AbstractMaxBonusLevel(100); + @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = ConfigConstants.MAX_CHANCE_FIELD_DESCRIPTION) + private double maxChance = MAX_ACTIVATION_CHANCE_DEFAULT; @Setting(value = "Damage-Modifiers", comment = "Damage dealt is multiplied by these values when this skill is successfully activated.") private DamageProperty damageProperty = new AbstractDamageProperty(1.5, 2.0); public double getMaxActivationChance() { - return maxActivationChance; + return maxChance; } public DamageProperty getDamageProperty() { diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismDoubleDrops.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismDoubleDrops.java index f286d0f08..078877171 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismDoubleDrops.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismDoubleDrops.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.herbalism; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -11,8 +9,4 @@ public class ConfigHerbalismDoubleDrops { @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = ConfigConstants.MAX_CHANCE_FIELD_DESCRIPTION) private double maxChance = 100.0; - - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME) - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismGreenThumb.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismGreenThumb.java index 5bd7f9bec..8dfa44de9 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismGreenThumb.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismGreenThumb.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.herbalism; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -11,8 +9,4 @@ public class ConfigHerbalismGreenThumb { @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = ConfigConstants.MAX_CHANCE_FIELD_DESCRIPTION) private double maxChance = 100.0; - - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME) - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismHylianLuck.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismHylianLuck.java index 46291e22f..af546136a 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismHylianLuck.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismHylianLuck.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.herbalism; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -11,8 +9,4 @@ public class ConfigHerbalismHylianLuck { @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = ConfigConstants.MAX_CHANCE_FIELD_DESCRIPTION) private double maxChance = 10.0; - - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME) - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismShroomThumb.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismShroomThumb.java index c7b37be90..36fe0d105 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismShroomThumb.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/herbalism/ConfigHerbalismShroomThumb.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.herbalism; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -12,7 +10,4 @@ public class ConfigHerbalismShroomThumb { @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = ConfigConstants.MAX_CHANCE_FIELD_DESCRIPTION) private double maxChance = 50.0; - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME) - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/mining/ConfigMiningDoubleDrops.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/mining/ConfigMiningDoubleDrops.java index 66be8fa93..cec0ddd12 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/mining/ConfigMiningDoubleDrops.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/mining/ConfigMiningDoubleDrops.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.mining; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -11,9 +9,6 @@ public class ConfigMiningDoubleDrops { @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = ConfigConstants.MAX_CHANCE_FIELD_DESCRIPTION) private double maxChance = 100.0; - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME) - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - @Setting(value = "Silk-Touch-Double-Drops", comment = "Allow silk touch to benefit from double drops.") private boolean allowSilkTouchDoubleDrops = true; diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/ranks/SkillRankProperty.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/ranks/SkillRankProperty.java index 819750803..96220ee83 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/ranks/SkillRankProperty.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/ranks/SkillRankProperty.java @@ -2,13 +2,14 @@ package com.gmail.nossr50.config.skills.ranks; import com.gmail.nossr50.api.exceptions.MissingSkillPropertyDefinition; import com.gmail.nossr50.datatypes.skills.properties.SkillProperty; +import com.gmail.nossr50.mcMMO; +import org.apache.logging.log4j.Level; import java.util.HashMap; public class SkillRankProperty implements SkillProperty { - private HashMap standardRanks; - private HashMap retroRanks; + private HashMap ranks; public SkillRankProperty(Integer... rankDefinitions) { initRankMaps(); @@ -16,88 +17,59 @@ public class SkillRankProperty implements SkillProperty { for(int x = 0; x < rankDefinitions.length; x++) { int curRank = x+1; - addStandardAndRetroRank(curRank, rankDefinitions[x]); + addRank(curRank, rankDefinitions[x]); } } - public SkillRankProperty(HashMap standardRanks, HashMap retroRanks) { - this.standardRanks = standardRanks; - this.retroRanks = retroRanks; + public SkillRankProperty(HashMap ranks) { + this.ranks = ranks; } /** - * Convenience method to add Standard and Retro at the same time for default initialization of values - * Only requires standard values be passed + * Fill in the rank map and mutate it by the cosmetic modifier * @param curRank the rank to fill in the value for - * @param standardValue the value of the rank in Standard + * @param rankValue the value of the rank in Standard */ - private void addStandardAndRetroRank(int curRank, int standardValue) { - //Retro will be equal to standards rank requirement multiplied by 10 unless that value is 1, in which case it will also be 1 - int retroValue = standardValue == 1 ? 1 : standardValue * 10; - + private void addRank(int curRank, int rankValue) { //Avoid negative numbers - if(standardValue < 0) { - standardRanks.put(curRank, 0); - retroRanks.put(curRank, 0); - } else { - standardRanks.put(curRank, standardValue); - retroRanks.put(curRank, retroValue); - } - } + rankValue = Math.max(0, rankValue); - /** - * Convenience method to add Standard and Retro at the same time - * @param curRank the rank to fill in the value for - * @param standardValue the value of the rank in Standard - * @param retroValue the value of the rank in Retro - */ - private void addStandardAndRetroRank(int curRank, int standardValue, int retroValue) { - //Avoid negative numbers - standardValue = Math.max(0, standardValue); - retroValue = Math.max(0, retroValue); - - standardRanks.put(curRank, standardValue); - retroRanks.put(curRank, retroValue); + ranks.put(curRank, rankValue); } private void initRankMaps() { - standardRanks = new HashMap<>(); - retroRanks = new HashMap<>(); + ranks = new HashMap<>(); } /** * Gets the unlock level for this skill as defined by this SkillRankProperty - * @param retroMode whether or not mcMMO is using RetroMode, true for if it is * @param targetRank the rank to get the unlock level for * @return the unlock level for target rank */ - public int getUnlockLevel(boolean retroMode, int targetRank) throws MissingSkillPropertyDefinition { - if(retroMode) { - if(retroRanks.get(targetRank) == null) { - throw new MissingSkillPropertyDefinition("No definition found for rank:"+targetRank+" using Retro scaling"); - } - return retroRanks.get(targetRank); - } else { - if(standardRanks.get(targetRank) == null) { - throw new MissingSkillPropertyDefinition("No definition found for rank:"+targetRank+" using Standard scaling"); - } - return standardRanks.get(targetRank); + public int getUnlockLevel(mcMMO pluginRef, int targetRank) throws MissingSkillPropertyDefinition { + if(ranks.get(targetRank) == null) { + throw new MissingSkillPropertyDefinition("No definition found for rank:"+targetRank+" using Standard scaling"); } + + //Avoid zero or lower + int cosmeticModifier = Math.max(1, pluginRef.getPlayerLevelingSettings().getCosmeticLevelScaleModifier()); + + if(cosmeticModifier == 1) + return ranks.get(targetRank); + + //Mutate rank + int rankValue = ranks.get(targetRank); + rankValue = rankValue / cosmeticModifier; + + return rankValue; } - public void setStandardRanks(HashMap standardRanks) { - this.standardRanks = standardRanks; + public void setRanks(HashMap ranks) { + this.ranks = ranks; } - public void setRetroRanks(HashMap retroRanks) { - this.retroRanks = retroRanks; + public HashMap getRanks() { + return ranks; } - public HashMap getStandardRanks() { - return standardRanks; - } - - public HashMap getRetroRanks() { - return retroRanks; - } } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/repair/ConfigRepairSuperRepair.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/repair/ConfigRepairSuperRepair.java index cabddd2c0..ec6f94de0 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/repair/ConfigRepairSuperRepair.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/repair/ConfigRepairSuperRepair.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.repair; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -14,17 +12,7 @@ public class ConfigRepairSuperRepair { private static final String ODDS_PERCENTAGE_EXAMPLE = "25%"; private static final double CHANCE_AT_MAX_SKILL_DEFAULT = 100.0D; - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME, comment = "Max bonus level is the level a player needs to reach in this skill to receive maximum benefits, such as better RNG odds or otherwise." + - "\nSkills dynamically adjust their rewards to match the max bonus level, you can think of it as a curve that calculates what bonuses " + - "\n a player should have based on how far they are from the max bonus level value, and the other parameters used for the scaling of the sub-skill.") - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - - @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = "The maximum success chance for this Sub-Skill." + - "\nA value of 100.0 would be equivalent to 100% chance of success." + - "\nPlayers only have Max-Success-Chance when their skill level has reached the maximum bonus level." + - "\nMax skill chance is dynamically adjusted based on the players level difference from the \"Max-Bonus-Level\", you can think of it as a curve where reaching \"Max-Bonus-Level\" is the peak." + - "\nAs an example, imagine \""+ConfigConstants.MAX_CHANCE_FIELD_NAME+"\" was set to " + FIFTY_PERCENT_EXAMPLE + " and the \""+ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME+"\" was " + MAX_BONUS_LEVEL_EXAMPLE + "," + - "\n and the player was level " + FIFTY_PERCENT_EXAMPLE + " for this skill, that would give the player " + ODDS_PERCENTAGE_EXAMPLE + " odds to succeed with this skill.") - private double chanceAtMaxSkill = CHANCE_AT_MAX_SKILL_DEFAULT; + @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = ConfigConstants.MAX_CHANCE_FIELD_DESCRIPTION) + private double maxChance = 100.0; } \ No newline at end of file diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/repair/repairmastery/ConfigRepairRepairMastery.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/repair/repairmastery/ConfigRepairRepairMastery.java index 3f019124f..aab83a678 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/repair/repairmastery/ConfigRepairRepairMastery.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/repair/repairmastery/ConfigRepairRepairMastery.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.repair.repairmastery; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -12,14 +10,7 @@ public class ConfigRepairRepairMastery { @Setting(value = ConfigConstants.MAX_BONUS_PERCENTAGE_FIELD_NAME) private double maxBonusPercentage = 200.0D; - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME, comment = ConfigConstants.MAX_BONUS_LEVEL_DESCRIPTION) - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - public double getMaxBonusPercentage() { return maxBonusPercentage; } - - public MaxBonusLevel getMaxBonusLevel() { - return maxBonusLevel; - } } \ No newline at end of file diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/smelting/ConfigSmelting.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/smelting/ConfigSmelting.java index 8d64d2448..abc06412e 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/smelting/ConfigSmelting.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/smelting/ConfigSmelting.java @@ -1,7 +1,6 @@ package com.gmail.nossr50.config.skills.smelting; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -13,7 +12,7 @@ public class ConfigSmelting { @Setting(value = ConfigConstants.SUB_SKILL_NODE) private ConfigSmeltingSubSkills subskills = new ConfigSmeltingSubSkills(); - public ConfigSmeltingSubSkills getSubskills() { + public ConfigSmeltingSubSkills getSubSkills() { return subskills; } @@ -26,10 +25,6 @@ public class ConfigSmelting { return subskills.getMaxChance(); } - public MaxBonusLevel getMaxBonusLevel() { - return subskills.getMaxBonusLevel(); - } - public HashMap getXpMultiplierTable() { return subskills.getXpMultiplierTable(); } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/smelting/ConfigSmeltingSecondSmelt.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/smelting/ConfigSmeltingSecondSmelt.java index a673fbb44..8bf52605a 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/smelting/ConfigSmeltingSecondSmelt.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/smelting/ConfigSmeltingSecondSmelt.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.smelting; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -28,17 +26,10 @@ public class ConfigSmeltingSecondSmelt { @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = ConfigConstants.MAX_CHANCE_FIELD_DESCRIPTION) private double maxChance = 50.0; - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME, comment = ConfigConstants.MAX_BONUS_LEVEL_DESCRIPTION) - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - public double getMaxChance() { return maxChance; } - public MaxBonusLevel getMaxBonusLevel() { - return maxBonusLevel; - } - @Setting(value = "XP-Multiplier-Per-Rank") private HashMap xpMultiplierTable = XP_MULT_MAP_DEFAULT; diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/smelting/ConfigSmeltingSubSkills.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/smelting/ConfigSmeltingSubSkills.java index 26e25a850..4caa53c32 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/smelting/ConfigSmeltingSubSkills.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/smelting/ConfigSmeltingSubSkills.java @@ -1,6 +1,5 @@ package com.gmail.nossr50.config.skills.smelting; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -20,10 +19,6 @@ public class ConfigSmeltingSubSkills { return smeltingSecondSmelt.getMaxChance(); } - public MaxBonusLevel getMaxBonusLevel() { - return smeltingSecondSmelt.getMaxBonusLevel(); - } - public HashMap getXpMultiplierTable() { return smeltingSecondSmelt.getXpMultiplierTable(); } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwords.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwords.java index 498097fb5..85e032dfb 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwords.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwords.java @@ -1,7 +1,6 @@ package com.gmail.nossr50.config.skills.swords; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -31,10 +30,6 @@ public class ConfigSwords { return subSkills.getCounterAttackMaxChance(); } - public MaxBonusLevel getCounterAttackMaxBonusLevel() { - return subSkills.getCounterAttackMaxBonusLevel(); - } - public double getCounterAttackDamageModifier() { return subSkills.getCounterAttackDamageModifier(); } @@ -47,10 +42,6 @@ public class ConfigSwords { return subSkills.getRuptureMaxChance(); } - public MaxBonusLevel getRuptureMaxBonusLevel() { - return subSkills.getRuptureMaxBonusLevel(); - } - public double getRuptureDamagePlayer() { return subSkills.getRuptureDamagePlayer(); } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwordsCounterAttack.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwordsCounterAttack.java index c67c873bb..b047173ec 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwordsCounterAttack.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwordsCounterAttack.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.swords; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -14,9 +12,6 @@ public class ConfigSwordsCounterAttack { @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = ConfigConstants.MAX_CHANCE_FIELD_DESCRIPTION) private double maxChance = 30.0; - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME, comment = ConfigConstants.MAX_BONUS_LEVEL_DESCRIPTION) - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - @Setting(value = "Damage-Modifier", comment = "The damage returned from Counter-Attack will be equal to the damage dealt divided by this number." + "\nDefault value: "+DAMAGE_MODIFIER_DEFAULT) private double damageModifier = DAMAGE_MODIFIER_DEFAULT; @@ -25,10 +20,6 @@ public class ConfigSwordsCounterAttack { return maxChance; } - public MaxBonusLevel getCounterAttackMaxBonusLevel() { - return maxBonusLevel; - } - public double getCounterAttackDamageModifier() { return damageModifier; } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwordsRupture.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwordsRupture.java index 027470292..3323488f4 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwordsRupture.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwordsRupture.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.swords; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -17,9 +15,6 @@ public class ConfigSwordsRupture { @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = ConfigConstants.MAX_CHANCE_FIELD_DESCRIPTION) private double maxChance = MAX_CHANCE_DEFAULT; - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME) - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - @Setting(value = "Damage-Per-Tick-PVP") private double damagePlayer = DAMAGE_PVP_DEFAULT; @@ -35,10 +30,6 @@ public class ConfigSwordsRupture { return maxChance; } - public MaxBonusLevel getRuptureMaxBonusLevel() { - return maxBonusLevel; - } - public double getRuptureDamagePlayer() { return damagePlayer; } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwordsSubSkills.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwordsSubSkills.java index 97290467e..dd9689dc4 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwordsSubSkills.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/swords/ConfigSwordsSubSkills.java @@ -1,6 +1,5 @@ package com.gmail.nossr50.config.skills.swords; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -35,10 +34,6 @@ public class ConfigSwordsSubSkills { return counterAttack.getCounterAttackMaxChance(); } - public MaxBonusLevel getCounterAttackMaxBonusLevel() { - return counterAttack.getCounterAttackMaxBonusLevel(); - } - public double getCounterAttackDamageModifier() { return counterAttack.getCounterAttackDamageModifier(); } @@ -51,10 +46,6 @@ public class ConfigSwordsSubSkills { return rupture.getRuptureMaxChance(); } - public MaxBonusLevel getRuptureMaxBonusLevel() { - return rupture.getRuptureMaxBonusLevel(); - } - public double getRuptureDamagePlayer() { return rupture.getRuptureDamagePlayer(); } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/taming/ConfigTamingGore.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/taming/ConfigTamingGore.java index e261e1d4e..67e5b0552 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/taming/ConfigTamingGore.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/taming/ConfigTamingGore.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.taming; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -15,9 +13,6 @@ public class ConfigTamingGore { @Setting(value = "Gore-Bleed-Tick-Length", comment = "How many times to apply the bleed DOT from gore before it wears off.") private int goreBleedTicks = 2; - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME, comment = ConfigConstants.MAX_BONUS_LEVEL_DESCRIPTION) - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - @Setting(value = "Gore-Damage-Modifier") private double goreMofifier = 2.0; @@ -25,10 +20,6 @@ public class ConfigTamingGore { return maxChance; } - public MaxBonusLevel getMaxBonusLevel() { - return maxBonusLevel; - } - public double getGoreMofifier() { return goreMofifier; } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/woodcutting/ConfigWoodcuttingHarvest.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/woodcutting/ConfigWoodcuttingHarvest.java index 57e1796d7..71386205e 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/woodcutting/ConfigWoodcuttingHarvest.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/skills/woodcutting/ConfigWoodcuttingHarvest.java @@ -1,8 +1,6 @@ package com.gmail.nossr50.config.skills.woodcutting; import com.gmail.nossr50.config.ConfigConstants; -import com.gmail.nossr50.datatypes.skills.properties.AbstractMaxBonusLevel; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -14,15 +12,8 @@ public class ConfigWoodcuttingHarvest { @Setting(value = ConfigConstants.MAX_CHANCE_FIELD_NAME, comment = ConfigConstants.MAX_CHANCE_FIELD_DESCRIPTION) private double maxChance = MAX_CHANCE_DEFAULT; - @Setting(value = ConfigConstants.MAX_BONUS_LEVEL_FIELD_NAME) - private MaxBonusLevel maxBonusLevel = new AbstractMaxBonusLevel(100); - public double getMaxChance() { return maxChance; } - public MaxBonusLevel getMaxBonusLevel() { - return maxBonusLevel; - } - } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/core/SkillPropertiesManager.java b/mcmmo-core/src/main/java/com/gmail/nossr50/core/SkillPropertiesManager.java index 7e1df84c9..3d1a1fd75 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/core/SkillPropertiesManager.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/core/SkillPropertiesManager.java @@ -3,7 +3,6 @@ package com.gmail.nossr50.core; import com.gmail.nossr50.config.ConfigConstants; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.datatypes.skills.SubSkillType; -import com.gmail.nossr50.datatypes.skills.properties.MaxBonusLevel; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.random.InvalidStaticChance; import com.google.common.reflect.TypeToken; @@ -31,8 +30,8 @@ public class SkillPropertiesManager { staticActivationChanceMap = new HashMap<>(); } - public void registerMaxBonusLevel(SubSkillType subSkillType, MaxBonusLevel maxBonusLevel) { - maxBonusLevelMap.put(subSkillType, pluginRef.isRetroModeEnabled() ? maxBonusLevel.getRetroScaleValue() : maxBonusLevel.getStandardScaleValue()); + public void registerMaxBonusLevel(SubSkillType subSkillType, int maxBonusLevel) { + maxBonusLevelMap.put(subSkillType, maxBonusLevel); } public void registerMaxBonus(SubSkillType subSkillType, double maxBonus) { @@ -133,13 +132,9 @@ public class SkillPropertiesManager { } private void attemptRegisterMaxBonusLevel(SubSkillType subSkillType, CommentedConfigurationNode childNode) { - try { - pluginRef.getLogger().info("Registering MaxBonusLevel for "+subSkillType.toString()); - MaxBonusLevel maxBonusLevel = childNode.getValue(TypeToken.of(MaxBonusLevel.class)); - registerMaxBonusLevel(subSkillType, maxBonusLevel); - } catch (ObjectMappingException e) { - //This time a silent exception is fine - } + pluginRef.getLogger().info("Registering MaxBonusLevel for "+subSkillType.toString()); + int maxBonusLevel = childNode.getInt(); + registerMaxBonusLevel(subSkillType, maxBonusLevel); } private void attemptRegisterMaxChance(SubSkillType subSkillType, CommentedConfigurationNode childNode) { diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/AbstractMaxBonusLevel.java b/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/AbstractMaxBonusLevel.java deleted file mode 100644 index 0de9d10ca..000000000 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/AbstractMaxBonusLevel.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.gmail.nossr50.datatypes.skills.properties; - -public class AbstractMaxBonusLevel implements MaxBonusLevel { - - private int retro; - private int standard; - - public AbstractMaxBonusLevel(int standard, int retro) { - this.standard = standard; - this.retro = retro; - } - - public AbstractMaxBonusLevel(int standard) { - this.standard = standard; - this.retro = standard * 10; - } - - @Override - public int getRetroScaleValue() { - return retro; - } - - @Override - public int getStandardScaleValue() { - return standard; - } - - public void setRetro(int retro) { - this.retro = retro; - } - - public void setStandard(int standard) { - this.standard = standard; - } -} diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/AbstractScalingProperty.java b/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/AbstractScalingProperty.java deleted file mode 100644 index be43b6dab..000000000 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/AbstractScalingProperty.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.gmail.nossr50.datatypes.skills.properties; - -import com.gmail.nossr50.datatypes.skills.SubSkillType; - -public abstract class AbstractScalingProperty implements ScalingProperty { - public SubSkillType subSkillType; - - public AbstractScalingProperty(SubSkillType subSkillType) { - super(); - this.subSkillType = subSkillType; - } - - @Override - public String toString() { - return "AbstractScalingProperty{" + - "subSkillType=" + subSkillType + - '}'; - } -} diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/MaxBonusLevel.java b/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/MaxBonusLevel.java deleted file mode 100644 index 990f5d12a..000000000 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/MaxBonusLevel.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.gmail.nossr50.datatypes.skills.properties; - -public interface MaxBonusLevel { - - /** - * Get the max level for this skill for Retro scaling - * @return Retro Mode max bonus level - */ - int getRetroScaleValue(); - - /** - * Get the max level for this skill for Standard scaling - * @return Standard Mode max bonus level - */ - int getStandardScaleValue(); - -} diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/ScalingProperty.java b/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/ScalingProperty.java deleted file mode 100644 index 88b2a09ed..000000000 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/properties/ScalingProperty.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.gmail.nossr50.datatypes.skills.properties; - -public interface ScalingProperty extends SkillProperty { - /** - * Returns the appropriate value for this scaling property whether it is Standard or Retro - * - * @return the value used in scaling calculations for this ScalingProperty - */ - double getValue(); -} diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java b/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java index a6b016f25..bf5802055 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java @@ -372,7 +372,7 @@ public class Roll extends AcrobaticsSubSkill { //Chance to roll at half max skill RandomChanceSkill rollHalfMaxSkill = new RandomChanceSkill(pluginRef, null, subSkillType); - int halfMaxSkillValue = pluginRef.isRetroModeEnabled() ? 500 : 50; + int halfMaxSkillValue = (int) pluginRef.getDynamicSettingsManager().getSkillMaxBonusLevel(subSkillType) / 2; rollHalfMaxSkill.setSkillLevel(halfMaxSkillValue); //Chance to graceful roll at full skill diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java b/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java index 5a78ebbd3..e6d317a82 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java @@ -236,10 +236,14 @@ public class mcMMO extends JavaPlugin { metrics = new Metrics(this); metrics.addCustomChart(new Metrics.SimplePie("version", () -> getDescription().getVersion())); - if (!configManager.getConfigLeveling().getConfigSectionLevelingGeneral().getConfigSectionLevelScaling().isRetroModeEnabled()) + int levelScaleModifier = configManager.getConfigLeveling().getConfigSectionLevelingGeneral().getConfigSectionLevelScaling().getCosmeticLevelScaleModifier(); + + if (levelScaleModifier == 10) metrics.addCustomChart(new Metrics.SimplePie("scaling", () -> "Standard")); - else + else if (levelScaleModifier == 1) metrics.addCustomChart(new Metrics.SimplePie("scaling", () -> "Retro")); + else + metrics.addCustomChart(new Metrics.SimplePie("scaling", () -> "Custom")); } } catch (Throwable t) { getLogger().severe("There was an error while enabling mcMMO!"); @@ -510,17 +514,6 @@ public class mcMMO extends JavaPlugin { return healthBarPluginEnabled; } - /** - * Checks if this plugin is using retro mode - * Retro mode is a 0-1000 skill system - * Standard mode is scaled for 1-100 - * - * @return true if retro mode is enabled - */ - public boolean isRetroModeEnabled() { - return configManager.isRetroMode(); - } - public ConfigManager getConfigManager() { return configManager; } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/util/experience/FormulaManager.java b/mcmmo-core/src/main/java/com/gmail/nossr50/util/experience/FormulaManager.java index 9611f1a7f..b90ce6de0 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/util/experience/FormulaManager.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/util/experience/FormulaManager.java @@ -9,10 +9,10 @@ import java.util.Map; public class FormulaManager { // Experience needed to reach a level, cached values for speed - private Map experienceNeededRetroLinear; - private Map experienceNeededStandardLinear; - private Map experienceNeededRetroExponential; - private Map experienceNeededStandardExponential; + private Map experienceNeededCosmeticLinear; + private Map experienceNeededLinear; + private Map experienceNeededCosmeticExponential; + private Map experienceNeededExponential; private FormulaType currentFormula; private final mcMMO pluginRef; @@ -27,10 +27,10 @@ public class FormulaManager { * Initialize maps used for XP to next level */ private void initExperienceNeededMaps() { - experienceNeededRetroLinear = new HashMap<>(); - experienceNeededRetroExponential = new HashMap<>(); - experienceNeededStandardLinear = new HashMap<>(); - experienceNeededStandardExponential = new HashMap<>(); + experienceNeededCosmeticLinear = new HashMap<>(); + experienceNeededCosmeticExponential = new HashMap<>(); + experienceNeededLinear = new HashMap<>(); + experienceNeededExponential = new HashMap<>(); } /** @@ -120,34 +120,21 @@ public class FormulaManager { return processXPToNextLevel(level, currentFormula); } - /** - * Gets the value of XP needed for the next level based on the level Scaling, the level, and the formula type - * @param level target level - * @param formulaType target formulaType - */ - private int processXPToNextLevel(int level, FormulaType formulaType) { - if(pluginRef.isRetroModeEnabled()) - { - return processXPRetroToNextLevel(level, formulaType); - } else { - return processStandardXPToNextLevel(level, formulaType); - } - } - /** * Calculate the XP needed for the next level for the linear formula for Standard scaling (1-100) * @param level target level * @return raw xp needed to reach the next level */ - private int processStandardXPToNextLevel(int level, FormulaType formulaType) { - Map experienceMapRef = formulaType == FormulaType.LINEAR ? experienceNeededStandardLinear : experienceNeededStandardExponential; + private int processXPToNextLevel(int level, FormulaType formulaType) { + Map experienceMapRef = formulaType == FormulaType.LINEAR ? experienceNeededLinear : experienceNeededExponential; if(!experienceMapRef.containsKey(level)) { + int cosmeticScaleMod = pluginRef.getPlayerLevelingSettings().getCosmeticLevelScaleModifier(); int experienceSum = 0; - int retroIndex = (level * 10) + 1; + int cosmeticIndex = (level * cosmeticScaleMod) + 1; //Sum the range of levels in Retro that this Standard level would represent - for(int x = retroIndex; x < (retroIndex + 10); x++) { + for(int x = cosmeticIndex; x < (cosmeticIndex + cosmeticScaleMod); x++) { //calculateXPNeeded doesn't cache results so we use that instead of invoking the Retro XP methods to avoid memory bloat experienceSum += calculateXPNeeded(x, formulaType); } @@ -166,7 +153,7 @@ public class FormulaManager { * @return raw xp needed to reach the next level based on formula type */ private int processXPRetroToNextLevel(int level, FormulaType formulaType) { - Map experienceMapRef = formulaType == FormulaType.LINEAR ? experienceNeededRetroLinear : experienceNeededRetroExponential; + Map experienceMapRef = formulaType == FormulaType.LINEAR ? experienceNeededCosmeticLinear : experienceNeededCosmeticExponential; if (!experienceMapRef.containsKey(level)) { int experience = calculateXPNeeded(level, formulaType); diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/util/skills/RankTools.java b/mcmmo-core/src/main/java/com/gmail/nossr50/util/skills/RankTools.java index 0f0a6135f..4c084daae 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/util/skills/RankTools.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/util/skills/RankTools.java @@ -392,7 +392,7 @@ public class RankTools { .getNode(subSkillType.getHoconFriendlyConfigName()) .getValue(TypeToken.of(SkillRankProperty.class)); - int unlockLevel = skillRankProperty.getUnlockLevel(pluginRef.isRetroModeEnabled(), rank); + int unlockLevel = skillRankProperty.getUnlockLevel(pluginRef, rank); return unlockLevel; } catch (ObjectMappingException | MissingSkillPropertyDefinition | NullPointerException e) { From e3edc9a18ff034707f8bfb4e4bdecd68c906af0b Mon Sep 17 00:00:00 2001 From: nossr50 Date: Mon, 27 Jan 2020 20:38:52 -0800 Subject: [PATCH 21/21] Fix faulty WG logic --- .../com/gmail/nossr50/config/General.java | 1 - .../main/java/com/gmail/nossr50/mcMMO.java | 9 ++- .../nossr50/worldguard/WorldGuardUtils.java | 58 +++++++++---------- 3 files changed, 35 insertions(+), 33 deletions(-) diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/config/General.java b/mcmmo-core/src/main/java/com/gmail/nossr50/config/General.java index 29cacef0d..98f46d596 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/config/General.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/config/General.java @@ -5,5 +5,4 @@ import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @ConfigSerializable public class General { - } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java b/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java index e6d317a82..ea496386d 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java @@ -86,6 +86,7 @@ public class mcMMO extends JavaPlugin { private ScoreboardManager scoreboardManager; private SoundManager soundManager; private HardcoreManager hardcoreManager; + private WorldGuardManager worldGuardManager; /* Not-Managers but my naming scheme sucks */ private DatabaseManagerFactory databaseManagerFactory; @@ -307,13 +308,15 @@ public class mcMMO extends JavaPlugin { @Override public void onLoad() { + worldGuardUtils = new WorldGuardUtils(this); //Init WGU + if(getServer().getPluginManager().getPlugin("WorldGuard") != null) { - worldGuardUtils = new WorldGuardUtils(); //Init WGU if(worldGuardUtils.isWorldGuardLoaded()) { //Register flags System.out.println("[mcMMO - Registering World Guard Flags...]"); - worldGuardUtils.getWorldGuardManager().registerFlags(); + worldGuardManager = new WorldGuardManager(); + worldGuardManager.registerFlags(); } } } @@ -749,7 +752,7 @@ public class mcMMO extends JavaPlugin { } public WorldGuardManager getWorldGuardManager() { - return worldGuardUtils.getWorldGuardManager(); + return worldGuardManager; } public PartyManager getPartyManager() { diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/worldguard/WorldGuardUtils.java b/mcmmo-core/src/main/java/com/gmail/nossr50/worldguard/WorldGuardUtils.java index 3c745dad6..3b1899b2e 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/worldguard/WorldGuardUtils.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/worldguard/WorldGuardUtils.java @@ -1,6 +1,9 @@ package com.gmail.nossr50.worldguard; +import com.gmail.nossr50.mcMMO; +import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldguard.protection.flags.registry.SimpleFlagRegistry; import org.bukkit.plugin.Plugin; import java.util.ArrayList; @@ -12,10 +15,7 @@ public class WorldGuardUtils { private boolean isLoaded = false; private boolean detectedIncompatibleWG = false; private static final ArrayList WGClassList; - private WorldGuardManager worldGuardManager; - - public WorldGuardUtils() { - } + protected final mcMMO pluginRef; static { /* @@ -41,6 +41,10 @@ public class WorldGuardUtils { WGClassList.add("com.sk89q.worldguard.protection.regions.RegionQuery"); } + public WorldGuardUtils(mcMMO pluginRef) { + this.pluginRef = pluginRef; + } + public boolean isWorldGuardLoaded() { if(detectedIncompatibleWG) @@ -68,7 +72,7 @@ public class WorldGuardUtils { if(plugin == null) { //WG is not present detectedIncompatibleWG = true; - System.out.println("[mcMMO WorldGuardUtils Debug] WorldGuard was not detected."); + pluginRef.getLogger().info("WorldGuard was not detected."); } else { //Check that its actually of class WorldGuardPlugin if(plugin instanceof WorldGuardPlugin) @@ -77,9 +81,6 @@ public class WorldGuardUtils { { worldGuardPluginRef = (WorldGuardPlugin) plugin; isLoaded = true; - - //Init WG Manager - worldGuardManager = new WorldGuardManager(); } } else { //Plugin is not of the expected type @@ -87,6 +88,7 @@ public class WorldGuardUtils { } } + return worldGuardPluginRef; } @@ -98,7 +100,10 @@ public class WorldGuardUtils { */ private boolean isCompatibleVersion(Plugin plugin) { //Check that the version of WG is at least version 7.xx -// boolean allClassesFound = true; + boolean allClassesFound = true; + if (detectedIncompatibleWG) { + return false; + } if (!plugin.getDescription().getVersion().startsWith("7")) { markWGIncompatible(); @@ -107,10 +112,9 @@ public class WorldGuardUtils { for(String classString : WGClassList) { try { Class checkForClass = Class.forName(classString); - detectedIncompatibleWG = false; //In case this was set to true previously } catch (ClassNotFoundException | NoClassDefFoundError e) { -// allClassesFound = false; - System.out.println("[mcMMO WorldGuardUtils Debug] Missing WorldGuard class - "+classString); + allClassesFound = false; + pluginRef.getLogger().severe("Missing WorldGuard class - "+classString); markWGIncompatible(); } } @@ -118,17 +122,17 @@ public class WorldGuardUtils { /* * If WG appears to have all of its classes we can then check to see if its been initialized properly */ -// try { -// if(allClassesFound) { -// if(!((SimpleFlagRegistry) WorldGuard.getInstance().getFlagRegistry()).isInitialized()) { -// markWGIncompatible(); -// System.out.println("[mcMMO WorldGuardUtils Debug] WG did not initialize properly, this can cause errors with mcMMO so mcMMO is disabling certain features."); -// } -// } -// } catch (Exception e) { -// markWGIncompatible(); -// e.printStackTrace(); -// } + try { + if(allClassesFound) { + if(!((SimpleFlagRegistry) WorldGuard.getInstance().getFlagRegistry()).isInitialized()) { + markWGIncompatible(); + pluginRef.getLogger().severe("WG did not initialize properly, this can cause errors with mcMMO so mcMMO is disabling certain features."); + } + } + } catch (Exception e) { + markWGIncompatible(); + e.printStackTrace(); + } } return !detectedIncompatibleWG; @@ -138,14 +142,10 @@ public class WorldGuardUtils { * Mark WG as being incompatible to avoid unnecessary operations */ private void markWGIncompatible() { - System.out.println("[mcMMO WorldGuardUtils Debug] You are using a version of WG that is not compatible with mcMMO, " + + pluginRef.getLogger().severe("You are using a version of WG that is not compatible with mcMMO, " + "WG features for mcMMO will be disabled. mcMMO requires you to be using a new version of WG7 " + "in order for it to use WG features. Not all versions of WG7 are compatible."); - System.out.println("[mcMMO WorldGuardUtils Debug] mcMMO will continue to function normally, but if you wish to use WG support you must use a compatible version."); + pluginRef.getLogger().severe("mcMMO will continue to function normally, but if you wish to use WG support you must use a compatible version."); detectedIncompatibleWG = true; } - - public WorldGuardManager getWorldGuardManager() { - return worldGuardManager; - } }