mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-25 06:36:45 +01:00
Merge branch 'master' of github.com:mcMMO-Dev/mcMMO into configurable
This commit is contained in:
commit
b069480244
125
Changelog.txt
125
Changelog.txt
@ -194,6 +194,131 @@ Version 2.2.0
|
||||
Added API method to grab the level cap of a skill by its PrimarySkillType ENUM definition
|
||||
Added API method to check if a skill was being level capped
|
||||
Added 'UndefinedSkillBehaviour' for trying to use a method that has no behaviour defined for the provided skill
|
||||
Version 2.1.91
|
||||
mcMMO is now more compatible with plugins that spawn arrows in unexpected ways, this fixes some NPE in mcMMO when using certain plugins
|
||||
|
||||
Version 2.1.90
|
||||
Salvaged items now travel much slower towards the player
|
||||
Books from salvage will now travel towards the player
|
||||
Salvaged items travelling towards you will now have their speed adjusted based on distance
|
||||
|
||||
Common Materials found when mining have had their XP gains reduced and rare materials have had their XP gains increased
|
||||
Diamond Ore has had its XP increased from 750 to 2400
|
||||
Gold Ore has had its XP increased from 350 to 1300
|
||||
Iron Ore has had its XP increased from 250 to 900
|
||||
Lapis Ore has had its XP increased from 400 to 800
|
||||
Nether Quartz Ore has had its XP increased from 100 to 300
|
||||
Redstone Ore has had its XP increased from 150 to 600
|
||||
Blue_Ice has had its default XP value reduced to 15
|
||||
Packed_Ice has had its default XP value reduced to 15
|
||||
Netherrack has had its default XP value reduced to 15
|
||||
Coal Ore has had its XP increased from 100 to 400
|
||||
Stone has had its XP decreased from 30 to 15
|
||||
Granite has had its XP decreased from 30 to 15
|
||||
Andesite has had its XP decreased from 30 to 15
|
||||
Diorite has had its XP decreased from 30 to 15
|
||||
End Stone has had its XP decreased from 30 to 15
|
||||
Glow Stone has had its XP decreased from 30 to 15
|
||||
End Bricks has had its XP decreased from 200 to 50
|
||||
|
||||
|
||||
NOTES:
|
||||
You can either apply the default XP changes manually to experience.yml or delete it to generate a new file
|
||||
|
||||
Sorry about salvaged items traveling too quickly, in testing on my LAN server with ideal conditions they always entered my inventory and never shot past me so the high speed of the items was not an apparent issue.
|
||||
I've tested the new changes to how they travel towards you pretty thoroughly, they never go fast enough to go past you and they adjust their speed based on distance to you with some speed limitations.
|
||||
In testing the new tweaks work well whether the salvage anvil is above, below, or at the same height as you.
|
||||
|
||||
I'll be tweaking XP values across all skills more carefully in the upcoming content patch due after 2.2. Some tweaks to XP gains will be applied for 2.2.
|
||||
|
||||
Version 2.1.89
|
||||
Many changes were made to this version that affect default values in the config, read the notes carefully if you wish to apply these changes. They are optional.
|
||||
mcMMO is compatible with the new 1.14.3, in addition to this it is still compatible with 1.14.2, 1.14.1, 1.14, and 1.13.2. This did not require any changes to be made to mcMMO, but I thought I'd add this to the notes for those wondering.
|
||||
|
||||
RetroMode is the default level scaling mode again
|
||||
The default level for players has been changed back to 0 from 1 (you can change it back to 1 by editing 'Skills.General.StartingLevel' in advanced.yml) if you wish to apply this change read the notes
|
||||
Super Abilities now scale in length up to level 100/1000 instead of 50/500 by default (you can edit this in advanced.yml under 'Skills.General.Ability.Length.xxx')
|
||||
Early Game Boost now only applies when leveling from level 0 to level 1
|
||||
Removed the config setting 'MaxLevelMultiplier' from experience.yml as it is no longer used.
|
||||
When finding a treasure via Excavation players have a 1-8% chance to have a small amount vanilla experience orbs to be found alongside the treasure, the chance and number of orbs are based on the players Archaeology rank
|
||||
Tweaked the locale string 'Excavation.SubSkill.Archaeology.Description'
|
||||
Added locale string 'Excavation.SubSkill.Archaeology.Stat'
|
||||
Added locale string 'Excavation.SubSkill.Archaeology.Stat.Extra'
|
||||
Tweaked the locale string 'Fishing.SubSkill.MasterAngler.Stat'
|
||||
The interval at which you can gain Acrobatics XP from fall damage has been reduced to 3 seconds from 10 seconds, this will be configurable in 2.2.
|
||||
|
||||
When using WorldGuard (WG) with mcMMO, mcMMO now examines WG more carefully to determine if it is a compatible version or not, see the notes. Keep in mind WG is optional and not needed to run mcMMO.
|
||||
Fixed a bug that could result in Tree Feller failing to remove parts of a tree in snowy biomes. (This fix won't apply retroactively to old trees, see the notes)
|
||||
Updated Japanese locale (thanks snake)
|
||||
Tree Feller and other Super Abilities will damage tools with the Enchantment named 'Durability/Unbreaking' again, this does not apply to the NBT tag named Ubreakable (Unbreakable NBT tag is safe from damage however, try not to confuse them as they share similar names)
|
||||
Added new setting 'ExploitFix.TreeFellerReducedXP' to experience.yml
|
||||
Tree Feller will no longer give full XP for each block destroyed and instead give diminishing returns on XP for each block removed. You can turn this off by setting 'ExploitFix.TreeFellerReducedXP' in experience.yml to false
|
||||
Many skills which used to unlock at level 5/50 now unlock at level 1 instead
|
||||
Arrow Retrieval now unlocks at level 1 in both Standard and RetroMode
|
||||
Skill Shot now unlocks at level 1 in both Standard and RetroMode
|
||||
Dodge now unlocks at level 1 in both Standard and RetroMode
|
||||
Critical Strikes now unlocks at level 1 in both Standard and RetroMode
|
||||
Armor Impact now unlocks at level 1 in both Standard and RetroMode
|
||||
Beast Lore now unlocks at level 1 in both Standard and RetroMode
|
||||
Call Of The Wild now unlocks at level 1 in both Standard and RetroMode
|
||||
Scrap Collector now unlocks at level 1 in both Standard and RetroMode
|
||||
Treasure Hunter now unlocks at level 1 in both Standard and RetroMode
|
||||
Rupture now unlocks at level 1 in both Standard and RetroMode
|
||||
Iron Arm Style now unlocks at level 1 in both Standard and RetroMode
|
||||
Harvest Lumber now unlocks at level 1 in both Standard and RetroMode
|
||||
Archaeology now unlocks at level 1 in both Standard and RetroMode
|
||||
Repair Mastery now unlocks at level 1 in both Standard and RetroMode
|
||||
Double Drops (Herbalism and Mining) now have ranks and unlock at level 1 in both Standard and RetroMode
|
||||
Concoctions rank 2 now unlocks at Level 1 for both Standard and RetroMode
|
||||
Serrated Strikes now unlocks at levels 5/50 instead of 10/100
|
||||
Berserk now unlocks at levels 5/50 instead of 10/100
|
||||
|
||||
NOTES:
|
||||
I'm looking into adding 1.12.2 support sooner than expected.
|
||||
|
||||
Editing your config files is not required for this patch (and never will be), however I would highly recommend it. Read the notes below this line carefully.
|
||||
If you want to update to this patch easily and you don't mind default config values, delete skillranks.yml, advanced.yml, and experience.yml before starting your server with 2.1.89 of mcMMO applied.
|
||||
Many skills now unlock at level 1 and the default starting level is back to 0. It is recommended you change this number from 1 to 0 manually by editing 'Skills.General.StartingLevel' in advanced.yml or deleting advanced.yml and generating a new file when 2.1.89 starts.
|
||||
It is recommended you make the manual edits to skillranks.yml to apply this change or delete skillranks.yml and a new one will be generated once you start 2.1.89.
|
||||
|
||||
Early Game Boost was used to help players get to level 5 quickly by boosting their XP until they got there, this caused some confusion as they appeared to be 'learning a skill' for multiple levels, on RetroMode this lasted until level 50.
|
||||
I have changed Early Game Boost to only last from level 0-1 on both RetroMode and Standard, and now important skills are unlocked at level 1.
|
||||
I was going to wait until 2.2 was done to deploy this change, but 2.2 is some time away and the previous system was causing some confusion.
|
||||
Early Game Boost gives players extra XP for skills that are level 0, you can turn this system off by setting 'EarlyGameBoost.Enabled' in experience.yml to false
|
||||
Early Game Boost will show 'Learning a new skill...' if XP bars are enabled
|
||||
|
||||
https://mcmmo.org/wiki/World_guard - A list of WG flags supported by mcMMO.
|
||||
It is not necessary to have WG installed, but if you do have WG installed mcMMO hooks into it to provide some additional features.
|
||||
Previously mcMMO used to determine if WG was compatible just by checking to see if it was version 7 of WG, however version 7 of WG is not guaranteed to be compatible as necessary classes that mcMMO hooks into were added during its development and some users are still running early dev versions of WG7.
|
||||
In order to decrease the chance of error, mcMMO now uses reflection when checking to see if WG is compatible in addition to checking its version number, if its not compatible mcMMO will print a message and refrain from hooking into WG.
|
||||
WG is an optional dependency for mcMMO, and unfortunately before this change if mcMMO thought you were running a compatible version of WG and it turned out you weren't then mcMMO would not function correctly.
|
||||
|
||||
Archaeology does something now, it will be tweaked again in the future. Previously rank 1 of Archaeology was required to find treasures but that was all it did, now each rank of Archaeology also adds a small chance to find experience orbs when a player finds treasure.
|
||||
|
||||
In a prior patch I removed damage on tools if they had Unbreakable NBT or Unbreaking Enchantment, at the time I made this change I did not realize they were different things and just shared the same name, this patch fixes this mistake. My intention was to prevent damage on tools with the NBT unbreakable tag which makes an item never suffer from durability loss.
|
||||
mcMMO reduces damage to tools from super abilities if they have the "Durability/Unbreaking" enchantment already, this behaviour has been in mcMMO for a long time.
|
||||
|
||||
Tree Feller will now give reduced XP per block destroyed by Tree Feller and will never go below 1 XP per block, you can turn this off with 'ExploitFix.TreeFellerReducedXP' in experience.yml
|
||||
There was a bug fixed in this patch that prevents an issue where Tree Feller was not removing all blocks left behind, unfortunately this will only affect new trees made in the world. The only trees that suffered from this bug were ones in snowy areas that had snow form on them.
|
||||
|
||||
RetroMode and Standard mode will be getting renamed in 2.2, probably to something like 1000-scale and 100-scale respectively.
|
||||
Retro Mode was accidental genius is the short reason for the change to make it the default level scaling for mcMMO again.
|
||||
Standard Mode is not going anywhere, it is just opt-in now instead of the default.
|
||||
If you delete config.yml you will need to turn RetroMode off to use Standard mode as mcMMO doesn't keep track of what level scaling you are using outside of that.
|
||||
|
||||
Version 2.1.88
|
||||
mcMMO is now more compatible with a plugin named Project Korra
|
||||
mcMMO will no longer process combat triggers for damage at or below 0
|
||||
|
||||
Version 2.1.87
|
||||
(Level caps are not on by default in mcMMO, this is something you can turn on)
|
||||
|
||||
Players who reach either the power level cap or skill level cap will now be informed that they have done so
|
||||
XP Bars will no longer be sent to players who have reached the power level or skill level cap respectively
|
||||
Level up messages will no longer be sent to players who have reached the power level or skill level cap respectively
|
||||
Fixed a bug where mcMMO would send level up notifications to a player if the custom level up event from mcMMO was cancelled
|
||||
New locale strings 'LevelCap.PowerLevel' & 'LevelCap.Skill'
|
||||
|
||||
Version 2.1.86
|
||||
Players will no longer be told they got a perfect result when salvaging if they are below max skill level
|
||||
Salvage results will now travel towards the player instead of moving in a random direction
|
||||
|
2
pom.xml
2
pom.xml
@ -228,7 +228,7 @@
|
||||
<dependency>
|
||||
<groupId>com.sk89q.worldguard</groupId>
|
||||
<artifactId>worldguard-core</artifactId>
|
||||
<version>7.0.0-SNAPSHOT</version>
|
||||
<version>7.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sk89q.worldguard</groupId>
|
||||
|
@ -744,7 +744,7 @@ public final class ExperienceAPI {
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static int getLevelCap(String skillType) {
|
||||
return mcMMO.getPlayerLevelingSettings().getLevelCap(getSkillType(skillType));
|
||||
return mcMMO.getPlayerLevelingSettings().getSkillLevelCap(getSkillType(skillType));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -757,7 +757,7 @@ public final class ExperienceAPI {
|
||||
* @throws InvalidSkillException if the given skill is not valid
|
||||
*/
|
||||
public static int getLevelCap(PrimarySkillType skillType) {
|
||||
return mcMMO.getPlayerLevelingSettings().getLevelCap(skillType);
|
||||
return mcMMO.getPlayerLevelingSettings().getSkillLevelCap(skillType);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -767,7 +767,7 @@ public final class ExperienceAPI {
|
||||
* @return true if the skill has a level cap
|
||||
*/
|
||||
public static boolean isSkillLevelCapped(PrimarySkillType skillType) {
|
||||
return mcMMO.getPlayerLevelingSettings().isLevelCapEnabled(skillType);
|
||||
return mcMMO.getPlayerLevelingSettings().isSkillLevelCapEnabled(skillType);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -778,7 +778,7 @@ public final class ExperienceAPI {
|
||||
* @return the overall power level cap
|
||||
*/
|
||||
public static int getPowerLevelCap() {
|
||||
return mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevel().getLevelCap();
|
||||
return mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevelSettings().getLevelCap();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.gmail.nossr50.commands.admin;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
public class PlayerDebug implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
return false;
|
||||
}
|
||||
}
|
@ -30,7 +30,7 @@ public class AddlevelsCommand extends ExperienceCommand {
|
||||
return;
|
||||
}
|
||||
|
||||
EventUtils.handleLevelChangeEvent(player, skill, value, xpRemoved, true, XPGainReason.COMMAND);
|
||||
EventUtils.tryLevelChangeEvent(player, skill, value, xpRemoved, true, XPGainReason.COMMAND);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -36,7 +36,7 @@ public class MmoeditCommand extends ExperienceCommand {
|
||||
return;
|
||||
}
|
||||
|
||||
EventUtils.handleLevelChangeEventEdit(player, skill, value, xpRemoved, value > skillLevel, XPGainReason.COMMAND, skillLevel);
|
||||
EventUtils.tryLevelEditEvent(player, skill, value, xpRemoved, value > skillLevel, XPGainReason.COMMAND, skillLevel);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -131,7 +131,7 @@ public class SkillresetCommand implements TabExecutor {
|
||||
return;
|
||||
}
|
||||
|
||||
EventUtils.handleLevelChangeEvent(player, skill, levelsRemoved, xpRemoved, false, XPGainReason.COMMAND);
|
||||
EventUtils.tryLevelChangeEvent(player, skill, levelsRemoved, xpRemoved, false, XPGainReason.COMMAND);
|
||||
}
|
||||
|
||||
protected boolean permissionsCheckSelf(CommandSender sender) {
|
||||
|
@ -48,9 +48,9 @@ public class McstatsCommand implements TabExecutor {
|
||||
CommandUtils.printCombatSkills(player);
|
||||
CommandUtils.printMiscSkills(player);
|
||||
|
||||
int powerLevelCap = mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevel().getLevelCap();
|
||||
int powerLevelCap = mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevelSettings().getLevelCap();
|
||||
|
||||
if (mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevel().isLevelCapEnabled()) {
|
||||
if (mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevelSettings().isLevelCapEnabled()) {
|
||||
player.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Capped", UserManager.getPlayer(player).getPowerLevel(), powerLevelCap));
|
||||
} else {
|
||||
player.sendMessage(LocaleLoader.getString("Commands.PowerLevel", UserManager.getPlayer(player).getPowerLevel()));
|
||||
|
@ -3,8 +3,10 @@ package com.gmail.nossr50.commands.skills;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.skills.excavation.ExcavationManager;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.TextComponentFactory;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.skills.RankUtils;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -43,6 +45,8 @@ public class ExcavationCommand extends SkillCommand {
|
||||
protected List<String> statsDisplay(Player player, double skillValue, boolean hasEndurance, boolean isLucky) {
|
||||
List<String> messages = new ArrayList<>();
|
||||
|
||||
ExcavationManager excavationManager = UserManager.getPlayer(player).getExcavationManager();
|
||||
|
||||
if (canGigaDrill) {
|
||||
messages.add(getStatMessage(SubSkillType.EXCAVATION_GIGA_DRILL_BREAKER, gigaDrillBreakerLength)
|
||||
+ (hasEndurance ? LocaleLoader.getString("Perks.ActivationTime.Bonus", gigaDrillBreakerLengthEndurance) : ""));
|
||||
@ -50,6 +54,14 @@ public class ExcavationCommand extends SkillCommand {
|
||||
//messages.add(LocaleLoader.getString("Excavation.Effect.Length", gigaDrillBreakerLength) + (hasEndurance ? LocaleLoader.getString("Perks.ActivationTime.Bonus", gigaDrillBreakerLengthEndurance) : ""));
|
||||
}
|
||||
|
||||
if(canUseSubskill(player, SubSkillType.EXCAVATION_ARCHAEOLOGY)) {
|
||||
messages.add(getStatMessage(false, false, SubSkillType.EXCAVATION_ARCHAEOLOGY,
|
||||
percent.format(excavationManager.getArchaelogyExperienceOrbChance() / 100.0D)));
|
||||
messages.add(getStatMessage(true, false, SubSkillType.EXCAVATION_ARCHAEOLOGY,
|
||||
String.valueOf(excavationManager.getExperienceOrbsReward())));
|
||||
|
||||
}
|
||||
|
||||
return messages;
|
||||
}
|
||||
|
||||
|
@ -71,7 +71,7 @@ public class MiningCommand extends SkillCommand {
|
||||
canBiggerBombs = RankUtils.hasUnlockedSubskill(player, SubSkillType.MINING_BIGGER_BOMBS) && Permissions.biggerBombs(player);
|
||||
canBlast = RankUtils.hasUnlockedSubskill(player, SubSkillType.MINING_BLAST_MINING) && Permissions.remoteDetonation(player);
|
||||
canDemoExpert = RankUtils.hasUnlockedSubskill(player, SubSkillType.MINING_DEMOLITIONS_EXPERTISE) && Permissions.demolitionsExpertise(player);
|
||||
canDoubleDrop = Permissions.isSubSkillEnabled(player, SubSkillType.MINING_DOUBLE_DROPS);
|
||||
canDoubleDrop = canUseSubskill(player, SubSkillType.MINING_DOUBLE_DROPS);
|
||||
canSuperBreaker = RankUtils.hasUnlockedSubskill(player, SubSkillType.MINING_SUPER_BREAKER) && Permissions.superBreaker(player);
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@ public class ConfigSectionExploitAcrobatics {
|
||||
private static final int ACROBATIC_LOCATION_LIMIT_DEFAULT = 50;
|
||||
private static final boolean PREVENT_ACROBATICS_ABUSE_DEFAULT = true;
|
||||
private static final int TELEPORT_COOLDOWN_DEFAULT = 30;
|
||||
private static final int ROLL_XP_GAIN_CD_DEFAULT = 10;
|
||||
private static final int ROLL_XP_GAIN_CD_DEFAULT = 3;
|
||||
|
||||
@Setting(value = "Player-Fall-Location-Tracking",
|
||||
comment = "The amount of locations to keep track of for player falls." +
|
||||
|
@ -3,6 +3,7 @@ package com.gmail.nossr50.config.hocon.experience;
|
||||
import com.gmail.nossr50.datatypes.experience.CustomXPPerk;
|
||||
import com.gmail.nossr50.datatypes.experience.SpecialXPKey;
|
||||
import com.gmail.nossr50.datatypes.skills.ItemMaterialCategory;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import ninja.leaping.configurate.objectmapping.Setting;
|
||||
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
|
||||
|
||||
@ -184,6 +185,10 @@ public class ConfigExperience {
|
||||
return getConfigExperienceSkills().getExcavationExperienceMap();
|
||||
}
|
||||
|
||||
public boolean isReduceTreeFellerXP() {
|
||||
return getExperienceWoodcutting().isReduceTreeFellerXP();
|
||||
}
|
||||
|
||||
public HashMap<String, Integer> getFishingXPMap() {
|
||||
return getConfigExperienceSkills().getFishingXPMap();
|
||||
}
|
||||
@ -196,6 +201,12 @@ public class ConfigExperience {
|
||||
return configExperienceSkills;
|
||||
}
|
||||
|
||||
public double getSkillGlobalMultiplier(PrimarySkillType primarySkillType) {
|
||||
return configExperienceSkillMultiplier.getSkillGlobalMultiplier(primarySkillType);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public double getGlobalXPMultiplier() {
|
||||
return globalXPMultiplier;
|
||||
}
|
||||
|
@ -45,6 +45,10 @@ public class ConfigExperienceSkills {
|
||||
@Setting(value = "Z-Combat", comment = "XP Settings for Combat")
|
||||
private ConfigExperienceCombat experienceCombat = new ConfigExperienceCombat();
|
||||
|
||||
public boolean isReduceTreeFellerXP() {
|
||||
return experienceWoodcutting.isReduceTreeFellerXP();
|
||||
}
|
||||
|
||||
/*
|
||||
* BOILER PLATE GETTERS
|
||||
*/
|
||||
|
@ -9,6 +9,7 @@ import java.util.HashMap;
|
||||
public class ConfigExperienceWoodcutting {
|
||||
|
||||
private static final HashMap<String, Integer> WOODCUTTING_EXPERIENCE_DEFAULT;
|
||||
public static final boolean REDUCE_TREE_FELLER_XP_DEFAULT = true;
|
||||
|
||||
static {
|
||||
WOODCUTTING_EXPERIENCE_DEFAULT = new HashMap<>();
|
||||
@ -46,10 +47,19 @@ public class ConfigExperienceWoodcutting {
|
||||
WOODCUTTING_EXPERIENCE_DEFAULT.put("minecraft:mushroom_stem", 80);
|
||||
}
|
||||
|
||||
@Setting(value = "Reduce-Tree-Feller-XP", comment = "If set to true players will receive diminishing returns on XP from tree feller." +
|
||||
"\nIf set to false, players will get the full XP from every block destroyed by tree feller." +
|
||||
"\nDefault value: "+REDUCE_TREE_FELLER_XP_DEFAULT)
|
||||
private boolean reduceTreeFellerXP = REDUCE_TREE_FELLER_XP_DEFAULT;
|
||||
|
||||
@Setting(value = "Woodcutting-Experience")
|
||||
private HashMap<String, Integer> woodcuttingExperienceMap = WOODCUTTING_EXPERIENCE_DEFAULT;
|
||||
|
||||
public HashMap<String, Integer> getWoodcuttingExperienceMap() {
|
||||
return woodcuttingExperienceMap;
|
||||
}
|
||||
|
||||
public boolean isReduceTreeFellerXP() {
|
||||
return reduceTreeFellerXP;
|
||||
}
|
||||
}
|
||||
|
@ -134,6 +134,18 @@ public class ConfigLeveling {
|
||||
return configSectionLevelCaps;
|
||||
}
|
||||
|
||||
public ConfigSectionSkillLevelCap getPowerLevelSettings() {
|
||||
return configSectionLevelCaps.getPowerLevelSettings();
|
||||
}
|
||||
|
||||
public boolean getReducePlayerSkillsAboveCap() {
|
||||
return configSectionLevelCaps.getReducePlayerSkillsAboveCap();
|
||||
}
|
||||
|
||||
public ConfigSectionSkillLevelCaps getConfigSectionSkillLevelCaps() {
|
||||
return configSectionLevelCaps.getConfigSectionSkillLevelCaps();
|
||||
}
|
||||
|
||||
public ConfigSectionLevelingGeneral getConfigSectionLevelingGeneral() {
|
||||
return configSectionLevelingGeneral;
|
||||
}
|
||||
@ -194,11 +206,19 @@ public class ConfigLeveling {
|
||||
return configExperienceFormula.getLinearMultiplier();
|
||||
}
|
||||
|
||||
public boolean isPowerLevelCapEnabled() {
|
||||
return configSectionLevelCaps.isPowerLevelCapEnabled();
|
||||
}
|
||||
|
||||
public int getPowerLevelCap() {
|
||||
return configSectionLevelCaps.getPowerLevelCap();
|
||||
}
|
||||
|
||||
/*
|
||||
* HELPER METHODS
|
||||
*/
|
||||
|
||||
public int getLevelCap(PrimarySkillType primarySkillType) {
|
||||
public int getSkillLevelCap(PrimarySkillType primarySkillType) {
|
||||
switch (primarySkillType) {
|
||||
case ACROBATICS:
|
||||
return configSectionLevelCaps.getConfigSectionSkillLevelCaps().getAcrobatics().getLevelCap();
|
||||
@ -236,7 +256,7 @@ public class ConfigLeveling {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isLevelCapEnabled(PrimarySkillType primarySkillType) {
|
||||
public boolean isSkillLevelCapEnabled(PrimarySkillType primarySkillType) {
|
||||
switch (primarySkillType) {
|
||||
case ACROBATICS:
|
||||
return configSectionLevelCaps.getConfigSectionSkillLevelCaps().getAcrobatics().isLevelCapEnabled();
|
||||
|
@ -29,10 +29,18 @@ public class ConfigSectionLevelCaps {
|
||||
* GETTER BOILERPLATE
|
||||
*/
|
||||
|
||||
public ConfigSectionSkillLevelCap getPowerLevel() {
|
||||
public ConfigSectionSkillLevelCap getPowerLevelSettings() {
|
||||
return powerLevel;
|
||||
}
|
||||
|
||||
public boolean isPowerLevelCapEnabled() {
|
||||
return powerLevel.isLevelCapEnabled();
|
||||
}
|
||||
|
||||
public int getPowerLevelCap() {
|
||||
return powerLevel.getLevelCap();
|
||||
}
|
||||
|
||||
public boolean getReducePlayerSkillsAboveCap() {
|
||||
return truncateSkillsAboveCap;
|
||||
}
|
||||
|
@ -899,8 +899,8 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
||||
continue;
|
||||
}
|
||||
//Level Cap
|
||||
if (mcMMO.getPlayerLevelingSettings().isLevelCapEnabled(skill)) {
|
||||
int cap = mcMMO.getPlayerLevelingSettings().getLevelCap(skill);
|
||||
if (mcMMO.getPlayerLevelingSettings().isSkillLevelCapEnabled(skill)) {
|
||||
int cap = mcMMO.getPlayerLevelingSettings().getSkillLevelCap(skill);
|
||||
if (Integer.valueOf(character[index]) > cap) {
|
||||
mcMMO.p.getLogger().warning("Truncating " + skill.getName() + " to configured max level for player " + character[USERNAME]);
|
||||
character[index] = cap + "";
|
||||
|
@ -891,11 +891,11 @@ public final class SQLDatabaseManager implements DatabaseManager {
|
||||
//Level Cap Stuff
|
||||
if (mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getReducePlayerSkillsAboveCap()) {
|
||||
for (PrimarySkillType skill : PrimarySkillType.NON_CHILD_SKILLS) {
|
||||
if (!mcMMO.getPlayerLevelingSettings().isLevelCapEnabled(skill))
|
||||
if (!mcMMO.getPlayerLevelingSettings().isSkillLevelCapEnabled(skill))
|
||||
continue;
|
||||
|
||||
//Shrink skills above the cap
|
||||
int cap = mcMMO.getPlayerLevelingSettings().getLevelCap(skill);
|
||||
int cap = mcMMO.getPlayerLevelingSettings().getSkillLevelCap(skill);
|
||||
statement = connection.prepareStatement("UPDATE `" + tablePrefix + "skills` SET `" + skill.name().toLowerCase() + "` = " + cap + " WHERE `" + skill.name().toLowerCase() + "` > " + cap);
|
||||
statement.executeUpdate();
|
||||
tryClose(statement);
|
||||
|
@ -165,7 +165,15 @@ public class McMMOPlayer {
|
||||
experienceBarManager.hideExperienceBar(primarySkillType);
|
||||
}*/
|
||||
|
||||
public void processPostXpEvent(XPGainReason xpGainReason, PrimarySkillType primarySkillType, Plugin plugin, XPGainSource xpGainSource) {
|
||||
public void processPostXpEvent(PrimarySkillType primarySkillType, Plugin plugin, XPGainSource xpGainSource)
|
||||
{
|
||||
//Check if they've reached the power level cap just now
|
||||
if(hasReachedPowerLevelCap()) {
|
||||
mcMMO.getNotificationManager().sendPlayerInformationChatOnly(player, "LevelCap.PowerLevel", String.valueOf(mcMMO.getConfigManager().getConfigLeveling().getPowerLevelCap()));
|
||||
} else if(hasReachedLevelCap(primarySkillType)) {
|
||||
mcMMO.getNotificationManager().sendPlayerInformationChatOnly(player, "LevelCap.Skill", String.valueOf(mcMMO.getConfigManager().getConfigLeveling().getSkillLevelCap(primarySkillType)), primarySkillType.getName());
|
||||
}
|
||||
|
||||
//Updates from Party sources
|
||||
if (xpGainSource == XPGainSource.PARTY_MEMBERS && !mcMMO.getConfigManager().getConfigLeveling().isPartyExperienceTriggerXpBarDisplay())
|
||||
return;
|
||||
@ -474,6 +482,31 @@ public class McMMOPlayer {
|
||||
return powerLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether or not a player is level capped
|
||||
* If they are at the power level cap, this will return true, otherwise it checks their skill level
|
||||
* @param primarySkillType
|
||||
* @return
|
||||
*/
|
||||
public boolean hasReachedLevelCap(PrimarySkillType primarySkillType) {
|
||||
if(hasReachedPowerLevelCap())
|
||||
return true;
|
||||
|
||||
if(getSkillLevel(primarySkillType) >= mcMMO.getConfigManager().getConfigLeveling().getSkillLevelCap(primarySkillType))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether or not a player is power level capped
|
||||
* Compares their power level total to the current set limit
|
||||
* @return true if they have reached the power level cap
|
||||
*/
|
||||
public boolean hasReachedPowerLevelCap() {
|
||||
return this.getPowerLevel() >= mcMMO.getConfigManager().getConfigLeveling().getPowerLevelCap();
|
||||
}
|
||||
|
||||
/**
|
||||
* Begins an experience gain. The amount will be affected by skill modifiers, global rate, perks, and may be shared with the party
|
||||
*
|
||||
@ -564,8 +597,11 @@ public class McMMOPlayer {
|
||||
* @param primarySkillType The skill to check
|
||||
*/
|
||||
private void checkXp(PrimarySkillType primarySkillType, XPGainReason xpGainReason, XPGainSource xpGainSource) {
|
||||
if(hasReachedLevelCap(primarySkillType))
|
||||
return;
|
||||
|
||||
if (getSkillXpLevelRaw(primarySkillType) < getXpToLevel(primarySkillType)) {
|
||||
processPostXpEvent(xpGainReason, primarySkillType, mcMMO.p, xpGainSource);
|
||||
processPostXpEvent(primarySkillType, mcMMO.p, xpGainSource);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -573,7 +609,7 @@ public class McMMOPlayer {
|
||||
double xpRemoved = 0;
|
||||
|
||||
while (getSkillXpLevelRaw(primarySkillType) >= getXpToLevel(primarySkillType)) {
|
||||
if (mcMMO.getPlayerLevelingSettings().isLevelCapEnabled(primarySkillType)
|
||||
if (mcMMO.getPlayerLevelingSettings().isSkillLevelCapEnabled(primarySkillType)
|
||||
&& hasReachedLevelCap(primarySkillType)) {
|
||||
setSkillXpLevel(primarySkillType, 0);
|
||||
break;
|
||||
@ -583,8 +619,7 @@ public class McMMOPlayer {
|
||||
levelsGained++;
|
||||
}
|
||||
|
||||
if (!EventUtils.handleLevelChangeEvent(player, primarySkillType, levelsGained, xpRemoved, true, xpGainReason)) {
|
||||
processPostXpEvent(xpGainReason, primarySkillType, mcMMO.p, xpGainSource);
|
||||
if (EventUtils.tryLevelChangeEvent(player, primarySkillType, levelsGained, xpRemoved, true, xpGainReason)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -597,7 +632,7 @@ public class McMMOPlayer {
|
||||
mcMMO.getNotificationManager().sendPlayerLevelUpNotification(this, primarySkillType, levelsGained, profile.getSkillLevel(primarySkillType));
|
||||
|
||||
//UPDATE XP BARS
|
||||
processPostXpEvent(xpGainReason, primarySkillType, mcMMO.p, xpGainSource);
|
||||
processPostXpEvent(primarySkillType, mcMMO.p, xpGainSource);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -770,8 +805,8 @@ public class McMMOPlayer {
|
||||
*/
|
||||
private double modifyXpGain(PrimarySkillType primarySkillType, double xp) {
|
||||
if (((primarySkillType.getMaxLevel() <= getSkillLevel(primarySkillType))
|
||||
&& mcMMO.getPlayerLevelingSettings().isLevelCapEnabled(primarySkillType))
|
||||
|| (mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevel().getLevelCap() <= getPowerLevel())) {
|
||||
&& mcMMO.getPlayerLevelingSettings().isSkillLevelCapEnabled(primarySkillType))
|
||||
|| (mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevelSettings().getLevelCap() <= getPowerLevel())) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -921,11 +956,6 @@ public class McMMOPlayer {
|
||||
return (int) (((deactivatedTimestamp + (PerksUtils.handleCooldownPerks(player, ability.getCooldown()) * Misc.TIME_CONVERSION_FACTOR)) - System.currentTimeMillis()) / Misc.TIME_CONVERSION_FACTOR);
|
||||
}
|
||||
|
||||
private boolean hasReachedLevelCap(PrimarySkillType skill) {
|
||||
return (skill.getMaxLevel() < getSkillLevel(skill) + 1)
|
||||
|| (mcMMO.getPlayerLevelingSettings().getConfigSectionLevelCaps().getPowerLevel().getLevelCap() < getPowerLevel() + 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* These functions are wrapped from PlayerProfile so that we don't always have to store it alongside the McMMOPlayer object.
|
||||
*/
|
||||
|
@ -419,7 +419,7 @@ public class PlayerProfile {
|
||||
int sum = 0;
|
||||
|
||||
for (PrimarySkillType parent : parents) {
|
||||
if (mcMMO.getPlayerLevelingSettings().isLevelCapEnabled(parent))
|
||||
if (mcMMO.getPlayerLevelingSettings().isSkillLevelCapEnabled(parent))
|
||||
sum += Math.min(getSkillLevel(parent), parent.getMaxLevel());
|
||||
else
|
||||
sum += getSkillLevel(parent);
|
||||
|
@ -179,7 +179,7 @@ public enum PrimarySkillType {
|
||||
* @return the max level of this skill
|
||||
*/
|
||||
public int getMaxLevel() {
|
||||
return mcMMO.getPlayerLevelingSettings().getLevelCap(this);
|
||||
return mcMMO.getPlayerLevelingSettings().getSkillLevelCap(this);
|
||||
}
|
||||
|
||||
/*public boolean getDoubleDropsDisabled() {
|
||||
|
@ -41,7 +41,7 @@ public enum SubSkillType {
|
||||
FISHING_SHAKE(1),
|
||||
|
||||
/* Herbalism */
|
||||
HERBALISM_DOUBLE_DROPS,
|
||||
HERBALISM_DOUBLE_DROPS(1),
|
||||
HERBALISM_FARMERS_DIET(5),
|
||||
HERBALISM_GREEN_TERRA(1),
|
||||
HERBALISM_GREEN_THUMB(4),
|
||||
@ -52,7 +52,7 @@ public enum SubSkillType {
|
||||
MINING_BIGGER_BOMBS(1),
|
||||
MINING_BLAST_MINING(8),
|
||||
MINING_DEMOLITIONS_EXPERTISE(1),
|
||||
MINING_DOUBLE_DROPS,
|
||||
MINING_DOUBLE_DROPS(1),
|
||||
MINING_SUPER_BREAKER(1),
|
||||
|
||||
/* Repair */
|
||||
|
@ -170,9 +170,14 @@ public class BlockListener implements Listener {
|
||||
if (WorldBlacklist.isWorldBlacklisted(event.getBlock().getWorld()))
|
||||
return;
|
||||
|
||||
Block newBlock = event.getNewState().getBlock();
|
||||
Material material = newBlock.getType();
|
||||
|
||||
if (mcMMO.getConfigManager().getConfigExploitPrevention().getConfigSectionExploitSkills().isPreventCobblestoneStoneGeneratorXP()) {
|
||||
if (event.getNewState().getType() != Material.OBSIDIAN && BlockUtils.shouldBeWatched(event.getNewState())) {
|
||||
mcMMO.getPlaceStore().setTrue(event.getNewState());
|
||||
if (material != Material.OBSIDIAN
|
||||
&& BlockUtils.shouldBeWatched(material)
|
||||
&& mcMMO.getDynamicSettingsManager().getExperienceManager().hasMiningXp(material)) { //Hacky fix to prevent trees growing from being marked as unnatural
|
||||
mcMMO.getPlaceStore().setTrue(newBlock);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -275,7 +280,7 @@ public class BlockListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(event.getPlayer()))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(event.getPlayer()))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -284,7 +289,6 @@ public class BlockListener implements Listener {
|
||||
}
|
||||
|
||||
BlockState blockState = event.getBlock().getState();
|
||||
Location location = blockState.getLocation();
|
||||
|
||||
if (!BlockUtils.shouldBeWatched(blockState)) {
|
||||
return;
|
||||
@ -370,7 +374,7 @@ public class BlockListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(event.getPlayer()))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(event.getPlayer()))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -439,7 +443,7 @@ public class BlockListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(event.getPlayer()))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(event.getPlayer()))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -509,7 +513,7 @@ public class BlockListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(event.getPlayer()))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(event.getPlayer()))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -582,12 +586,12 @@ public class BlockListener implements Listener {
|
||||
}
|
||||
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
player.sendMessage("[mcMMO DEBUG] World Guard main flag is permitted for this player in this region");
|
||||
else
|
||||
player.sendMessage("[mcMMO DEBUG] World Guard main flag is DENIED for this player in this region");
|
||||
|
||||
if (WorldGuardManager.getInstance().hasXPFlag(player))
|
||||
if (plugin.getWorldGuardManager().hasXPFlag(player))
|
||||
player.sendMessage("[mcMMO DEBUG] World Guard xp flag is permitted for this player in this region");
|
||||
else
|
||||
player.sendMessage("[mcMMO DEBUG] World Guard xp flag is not permitted for this player in this region");
|
||||
|
@ -88,7 +88,7 @@ public class EntityListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -121,20 +121,17 @@ public class EntityListener implements Listener {
|
||||
|
||||
if(event.getEntity().getShooter() instanceof Player)
|
||||
{
|
||||
|
||||
Player player = (Player) event.getEntity().getShooter();
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
Projectile projectile = event.getEntity();//Hacky stuff for 1.13/1.14 compat
|
||||
Projectile projectile = event.getEntity();
|
||||
|
||||
String itemKey = player.getInventory().getItemInMainHand().getType().getKey().toString();
|
||||
|
||||
if(!itemKey.equalsIgnoreCase("minecraft:bow") && !itemKey.equalsIgnoreCase("minecraft:crossbow"))
|
||||
if(!(projectile instanceof Arrow))
|
||||
return;
|
||||
|
||||
projectile.setMetadata(MetadataConstants.BOW_FORCE_METAKEY, new FixedMetadataValue(plugin, 1.0));
|
||||
@ -293,7 +290,7 @@ public class EntityListener implements Listener {
|
||||
{
|
||||
if(attacker instanceof Player) {
|
||||
|
||||
if(!WorldGuardManager.getInstance().hasMainFlag((Player) attacker))
|
||||
if(!plugin.getWorldGuardManager().hasMainFlag((Player) attacker))
|
||||
return;
|
||||
|
||||
} else if(attacker instanceof Projectile) {
|
||||
@ -301,7 +298,7 @@ public class EntityListener implements Listener {
|
||||
Projectile projectile = (Projectile) attacker;
|
||||
|
||||
if(projectile.getShooter() instanceof Player) {
|
||||
if(!WorldGuardManager.getInstance().hasMainFlag((Player) projectile.getShooter()))
|
||||
if(!plugin.getWorldGuardManager().hasMainFlag((Player) projectile.getShooter()))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -398,6 +395,19 @@ public class EntityListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* This was put here to solve a plugin conflict with a mod called Project Korra
|
||||
* Project Korra sends out a damage event with exactly 0 damage
|
||||
* mcMMO does some calculations for the damage in an event and it ends up dividing by zero,
|
||||
* as a result of the modifiers for the event being 0 and the damage set for this event being 0.
|
||||
*
|
||||
* Surprising this kind of thing
|
||||
*
|
||||
*/
|
||||
if(damage <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
CombatUtils.processCombatAttack(event, attacker, target);
|
||||
CombatUtils.handleHealthbars(attacker, target, event.getFinalDamage(), plugin);
|
||||
|
||||
@ -452,7 +462,7 @@ public class EntityListener implements Listener {
|
||||
Player player = (Player) event.getEntity();
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -530,7 +540,7 @@ public class EntityListener implements Listener {
|
||||
Player player = (Player) owner;
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -724,7 +734,7 @@ public class EntityListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -762,7 +772,7 @@ public class EntityListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -825,7 +835,7 @@ public class EntityListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -926,7 +936,7 @@ public class EntityListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -972,7 +982,7 @@ public class EntityListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -102,7 +102,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -135,7 +135,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -167,7 +167,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -234,7 +234,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -352,7 +352,7 @@ public class InventoryListener implements Listener {
|
||||
//
|
||||
// /* WORLD GUARD MAIN FLAG CHECK */
|
||||
// if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
// if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
// if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
@ -456,7 +456,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -76,7 +76,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -115,7 +115,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(event.getEntity()))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(event.getEntity()))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -160,7 +160,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(killedPlayer))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(killedPlayer))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -224,7 +224,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(event.getPlayer()))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(event.getPlayer()))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -256,7 +256,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -331,7 +331,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -424,7 +424,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -576,7 +576,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
@ -689,7 +689,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
/* WORLD GUARD MAIN FLAG CHECK */
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasMainFlag(player))
|
||||
if (!plugin.getWorldGuardManager().hasMainFlag(player))
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -73,7 +73,7 @@ public class SelfListener implements Listener {
|
||||
event.getXpGainReason() == XPGainReason.SHARED_PVE ||
|
||||
event.getXpGainReason() == XPGainReason.SHARED_PVP) {
|
||||
if (WorldGuardUtils.isWorldGuardLoaded()) {
|
||||
if (!WorldGuardManager.getInstance().hasXPFlag(player)) {
|
||||
if (!plugin.getWorldGuardManager().hasXPFlag(player)) {
|
||||
event.setRawXpGained(0);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
@ -39,6 +39,7 @@ import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||
import com.gmail.nossr50.util.skills.RankUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
import com.gmail.nossr50.worldguard.WorldGuardManager;
|
||||
import com.gmail.nossr50.worldguard.WorldGuardUtils;
|
||||
import net.shatteredlands.shatt.backup.ZipLibrary;
|
||||
import org.bstats.bukkit.Metrics;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -67,6 +68,7 @@ public class mcMMO extends JavaPlugin {
|
||||
private static NotificationManager notificationManager;
|
||||
private static CommandRegistrationManager commandRegistrationManager;
|
||||
private static NBTManager nbtManager;
|
||||
private static WorldGuardManager worldGuardManager;
|
||||
|
||||
/* File Paths */
|
||||
private static String mainDirectory;
|
||||
@ -196,9 +198,13 @@ public class mcMMO extends JavaPlugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
if (getServer().getPluginManager().getPlugin("WorldGuard") != null)
|
||||
WorldGuardManager.getInstance().registerFlags();
|
||||
public void onLoad()
|
||||
{
|
||||
worldGuardManager = new WorldGuardManager();
|
||||
|
||||
if(getServer().getPluginManager().getPlugin("WorldGuard") != null) {
|
||||
worldGuardManager.registerFlags();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -610,4 +616,8 @@ public class mcMMO extends JavaPlugin {
|
||||
public static NotificationManager getNotificationManager() {
|
||||
return notificationManager;
|
||||
}
|
||||
|
||||
public WorldGuardManager getWorldGuardManager() {
|
||||
return worldGuardManager;
|
||||
}
|
||||
}
|
@ -53,6 +53,10 @@ public class ArcheryManager extends SkillManager {
|
||||
* @param damager The {@link Entity} who shot the arrow
|
||||
*/
|
||||
public double distanceXpBonusMultiplier(LivingEntity target, Entity damager) {
|
||||
//Hacky Fix - some plugins spawn arrows and assign them to players after the ProjectileLaunchEvent fires
|
||||
if(!damager.hasMetadata(MetadataConstants.ARROW_DISTANCE_METAKEY))
|
||||
return damager.getLocation().distance(target.getLocation());
|
||||
|
||||
Location firedLocation = (Location) damager.getMetadata(MetadataConstants.ARROW_DISTANCE_METAKEY).get(0).value();
|
||||
Location targetLocation = target.getLocation();
|
||||
|
||||
|
@ -10,9 +10,12 @@ import com.gmail.nossr50.skills.SkillManager;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.random.RandomChanceUtil;
|
||||
import com.gmail.nossr50.util.skills.RankUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.ExperienceOrb;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
@ -40,6 +43,13 @@ public class ExcavationManager extends SkillManager {
|
||||
for (ExcavationTreasure treasure : treasures) {
|
||||
if (skillLevel >= treasure.getDropLevel()
|
||||
&& RandomChanceUtil.checkRandomChanceExecutionSuccess(getPlayer(), PrimarySkillType.EXCAVATION, treasure.getDropChance())) {
|
||||
|
||||
//Spawn Vanilla XP orbs if a dice roll succeeds
|
||||
if(RandomChanceUtil.rollDice(getArchaelogyExperienceOrbChance(), 100)) {
|
||||
ExperienceOrb experienceOrb = (ExperienceOrb) getPlayer().getWorld().spawnEntity(location, EntityType.EXPERIENCE_ORB);
|
||||
experienceOrb.setExperience(getExperienceOrbsReward());
|
||||
}
|
||||
|
||||
xp += treasure.getXp();
|
||||
Misc.dropItem(location, treasure.getDrop());
|
||||
}
|
||||
@ -50,7 +60,20 @@ public class ExcavationManager extends SkillManager {
|
||||
applyXpGain(xp, XPGainReason.PVE);
|
||||
}
|
||||
|
||||
public void printExcavationDebug(Player player, BlockState blockState) {
|
||||
public int getExperienceOrbsReward() {
|
||||
return 1 * getArchaeologyRank();
|
||||
}
|
||||
|
||||
public double getArchaelogyExperienceOrbChance() {
|
||||
return getArchaeologyRank() * 2;
|
||||
}
|
||||
|
||||
public int getArchaeologyRank() {
|
||||
return RankUtils.getRank(getPlayer(), SubSkillType.EXCAVATION_ARCHAEOLOGY);
|
||||
}
|
||||
|
||||
public void printExcavationDebug(Player player, BlockState blockState)
|
||||
{
|
||||
if (Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.EXCAVATION_ARCHAEOLOGY)) {
|
||||
List<ExcavationTreasure> treasures = Excavation.getTreasures(blockState);
|
||||
|
||||
|
@ -72,6 +72,10 @@ public class MiningManager extends SkillManager {
|
||||
return getSkillLevel() >= BlastMining.getBiggerBombsUnlockLevel() && Permissions.biggerBombs(getPlayer());
|
||||
}
|
||||
|
||||
public boolean canDoubleDrop() {
|
||||
return RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.MINING_DOUBLE_DROPS) && Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.MINING_DOUBLE_DROPS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Process double drops & XP gain for Mining.
|
||||
*
|
||||
@ -82,16 +86,11 @@ public class MiningManager extends SkillManager {
|
||||
|
||||
applyXpGain(Mining.getBlockXp(blockState), XPGainReason.PVE);
|
||||
|
||||
if (!Permissions.isSubSkillEnabled(player, SubSkillType.MINING_DOUBLE_DROPS)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mcMMOPlayer.getAbilityMode(skill.getSuperAbility())) {
|
||||
SkillUtils.handleDurabilityChange(getPlayer().getInventory().getItemInMainHand(), mcMMO.getConfigManager().getConfigSuperAbilities().getSuperAbilityLimits().getToolDurabilityDamage());
|
||||
}
|
||||
|
||||
//if ((mcMMO.getModManager().isCustomMiningBlock(blockState) && !mcMMO.getModManager().getBlock(blockState).isDoubleDropEnabled()) || !MainConfig.getInstance().getDoubleDropsEnabled(skill, material)) {
|
||||
if (!mcMMO.getDynamicSettingsManager().getBonusDropManager().isBonusDropWhitelisted(blockState.getType()))
|
||||
if (!canDoubleDrop() || !mcMMO.getDynamicSettingsManager().getBonusDropManager().isBonusDropWhitelisted(blockState.getType()))
|
||||
return;
|
||||
|
||||
boolean silkTouch = player.getInventory().getItemInMainHand().containsEnchantment(Enchantment.SILK_TOUCH);
|
||||
|
@ -136,17 +136,28 @@ public class SalvageManager extends SkillManager {
|
||||
return;
|
||||
}
|
||||
|
||||
Location anvilLoc = location.clone();
|
||||
Location playerLoc = player.getLocation().clone();
|
||||
double distance = anvilLoc.distance(playerLoc);
|
||||
|
||||
double speedLimit = .6;
|
||||
double minSpeed = .3;
|
||||
|
||||
//Clamp the speed and vary it by distance
|
||||
double vectorSpeed = Math.min(speedLimit, Math.max(minSpeed, distance * .2));
|
||||
|
||||
//Add a very small amount of height
|
||||
anvilLoc.add(0, .1, 0);
|
||||
|
||||
if (enchantBook != null) {
|
||||
Misc.dropItem(location, enchantBook);
|
||||
Misc.spawnItemTowardsLocation(anvilLoc.clone(), playerLoc.clone(), enchantBook, vectorSpeed);
|
||||
}
|
||||
|
||||
Misc.spawnItemTowardsLocation(location, player.getLocation().add(0, 0.25, 0), salvageResults);
|
||||
Misc.spawnItemTowardsLocation(anvilLoc.clone(), playerLoc.clone(), salvageResults, vectorSpeed);
|
||||
|
||||
// BWONG BWONG BWONG - CLUNK!
|
||||
if (mcMMO.getConfigManager().getConfigSalvage().getGeneral().isAnvilUseSounds()) {
|
||||
SoundManager.sendSound(player, player.getLocation(), SoundType.ITEM_BREAK);
|
||||
|
||||
//player.playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, 1.0F);
|
||||
}
|
||||
|
||||
mcMMO.getNotificationManager().sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE, "Salvage.Skills.Success");
|
||||
|
@ -7,7 +7,6 @@ import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -29,23 +28,44 @@ public final class Woodcutting {
|
||||
protected static boolean treeFellerReachedThreshold = false;
|
||||
|
||||
private Woodcutting() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the experience reward from a log
|
||||
*
|
||||
* @param blockState Log being broken
|
||||
* @param experienceGainMethod How the log is being broken
|
||||
* @return Amount of experience
|
||||
*/
|
||||
protected static int getExperienceFromLog(BlockState blockState, ExperienceGainMethod experienceGainMethod) {
|
||||
/*if (mcMMO.getModManager().isCustomLog(blockState)) {
|
||||
return mcMMO.getModManager().getBlock(blockState).getXpGain();
|
||||
}*/
|
||||
|
||||
protected static int getExperienceFromLog(BlockState blockState) {
|
||||
return mcMMO.getDynamicSettingsManager().getExperienceManager().getWoodcuttingXp(blockState.getType());
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the experience reward from logging via Tree Feller
|
||||
* Experience is reduced per log processed so far
|
||||
* Experience is only reduced if the config option to reduce Tree Feller XP is set
|
||||
* Experience per log will not fall below 1 unless the experience for that log is set to 0 in the config
|
||||
*
|
||||
* @param blockState Log being broken
|
||||
* @param woodCount how many logs have given out XP for this tree feller so far
|
||||
* @return Amount of experience
|
||||
*/
|
||||
protected static int processTreeFellerXPGains(BlockState blockState, int woodCount) {
|
||||
int rawXP = mcMMO.getDynamicSettingsManager().getExperienceManager().getWoodcuttingXp(blockState.getType());
|
||||
|
||||
if(rawXP <= 0)
|
||||
return 0;
|
||||
|
||||
if(mcMMO.getConfigManager().getConfigExperience().getExperienceWoodcutting().isReduceTreeFellerXP()) {
|
||||
int reducedXP = 1 + (woodCount * 5);
|
||||
rawXP = Math.max(1, rawXP - reducedXP);
|
||||
return rawXP;
|
||||
} else {
|
||||
return mcMMO.getDynamicSettingsManager().getExperienceManager().getWoodcuttingXp(blockState.getType());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks for double drops
|
||||
*
|
||||
@ -136,9 +156,8 @@ public final class Woodcutting {
|
||||
* @return True if the tool can sustain the durability loss
|
||||
*/
|
||||
protected static boolean handleDurabilityLoss(Set<BlockState> treeFellerBlocks, ItemStack inHand) {
|
||||
|
||||
if((inHand.getItemMeta().getEnchants().get(Enchantment.DURABILITY) != null && inHand.getItemMeta().getEnchants().get(Enchantment.DURABILITY) >= 1)
|
||||
|| (inHand.getItemMeta() != null && inHand.getItemMeta().isUnbreakable())) {
|
||||
//Treat the NBT tag for unbreakable and the durability enchant differently
|
||||
if(inHand.getItemMeta() != null && inHand.getItemMeta().isUnbreakable()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,6 @@ import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.skills.SkillManager;
|
||||
import com.gmail.nossr50.skills.woodcutting.Woodcutting.ExperienceGainMethod;
|
||||
import com.gmail.nossr50.util.*;
|
||||
import com.gmail.nossr50.util.random.RandomChanceUtil;
|
||||
import com.gmail.nossr50.util.skills.CombatUtils;
|
||||
@ -52,7 +51,7 @@ public class WoodcuttingManager extends SkillManager {
|
||||
* @param blockState Block being broken
|
||||
*/
|
||||
public void woodcuttingBlockCheck(BlockState blockState) {
|
||||
int xp = Woodcutting.getExperienceFromLog(blockState, ExperienceGainMethod.DEFAULT);
|
||||
int xp = Woodcutting.getExperienceFromLog(blockState);
|
||||
|
||||
switch (blockState.getType()) {
|
||||
case BROWN_MUSHROOM_BLOCK:
|
||||
@ -114,6 +113,7 @@ public class WoodcuttingManager extends SkillManager {
|
||||
private void dropBlocks(Set<BlockState> treeFellerBlocks) {
|
||||
Player player = getPlayer();
|
||||
int xp = 0;
|
||||
int processedLogCount = 0;
|
||||
|
||||
for (BlockState blockState : treeFellerBlocks) {
|
||||
Block block = blockState.getBlock();
|
||||
@ -124,30 +124,16 @@ public class WoodcuttingManager extends SkillManager {
|
||||
|
||||
Material material = blockState.getType();
|
||||
|
||||
//TODO: Update this to drop the correct items/blocks via NMS
|
||||
if (material == Material.BROWN_MUSHROOM_BLOCK || material == Material.RED_MUSHROOM_BLOCK) {
|
||||
xp += Woodcutting.getExperienceFromLog(blockState, ExperienceGainMethod.TREE_FELLER);
|
||||
xp += Woodcutting.processTreeFellerXPGains(blockState, processedLogCount);
|
||||
Misc.dropItems(Misc.getBlockCenter(blockState), block.getDrops());
|
||||
}
|
||||
/*else if (mcMMO.getModManager().isCustomLog(blockState)) {
|
||||
if (canGetDoubleDrops()) {
|
||||
Woodcutting.checkForDoubleDrop(blockState);
|
||||
}
|
||||
|
||||
CustomBlock customBlock = mcMMO.getModManager().getBlock(blockState);
|
||||
xp = customBlock.getXpGain();
|
||||
|
||||
Misc.dropItems(Misc.getBlockCenter(blockState), block.getDrops());
|
||||
}
|
||||
else if (mcMMO.getModManager().isCustomLeaf(blockState)) {
|
||||
Misc.dropItems(Misc.getBlockCenter(blockState), block.getDrops());
|
||||
}*/
|
||||
else {
|
||||
|
||||
} else {
|
||||
if (BlockUtils.isLog(blockState)) {
|
||||
if (canGetDoubleDrops()) {
|
||||
Woodcutting.checkForDoubleDrop(blockState);
|
||||
}
|
||||
xp += Woodcutting.getExperienceFromLog(blockState, ExperienceGainMethod.TREE_FELLER);
|
||||
xp += Woodcutting.processTreeFellerXPGains(blockState, processedLogCount);
|
||||
Misc.dropItems(Misc.getBlockCenter(blockState), block.getDrops());
|
||||
}
|
||||
if (BlockUtils.isLeaves(blockState)) {
|
||||
@ -157,6 +143,7 @@ public class WoodcuttingManager extends SkillManager {
|
||||
|
||||
blockState.setType(Material.AIR);
|
||||
blockState.update(true);
|
||||
processedLogCount+=1;
|
||||
}
|
||||
|
||||
applyXpGain(xp, XPGainReason.PVE);
|
||||
|
@ -207,7 +207,7 @@ public class EventUtils {
|
||||
|
||||
}
|
||||
|
||||
public static boolean handleLevelChangeEvent(Player player, PrimarySkillType skill, int levelsChanged, double xpRemoved, boolean isLevelUp, XPGainReason xpGainReason) {
|
||||
public static boolean tryLevelChangeEvent(Player player, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason) {
|
||||
McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(player, skill, levelsChanged, xpGainReason) : new McMMOPlayerLevelDownEvent(player, skill, levelsChanged, xpGainReason);
|
||||
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
||||
|
||||
@ -220,10 +220,10 @@ public class EventUtils {
|
||||
profile.addXp(skill, xpRemoved);
|
||||
}
|
||||
|
||||
return !isCancelled;
|
||||
return isCancelled;
|
||||
}
|
||||
|
||||
public static void handleLevelChangeEventEdit(Player player, PrimarySkillType skill, int levelsChanged, double xpRemoved, boolean isLevelUp, XPGainReason xpGainReason, int oldLevel) {
|
||||
public static boolean tryLevelEditEvent(Player player, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason, int oldLevel) {
|
||||
McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(player, skill, levelsChanged - oldLevel, xpGainReason) : new McMMOPlayerLevelDownEvent(player, skill, levelsChanged, xpGainReason);
|
||||
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
||||
|
||||
@ -236,6 +236,7 @@ public class EventUtils {
|
||||
profile.addXp(skill, xpRemoved);
|
||||
}
|
||||
|
||||
return isCancelled;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -119,40 +119,58 @@ public final class Misc {
|
||||
/**
|
||||
* Drop items at a given location.
|
||||
*
|
||||
* @param location The location to drop the items at
|
||||
* @param fromLocation The location to drop the items at
|
||||
* @param is The items to drop
|
||||
* @param speed the speed that the item should travel
|
||||
* @param quantity The amount of items to drop
|
||||
*/
|
||||
public static void spawnItemsTowardsLocation(Location location, Location targetLocation, ItemStack is, int quantity) {
|
||||
public static void spawnItemsTowardsLocation(Location fromLocation, Location toLocation, ItemStack is, int quantity, double speed) {
|
||||
for (int i = 0; i < quantity; i++) {
|
||||
spawnItemTowardsLocation(location, targetLocation, is);
|
||||
spawnItemTowardsLocation(fromLocation, toLocation, is, speed);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Drop an item at a given location.
|
||||
* This method is fairly expensive as it creates clones of everything passed to itself since they are mutable objects
|
||||
*
|
||||
* @param spawnLocation The location to drop the item at
|
||||
* @param itemStack The item to drop
|
||||
* @param fromLocation The location to drop the item at
|
||||
* @param toLocation The location the item will travel towards
|
||||
* @param itemToSpawn The item to spawn
|
||||
* @param speed the speed that the item should travel
|
||||
* @return Dropped Item entity or null if invalid or cancelled
|
||||
*/
|
||||
public static Item spawnItemTowardsLocation(Location spawnLocation, Location targetLocation, ItemStack itemStack) {
|
||||
if (itemStack.getType() == Material.AIR) {
|
||||
public static Item spawnItemTowardsLocation(Location fromLocation, Location toLocation, ItemStack itemToSpawn, double speed) {
|
||||
if (itemToSpawn.getType() == Material.AIR) {
|
||||
return null;
|
||||
}
|
||||
|
||||
//Work with fresh copies of everything
|
||||
ItemStack clonedItem = itemToSpawn.clone();
|
||||
Location spawnLocation = fromLocation.clone();
|
||||
Location targetLocation = toLocation.clone();
|
||||
|
||||
// We can't get the item until we spawn it and we want to make it cancellable, so we have a custom event.
|
||||
McMMOItemSpawnEvent event = new McMMOItemSpawnEvent(spawnLocation, itemStack);
|
||||
McMMOItemSpawnEvent event = new McMMOItemSpawnEvent(spawnLocation, clonedItem);
|
||||
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
||||
|
||||
if (event.isCancelled()) {
|
||||
//Something cancelled the event so back out
|
||||
if (event.isCancelled() || event.getItemStack() == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Item item = spawnLocation.getWorld().dropItem(spawnLocation, itemStack);
|
||||
Vector vector = targetLocation.toVector().subtract(spawnLocation.toVector()).normalize();
|
||||
item.setVelocity(vector);
|
||||
return item;
|
||||
//Use the item from the event
|
||||
Item spawnedItem = spawnLocation.getWorld().dropItem(spawnLocation, clonedItem);
|
||||
Vector vecFrom = spawnLocation.clone().toVector().clone();
|
||||
Vector vecTo = targetLocation.clone().toVector().clone();
|
||||
|
||||
//Vector which is pointing towards out target location
|
||||
Vector direction = vecTo.subtract(vecFrom).normalize();
|
||||
|
||||
//Modify the speed of the vector
|
||||
direction = direction.multiply(speed);
|
||||
spawnedItem.setVelocity(direction);
|
||||
return spawnedItem;
|
||||
}
|
||||
|
||||
public static void profileCleanup(String playerName) {
|
||||
|
@ -64,7 +64,7 @@ public class FormulaManager {
|
||||
public int[] calculateNewLevel(PrimarySkillType primarySkillType, int experience) {
|
||||
int newLevel = 0;
|
||||
int remainder = 0;
|
||||
int maxLevel = mcMMO.getConfigManager().getConfigLeveling().getLevelCap(primarySkillType);
|
||||
int maxLevel = mcMMO.getConfigManager().getConfigLeveling().getSkillLevelCap(primarySkillType);
|
||||
|
||||
while (experience > 0 && newLevel < maxLevel) {
|
||||
int experienceToNextLevel = getXPtoNextLevel(newLevel, currentFormula);
|
||||
|
@ -8,17 +8,13 @@ import com.gmail.nossr50.util.Permissions;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class PlayerLevelUtils {
|
||||
private HashMap<PrimarySkillType, Integer> earlyGameBoostCutoffs;
|
||||
private HashSet<CustomXPPerk> customXpPerkNodes;
|
||||
|
||||
public PlayerLevelUtils() {
|
||||
registerCustomPerkPermissions();
|
||||
earlyGameBoostCutoffs = new HashMap<>();
|
||||
calculateEarlyGameBoostCutoffs();
|
||||
applyConfigPerks();
|
||||
}
|
||||
|
||||
@ -38,29 +34,14 @@ public class PlayerLevelUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the the final level at which players will still receive an early game XP boost
|
||||
* Note: This doesn't mean early game boosts are enabled on the server, as that is a config toggle
|
||||
*
|
||||
* Check if a player is currently qualifying for the early game boosted XP
|
||||
* Will return false only if a player is above the boost level cutoff, it does not check config settings to see if the early game boost is on
|
||||
* @param mcMMOPlayer target player
|
||||
* @param primarySkillType target skill
|
||||
* @return this skills maximum early game boost level
|
||||
* @return if the player would qualify for the XP boost if its enabled
|
||||
*/
|
||||
public int getEarlyGameCutoff(PrimarySkillType primarySkillType) {
|
||||
return earlyGameBoostCutoffs.get(primarySkillType);
|
||||
}
|
||||
|
||||
private void calculateEarlyGameBoostCutoffs() {
|
||||
for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
||||
int levelCap = mcMMO.getConfigManager().getConfigLeveling().getLevelCap(primarySkillType);
|
||||
int cap;
|
||||
|
||||
if (levelCap == Integer.MAX_VALUE || levelCap <= 0) {
|
||||
cap = mcMMO.isRetroModeEnabled() ? 50 : 5;
|
||||
} else {
|
||||
cap = (int) (levelCap * mcMMO.getConfigManager().getConfigLeveling().getEarlyGameBoostMultiplier());
|
||||
}
|
||||
|
||||
earlyGameBoostCutoffs.put(primarySkillType, cap);
|
||||
}
|
||||
public static boolean qualifiesForEarlyGameBoost(McMMOPlayer mcMMOPlayer, PrimarySkillType primarySkillType) {
|
||||
return mcMMOPlayer.getSkillLevel(primarySkillType) < 1;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -131,15 +112,4 @@ public class PlayerLevelUtils {
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if a player is currently qualifying for the early game boosted XP
|
||||
* Will return false only if a player is above the boost level cutoff, it does not check config settings to see if the early game boost is on
|
||||
* @param mcMMOPlayer target player
|
||||
* @param primarySkillType target skill
|
||||
* @return if the player would qualify for the XP boost if its enabled
|
||||
*/
|
||||
public static boolean qualifiesForEarlyGameBoost(McMMOPlayer mcMMOPlayer, PrimarySkillType primarySkillType) {
|
||||
return mcMMOPlayer.getSkillLevel(primarySkillType) < mcMMO.getPlayerLevelUtils().getEarlyGameCutoff(primarySkillType);
|
||||
}
|
||||
}
|
||||
|
@ -225,9 +225,13 @@ public final class CombatUtils {
|
||||
}
|
||||
|
||||
double distanceMultiplier = archeryManager.distanceXpBonusMultiplier(target, arrow);
|
||||
double forceMultiplier = 1.0; //Hacky Fix - some plugins spawn arrows and assign them to players after the ProjectileLaunchEvent fires
|
||||
|
||||
if(arrow.hasMetadata(MetadataConstants.BOW_FORCE_METAKEY))
|
||||
forceMultiplier = arrow.getMetadata(MetadataConstants.BOW_FORCE_METAKEY).get(0).asDouble();
|
||||
|
||||
applyScaledModifiers(initialDamage, finalDamage, event);
|
||||
startGainXp(mcMMOPlayer, target, PrimarySkillType.ARCHERY, arrow.getMetadata(MetadataConstants.BOW_FORCE_METAKEY).get(0).asDouble() * distanceMultiplier);
|
||||
startGainXp(mcMMOPlayer, target, PrimarySkillType.ARCHERY, forceMultiplier * distanceMultiplier);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -399,7 +399,7 @@ public class RankUtils {
|
||||
}
|
||||
|
||||
//Default to the max level for the skill if any errors were encountered incorrect
|
||||
return mcMMO.getConfigManager().getConfigLeveling().getLevelCap(subSkillType.getParentSkill());
|
||||
return mcMMO.getConfigManager().getConfigLeveling().getSkillLevelCap(subSkillType.getParentSkill());
|
||||
}
|
||||
|
||||
public static boolean isPlayerMaxRankInSubSkill(Player player, SubSkillType subSkillType) {
|
||||
|
@ -253,8 +253,7 @@ public class SkillUtils {
|
||||
* @param maxDamageModifier the amount to adjust the max damage by
|
||||
*/
|
||||
public static void handleDurabilityChange(ItemStack itemStack, double durabilityModifier, double maxDamageModifier) {
|
||||
if((itemStack.getItemMeta().getEnchants().get(Enchantment.DURABILITY) != null && itemStack.getItemMeta().getEnchants().get(Enchantment.DURABILITY) >= 1)
|
||||
|| (itemStack.getItemMeta() != null && itemStack.getItemMeta().isUnbreakable())) {
|
||||
if(itemStack.getItemMeta() != null && itemStack.getItemMeta().isUnbreakable()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,6 @@ import com.sk89q.worldguard.WorldGuard;
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
|
||||
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
|
||||
import com.sk89q.worldguard.protection.regions.RegionContainer;
|
||||
import com.sk89q.worldguard.protection.regions.RegionQuery;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
@ -14,31 +13,18 @@ import org.bukkit.plugin.Plugin;
|
||||
import static org.bukkit.Bukkit.getServer;
|
||||
|
||||
public class WorldGuardManager {
|
||||
private static WorldGuardManager instance;
|
||||
private WorldGuardPlugin worldGuardPluginRef;
|
||||
|
||||
public WorldGuardManager() {
|
||||
|
||||
}
|
||||
|
||||
public static WorldGuardManager getInstance() {
|
||||
if (instance == null)
|
||||
instance = new WorldGuardManager();
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
public boolean hasMainFlag(Player player) {
|
||||
public boolean hasMainFlag(Player player)
|
||||
{
|
||||
if(player == null)
|
||||
return false;
|
||||
|
||||
BukkitPlayer localPlayer = BukkitAdapter.adapt(player);
|
||||
com.sk89q.worldedit.util.Location loc = localPlayer.getLocation();
|
||||
|
||||
|
||||
//WorldGuardPlugin worldGuard = getWorldGuard();
|
||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
||||
RegionQuery query = container.createQuery();
|
||||
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
|
||||
|
||||
//ApplicableRegionSet set = query.getApplicableRegions(loc);
|
||||
|
||||
@ -53,8 +39,7 @@ public class WorldGuardManager {
|
||||
com.sk89q.worldedit.util.Location loc = localPlayer.getLocation();
|
||||
|
||||
//WorldGuardPlugin worldGuard = getWorldGuard();
|
||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
||||
RegionQuery query = container.createQuery();
|
||||
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
|
||||
|
||||
//ApplicableRegionSet set = query.getApplicableRegions(loc);
|
||||
|
||||
@ -70,8 +55,7 @@ public class WorldGuardManager {
|
||||
com.sk89q.worldedit.util.Location loc = localPlayer.getLocation();
|
||||
|
||||
//WorldGuardPlugin worldGuard = getWorldGuard();
|
||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
||||
RegionQuery query = container.createQuery();
|
||||
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
|
||||
|
||||
//ApplicableRegionSet set = query.getApplicableRegions(loc);
|
||||
|
||||
@ -90,15 +74,12 @@ public class WorldGuardManager {
|
||||
return worldGuardPluginRef;
|
||||
}
|
||||
|
||||
public void registerFlags() {
|
||||
if (getWorldGuard() == null)
|
||||
return;
|
||||
|
||||
public void registerFlags()
|
||||
{
|
||||
FlagRegistry registry = WorldGuard.getInstance().getFlagRegistry();
|
||||
|
||||
try {
|
||||
// register our flag with the registry
|
||||
/*registry.register(WorldGuardFlags.MCMMO_ENABLE_WG_FLAG);
|
||||
registry.register(WorldGuardFlags.MCMMO_XP_WG_FLAG);*/
|
||||
registry.register(WorldGuardFlags.MCMMO_ENABLE_WG_FLAG);
|
||||
registry.register(WorldGuardFlags.MCMMO_XP_WG_FLAG);
|
||||
registry.register(WorldGuardFlags.MCMMO_HARDCORE_WG_FLAG);
|
||||
@ -113,5 +94,4 @@ public class WorldGuardManager {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -4,53 +4,122 @@ import com.gmail.nossr50.mcMMO;
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static org.bukkit.Bukkit.getServer;
|
||||
|
||||
public class WorldGuardUtils {
|
||||
private static WorldGuardPlugin worldGuardPluginRef;
|
||||
private static boolean isLoaded = false;
|
||||
private static boolean hasWarned = false;
|
||||
private static boolean detectedIncompatibleWG = false;
|
||||
private static final ArrayList<String> WGClassList;
|
||||
|
||||
public static boolean isWorldGuardLoaded() {
|
||||
WorldGuardPlugin plugin = getWorldGuard();
|
||||
static {
|
||||
/*
|
||||
These are the classes mcMMO tries to hook into for WG support, if any of them are missing it is safe to consider WG is not compatible
|
||||
com.sk89q.worldedit.bukkit.BukkitAdapter
|
||||
com.sk89q.worldedit.bukkit.BukkitPlayer
|
||||
com.sk89q.worldguard.WorldGuard
|
||||
com.sk89q.worldguard.bukkit.WorldGuardPlugin
|
||||
com.sk89q.worldguard.protection.flags.registry.FlagConflictException
|
||||
com.sk89q.worldguard.protection.flags.registry.FlagRegistry
|
||||
com.sk89q.worldguard.protection.regions.RegionContainer
|
||||
com.sk89q.worldguard.protection.regions.RegionQuery
|
||||
*/
|
||||
|
||||
try {
|
||||
// WorldGuard may not be loaded
|
||||
if (plugin == null) {
|
||||
return false; // Maybe you want throw an exception instead
|
||||
WGClassList = new ArrayList<>();
|
||||
WGClassList.add("com.sk89q.worldedit.bukkit.BukkitAdapter");
|
||||
WGClassList.add("com.sk89q.worldedit.bukkit.BukkitPlayer");
|
||||
WGClassList.add("com.sk89q.worldguard.WorldGuard");
|
||||
WGClassList.add("com.sk89q.worldguard.bukkit.WorldGuardPlugin");
|
||||
WGClassList.add("com.sk89q.worldguard.protection.flags.registry.FlagConflictException");
|
||||
WGClassList.add("com.sk89q.worldguard.protection.flags.registry.FlagRegistry");
|
||||
WGClassList.add("com.sk89q.worldguard.protection.regions.RegionContainer");
|
||||
WGClassList.add("com.sk89q.worldguard.protection.regions.RegionQuery");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
//Silently Fail
|
||||
//mcMMO.p.getLogger().severe("Failed to detect worldguard.");
|
||||
|
||||
public static boolean isWorldGuardLoaded()
|
||||
{
|
||||
if(detectedIncompatibleWG)
|
||||
return false;
|
||||
|
||||
worldGuardPluginRef = getWorldGuard();
|
||||
|
||||
return isLoaded;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the instance of the WG plugin if its compatible
|
||||
* Results are cached
|
||||
* @return the instance of WG plugin, null if its not compatible or isn't present
|
||||
*/
|
||||
private static WorldGuardPlugin getWorldGuard()
|
||||
{
|
||||
//WG plugin reference is already cached so just return it
|
||||
if(isLoaded)
|
||||
return worldGuardPluginRef;
|
||||
|
||||
//Grab WG if it exists
|
||||
Plugin plugin = getServer().getPluginManager().getPlugin("WorldGuard");
|
||||
|
||||
if(plugin == null) {
|
||||
//WG is not present
|
||||
detectedIncompatibleWG = true;
|
||||
mcMMO.p.getLogger().info("WorldGuard was not detected.");
|
||||
} else {
|
||||
//Check that its actually of class WorldGuardPlugin
|
||||
if(plugin instanceof WorldGuardPlugin)
|
||||
{
|
||||
if(isCompatibleVersion(plugin))
|
||||
{
|
||||
worldGuardPluginRef = (WorldGuardPlugin) plugin;
|
||||
isLoaded = true;
|
||||
}
|
||||
} else {
|
||||
//Plugin is not of the expected type
|
||||
markWGIncompatible();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return worldGuardPluginRef;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks to make sure the version of WG installed is compatible
|
||||
* Does this by checking for necessary WG classes via Reflection
|
||||
* This does not guarantee compatibility, but it should help reduce the chance that mcMMO tries to hook into WG and its not compatible
|
||||
* @return true if the version of WG appears to be compatible
|
||||
*/
|
||||
private static boolean isCompatibleVersion(Plugin plugin) {
|
||||
//Check that the version of WG is at least version 7.xx
|
||||
if(!plugin.getDescription().getVersion().startsWith("7")) {
|
||||
markWGIncompatible();
|
||||
} else {
|
||||
//Use Reflection to check for a class not present in all versions of WG7
|
||||
for(String classString : WGClassList) {
|
||||
try {
|
||||
Class<?> checkForClass = Class.forName(classString);
|
||||
detectedIncompatibleWG = false; //In case this was set to true previously
|
||||
} catch (ClassNotFoundException e) {
|
||||
mcMMO.p.getLogger().severe("Missing WorldGuard class - "+classString);
|
||||
markWGIncompatible();
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static WorldGuardPlugin getWorldGuard() {
|
||||
if (isLoaded)
|
||||
return worldGuardPluginRef;
|
||||
|
||||
Plugin plugin = getServer().getPluginManager().getPlugin("WorldGuard");
|
||||
|
||||
if (plugin instanceof WorldGuardPlugin) {
|
||||
if (plugin.getDescription().getVersion().startsWith("7")) {
|
||||
worldGuardPluginRef = (WorldGuardPlugin) plugin;
|
||||
|
||||
if (worldGuardPluginRef != null)
|
||||
isLoaded = true;
|
||||
|
||||
} else {
|
||||
if (!hasWarned) {
|
||||
mcMMO.p.getLogger().severe("mcMMO only supports WorldGuard version 7! Make sure you have WG 7! This warning will not appear again.");
|
||||
hasWarned = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return worldGuardPluginRef;
|
||||
/**
|
||||
* Mark WG as being incompatible to avoid unnecessary operations
|
||||
*/
|
||||
private static void markWGIncompatible() {
|
||||
mcMMO.p.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.");
|
||||
mcMMO.p.getLogger().severe("mcMMO will continue to function normally, but if you wish to use WG support you must use a compatible version.");
|
||||
detectedIncompatibleWG = true;
|
||||
}
|
||||
}
|
||||
|
@ -74,13 +74,14 @@ Feedback:
|
||||
SendCopyOfMessageToChat: true
|
||||
Skills:
|
||||
General:
|
||||
StartingLevel: 0
|
||||
Ability:
|
||||
Length:
|
||||
Standard:
|
||||
CapLevel: 50
|
||||
CapLevel: 100
|
||||
IncreaseLevel: 5
|
||||
RetroMode:
|
||||
CapLevel: 500
|
||||
CapLevel: 1000
|
||||
IncreaseLevel: 50
|
||||
EnchantBuff: 5
|
||||
# IncreaseLevel: This setting will determine when the length of every ability gets longer with 1 second
|
||||
|
@ -11,7 +11,7 @@ General:
|
||||
# Everything in your config related to skill level requirements, skill level bonuses, etc will be multiplied by 10 when this mode is on
|
||||
# This change is purely cosmetic, it retains the old feel of mcMMO where you could level up thousands of times
|
||||
RetroMode:
|
||||
Enabled: false
|
||||
Enabled: true
|
||||
Locale: en_US
|
||||
AprilFoolsEvent: true
|
||||
MOTD_Enabled: true
|
||||
|
@ -23,8 +23,6 @@
|
||||
# The bar is one solid piece
|
||||
EarlyGameBoost:
|
||||
Enabled: true
|
||||
#Used to determine the cap of the max boot, with default level cap it will be 5 on standard, and 50 on retro
|
||||
MaxLevelMultiplier: 0.05
|
||||
ExploitFix:
|
||||
UnsafeEnchantments: false
|
||||
# Prevent many exploits related to fishing
|
||||
@ -32,6 +30,7 @@ ExploitFix:
|
||||
EndermanEndermiteFarms: true
|
||||
Acrobatics: true
|
||||
LavaStoneAndCobbleFarming: true
|
||||
TreeFellerReducedXP: true
|
||||
Experience_Bars:
|
||||
# Turn this to false if you wanna disable XP bars
|
||||
Enable: true
|
||||
@ -354,24 +353,24 @@ Experience_Values:
|
||||
Bubble_Coral_Block: 70
|
||||
Fire_Coral_Block: 90
|
||||
Horn_Coral_Block: 125
|
||||
Coal_Ore: 100
|
||||
Diamond_Ore: 750
|
||||
Coal_Ore: 400
|
||||
Diamond_Ore: 2400
|
||||
Emerald_Ore: 1000
|
||||
End_Bricks: 200
|
||||
End_Bricks: 50
|
||||
Nether_Brick: 50
|
||||
End_Stone: 30
|
||||
Glowstone: 30
|
||||
Gold_Ore: 350
|
||||
End_Stone: 15
|
||||
Glowstone: 15
|
||||
Gold_Ore: 1300
|
||||
Terracotta: 30
|
||||
Iron_Ore: 250
|
||||
Lapis_Ore: 400
|
||||
Iron_Ore: 900
|
||||
Lapis_Ore: 800
|
||||
Mossy_Cobblestone: 30
|
||||
Netherrack: 30
|
||||
Netherrack: 15
|
||||
Obsidian: 150
|
||||
Packed_Ice: 50
|
||||
Blue_Ice: 100
|
||||
Nether_Quartz_Ore: 100
|
||||
Redstone_Ore: 150
|
||||
Packed_Ice: 15
|
||||
Blue_Ice: 15
|
||||
Nether_Quartz_Ore: 300
|
||||
Redstone_Ore: 600
|
||||
Sandstone: 30
|
||||
Black_Terracotta: 50
|
||||
Blue_Terracotta: 50
|
||||
@ -389,10 +388,10 @@ Experience_Values:
|
||||
Red_Terracotta: 50
|
||||
White_Terracotta: 50
|
||||
Yellow_Terracotta: 50
|
||||
Stone: 30
|
||||
Granite: 30
|
||||
Andesite: 30
|
||||
Diorite: 30
|
||||
Stone: 15
|
||||
Granite: 15
|
||||
Andesite: 15
|
||||
Diorite: 15
|
||||
Stone_Bricks: 50
|
||||
Cracked_Stone_Bricks: 50
|
||||
Mossy_Stone_Bricks: 50
|
||||
|
@ -1,7 +1,9 @@
|
||||
|
||||
Ability.Generic.Refresh = &a**Deine F\u00E4higkeiten sind wieder bereit**
|
||||
Ability.Generic.Template = &3{0}: &a{1}
|
||||
Ability.Generic.Template.Custom = &3{0}
|
||||
Ability.Generic.Template.Lock = &7{0}
|
||||
|
||||
Acrobatics.Ability.Proc = &a&o**Du bist Anmutig Gelandet**
|
||||
Acrobatics.Combat.Proc = &a&o**Du bist Ausgewichen**
|
||||
Acrobatics.Listener = Akrobatik:
|
||||
@ -20,6 +22,7 @@ Acrobatics.SubSkill.Roll.Name=Abrollen
|
||||
Acrobatics.SubSkill.Roll.Stat = Chance Abzurollen
|
||||
Acrobatics.SubSkill.Roll.Stat.Extra = Chance Anmutig Abzurollen
|
||||
Acrobatics.SubSkill.Roll.Stats = &6Chance Abzurollen &e{0}% &6Chance Anmutig Abzurollen &e{1}%
|
||||
|
||||
Alchemy.Ability.Locked.0 = &cGesperrt bis Level {0}!
|
||||
Alchemy.Listener = Alchemie:
|
||||
Alchemy.SkillName = Alchemie
|
||||
@ -30,7 +33,9 @@ Alchemy.SubSkill.Concoctions.Description=Braue Tr\u00E4nke mit neuen Zutaten.
|
||||
Alchemy.SubSkill.Concoctions.Name = Gebr\u00E4u
|
||||
Alchemy.SubSkill.Concoctions.Stat = Gebr\u00E4u Rang: &a{0}&3/&a{1}
|
||||
Alchemy.SubSkill.Concoctions.Stat.Extra = Zutaten [&a{0}&3]: &a{1}
|
||||
|
||||
Anvil.Unbreakable = Dieses Item ist unzerst\u00F6rbar!
|
||||
|
||||
Archery.Listener = Bogenschie\u00DFen:
|
||||
Archery.SkillName = Bogenschie\u00DFen
|
||||
Archery.SubSkill.ArcheryLimitBreak.Description = \u00DCberschreite deine Grenzen.
|
||||
@ -45,6 +50,7 @@ Archery.SubSkill.Daze.Stat=Chance, zu bet\u00E4uben
|
||||
Archery.SubSkill.SkillShot.Description = Erh\u00F6ht den von B\u00F6gen erteilten Schaden.
|
||||
Archery.SubSkill.SkillShot.Name = Skillshot
|
||||
Archery.SubSkill.SkillShot.Stat = Skillshot Bonus Schaden
|
||||
|
||||
Axes.Ability.Bonus.0 = Axtmeister
|
||||
Axes.Ability.Bonus.1 = {0} Bonus Schaden.
|
||||
Axes.Ability.Bonus.2 = R\u00FCstungsbruch
|
||||
@ -80,6 +86,7 @@ Axes.SubSkill.GreaterImpact.Name=Wuchtschlag
|
||||
Axes.SubSkill.SkullSplitter.Description = Verursacht einen Fl\u00E4chenschaden.
|
||||
Axes.SubSkill.SkullSplitter.Name = Sch\u00E4delspalter
|
||||
Axes.SubSkill.SkullSplitter.Stat = Sch\u00E4delspalter L\u00E4nge
|
||||
|
||||
Combat.ArrowDeflect = &a&o**Pfeil abgelenkt**
|
||||
Combat.BeastLore = &a&o**Biestkunde**
|
||||
Combat.BeastLoreHealth = &3Gesundheit (&a{0}&3/{1})
|
||||
@ -88,6 +95,7 @@ Combat.Gore=&a&o**Aufgeschlitzt**
|
||||
Combat.StruckByGore = &a&o**du wurdest AUFGESCHLITZT**
|
||||
Combat.TargetDazed = Ziel wurde &4bet\u00E4ubt!
|
||||
Combat.TouchedFuzzy = &a&o**Du wurdest ungl\u00FCcklich ber\u00FChrt, rin Schwindelgef\u00FChl kommt dir auf...**
|
||||
|
||||
Commands.Ability.Off = F\u00E4higkeiten Benutzung &cdeaktiviert
|
||||
Commands.Ability.On = F\u00E4higkeiten Benutzung &aaktiviert
|
||||
Commands.Ability.Toggle = Benutzung von F\u00E4higkeiten wurde f\u00FCr &e{0} ge\u00E4ndert
|
||||
@ -317,6 +325,7 @@ Commands.xprate.proper.1=&cKorrekte Eingabe f\u00FCr R\u00FCcksetzung auf Standa
|
||||
Commands.xprate.proper.2 = &cBitte entscheide mit true/false ob dies ein XP-Event ist oder nicht.
|
||||
Commands.xprate.started.0 = &6Ein Erfahungs Event f\u00FCr Skills hat begonnen!
|
||||
Commands.xprate.started.1 = &6Die Skill Erfahrungs Rate liegt jetzt bei {0}x!
|
||||
|
||||
Effects.Child.Overhaul = &3Unterskill Level&e {0}&3: {1}
|
||||
Effects.Child.ParentList = &a{0}&6(&3Level&e{1}&6)
|
||||
Effects.Effects = Effekte
|
||||
@ -324,6 +333,7 @@ Effects.Level.Overhaul=&6Level: &e{0} &3Erfahrung&e(&6{1}&e/&6{2}&e)
|
||||
Effects.Parent = &6{0} -
|
||||
Effects.SubSkills.Overhaul = F\u00E4higkeiten
|
||||
Effects.Template = &3{0}: &a{1}
|
||||
|
||||
Excavation.Ability.Lower = &a&o**Du senkst deine Schaufel ...**
|
||||
Excavation.Ability.Ready = &a&o**Du hebst deine Schaufel!**
|
||||
Excavation.Listener = Graben:
|
||||
@ -338,6 +348,7 @@ Excavation.SubSkill.Archaeology.Name=Arch\u00E4ologie
|
||||
Excavation.SubSkill.GigaDrillBreaker.Description = Dreifache Droprate, Dreifache Erfahrung und Bonus Geschwindigkeit.
|
||||
Excavation.SubSkill.GigaDrillBreaker.Name = Gigabohrer
|
||||
Excavation.SubSkill.GigaDrillBreaker.Stat = Gigabohrer Dauer
|
||||
|
||||
Fishing.Ability.Info = Zauberj\u00E4ger: &7 **Verbessert sich mit Schatzj\u00E4ger Rang**
|
||||
Fishing.Ability.Locked.0 = Gesperrt bis Level {0}!
|
||||
Fishing.Ability.Locked.1 = Gesperrt bis Level {0}!
|
||||
@ -346,10 +357,10 @@ Fishing.Ability.TH.Boom=&c&lDeine Angelschnur hat sich in einer &4&lSeemine &c&l
|
||||
Fishing.Ability.TH.MagicFound = &bDu f\u00FChlst etwas magisches in diesem Fang...
|
||||
Fishing.Ability.TH.Poison = &7Irgendentwas stinkt hier...
|
||||
Fishing.Chance.Raining = &9 Regen Bonus
|
||||
Fishing.Exhausting=&c&oUnsachgem\u00E4\u00DFe Benutzung der Angelrute f\u00FChrt zu erm\u00FCdung und abnutzen der Rute.
|
||||
Fishing.Exhausting = &c&oUnsachgem\u00E4\u00DFe Nutzung der Angelrute f\u00FChrt zu Erm\u00FCdung und abnutzen der Rute.
|
||||
Fishing.Listener = Angeln:
|
||||
Fishing.LowResources=&7Du sp\u00FCrst, dass hier wahrscheinlich nicht viele Fische \u00FCbrig sind...
|
||||
Fishing.Scarcity=&e&oAn diesem Ort wurde bereits sehr oft geangelt, versuche es woanders.
|
||||
Fishing.LowResourcesTip = &7Dein Gesp\u00FChr sagt dir, dass es hier kaum noch Fische gibt. Versuche es mindestens {0} Bl\u00F6cke entfernt.
|
||||
Fishing.ScarcityTip = &e&oDas Gebiet ist \u00FCberfischt. Versuche es woanders, mindestens {0} Bl\u00F6cke entfernt.
|
||||
Fishing.Scared = &7&oHektische Bewegungen ver\u00E4ngstigen Fische!
|
||||
Fishing.SkillName = Angeln
|
||||
Fishing.SubSkill.FishermansDiet.Description = Verbessert den N\u00E4hrwert von geangelter Nahrung
|
||||
@ -371,6 +382,7 @@ Fishing.SubSkill.TreasureHunter.Description=Angle verschiedene Objekte
|
||||
Fishing.SubSkill.TreasureHunter.Name = Schatz J\u00E4ger
|
||||
Fishing.SubSkill.TreasureHunter.Stat = Schatz J\u00E4ger Rang: &a{0}&3/&a{1}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra = Drop Rate: &7\u00DCblich: &e{0} &aUn\u00FCblich: &e{1}\r\n&9Selten: &e{2} &dEpisch: &e{3} &6Legend\u00E4r: &e{4} &bSchallplatte: &e{5}
|
||||
|
||||
Guides.Acrobatics.Section.0 = &3\u00DCber Akrobatik:\n&eAkrobatik ist die Kunst sich anmutig fortzubewegen.\n&eFall- und Kampfschaden werden reduziert\n\n&3XP GAIN:\n&eErfahrung sammelst du indem du in K\u00E4mpfen\n&eausweichst oder St\u00FCrze aus gro\u00DFen H\u00F6hen \u00FCberlebst.
|
||||
Guides.Acrobatics.Section.1 = &3Wie funktioniert Abrollen?\n&eAb und zu rollst du beim Fallen ab und der Fallschaden wird\n&ereduziert. Wenn du den Schleichen Knopf w\u00E4hrend dem Fallen\n&eh\u00E4ltst, verdoppelt sich die Chance abzurollen.\n&eIn dem Fall rollst du anmutig ab.\n&eAnmutige Rollen sind wie normale Rollen, nur dass\n&esie \u00F6fter passieren und damit mehr Schutz vor St\u00FCrzen\n&eliefern.
|
||||
Guides.Acrobatics.Section.2 = &3Wie funktioniert Ausweichen?\n&eAusweichen ist eine passive F\u00E4higkeit\n&edie ab und zu den Schaden in K\u00E4mpfen halbiert.\n&eDie Chance auszuweichen ist abh\u00E4ngig vom \n&eAkrobatiklevel.
|
||||
@ -457,6 +469,7 @@ Guides.Woodcutting.Section.0=&3\u00DCber Holzf\u00E4ller:\n&eIm Holzf\u00E4llen
|
||||
Guides.Woodcutting.Section.1 = &3Wie funktioniert der Baumf\u00E4ller?\n&eBaumf\u00E4ller ist eine aktive F\u00E4higkeit. Mache mit der Axt in der\n&eHand einen Rechtsklick um sie zu aktivieren. Der Baum\n&ewird sofortig gef\u00E4llt und alle St\u00E4mme abgebaut.
|
||||
Guides.Woodcutting.Section.2 = &3Wie funktioniert Bl\u00E4ttersturm?\n&eBl\u00E4ttersturm ist eine passive F\u00E4higkeit die Bl\u00E4tter\n&ebei Ber\u00FChrung mit der Axt sofortig bricht. Standardm\u00E4\u00DFig\n&ewird diese F\u00E4higkeit bei Level 100 freigeschaltet.
|
||||
Guides.Woodcutting.Section.3 = &3Wie funktionieren Doppel-Drops?\n&eDiese passive F\u00E4higkeit gibt dir ab und zu doppelten\n&eErtrag f\u00FCr jeden Stamm den du f\u00E4llst.
|
||||
|
||||
Hardcore.DeathStatLoss.Name = Skillverlust bei Tod:
|
||||
Hardcore.DeathStatLoss.PercentageChanged = &6[mcMMO] Der Verlustprozentsatz wurde auf {0} ge\u00E4ndert.
|
||||
Hardcore.DeathStatLoss.PlayerDeath = &6[mcMMO] &4Du hast durch den Tod&9{0}&4 Level verloren.
|
||||
@ -468,6 +481,7 @@ Hardcore.Vampirism.Name=Vampirismus
|
||||
Hardcore.Vampirism.PercentageChanged = &6[mcMMO] Der Vampirismus Prozentsatz wurde auf {0} ge\u00E4ndert.
|
||||
Hardcore.Vampirism.Victim.Failure = &6[mcMMO] &e{0}&7 hat es nicht geschafft Wissen von dir zu stehlen!
|
||||
Hardcore.Vampirism.Victim.Success = &6[mcMMO] &e{0}&4 hat&9{1}&4 Level von dir gestohlen!
|
||||
|
||||
Herbalism.Ability.GTe.NeedMore = Du brauchst mehr Samen um Gr\u00FCnes Land zu verbreiten.
|
||||
Herbalism.Ability.GTh = &a**GR\u00DCNER DAUMEN**
|
||||
Herbalism.Ability.GTh.Fail = **Gr\u00FCner Daumen GESCHEITERT**
|
||||
@ -503,12 +517,15 @@ Herbalism.SubSkill.HylianLuck.Stat=Hylian Gl\u00FCck Chance
|
||||
Herbalism.SubSkill.ShroomThumb.Description = Verbreite Myzel auf Gras und Erde
|
||||
Herbalism.SubSkill.ShroomThumb.Name = Pilz Zehe
|
||||
Herbalism.SubSkill.ShroomThumb.Stat = Pilz Zehe Chance
|
||||
|
||||
Holiday.Anniversary = &9Alles gute zu mcMMO's {0} j\u00E4hrigen Geburtstag!\r\n&9In Ehren von nossr50 und all den anderen flei\u00DFigen Entwicklern, hier ist eine kleine Feuerwerk Show!
|
||||
Holiday.AprilFools.Levelup = &6{0} ist jetzt Level &a{1}&6!
|
||||
|
||||
Inspect.Offline = &cDu hast nicht die Rechte um offline Spieler zu inspizieren!
|
||||
Inspect.OfflineStats = mcMMO Stats f\u00FCr Offline Spieler &e{0}
|
||||
Inspect.Stats = &amcMMO Stats f\u00FCr &e{0}
|
||||
Inspect.TooFar = Du bist zu weit entfernt um den Spieler zu inspizieren!
|
||||
|
||||
Item.ChimaeraWing.Fail = &c**CHIMAERA FL\u00DCGEL GESCHEITERT!**
|
||||
Item.ChimaeraWing.Lore = &7Teleportiert dich zu deinem Bett.
|
||||
Item.ChimaeraWing.Name = Chimaera Fl\u00FCgel
|
||||
@ -520,6 +537,7 @@ Item.FluxPickaxe.Name=Schmelzhacke
|
||||
Item.Generic.Wait = &eDu musst noch &6{0}s &ewarten bis du das wieder verwenden kannst.
|
||||
Item.Injured.Wait = &eDu wurdest vor kurzem verletzt und musst noch &6{0}s &ewarten bis du das wieder verwenden kannst.
|
||||
Item.NotEnough = Du ben\u00F6tigst &e{0}&c weitere &6{1}&c!
|
||||
|
||||
JSON.Acrobatics = Akrobatik
|
||||
JSON.Acrobatics.Roll.Interaction.Activated = &cAbgerollt
|
||||
JSON.Acrobatics.SubSkill.Roll.Details.Tips = Wenn du beim Fallen schleichst, kannst du bis zu zweimal so viel Schaden verhindern, wie du eigentlich erleiden w\u00FCrdest!
|
||||
@ -567,6 +585,7 @@ JSON.URL.Website=Die offizielle mcMMO Website!
|
||||
JSON.URL.Wiki = Das offizielle mcMMO Wiki!
|
||||
JSON.Unarmed = Faustkampf
|
||||
JSON.Woodcutting = Holzf\u00E4llen
|
||||
|
||||
MOTD.Donate = &3Spenden Info:
|
||||
MOTD.Hardcore.DeathStatLoss.Stats = &6[mcMMO] &3Skillverlust bei Tod: &4{0}%
|
||||
MOTD.Hardcore.Enabled = &6[mcMMO] &3Hardcore Modus aktiviert: &4{0}
|
||||
@ -575,6 +594,7 @@ MOTD.PerksPrefix=&6[mcMMO Boni]
|
||||
MOTD.Version = &6[mcMMO] Verwende Version&3{0}
|
||||
MOTD.Version.Overhaul = &6[mcMMO] &3\u00DCberholungs Era&6 - &3{0}
|
||||
MOTD.Website = &6[mcMMO] &a{0}&e - mcMMO Website
|
||||
|
||||
Mining.Ability.Locked.0 = GESPERRT bis Skill {0}+ (Z\u00FCndstoff)
|
||||
Mining.Ability.Locked.1 = GESPERRT bis Skill {0}+ (Sprengmeister)
|
||||
Mining.Ability.Locked.2 = GESPERRT bis Skill {0}+ (Explosions-Experte)
|
||||
@ -606,6 +626,7 @@ Mining.SubSkill.DoubleDrops.Stat=Doppeldrop Chance
|
||||
Mining.SubSkill.SuperBreaker.Description = Abbaugeschwindigkeit+, Dreifach-Drop Chance
|
||||
Mining.SubSkill.SuperBreaker.Name = Superbrecher
|
||||
Mining.SubSkill.SuperBreaker.Stat = Superbrecher L\u00E4nge
|
||||
|
||||
Overhaul.Levelup = [[BOLD]]{0} erh\u00F6ht auf [[RESET]][[GREEN]][[BOLD]]{2}[[RESET]][[WHITE]].
|
||||
Overhaul.Name.Acrobatics = Akrobatik
|
||||
Overhaul.Name.Alchemy = Alchemie
|
||||
@ -626,6 +647,7 @@ Overhaul.mcMMO.Header=&c[]=====[]&a mcMMO - \u00DCberholungs \u00C4ra &c[]=====[
|
||||
Overhaul.mcMMO.MmoInfo.Wiki = &e[&fLese \u00FCber diesen Skill im Wiki!&e]
|
||||
Overhaul.mcMMO.Url.Wrap.Prefix = [[RED]][|
|
||||
Overhaul.mcMMO.Url.Wrap.Suffix = [[RED]]|]
|
||||
|
||||
Party.Alliance.Disband = &7Deine Gruppe ist nicht mehr verb\u00FCndet mit &c{0}
|
||||
Party.Alliance.Formed = &7Deine Gruppe ist jetzt verb\u00FCndet mit &a{0}
|
||||
Party.Disband = &7Die Gruppe wurde aufgel\u00F6st
|
||||
@ -701,6 +723,7 @@ Party.Teleport.Player=&aDu wurdest zu {0} teleportiert.
|
||||
Party.Teleport.Self = &cDu kannst dich nicht zu dir selbst teleportieren!
|
||||
Party.Teleport.Target = &a{0} hat sich zu dir teleportiert.
|
||||
Party.Unlocked = &7Gruppe ist entsperrt.
|
||||
|
||||
Perks.ActivationTime.Bonus = &6 ({0}s mit Ausdauer Bonus)
|
||||
Perks.ActivationTime.Desc = Erh\u00F6ht die F\u00E4higkeitszeit um {0} Sekunden.
|
||||
Perks.ActivationTime.Name = Ausdauer
|
||||
@ -712,7 +735,9 @@ Perks.Lucky.Desc.Login=Bestimmte Skills und F\u00E4higkeiten werden um 33.3% \u0
|
||||
Perks.Lucky.Name = Gl\u00FCck
|
||||
Perks.XP.Desc = Erhalte mehr Erfahrung in bestimmen Skills.
|
||||
Perks.XP.Name = Erfahrung
|
||||
|
||||
Profile.Loading.Success = &aDein Profil wurde geladen.
|
||||
|
||||
Repair.Arcane.Downgrade = Zauber-Wert des Gegenstands vermindert.
|
||||
Repair.Arcane.Fail = Der Gegenstands wurde entzaubert.
|
||||
Repair.Arcane.Lost = Du hast nicht gen\u00FCgend Skill um Verzauberungen zu erhalten.
|
||||
@ -750,6 +775,7 @@ Repair.SubSkill.StoneRepair.Name=Stein Reparatur ({0}+ SKILL)
|
||||
Repair.SubSkill.SuperRepair.Description = Doppelte Effektivit\u00E4t
|
||||
Repair.SubSkill.SuperRepair.Name = Super-Reparatur
|
||||
Repair.SubSkill.SuperRepair.Stat = Chance auf Superreparatur
|
||||
|
||||
Salvage.Ability.Bonus.0 = Fortgeschrittenes Verwerten
|
||||
Salvage.Ability.Bonus.1 = Max Ertrag {0} Item zerst\u00F6rt
|
||||
Salvage.Ability.Locked.0 = GESPERRT bis Skill {0}+ (Fortgeschrittenes Verwerten)
|
||||
@ -773,6 +799,7 @@ Salvage.SubSkill.ArcaneSalvage.Name=Magische Bergung
|
||||
Salvage.SubSkill.ArcaneSalvage.Stat = Magische Bergung: &eRank {0}/{1}
|
||||
Salvage.SubSkill.UnderstandingTheArt.Description = Du w\u00FChlst nicht einfach nur durch den M\u00FCll deines Nachbarn, du k\u00FCmmerst dich auch um die Umwelt! Gibt Boni zu verschiedenen Aspekten der Bergung.
|
||||
Salvage.SubSkill.UnderstandingTheArt.Name = Die Lehre der Bergung
|
||||
|
||||
Scoreboard.Header.PlayerCooldowns = mcMMO Abklingzeiten
|
||||
Scoreboard.Header.PlayerInspect = mcMMO Stats: {0}
|
||||
Scoreboard.Header.PlayerRank = mcMMO Bestenlisten
|
||||
@ -785,6 +812,7 @@ Scoreboard.Misc.Level=&3Level
|
||||
Scoreboard.Misc.Overall = &6Insgesamt
|
||||
Scoreboard.Misc.PowerLevel = &6Gesamt Level
|
||||
Scoreboard.Misc.RemainingXP = Verbliebene XP
|
||||
|
||||
Skills.AbilityGateRequirementFail = &7Du ben\u00F6tigst &e{0}&7 weitere Level in &3{1}&7 um diese Superf\u00E4higkeit zu benutzen!
|
||||
Skills.Cancelled = {0} abgebrochen!
|
||||
Skills.Child = &6(VERWANDTER SKILL)
|
||||
@ -798,6 +826,7 @@ Skills.Overhaul.Header=[[RED]][]=====[][[GREEN]] {0} [[RED]][]=====[]
|
||||
Skills.Parents = ELTERN
|
||||
Skills.Stats = {0}&a{1}&3 XP(&7{2}&3/&7{3}&3)
|
||||
Skills.TooTired = Du bist zu m\u00FCde um diese F\u00E4higkeit zu verwenden. &e({0}s)
|
||||
|
||||
Smelting.Ability.Locked.0 = GESPERRT bis {0}+ Skill (XP BOOST)
|
||||
Smelting.Ability.Locked.1 = GESPERRT bis {0}+ Skill (SCHMELZTIEGEL)
|
||||
Smelting.Effect.4 = Vanilla XP Boost
|
||||
@ -816,10 +845,12 @@ Smelting.SubSkill.SecondSmelt.Stat=Extra Schmelzung Chance
|
||||
Smelting.SubSkill.UnderstandingTheArt.Description = M\u00F6glicherweise verbringst du etwas zu viel zeit damit, Erze in H\u00F6hlen zu schmelzen. Gibt Boni zu verschiedenen Aspekten des Bergbaus.
|
||||
Smelting.SubSkill.UnderstandingTheArt.Name = Die Kunst des Bergbaus
|
||||
Smelting.SubSkill.UnderstandingTheArt.Stat = Vanilla Erfahrungsmultiplikator: &e{0}x
|
||||
|
||||
Stats.Header.Combat = &6-=Kampfskills=-
|
||||
Stats.Header.Gathering = &6-=Sammelskills=-
|
||||
Stats.Header.Misc = &6-=Weitere Skills=-
|
||||
Stats.Own.Stats = &aSkill Statistik
|
||||
|
||||
Swords.Ability.Lower = &7**Du senkst dein SCHWERT**
|
||||
Swords.Ability.Ready = &a**Dein SCHWERT ist bereit**
|
||||
Swords.Combat.Bleeding = &a**GEGNER BLUTET**
|
||||
@ -854,6 +885,7 @@ Swords.SubSkill.Stab.Stat=Schaden durch Erstechen
|
||||
Swords.SubSkill.SwordsLimitBreak.Description = \u00DCberschreite deine Grenzen.
|
||||
Swords.SubSkill.SwordsLimitBreak.Name = \u00DCberwindung
|
||||
Swords.SubSkill.SwordsLimitBreak.Stat = Bonus Schaden durch \u00DCberwindung
|
||||
|
||||
Taming.Ability.Bonus.0 = Umweltbewusst
|
||||
Taming.Ability.Bonus.1 = W\u00F6lfe weichen Gefahren aus
|
||||
Taming.Ability.Bonus.10 = Heiliger Hund
|
||||
@ -905,8 +937,10 @@ Taming.Summon.Fail.TooMany=Du hast das Maximum an beschworenen Tieren erreicht
|
||||
Taming.Summon.Fail.Wolf = Du hast zu viele W\u00F6lfe um dich, um weitere zu beschw\u00F6ren.
|
||||
Taming.Summon.Lifespan = (Lebenszeit: {0}s)
|
||||
Taming.Summon.Name.Format = {0}''s {1}
|
||||
|
||||
Teleport.Cancelled = &4Teleport abgebrochen!
|
||||
Teleport.Commencing = &7Beginne Teleport in &6({0}) &7Sekunden, bitte stillhalten...
|
||||
|
||||
Unarmed.Ability.Bonus.0 = Eiserner Arm
|
||||
Unarmed.Ability.Bonus.1 = +{0} Schadens-Bonus
|
||||
Unarmed.Ability.IronGrip.Attacker = Dein Gegner hat einen eisernen Griff!
|
||||
@ -939,8 +973,10 @@ Unarmed.SubSkill.IronGrip.Stat=Eisen Griff Chance
|
||||
Unarmed.SubSkill.UnarmedLimitBreak.Description = Durchbreche deine Grenzen!
|
||||
Unarmed.SubSkill.UnarmedLimitBreak.Name = \u00DCberwindung
|
||||
Unarmed.SubSkill.UnarmedLimitBreak.Stat = Bonus Schaden durch \u00DCberwindung
|
||||
|
||||
UpdateChecker.NewAvailable = Eine neue Version von mcMMO ist auf Spigot erh\u00E4ltlich!
|
||||
UpdateChecker.Outdated = Du verwendest eine veraltete mcMMO Version!
|
||||
|
||||
Woodcutting.Ability.0 = Bl\u00E4ttersturm
|
||||
Woodcutting.Ability.1 = Bl\u00E4st Bl\u00E4tter davon
|
||||
Woodcutting.Ability.Locked.0 = GESPERRT bis Skill {0}+ (Bl\u00E4ttersturm)
|
||||
@ -967,6 +1003,7 @@ Woodcutting.SubSkill.Splinter.Name=Splitter
|
||||
Woodcutting.SubSkill.TreeFeller.Description = L\u00E4sst B\u00E4ume explodieren
|
||||
Woodcutting.SubSkill.TreeFeller.Name = Baumf\u00E4ller
|
||||
Woodcutting.SubSkill.TreeFeller.Stat = Baumf\u00E4ller L\u00E4nge
|
||||
|
||||
XPBar.Acrobatics = Akrobatik Level: &6{0}
|
||||
XPBar.Alchemy = Alchemie Level: &6{0}
|
||||
XPBar.Archery = Bogenschie\u00DFen Level: &6{0}
|
||||
@ -983,7 +1020,9 @@ XPBar.Swords=Schwertkampf Level: &6{0}
|
||||
XPBar.Taming = Z\u00E4hmen Level: &6{0}
|
||||
XPBar.Unarmed = Faustkampf Level: &6{0}
|
||||
XPBar.Woodcutting = Holzf\u00E4llen Level: &6{0}
|
||||
|
||||
XPRate.Event = &6Es findet derzeit ein Skill Event statt! Du bekommst aktuell &c{0} &6mal so viel Erfahrung f\u00FCr deine Skills wie normal!
|
||||
|
||||
mcMMO.Description = &3\u00DCber das &emcMMO&3 Projekt:,&6mcMMO ist ein &copen source&6 RPG mod erstellt in Februar 2011&6von &9nossr50&6. Das Ziel ist es ein qualitatives RPG Erlebnis zu liefern.,&3Tips:,&6 - &aNutze &c/mcmmo help&a um Befehle zu sehen &6,- &aNutze &c/skillname&a f\u00FCr detaillierte Skill Infos,&3Entwickler:,&6 - &anossr50 &9(Erfinder & Projektleitung),&6 - &aGJ &9(Fr\u00FChere Projektleitung),&6 - &aNuclearW &9(Entwickler),&6 - &abm01 &9(Entwickler),&6 - &aTfT_02 &9(Entwickler),&6 - &aGlitchfinder &9(Entwickler),&6 - &at00thpick1 &9(Entwickler),&6 - &alumis31 &9 (Urspr\u00FCngliche Deutsche \u00DCbersetzung),&6 - &aOverCrave &9 (Neue Deutsche \u00DCbersetzung & \u00DCberarbeitung),&3N\u00FCtzliche Links:,&6 - &ahttps://github.com/mcMMO-Dev/mcMMO/issues&6 Bug Reporting,&6 - &ahttps://discord.gg/EJGVanb &6 Offizieller Discord (Englisch)
|
||||
mcMMO.NoInvites = &cDu hast zurzeit keine Einladungen
|
||||
mcMMO.NoPermission = &4Unzureichende Berechtigungen.
|
||||
|
@ -210,7 +210,9 @@ Excavation.SubSkill.GigaDrillBreaker.Name=Giga Drill Breaker
|
||||
Excavation.SubSkill.GigaDrillBreaker.Description=3x Drop Rate, 3x EXP, +Speed
|
||||
Excavation.SubSkill.GigaDrillBreaker.Stat=Giga Drill Breaker Duration
|
||||
Excavation.SubSkill.Archaeology.Name=Archaeology
|
||||
Excavation.SubSkill.Archaeology.Description=Unearth the secrets of the land!
|
||||
Excavation.SubSkill.Archaeology.Description=Unearth the secrets of the land! High skill levels increase your odds of finding experience orbs when you find treasure!
|
||||
Excavation.SubSkill.Archaeology.Stat=Archaelogy Experience Orb Chance
|
||||
Excavation.SubSkill.Archaeology.Stat.Extra=Archaeoloy Experience Orb Amount
|
||||
Excavation.Listener=Excavation:
|
||||
Excavation.SkillName=EXCAVATION
|
||||
Excavation.Skills.GigaDrillBreaker.Off=**Giga Drill Breaker has worn off**
|
||||
@ -243,7 +245,7 @@ Fishing.SubSkill.FishermansDiet.Description=Improves hunger restored from fished
|
||||
Fishing.SubSkill.FishermansDiet.Stat=Fisherman's Diet:[[GREEN]] Rank {0}
|
||||
Fishing.SubSkill.MasterAngler.Name=Master Angler
|
||||
Fishing.SubSkill.MasterAngler.Description=Improves chance of getting a bite while fishing
|
||||
Fishing.SubSkill.MasterAngler.Stat=Added Bite Chance at your current location: [[GREEN]]+[[YELLOW]]{0}
|
||||
Fishing.SubSkill.MasterAngler.Stat=Added Bite Chance at your current location: [[GREEN]]+{0}
|
||||
Fishing.SubSkill.IceFishing.Name=Ice Fishing
|
||||
Fishing.SubSkill.IceFishing.Description=Allows you to fish in icy biomes
|
||||
Fishing.SubSkill.IceFishing.Stat=Ice Fishing
|
||||
@ -1094,4 +1096,8 @@ Reminder.Squelched=[[GRAY]]Reminder: You are currently not receiving notificatio
|
||||
#Misc
|
||||
Commands.Reload.Start=mcMMO is reloading... this may take a moment
|
||||
Commands.Reload.Finished=mcMMO has finished reloading!
|
||||
#Locale
|
||||
Locale.Reloaded=[[GREEN]]Locale reloaded!
|
||||
#Player Leveling Stuff
|
||||
LevelCap.PowerLevel=[[GOLD]]([[GREEN]]mcMMO[[GOLD]]) [[YELLOW]]You have reached the power level cap of [[RED]]{0}[[YELLOW]]. You will cease to level in skills from this point on.
|
||||
LevelCap.Skill=[[GOLD]]([[GREEN]]mcMMO[[GOLD]]) [[YELLOW]]You have reached the level cap of [[RED]]{0}[[YELLOW]] for [[GOLD]]{1}[[YELLOW]]. You will cease to level in this skill from this point on.
|
||||
|
@ -364,8 +364,6 @@ Repair.Arcane.Perfect=[[GREEN]]\u3042\u306a\u305f\u306f\u3053\u306e\u30a2\u30a4\
|
||||
Salvage.Pretty.Name=\u30b5\u30eb\u30d9\u30fc\u30b8
|
||||
Salvage.SubSkill.UnderstandingTheArt.Name=\u82b8\u8853\u3092\u7406\u89e3\u3059\u308b\u3002
|
||||
Salvage.SubSkill.UnderstandingTheArt.Description=\u3042\u306a\u305f\u306f\u305f\u3060\u3042\u306a\u305f\u306e\u96a3\u4eba\u306e\u30b4\u30df\u3092\u6398\u308a\u4e0b\u3052\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u3042\u306a\u305f\u306f\u74b0\u5883\u306e\u4e16\u8a71\u3092\u3057\u3066\u3044\u307e\u3059\u3002\n\u30b5\u30eb\u30d9\u30fc\u30b8\u306e\u69d8\u3005\u306a\u7279\u6027\u3092\u5f15\u304d\u51fa\u3059\u3002
|
||||
Salvage.SubSkill.AdvancedSalvage.Name=\u9ad8\u5ea6\u306a\u30b5\u30eb\u30d9\u30fc\u30b8
|
||||
Salvage.SubSkill.AdvancedSalvage.Description=\u8010\u4e45\u5024\u306e\u6e1b\u3063\u305f\u30a2\u30a4\u30c6\u30e0\u3092\u30b5\u30eb\u30d9\u30fc\u30b8\u3059\u308b\u3002
|
||||
Salvage.SubSkill.ScrapCollector.Name=\u30b9\u30af\u30e9\u30c3\u30d7\u30b3\u30ec\u30af\u30bf\u30fc
|
||||
Salvage.SubSkill.ScrapCollector.Description=\u30b5\u30eb\u30d9\u30fc\u30b8\u306b\u3088\u308b\u30a2\u30a4\u30c6\u30e0\u304b\u3089\u306e\u7d20\u6750\u56de\u53ce\u3001\u5b8c\u74a7\u306a\u30b5\u30eb\u30d9\u30fc\u30b8\u306f\u30b9\u30ad\u30eb\u3068\u904b\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002
|
||||
Salvage.SubSkill.ScrapCollector.Stat=\u30b9\u30af\u30e9\u30c3\u30d7\u30b3\u30ec\u30af\u30bf\u30fc: [[GREEN]]\u6700\u5927[[YELLOW]]{0}\u500b[[GREEN]]\u306e\u30a2\u30a4\u30c6\u30e0\u3092\u30b5\u30eb\u30d9\u30fc\u30b8\u3002\u904b\u304c\u95a2\u4fc2\u3057\u3066\u3044\u307e\u3059\u3002
|
||||
@ -386,6 +384,10 @@ Salvage.Skills.ArcaneSuccess=[[GREEN]]\u3053\u306e\u30a2\u30a4\u30c6\u30e0\u306b
|
||||
Salvage.Listener.Anvil=[[DARK_RED]]\u3042\u306a\u305f\u306f\u30b5\u30eb\u30d9\u30fc\u30b8\u30a2\u30f3\u30d3\u30eb\u3092\u8a2d\u7f6e\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u3092\u30c4\u30fc\u30eb\u3068\u9632\u5177\u306e\u30b5\u30eb\u30d9\u30fc\u30b8\u306b\u4f7f\u3063\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
Salvage.Listener=\u30b5\u30eb\u30d9\u30fc\u30b8:
|
||||
Salvage.SkillName=\u30b5\u30eb\u30d9\u30fc\u30b8
|
||||
Salvage.Skills.Lottery.Normal=[[YELLOW]]{1}[[GOLD]]\u304b\u3089[[DARK_AQUA]]{0}[[GOLD]]\u306e\u7d20\u6750\u3092\u56de\u53ce\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002
|
||||
Salvage.Skills.Lottery.Perfect=[[GREEN]][[BOLD]]\u30d1\u30fc\u30d5\u30a7\u30af\u30c8\uff01[[RESET]][[GOLD]] \u3042\u306a\u305f\u306f [[DARK_AQUA]]{1}[[GOLD]]\u3092\u30b5\u30eb\u30d9\u30fc\u30b8\u3057\u3001[[DARK_AQUA]]{0}[[GOLD]]\u500b\u306e\u7d20\u6750\u3092\u56de\u53ce\u3057\u307e\u3057\u305f\u3002
|
||||
Salvage.Skills.Lottery.Untrained=[[GRAY]]\u3042\u306a\u305f\u306f\u30b5\u30eb\u30d9\u30fc\u30b8\u3092\u6b63\u3057\u304f\u8a13\u7df4\u3067\u304d\u3066\u3044\u307e\u305b\u3093\u3002 [[GREEN]]{1}[[GRAY]]\u304b\u3089[[RED]]{0}[[GRAY]]\u500b\u306e\u7d20\u6750\u3057\u304b\u56de\u53ce\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f
|
||||
|
||||
|
||||
#Anvil (Shared between SALVAGE and REPAIR)
|
||||
Anvil.Unbreakable=\u3053\u306e\u30a2\u30a4\u30c6\u30e0\u306f\u58ca\u308c\u307e\u305b\u3093\uff01
|
||||
@ -659,6 +661,18 @@ Commands.Event.XP=[[DARK_AQUA]]XP\u30ec\u30fc\u30c8\u306f\u73fe\u5728[[GOLD]]{0}
|
||||
Commands.xprate.started.0=[[GOLD]]mcMMO\u306eXP\u30a4\u30d9\u30f3\u30c8\u304c\u958b\u59cb\u3055\u308c\u307e\u3057\u305f\uff01
|
||||
Commands.xprate.started.1=[[GOLD]]mcMMO\u306eXP\u30ec\u30fc\u30c8\u306f3\u500d\u306b\u306a\u308a\u307e\u3057\u305f\uff01
|
||||
|
||||
# Admin Notifications
|
||||
Server.ConsoleName=[[YELLOW]][Server]
|
||||
Notifications.Admin.XPRate.Start.Self=[[GRAY]]\u3042\u306a\u305f\u306f[[GOLD]]{0}x[[GRAY]]\u306b\u30b0\u30ed\u30fc\u30d0\u30ebXP\u30ec\u30fc\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3057\u305f\u3002
|
||||
Notifications.Admin.XPRate.End.Self=[[GRAY]]XP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u3092\u7d42\u4e86\u3057\u307e\u3057\u305f\u3002
|
||||
Notifications.Admin.XPRate.End.Others={0}[[GRAY]]\u306fXP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u3092\u7d42\u4e86\u3057\u307e\u3057\u305f
|
||||
Notifications.Admin.XPRate.Start.Others={0}[[GRAY]]\u304c{1}x\u3067\u30b0\u30ed\u30fc\u30d0\u30ebXP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u3092\u958b\u59cb\u307e\u305f\u306f\u5909\u66f4\u3057\u307e\u3057\u305f
|
||||
Notifications.Admin.Format.Others=[[GOLD]]([[GREEN]]mcMMO [[DARK_AQUA]]\u7ba1\u7406\u8005[[GOLD]]) [[GRAY]]{0}
|
||||
Notifications.Admin.Format.Self=[[GOLD]]([[GREEN]]mcMMO[[GOLD]]) [[GRAY]]{0}
|
||||
|
||||
# Event
|
||||
XPRate.Event=[[GOLD]]mcMMO\u306f\u73fe\u5728XP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u4e2d\u3067\u3059\uff01XP\u30ec\u30fc\u30c8\u306f{0}x\u3067\u3059\uff01
|
||||
|
||||
#GUIDES
|
||||
Guides.Available=[[GRAY]]\u5229\u7528\u53ef\u80fd\u306a{0}\u306e\u30ac\u30a4\u30c9 - \/{1} ? [\u30da\u30fc\u30b8]
|
||||
Guides.Header=[[GOLD]]-=[[GREEN]]{0} \u30ac\u30a4\u30c9[[GOLD]]=-
|
||||
@ -762,20 +776,42 @@ Guides.Woodcutting.Section.1=[[DARK_AQUA]]How does Tree Feller work?\n[[YELLOW]]
|
||||
Guides.Woodcutting.Section.2=[[DARK_AQUA]]How does Leaf Blower work?\n[[YELLOW]]Leaf Blower is a passive ability that will cause leaf\n[[YELLOW]]blocks to break instantly when hit with an axe. By default,\n[[YELLOW]]this ability unlocks at level 100.
|
||||
Guides.Woodcutting.Section.3=[[DARK_AQUA]]How do Double Drops work?\n[[YELLOW]]This passive ability gives you a chance to obtain an extra\n[[YELLOW]]block for every log you chop.
|
||||
|
||||
#INSPECT
|
||||
Inspect.Offline= [[RED]]\u3042\u306a\u305f\u306f\u30aa\u30d5\u30e9\u30a4\u30f3\u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u8abf\u3079\u308b\u6a29\u9650\u3092\u6301\u3063\u3066\u3044\u307e\u305b\u3093\uff01
|
||||
Inspect.OfflineStats=\u30aa\u30d5\u30e9\u30a4\u30f3\u30d7\u30ec\u30fc\u30e4\u30fc\u306emcMMO\u7d71\u8a08[[YELLOW]]{0}
|
||||
Inspect.Stats=[[YELLOW]]{0}[[GREEN]]\u306emcMMO\u7d71\u8a08
|
||||
Inspect.TooFar=\u305d\u306e\u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u8abf\u3079\u308b\u306b\u306f\u9060\u3059\u304e\u307e\u3059\uff01
|
||||
|
||||
#ITEMS
|
||||
Item.ChimaeraWing.Fail=[[RED]]**\u30ad\u30e1\u30e9\u306e\u7ffc \u5931\u6557\uff01**
|
||||
Item.ChimaeraWing.Pass=**\u30ad\u30e1\u30e9\u306e\u7ffc**
|
||||
Item.ChimaeraWing.Name=\u30ad\u30e1\u30e9\u306e\u7ffc
|
||||
Item.ChimaeraWing.Lore=[[GRAY]]\u3042\u306a\u305f\u3092\u30d9\u30c3\u30c9\u306b\u30c6\u30ec\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002
|
||||
|
||||
#TELEPORTATION
|
||||
Teleport.Commencing=[[GOLD]]({0})[[GREY]]\u79d2\u3067\u30c6\u30ec\u30dd\u30fc\u30c8\u3092\u958b\u59cb\u3057\u3066\u307e\u3059\u3002\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044...
|
||||
Teleport.Cancelled=[[DARK_RED]]\u30c6\u30ec\u30dd\u30fc\u30c8\u306f\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f\u3002
|
||||
|
||||
#SKILLS
|
||||
Skills.Child=[[GOLD]](\u5b50\u30b9\u30ad\u30eb)
|
||||
Skills.Disarmed=[[DARK_RED]]\u3042\u306a\u305f\u306f\u6b66\u88c5\u89e3\u9664\u3055\u308c\u307e\u3057\u305f\uff01
|
||||
Skills.Header=-----[] [[GREEN]]{0}[[RED]] []-----
|
||||
Skills.NeedMore=[[DARK_RED]]\u3082\u3063\u3068[[GRAY]]{0}[[DARK_RED]]\u304c\u5fc5\u8981\u3067\u3059
|
||||
Skills.NeedMore.Extra=[[DARK_RED]]\u3082\u3063\u3068[[GRAY]]{0}{1}[[DARK_RED]]\u304c\u5fc5\u8981\u3067\u3059
|
||||
Skills.Parents= PARENTS
|
||||
Skills.Stats={0}[[GREEN]]{1}[[DARK_AQUA]] XP([[GRAY]]{2}[[DARK_AQUA]]/[[GRAY]]{3}[[DARK_AQUA]])
|
||||
Skills.ChildStats={0}[[GREEN]]{1}
|
||||
Skills.TooTired=\u305d\u306e\u30a2\u30d3\u30ea\u30c6\u30a3\u3092\u518d\u3073\u4f7f\u3046\u306e\u306b\u306f\u98fd\u304d\u904e\u304e\u3066\u3044\u307e\u3059\u3002 [[YELLOW]]({0}\u79d2)
|
||||
Skills.Cancelled=[[GOLD]]{0} [[RED]]\u30ad\u30e3\u30f3\u30bb\u30eb\uff01
|
||||
Skills.ConfirmOrCancel=[[GREEN]]\u3082\u3046\u4e00\u5ea6\u53f3\u30af\u30ea\u30c3\u30af\u3057\u3066[[GOLD]]{0}[[GREEN]]\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 \u30ad\u30e3\u30f3\u30bb\u30eb\u3059\u308b\u306b\u306f\u5de6\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
Skills.AbilityGateRequirementFail=[[GRAY]]\u3053\u306e\u30a2\u30d3\u30ea\u30c6\u30a3\u3092\u4f7f\u3046\u305f\u3081\u306b\u306f[[YELLOW]]{0}[[GRAY]]\u30ec\u30d9\u30eb\u306e[[DARK_AQUA]]{1}[[GRAY]]\u304c\u5fc5\u8981\u3067\u3059\u3002
|
||||
|
||||
#STATISTICS
|
||||
Stats.Header.Combat=[[GOLD]]-=\u30b3\u30f3\u30d0\u30c3\u30c8\u30b9\u30ad\u30eb=-
|
||||
Stats.Header.Gathering=[[GOLD]]-=\u53ce\u96c6\u30b9\u30ad\u30eb=-
|
||||
Stats.Header.Misc=[[GOLD]]-=\u305d\u306e\u4ed6\u306e\u30b9\u30ad\u30eb=-
|
||||
Stats.Own.Stats=[[GREEN]][mcMMO] \u7d71\u8a08
|
||||
|
||||
#PERKS
|
||||
Perks.XP.Name=\u7d4c\u9a13
|
||||
Perks.XP.Desc=\u7279\u5b9a\u306e\u30b9\u30ad\u30eb\u306e\u30d6\u30fc\u30b9\u30c8XP\u3092\u53d7\u3051\u53d6\u308b\u3002
|
||||
@ -783,6 +819,15 @@ Perks.Lucky.Name=\u30e9\u30c3\u30af
|
||||
Perks.Lucky.Desc={0}\u306e\u30b9\u30ad\u30eb\u3068\u80fd\u529b\u306b\u300133.3\uff05\u306e\u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8\u306e\u78ba\u7387\u3092\u4e0e\u3048\u307e\u3059\u3002
|
||||
Perks.Lucky.Desc.Login=\u7279\u5b9a\u306e\u30b9\u30ad\u30eb\u3084\u80fd\u529b\u306b33.3\uff05\u306e\u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8\u306e\u78ba\u7387\u3092\u4e0e\u3048\u308b\u3002
|
||||
|
||||
#MOTD
|
||||
MOTD.Donate=[[DARK_AQUA]]\u5bc4\u4ed8\u60c5\u5831:
|
||||
MOTD.Hardcore.Enabled=[[GOLD]][mcMMO] [[DARK_AQUA]]\u30cf\u30fc\u30c9\u30b3\u30a2\u30e2\u30fc\u30c9\u6709\u52b9: [[DARK_RED]]{0}
|
||||
MOTD.Hardcore.DeathStatLoss.Stats=[[GOLD]][mcMMO] [[DARK_AQUA]]\u30b9\u30ad\u30eb\u30c7\u30b9\u30da\u30ca\u30eb\u30c6\u30a3: [[DARK_RED]]{0}%
|
||||
MOTD.Hardcore.Vampirism.Stats=[[GOLD]][mcMMO] [[DARK_AQUA]]\u30f4\u30a1\u30f3\u30d1\u30a4\u30a2\u5438\u8840\u7d71\u8a08: [[DARK_RED]]{0}%
|
||||
MOTD.PerksPrefix=[[GOLD]][mcMMO \u30d1\u30fc\u30af]
|
||||
MOTD.Version=[[GOLD]][mcMMO] \u5b9f\u884c\u4e2d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3 [[DARK_AQUA]]{0}
|
||||
MOTD.Website=[[GOLD]][mcMMO] [[GREEN]]{0}[[YELLOW]] - mcMMO \u30a6\u30a7\u30d6\u30b5\u30a4\u30c8
|
||||
|
||||
#SMELTING
|
||||
Smelting.SubSkill.UnderstandingTheArt.Name=\u82b8\u8853\u3092\u7406\u89e3\u3059\u308b
|
||||
Smelting.SubSkill.UnderstandingTheArt.Description=\u6d1e\u7a9f\u306e\u4e2d\u3067\u88fd\u932c\u306b\u6642\u9593\u3092\u304b\u3051\u904e\u304e\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\n\u88fd\u932c\u306e\u3055\u307e\u3056\u307e\u306a\u7279\u6027\u3092\u5f37\u5316\u3057\u307e\u3059\u3002
|
||||
@ -803,17 +848,38 @@ Smelting.SubSkill.FluxMining.Stat=\u30d5\u30e9\u30c3\u30af\u30b9\u30de\u30a4\u30
|
||||
Smelting.Listener=\u7cbe\u932c:
|
||||
Smelting.SkillName=\u7cbe\u932c
|
||||
|
||||
# Admin Notifications
|
||||
Server.ConsoleName=[[YELLOW]][Server]
|
||||
Notifications.Admin.XPRate.Start.Self=[[GRAY]]\u3042\u306a\u305f\u306f[[GOLD]]{0}x[[GRAY]]\u306b\u30b0\u30ed\u30fc\u30d0\u30ebXP\u30ec\u30fc\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3057\u305f\u3002
|
||||
Notifications.Admin.XPRate.End.Self=[[GRAY]]XP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u3092\u7d42\u4e86\u3057\u307e\u3057\u305f\u3002
|
||||
Notifications.Admin.XPRate.End.Others={0}[[GRAY]]\u306fXP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u3092\u7d42\u4e86\u3057\u307e\u3057\u305f
|
||||
Notifications.Admin.XPRate.Start.Others={0}[[GRAY]]\u304c{1}x\u3067\u30b0\u30ed\u30fc\u30d0\u30ebXP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u3092\u958b\u59cb\u307e\u305f\u306f\u5909\u66f4\u3057\u307e\u3057\u305f
|
||||
Notifications.Admin.Format.Others=[[GOLD]]([[GREEN]]mcMMO [[DARK_AQUA]]\u7ba1\u7406\u8005[[GOLD]]) [[GRAY]]{0}
|
||||
Notifications.Admin.Format.Self=[[GOLD]]([[GREEN]]mcMMO[[GOLD]]) [[GRAY]]{0}
|
||||
|
||||
# Event
|
||||
XPRate.Event=[[GOLD]]mcMMO\u306f\u73fe\u5728XP\u30ec\u30fc\u30c8\u30a4\u30d9\u30f3\u30c8\u4e2d\u3067\u3059\uff01XP\u30ec\u30fc\u30c8\u306f{0}x\u3067\u3059\uff01
|
||||
#COMMAND DESCRIPTIONS
|
||||
Commands.Description.addlevels=\u30e6\u30fc\u30b6\u30fc\u306bmcMMO\u30ec\u30d9\u30eb\u3092\u8ffd\u52a0\u3059\u308b
|
||||
Commands.Description.adminchat=mcMMO\u7ba1\u7406\u8005\u30c1\u30e3\u30c3\u30c8\u306e\u30aa\u30f3\/\u30aa\u30d5\u306e\u5207\u308a\u66ff\u3048\u3001\u307e\u305f\u306f\u7ba1\u7406\u8005\u30c1\u30e3\u30c3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u9001\u4fe1
|
||||
Commands.Description.addxp=\u30e6\u30fc\u30b6\u30fc\u306bmcMMO XP\u3092\u8ffd\u52a0\u3059\u308b
|
||||
Commands.Description.hardcore=mcMMO\u30cf\u30fc\u30c9\u30b3\u30a2\u306e\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8\u3092\u5909\u66f4\u3059\u308b\u304b\u3001\u30cf\u30fc\u30c9\u30b3\u30a2\u30e2\u30fc\u30c9\u306e\u30aa\u30f3\/\u30aa\u30d5\u3092\u5207\u308a\u66ff\u3048\u307e\u3059
|
||||
Commands.Description.inspect=\u4ed6\u306e\u30d7\u30ec\u30a4\u30e4\u30fc\u306e\u8a73\u7d30\u306amcMMO\u60c5\u5831\u3092\u898b\u308b
|
||||
Commands.Description.mcability=\u53f3\u30af\u30ea\u30c3\u30af\u3067mcMMO\u30a2\u30d3\u30ea\u30c6\u30a3\u306e\u6709\u52b9\u306b\u3064\u3044\u3066\u30aa\u30f3\/\u30aa\u30d5\u3092\u5207\u308a\u66ff\u3048\u307e\u3059
|
||||
Commands.Description.mccooldown=mcMMO\u30a2\u30d3\u30ea\u30c6\u30a3\u306e\u30af\u30fc\u30eb\u30c0\u30a6\u30f3\u3092\u3059\u3079\u3066\u898b\u308b
|
||||
Commands.Description.mcchatspy=mcMMO\u30d1\u30fc\u30c6\u30a3\u30fc\u30c1\u30e3\u30c3\u30c8\u306e\u30b9\u30d1\u30a4\u306b\u3064\u3044\u3066\u30aa\u30f3\/\u30aa\u30d5\u3092\u5207\u308a\u66ff\u3048\u307e\u3059
|
||||
Commands.Description.mcgod=mcMMO\u306e\u30b4\u30c3\u30c9\u30e2\u30fc\u30c9\u306e\u30aa\u30f3\/\u30aa\u30d5\u3092\u5207\u308a\u66ff\u3048\u307e\u3059
|
||||
Commands.Description.mchud=mcMMO HUD\u30b9\u30bf\u30a4\u30eb\u3092\u5909\u66f4\u3059\u308b
|
||||
Commands.Description.mcmmo=mcMMO\u306e\u7c21\u5358\u306a\u8aac\u660e\u3092\u8868\u793a\u3059\u308b
|
||||
Commands.Description.mcnotify=mcMMO\u30a2\u30d3\u30ea\u30c6\u30a3\u306e\u30c1\u30e3\u30c3\u30c8\u8868\u793a\u901a\u77e5\u306b\u3064\u3044\u3066\u30aa\u30f3\/\u30aa\u30d5\u3092\u5207\u308a\u66ff\u3048\u307e\u3059
|
||||
Commands.Description.mcpurge=mcMMO\u30ec\u30d9\u30eb\u306e\u306a\u3044\u30e6\u30fc\u30b6\u30fc\u304a\u3088\u3073{0}\u30f6\u6708\u4ee5\u4e0a\u63a5\u7d9a\u3057\u3066\u3044\u306a\u3044\u30e6\u30fc\u30b6\u30fc\u3092mcMMO\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u524a\u9664\u3057\u307e\u3059\u3002
|
||||
Commands.Description.mcrank=\u30d7\u30ec\u30a4\u30e4\u30fc\u306emcMMO\u30e9\u30f3\u30ad\u30f3\u30b0\u3092\u8868\u793a\u3059\u308b
|
||||
Commands.Description.mcrefresh=mcMMO\u306e\u3059\u3079\u3066\u306e\u30af\u30fc\u30eb\u30c0\u30a6\u30f3\u3092\u66f4\u65b0\u3059\u308b
|
||||
Commands.Description.mcremove=mcMMO\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u30e6\u30fc\u30b6\u30fc\u3092\u524a\u9664\u3059\u308b
|
||||
Commands.Description.mcscoreboard=mcMMO\u30b9\u30b3\u30a2\u30dc\u30fc\u30c9\u3092\u7ba1\u7406\u3059\u308b
|
||||
Commands.Description.mcstats=mcMMO\u30ec\u30d9\u30eb\u3068XP\u3092\u8868\u793a
|
||||
Commands.Description.mctop=mcMMO\u30ea\u30fc\u30c0\u30fc\u30dc\u30fc\u30c9\u3092\u8868\u793a
|
||||
Commands.Description.mmoedit=\u30e6\u30fc\u30b6\u30fc\u306emcMMO\u30ec\u30d9\u30eb\u3092\u7de8\u96c6
|
||||
Commands.Description.mmoupdate=mcMMO\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u53e4\u3044\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u79fb\u884c\u3057\u307e\u3059\u3002
|
||||
Commands.Description.mcconvert=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u7a2e\u985e\u307e\u305f\u306f\u7d4c\u9a13\u5024\u5f0f\u306e\u7a2e\u985e\u3092\u5909\u63db\u3059\u308b
|
||||
Commands.Description.mmoshowdb=\u73fe\u5728\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30bf\u30a4\u30d7\u306e\u540d\u524d\u3092\u8868\u793a\u3057\u307e\u3059\uff08\u5f8c\u3067\/mmoupdate\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\uff09
|
||||
Commands.Description.party=\u3055\u307e\u3056\u307e\u306amcMMO\u30d1\u30fc\u30c6\u30a3\u306e\u8a2d\u5b9a\u3092\u7ba1\u7406\u3059\u308b
|
||||
Commands.Description.partychat=mcMMO\u30d1\u30fc\u30c6\u30a3\u30c1\u30e3\u30c3\u30c8\u306e\u30aa\u30f3\/\u30aa\u30d5\u3092\u5207\u308a\u66ff\u3048\u305f\u308a\u3001\u30d1\u30fc\u30c6\u30a3\u30c1\u30e3\u30c3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1\u3057\u305f\u308a\u3057\u307e\u3059
|
||||
Commands.Description.ptp=mcMMO\u30d1\u30fc\u30c6\u30a3\u30fc\u30e1\u30f3\u30d0\u30fc\u306b\u30c6\u30ec\u30dd\u30fc\u30c8\u3059\u308b
|
||||
Commands.Description.Skill={0}\u306e\u8a73\u7d30\u306amcMMO\u30b9\u30ad\u30eb\u60c5\u5831\u3092\u8868\u793a\u3057\u307e\u3059
|
||||
Commands.Description.skillreset=\u30e6\u30fc\u30b6\u30fc\u306emcMMO\u30ec\u30d9\u30eb\u3092\u30ea\u30bb\u30c3\u30c8\u3059\u308b
|
||||
Commands.Description.vampirism=mcMMO\u306e\u30f4\u30a1\u30f3\u30d1\u30a4\u30a2\u306e\u5272\u5408\u3092\u5909\u66f4\u3059\u308b\u304b\u3001\u307e\u305f\u306f\u30f4\u30a1\u30f3\u30d1\u30a4\u30a2\u30e2\u30fc\u30c9\u306e\u30aa\u30f3\/\u30aa\u30d5\u306b\u5207\u308a\u66ff\u3048\u307e\u3059
|
||||
Commands.Description.xplock=mcMMO XP\u30d0\u30fc\u3092\u7279\u5b9a\u306emcMMO\u30b9\u30ad\u30eb\u306b\u56fa\u5b9a\u3059\u308b
|
||||
Commands.Description.xprate=mcMMO XP\u306e\u30ec\u30fc\u30c8\u3092\u5909\u66f4\u3059\u308b\u304b\u3001mcMMO XP\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u958b\u59cb\u3059\u308b
|
||||
|
||||
#UPDATE CHECKER
|
||||
UpdateChecker.Outdated=\u3042\u306a\u305f\u306f\u53e4\u3044mcMMO\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4f7f\u3063\u3066\u3044\u307e\u3059\uff01
|
||||
@ -839,8 +905,16 @@ Profile.Loading.Success=[[GREEN]]\u3042\u306a\u305f\u306emcMMO\u30d7\u30ed\u30d5
|
||||
Profile.Loading.FailurePlayer=[[RED]]mcMMO\u306e\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u8fbc\u307f\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002[[GREEN]]{0}[[RED]]\u56de\u8aad\u307f\u8fbc\u307f\u3092\u8a66\u3057\u307e\u3057\u305f\u3002[[LIGHT_GRAY]] \u3053\u306e\u554f\u984c\u306b\u3064\u3044\u3066\u30b5\u30fc\u30d0\u30fc\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002mcMMO\u306f\u3042\u306a\u305f\u304c\u5207\u65ad\u3059\u308b\u307e\u3067\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u8fbc\u307f\u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002\u30c7\u30fc\u30bf\u304c\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3044\u306a\u3044\u9593XP\u3092\u7372\u5f97\u3067\u304d\u306a\u3044\u304b\u3001\u30b9\u30ad\u30eb\u3092\u4f7f\u3046\u3053\u3068\u304c\u51fa\u6765\u307e\u305b\u3093\u3002
|
||||
Profile.Loading.FailureNotice=[[DARK_RED]][A][[RED]] mcMMO\u306f[[YELLOW]]{0}[[RED]]\u306e\u30d7\u30ec\u30fc\u30e4\u30fc\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002 [[LIGHT_PURPLE]]\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u307e\u3067\u306e\u8a66\u884c\u56de\u6570\u306f{1}\u56de\u3067\u3059\u3002
|
||||
|
||||
#Holiday
|
||||
Holiday.AprilFools.Levelup=[[GOLD]]{0}\u306f\u30ec\u30d9\u30eb[[GREEN]]{1}[[GOLD]]\u306b\u306a\u308a\u307e\u3057\u305f\u3002
|
||||
Holiday.Anniversary=[[BLUE]]{0}\u5468\u5e74\u8a18\u5ff5\uff01\n[[BLUE]]nossr50\u306e\u5168\u3066\u306e\u4ed5\u4e8b\u3068\u5168\u3066\u306e\u958b\u767a\u3092\u8a18\u5ff5\u3057\u3066\uff01
|
||||
|
||||
#Reminder Messages
|
||||
Reminder.Squelched=[[GRAY]]\u30ea\u30de\u30a4\u30f3\u30c0\u30fc: \u3042\u306a\u305f\u306f\u73fe\u5728mcMMO\u304b\u3089\u901a\u77e5\u3092\u53d7\u3051\u53d6\u3063\u3066\u3044\u307e\u305b\u3093\u3002\u901a\u77e5\u3092\u6709\u52b9\u306b\u3059\u308b\u305f\u3081\u306b\u306f\/mcnotify\u30b3\u30de\u30f3\u30c9\u3092\u3082\u3046\u4e00\u5ea6\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u81ea\u52d5\u5316\u3055\u308c\u305f1\u6642\u9593\u3054\u3068\u306e\u901a\u77e5\u3067\u3059\u3002
|
||||
|
||||
#Locale
|
||||
Locale.Reloaded=[[GREEN]]\u30ed\u30b1\u30fc\u30eb \u30ea\u30ed\u30fc\u30c9\uff01
|
||||
|
||||
#Player Leveling Stuff
|
||||
LevelCap.PowerLevel=[[GOLD]]([[GREEN]]mcMMO[[GOLD]]) [[RED]]{0}[[YELLOW]]\u306e\u30d1\u30ef\u30fc\u30ec\u30d9\u30eb\u306e\u30ec\u30d9\u30eb\u30ad\u30e3\u30c3\u30d7\u306b\u9054\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u4ee5\u964d\u30b9\u30ad\u30eb\u306e\u30ec\u30d9\u30eb\u30a2\u30c3\u30d7\u306f\u3057\u307e\u305b\u3093\u3002
|
||||
LevelCap.Skill=[[GOLD]]([[GREEN]]mcMMO[[GOLD]]) [[GOLD]]{1}[[YELLOW]]\u306e\u30ec\u30d9\u30eb\u30ad\u30e3\u30c3\u30d7[[RED]]{0}[[YELLOW]]\u306b\u9054\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u4ee5\u964d\u30b9\u30ad\u30eb\u306e\u30ec\u30d9\u30eb\u30a2\u30c3\u30d7\u306f\u3057\u307e\u305b\u3093\u3002
|
@ -14,7 +14,7 @@ Alchemy:
|
||||
Concoctions:
|
||||
Standard:
|
||||
Rank_1: 0
|
||||
Rank_2: 25
|
||||
Rank_2: 1
|
||||
Rank_3: 35
|
||||
Rank_4: 50
|
||||
Rank_5: 65
|
||||
@ -23,7 +23,7 @@ Alchemy:
|
||||
Rank_8: 100
|
||||
RetroMode:
|
||||
Rank_1: 0
|
||||
Rank_2: 250
|
||||
Rank_2: 1
|
||||
Rank_3: 350
|
||||
Rank_4: 500
|
||||
Rank_5: 650
|
||||
@ -56,12 +56,12 @@ Archery:
|
||||
Rank_10: 1000
|
||||
ArrowRetrieval:
|
||||
Standard:
|
||||
Rank_1: 2
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 20
|
||||
Rank_1: 1
|
||||
SkillShot:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
Rank_1: 1
|
||||
Rank_2: 10
|
||||
Rank_3: 15
|
||||
Rank_4: 20
|
||||
@ -82,7 +82,7 @@ Archery:
|
||||
Rank_19: 95
|
||||
Rank_20: 100
|
||||
RetroMode:
|
||||
Rank_1: 50
|
||||
Rank_1: 1
|
||||
Rank_2: 100
|
||||
Rank_3: 150
|
||||
Rank_4: 200
|
||||
@ -105,9 +105,9 @@ Archery:
|
||||
Acrobatics:
|
||||
Dodge:
|
||||
Standard:
|
||||
Rank_1: 2
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 20
|
||||
Rank_1: 1
|
||||
Axes:
|
||||
AxesLimitBreak:
|
||||
Standard:
|
||||
@ -139,9 +139,9 @@ Axes:
|
||||
Rank_1: 50
|
||||
CriticalStrikes:
|
||||
Standard:
|
||||
Rank_1: 2
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 20
|
||||
Rank_1: 1
|
||||
GreaterImpact:
|
||||
Standard:
|
||||
Rank_1: 25
|
||||
@ -149,7 +149,7 @@ Axes:
|
||||
Rank_1: 250
|
||||
ArmorImpact:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
Rank_1: 1
|
||||
Rank_2: 10
|
||||
Rank_3: 15
|
||||
Rank_4: 20
|
||||
@ -170,7 +170,7 @@ Axes:
|
||||
Rank_19: 95
|
||||
Rank_20: 100
|
||||
RetroMode:
|
||||
Rank_1: 50
|
||||
Rank_1: 1
|
||||
Rank_2: 100
|
||||
Rank_3: 150
|
||||
Rank_4: 200
|
||||
@ -204,9 +204,9 @@ Axes:
|
||||
Taming:
|
||||
BeastLore:
|
||||
Standard:
|
||||
Rank_1: 2
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 20
|
||||
Rank_1: 1
|
||||
Gore:
|
||||
Standard:
|
||||
Rank_1: 15
|
||||
@ -214,9 +214,9 @@ Taming:
|
||||
Rank_1: 150
|
||||
CallOfTheWild:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 50
|
||||
Rank_1: 1
|
||||
Pummel:
|
||||
Standard:
|
||||
Rank_1: 20
|
||||
@ -284,7 +284,7 @@ Smelting:
|
||||
Salvage:
|
||||
ScrapCollector:
|
||||
Standard:
|
||||
Rank_1: 2
|
||||
Rank_1: 1
|
||||
Rank_2: 10
|
||||
Rank_3: 15
|
||||
Rank_4: 20
|
||||
@ -293,7 +293,7 @@ Salvage:
|
||||
Rank_7: 35
|
||||
Rank_8: 40
|
||||
RetroMode:
|
||||
Rank_1: 20
|
||||
Rank_1: 1
|
||||
Rank_2: 100
|
||||
Rank_3: 150
|
||||
Rank_4: 200
|
||||
@ -321,6 +321,11 @@ Salvage:
|
||||
Rank_7: 850
|
||||
Rank_8: 1000
|
||||
Mining:
|
||||
DoubleDrops:
|
||||
Standard:
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 1
|
||||
SuperBreaker:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
@ -358,6 +363,11 @@ Mining:
|
||||
Rank_7: 850
|
||||
Rank_8: 1000
|
||||
Herbalism:
|
||||
DoubleDrops:
|
||||
Standard:
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 1
|
||||
GreenTerra:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
@ -423,7 +433,7 @@ Fishing:
|
||||
Rank_5: 1000
|
||||
TreasureHunter:
|
||||
Standard:
|
||||
Rank_1: 10
|
||||
Rank_1: 1
|
||||
Rank_2: 25
|
||||
Rank_3: 35
|
||||
Rank_4: 50
|
||||
@ -432,7 +442,7 @@ Fishing:
|
||||
Rank_7: 85
|
||||
Rank_8: 100
|
||||
RetroMode:
|
||||
Rank_1: 100
|
||||
Rank_1: 1
|
||||
Rank_2: 250
|
||||
Rank_3: 350
|
||||
Rank_4: 500
|
||||
@ -487,20 +497,20 @@ Swords:
|
||||
Rank_1: 200
|
||||
Rupture:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
Rank_1: 1
|
||||
Rank_2: 15
|
||||
Rank_3: 75
|
||||
Rank_4: 90
|
||||
RetroMode:
|
||||
Rank_1: 50
|
||||
Rank_1: 1
|
||||
Rank_2: 150
|
||||
Rank_3: 750
|
||||
Rank_4: 900
|
||||
SerratedStrikes:
|
||||
Standard:
|
||||
Rank_1: 10
|
||||
Rank_1: 5
|
||||
RetroMode:
|
||||
Rank_1: 100
|
||||
Rank_1: 50
|
||||
Unarmed:
|
||||
UnarmedLimitBreak:
|
||||
Standard:
|
||||
@ -527,9 +537,9 @@ Unarmed:
|
||||
Rank_10: 1000
|
||||
Berserk:
|
||||
Standard:
|
||||
Rank_1: 10
|
||||
Rank_1: 5
|
||||
RetroMode:
|
||||
Rank_1: 100
|
||||
Rank_1: 50
|
||||
ArrowDeflect:
|
||||
Standard:
|
||||
Rank_1: 20
|
||||
@ -547,13 +557,13 @@ Unarmed:
|
||||
Rank_1: 600
|
||||
IronArmStyle:
|
||||
Standard:
|
||||
Rank_1: 2
|
||||
Rank_1: 1
|
||||
Rank_2: 25
|
||||
Rank_3: 50
|
||||
Rank_4: 75
|
||||
Rank_5: 100
|
||||
RetroMode:
|
||||
Rank_1: 20
|
||||
Rank_1: 1
|
||||
Rank_2: 250
|
||||
Rank_3: 500
|
||||
Rank_4: 750
|
||||
@ -604,7 +614,7 @@ Woodcutting:
|
||||
Standard:
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 10
|
||||
Rank_1: 1
|
||||
LeafBlower:
|
||||
Standard:
|
||||
Rank_1: 15
|
||||
@ -622,7 +632,7 @@ Excavation:
|
||||
Rank_1: 50
|
||||
Archaeology:
|
||||
Standard:
|
||||
Rank_1: 5
|
||||
Rank_1: 1
|
||||
Rank_2: 25
|
||||
Rank_3: 35
|
||||
Rank_4: 50
|
||||
@ -631,7 +641,7 @@ Excavation:
|
||||
Rank_7: 85
|
||||
Rank_8: 100
|
||||
RetroMode:
|
||||
Rank_1: 50
|
||||
Rank_1: 1
|
||||
Rank_2: 250
|
||||
Rank_3: 350
|
||||
Rank_4: 500
|
||||
@ -642,9 +652,9 @@ Excavation:
|
||||
Repair:
|
||||
RepairMastery:
|
||||
Standard:
|
||||
Rank_1: 20
|
||||
Rank_1: 1
|
||||
RetroMode:
|
||||
Rank_1: 200
|
||||
Rank_1: 1
|
||||
SuperRepair:
|
||||
Standard:
|
||||
Rank_1: 40
|
||||
|
Loading…
Reference in New Issue
Block a user