Merge branch 'configurable' into api

This commit is contained in:
Shane Freeder
2020-01-16 09:49:49 +00:00
24 changed files with 1704 additions and 404 deletions

View File

@ -11,6 +11,8 @@ import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Locale;
public class PartyItemShareCommand implements CommandExecutor {
private final mcMMO pluginRef;
@ -35,7 +37,7 @@ public class PartyItemShareCommand implements CommandExecutor {
switch (args.length) {
case 2:
ShareMode mode = ShareMode.getShareMode(args[1].toUpperCase());
ShareMode mode = ShareMode.getShareMode(args[1].toUpperCase(Locale.ENGLISH));
if (mode == null) {
sender.sendMessage(pluginRef.getLocaleManager().getString("Commands.Usage.2", "party", "itemshare", "<NONE | EQUAL | RANDOM>"));
@ -58,7 +60,7 @@ public class PartyItemShareCommand implements CommandExecutor {
}
try {
handleToggleItemShareCategory(party, ItemShareType.valueOf(args[1].toUpperCase()), toggle);
handleToggleItemShareCategory(party, ItemShareType.valueOf(args[1].toUpperCase(Locale.ENGLISH)), toggle);
} catch (IllegalArgumentException ex) {
sender.sendMessage(pluginRef.getLocaleManager().getString("Commands.Usage.2", "party", "itemshare", "<loot | mining | herbalism | woodcutting | misc> <true | false>"));
}

View File

@ -7,6 +7,8 @@ import com.gmail.nossr50.datatypes.party.PartyTeleportRecord;
import com.gmail.nossr50.datatypes.player.BukkitMMOPlayer;
import com.gmail.nossr50.mcMMO;
import com.google.common.collect.ImmutableList;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
@ -159,6 +161,22 @@ public class PtpCommand implements TabExecutor {
BukkitMMOPlayer mcMMOTarget = pluginRef.getUserManager().getPlayer(targetName);
Player target = mcMMOTarget.getPlayer();
if (pluginRef.getConfigManager().getConfigParty().getPTP().isPtpWorldBasedPermissions()) {
World targetWorld = target.getWorld();
World playerWorld = player.getWorld();
if (!pluginRef.getPermissionTools().partyTeleportAllWorlds(player)) {
if (!pluginRef.getPermissionTools().partyTeleportWorld(target, targetWorld)) {
player.sendMessage(pluginRef.getLocaleManager().formatString("Commands.ptp.NoWorldPermissions", targetWorld.getName()));
return;
}
else if (targetWorld != playerWorld && !pluginRef.getPermissionTools().partyTeleportWorld(player, targetWorld)) {
player.sendMessage(pluginRef.getLocaleManager().formatString("Commands.ptp.NoWorldPermissions", targetWorld.getName()));
return;
}
}
}
PartyTeleportRecord ptpRecord = mcMMOTarget.getPartyTeleportRecord();
if (!ptpRecord.isConfirmRequired()) {

View File

@ -2,6 +2,8 @@ package com.gmail.nossr50.config;
import com.gmail.nossr50.util.StringUtils;
import java.util.Locale;
public final class HOCONUtil {
public static String serializeENUMName(String hyphenedString) {
@ -24,7 +26,7 @@ public final class HOCONUtil {
for (int x = 0; x < split.length; x++) {
if (x + 1 >= split.length)
formattedString.append(split[x].toUpperCase());
formattedString.append(split[x].toUpperCase(Locale.ENGLISH));
else
formattedString.append(split[x]).append('_');
}

View File

@ -15,7 +15,7 @@ public class ConfigExperienceCombat {
static {
COMBAT_EXPERIENCE_DEFAULT = new HashMap<>();
// TODO: namespace
COMBAT_EXPERIENCE_DEFAULT.put("creeper", 4.0);
COMBAT_EXPERIENCE_DEFAULT.put("cat", 1.0);
COMBAT_EXPERIENCE_DEFAULT.put("fox", 1.0);
@ -74,6 +74,7 @@ public class ConfigExperienceCombat {
COMBAT_EXPERIENCE_DEFAULT.put("dolphin", 1.0);
COMBAT_EXPERIENCE_DEFAULT.put("phantom", 4.0);
COMBAT_EXPERIENCE_DEFAULT.put("wandering_trader", 1.0);
COMBAT_EXPERIENCE_DEFAULT.put("bee", 1.5);
//SPECIAL
SPECIAL_COMBAT_EXPERIENCE_DEFAULT = new HashMap<>();

View File

@ -84,8 +84,9 @@ public class ConfigExperienceHerbalism {
HERBALISM_EXPERIENCE_DEFAULT.put("minecraft:dead_bush", 30);
/* MISC */
HERBALISM_EXPERIENCE_DEFAULT.put("minecraft:bee_nest", 200);
HERBALISM_EXPERIENCE_DEFAULT.put("minecraft:lily_pad", 100);
HERBALISM_EXPERIENCE_DEFAULT.put("minecraft:sweet_berry_bush", 300);
HERBALISM_EXPERIENCE_DEFAULT.put("minecraft:sweet_berry_bush", 50);
/* MUSHROOMS */
HERBALISM_EXPERIENCE_DEFAULT.put("minecraft:red_mushroom", 150);

View File

@ -12,7 +12,7 @@ public class ConfigExperienceTaming {
static {
TAMING_EXPERIENCE_DEFAULT = new HashMap<>();
// TODO: namespace
TAMING_EXPERIENCE_DEFAULT.put("wolf", 250);
TAMING_EXPERIENCE_DEFAULT.put("ocelot", 500);
TAMING_EXPERIENCE_DEFAULT.put("cat", 500);
@ -25,6 +25,7 @@ public class ConfigExperienceTaming {
TAMING_EXPERIENCE_DEFAULT.put("parrot", 1100);
TAMING_EXPERIENCE_DEFAULT.put("fox", 1000);
TAMING_EXPERIENCE_DEFAULT.put("panda", 1000);
TAMING_EXPERIENCE_DEFAULT.put("bee", 100);
}
@Setting(value = "Taming-XP-Values")

View File

@ -48,11 +48,11 @@ public class ArcheryBehaviour {
public double getSkillShotBonusDamage(Player player, double oldDamage) {
double damageBonusPercent = getSkillShotDamageBonusPercent(player);
double newDamage = oldDamage + (oldDamage * damageBonusPercent);
return Math.min(newDamage, getSkillShotDamageCap());
return Math.min(newDamage, (oldDamage + getSkillShotDamageCap()));
}
public double getSkillShotDamageBonusPercent(Player player) {
return ((pluginRef.getRankTools().getRank(player, SubSkillType.ARCHERY_SKILL_SHOT)) * pluginRef.getConfigManager().getConfigArchery().getSkillShotDamageMultiplier()) / 100.0D;
return ((pluginRef.getRankTools().getRank(player, SubSkillType.ARCHERY_SKILL_SHOT)) * (pluginRef.getConfigManager().getConfigArchery().getSkillShotDamageMultiplier()) / 100.0D);
}
public double getSkillShotDamageCap() {

View File

@ -31,6 +31,7 @@ import org.bukkit.event.block.*;
import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.MetadataValue;
import java.util.HashSet;
import java.util.List;
public class BlockListener implements Listener {
@ -42,21 +43,51 @@ public class BlockListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockDropItemEvent(BlockDropItemEvent event) {
for (Item item : event.getItems()) {
ItemStack is = new ItemStack(item.getItemStack());
//Track how many "things" are being dropped
HashSet<Material> uniqueMaterials = new HashSet<>();
boolean dontRewardTE = false; //If we suspect TEs are mixed in with other things don't reward bonus drops for anything that isn't a block
int blockCount = 0;
if (is.getAmount() <= 0)
continue;
for(Item item : event.getItems()) {
//Track unique materials
uniqueMaterials.add(item.getItemStack().getType());
if (!pluginRef.getDynamicSettingsManager().getBonusDropManager().isBonusDropWhitelisted(is.getType()))
continue;
//Count blocks as a second failsafe
if(item.getItemStack().getType().isBlock())
blockCount++;
}
if (event.getBlock().getMetadata(MetadataConstants.BONUS_DROPS_METAKEY).size() > 0) {
BonusDropMeta bonusDropMeta = (BonusDropMeta) event.getBlock().getMetadata(MetadataConstants.BONUS_DROPS_METAKEY).get(0);
int bonusCount = bonusDropMeta.asInt();
if(uniqueMaterials.size() > 1) {
//Too many things are dropping, assume tile entities might be duped
//Technically this would also prevent something like coal from being bonus dropped if you placed a TE above a coal ore when mining it but that's pretty edge case and this is a good solution for now
dontRewardTE = true;
}
for (int i = 0; i < bonusCount; i++) {
event.getBlock().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is);
//If there are more than one block in the item list we can't really trust it and will back out of rewarding bonus drops
if (blockCount <= 1){
for (Item item : event.getItems()) {
ItemStack is = new ItemStack(item.getItemStack());
if (is.getAmount() <= 0)
continue;
if (!pluginRef.getDynamicSettingsManager().getBonusDropManager().isBonusDropWhitelisted(is.getType()))
continue;
//If we suspect TEs might be duped only reward block
if (dontRewardTE) {
if (!is.getType().isBlock()) {
continue;
}
}
if (event.getBlock().getMetadata(MetadataConstants.BONUS_DROPS_METAKEY).size() > 0) {
BonusDropMeta bonusDropMeta = (BonusDropMeta) event.getBlock().getMetadata(MetadataConstants.BONUS_DROPS_METAKEY).get(0);
int bonusCount = bonusDropMeta.asInt();
for (int i = 0; i < bonusCount; i++) {
event.getBlock().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is);
}
}
}
}
@ -520,7 +551,7 @@ public class BlockListener implements Listener {
if (mcMMOPlayer.getHerbalismManager().processGreenTerraBlockConversion(blockState)) {
blockState.update(true);
}
} else if (mcMMOPlayer.getSuperAbilityMode(SuperAbilityType.BERSERK) && heldItem.getType() == Material.AIR) {
} else if (mcMMOPlayer.getSuperAbilityMode(SuperAbilityType.BERSERK) && (heldItem.getType() == Material.AIR || pluginRef.getConfigManager().getConfigUnarmed().doItemsCountAsUnarmed())) {
if (pluginRef.getSkillTools().superAbilityBlockCheck(SuperAbilityType.BERSERK, block.getState())
&& pluginRef.getEventManager().simulateBlockBreak(block, player, true)) {
event.setInstaBreak(true);

View File

@ -291,6 +291,10 @@ public class EntityListener implements Listener {
return;
}
if (pluginRef.getCombatTools().isProcessingNoInvulnDamage()) {
return;
}
if (event.getEntity() instanceof ArmorStand) {
return;
}

View File

@ -2,31 +2,28 @@ package com.gmail.nossr50.runnables;
import com.gmail.nossr50.core.MetadataConstants;
import com.gmail.nossr50.mcMMO;
import org.bukkit.entity.LivingEntity;
import org.bukkit.scheduler.BukkitRunnable;
public class MobHealthDisplayUpdaterTask extends BukkitRunnable {
private final mcMMO pluginRef;
private LivingEntity target;
private String oldName;
private boolean oldNameVisible;
public MobHealthDisplayUpdaterTask(mcMMO pluginRef, LivingEntity target) {
this.pluginRef = pluginRef;
if (target.isValid()) {
this.target = target;
this.oldName = target.getMetadata(MetadataConstants.CUSTOM_NAME_METAKEY).get(0).asString();
this.oldNameVisible = target.getMetadata(MetadataConstants.NAME_VISIBILITY_METAKEY).get(0).asBoolean();
}
this.target = target;
}
@Override
public void run() {
if (target != null && target.isValid()) {
target.setCustomNameVisible(oldNameVisible);
target.setCustomName(oldName);
if (target.hasMetadata(MetadataConstants.CUSTOM_NAME_METAKEY)) {
target.setCustomName(target.getMetadata(MetadataConstants.CUSTOM_NAME_METAKEY).get(0).asString());
target.removeMetadata(MetadataConstants.CUSTOM_NAME_METAKEY, pluginRef);
}
if (target.hasMetadata(MetadataConstants.NAME_VISIBILITY_METAKEY)) {
target.setCustomNameVisible(target.getMetadata(MetadataConstants.NAME_VISIBILITY_METAKEY).get(0).asBoolean());
target.removeMetadata(MetadataConstants.NAME_VISIBILITY_METAKEY, pluginRef);
}
}

View File

@ -3,6 +3,7 @@ package com.gmail.nossr50.runnables.items;
import com.gmail.nossr50.datatypes.player.BukkitMMOPlayer;
import com.gmail.nossr50.mcMMO;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
@ -48,6 +49,23 @@ public class TeleportationWarmup extends BukkitRunnable {
}
}
if (pluginRef.getConfigManager().getConfigParty().getPTP().isPtpWorldBasedPermissions()) {
World targetWorld = targetPlayer.getWorld();
World playerWorld = teleportingPlayer.getWorld();
if (!pluginRef.getPermissionTools().partyTeleportAllWorlds(teleportingPlayer)) {
if (!pluginRef.getPermissionTools().partyTeleportWorld(targetPlayer, targetWorld)) {
teleportingPlayer.sendMessage(pluginRef.getLocaleManager().formatString("Commands.ptp.NoWorldPermissions", targetWorld.getName()));
return;
}
else if (targetWorld != playerWorld && !pluginRef.getPermissionTools().partyTeleportWorld(teleportingPlayer, targetWorld)) {
teleportingPlayer.sendMessage(pluginRef.getLocaleManager().formatString("Commands.ptp.NoWorldPermissions", targetWorld.getName()));
return;
}
}
}
pluginRef.getEventManager().handlePartyTeleportEvent(teleportingPlayer, targetPlayer);
}
}

View File

@ -80,6 +80,7 @@ public class UnarmedManager extends SkillManager {
switch (blockState.getType()) {
case STONE_BRICKS:
// TODO: REREF? https://github.com/mcMMO-Dev/mcMMO/blame/421a394f68fc714899f167dc3faf53114b8469ce/src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java#L95
/*if (!Unarmed.blockCrackerSmoothBrick) {
return false;
}*/

View File

@ -48,6 +48,11 @@ public final class MobHealthBarManager {
return;
}
// Don't mangle invalid entities, they're not going to be rendered anyways
if (!target.isValid()) {
return;
}
String originalName = target.getName();
String oldName = target.getCustomName();
@ -61,6 +66,7 @@ public final class MobHealthBarManager {
oldName = "";
}
boolean oldNameVisible = target.isCustomNameVisible();
String newName = createHealthDisplay(pluginRef.getConfigManager().getConfigMobs().getCombat().getHealthBars().getDisplayBarType(), target, damage);

View File

@ -11,6 +11,7 @@ import com.gmail.nossr50.datatypes.skills.SubSkillType;
import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent;
import com.gmail.nossr50.events.fake.FakeEntityDamageEvent;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.mcmmo.api.data.MMOPlayer;
import com.gmail.nossr50.runnables.skills.AwardCombatXpTask;
import com.gmail.nossr50.skills.acrobatics.AcrobaticsManager;
import com.gmail.nossr50.skills.archery.ArcheryManager;
@ -48,6 +49,12 @@ public final class CombatTools {
}
BukkitMMOPlayer mcMMOPlayer = pluginRef.getUserManager().getPlayer(player);
//Make sure the profiles been loaded
if(mcMMOPlayer == null) {
return;
}
SwordsManager swordsManager = mcMMOPlayer.getSwordsManager();
double initialDamage = event.getDamage();
double finalDamage = initialDamage;
@ -92,6 +99,12 @@ public final class CombatTools {
Map<DamageModifier, Double> modifiers = getModifiers(event);
BukkitMMOPlayer mcMMOPlayer = pluginRef.getUserManager().getPlayer(player);
//Make sure the profiles been loaded
if(mcMMOPlayer == null) {
return;
}
AxesManager axesManager = mcMMOPlayer.getAxesManager();
if (axesManager.canActivateAbility()) {
@ -134,6 +147,12 @@ public final class CombatTools {
double finalDamage = initialDamage;
BukkitMMOPlayer mcMMOPlayer = pluginRef.getUserManager().getPlayer(player);
//Make sure the profiles been loaded
if(mcMMOPlayer == null) {
return;
}
UnarmedManager unarmedManager = mcMMOPlayer.getUnarmedManager();
if (unarmedManager.canActivateAbility()) {
@ -208,6 +227,12 @@ public final class CombatTools {
double initialDamage = event.getDamage();
BukkitMMOPlayer mcMMOPlayer = pluginRef.getUserManager().getPlayer(player);
//Make sure the profiles been loaded
if(mcMMOPlayer == null) {
return;
}
ArcheryManager archeryManager = mcMMOPlayer.getArcheryManager();
double finalDamage = event.getDamage();
@ -226,7 +251,8 @@ public final class CombatTools {
}
if (archeryManager.canSkillShot()) {
finalDamage += archeryManager.skillShot(initialDamage);
//Not Additive
finalDamage = archeryManager.skillShot(initialDamage);
}
if (archeryManager.canDaze(target)) {
@ -578,6 +604,12 @@ public final class CombatTools {
target.damage(damage);
}
private boolean processingNoInvulnDamage;
public boolean isProcessingNoInvulnDamage() {
return processingNoInvulnDamage;
}
public void dealNoInvulnerabilityTickDamage(LivingEntity target, double damage, Entity attacker) {
if (target.isDead()) {
return;
@ -588,14 +620,21 @@ public final class CombatTools {
// potentially mis-attributing the death cause; calling a fake event would partially fix this, but this and setting the last damage
// cause do have issues around plugin observability. This is not a perfect solution, but it appears to be the best one here
// We also set no damage ticks to 0, to ensure that damage is applied for this case, and reset it back to the original value
// Snapshot current state so we can pop up properly
boolean wasMetaSet = target.getMetadata(MetadataConstants.CUSTOM_DAMAGE_METAKEY).size() != 0;
target.setMetadata(MetadataConstants.CUSTOM_DAMAGE_METAKEY, MetadataConstants.metadataValue);
boolean wasProcessing = processingNoInvulnDamage;
// set markers
processingNoInvulnDamage = true;
target.setMetadata(MetadataConstants.CUSTOM_DAMAGE_METAKEY, MetadataConstants.metadataValue);
int noDamageTicks = target.getNoDamageTicks();
target.setNoDamageTicks(0);
target.damage(damage, attacker);
target.setNoDamageTicks(noDamageTicks);
if (!wasMetaSet)
target.removeMetadata(MetadataConstants.CUSTOM_DAMAGE_METAKEY, pluginRef);
if (!wasProcessing)
processingNoInvulnDamage = false;
}
public void dealNoInvulnerabilityTickDamageRupture(LivingEntity target, double damage, Entity attacker, int toolTier) {

View File

@ -0,0 +1,9 @@
sed -i s/Axes.Skills.SS/SuperAbility.SkullSplitter/g *.properties
sed -i s/Excavation.Skills.GigaDrillBreaker/SuperAbility.GigaDrillBreaker/g *.properties
sed -i s/Herbalism.Skills.GTe/SuperAbility.GreenTerra/g *.properties
sed -i s/Mining.Skills.SuperBreaker/SuperAbility.SuperBreaker/g *.properties
sed -i s/Mining.Blast/SuperAbility.BlastMining/g *.properties
sed -i s/Swords.Skills.SS/SuperAbility.SerratedStrikes/g *.properties
sed -i s/Unarmed.Skills.Berserk/SuperAbility.Berserk/g *.properties
sed -i s/Woodcutting.Skills.TreeFeller/SuperAbility.TreeFeller/g *.properties

View File

@ -118,14 +118,14 @@ XPBar.Complex.Template={0} [[DARK_AQUA]] {4}[[WHITE]]% [[DARK_AQUA]]([[WHITE]]{1
# ACROBATICS
Acrobatics.Ability.Proc=[[GREEN]]**\u512a\u96c5\u306b\u7740\u5730\u3057\u305f**
Acrobatics.Combat.Proc=[[GREEN]]**\u8eb1\u3057\u305f**
Acrobatics.SubSkill.Roll.Stats=[[GOLD]]\u53d7\u3051\u8eab \u78ba\u7387 [[YELLOW]]{0}%[[GOLD]] \u4e0a\u4f4d\u53d7\u3051\u8eab \u78ba\u7387[[YELLOW]] {1}%
Acrobatics.SubSkill.Roll.Stats=[[GOLD]]\u53d7\u3051\u8eab \u78ba\u7387 [[YELLOW]]{0}%[[GOLD]] \u512a\u96c5\u306a\u53d7\u3051\u8eab \u78ba\u7387[[YELLOW]] {1}%
Acrobatics.SubSkill.Roll.Stat=\u53d7\u3051\u8eab \u78ba\u7387
Acrobatics.SubSkill.Roll.Stat.Extra=\u4e0a\u4f4d\u53d7\u3051\u8eab \u78ba\u7387
Acrobatics.SubSkill.Roll.Stat.Extra=\u512a\u96c5\u306a\u53d7\u3051\u8eab \u78ba\u7387
Acrobatics.SubSkill.Roll.Name=\u53d7\u3051\u8eab
Acrobatics.SubSkill.Roll.Description=\u30c0\u30e1\u30fc\u30b8\u3092\u907f\u3051\u308b\u70ba\u306b\u843d\u4e0b\u6642\u306b\u53d7\u3051\u8eab\u3059\u308b\u3002
Acrobatics.SubSkill.Roll.Chance=\u53d7\u3051\u8eab \u78ba\u7387: [[YELLOW]]{0}
Acrobatics.SubSkill.Roll.GraceChance=\u4e0a\u4f4d\u53d7\u3051\u8eab \u78ba\u7387: [[YELLOW]]{0}
Acrobatics.SubSkill.GracefulRoll.Name=\u4e0a\u4f4d\u53d7\u3051\u8eab
Acrobatics.SubSkill.Roll.GraceChance=\u512a\u96c5\u306a\u53d7\u3051\u8eab \u78ba\u7387: [[YELLOW]]{0}
Acrobatics.SubSkill.GracefulRoll.Name=\u512a\u96c5\u306a\u53d7\u3051\u8eab
Acrobatics.SubSkill.GracefulRoll.Description=\u53d7\u3051\u8eab\u306e\u4e8c\u500d\u306e\u52b9\u679c\u3092\u767a\u63ee\u3059\u308b\u3002
Acrobatics.SubSkill.Dodge.Name=\u8eb1\u3059
Acrobatics.SubSkill.Dodge.Description=\u653b\u6483\u3067\u53d7\u3051\u308b\u30c0\u30e1\u30fc\u30b8\u3092\u534a\u6e1b\u3059\u308b\u3002
@ -193,10 +193,10 @@ Axes.SubSkill.GreaterImpact.Name=\u30b0\u30ec\u30fc\u30bf\u30fc\u30a4\u30f3\u30d
Axes.SubSkill.GreaterImpact.Description=\u9632\u5177\u306e\u306a\u3044\u6575\u306b\u8ffd\u52a0\u30c0\u30e1\u30fc\u30b8\u3092\u4e0e\u3048\u308b\u3002
Axes.Listener=\u65a7:
Axes.SkillName=\u65a7
SuperAbility.SkullSplitter.Off=**\u30b9\u30ab\u30eb\u30b9\u30d7\u30ea\u30c3\u30bf\u30fc \u3092\u6469\u640d\u3057\u305f**
SuperAbility.SkullSplitter.Off=**\u30b9\u30ab\u30eb\u30b9\u30d7\u30ea\u30c3\u30bf\u30fc \u3092\u6d88\u8017\u3057\u305f**
SuperAbility.SkullSplitter.On=[[GREEN]]**\u30b9\u30ab\u30eb\u30b9\u30d7\u30ea\u30c3\u30bf\u30fc \u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8**
SuperAbility.SkullSplitter.Refresh=[[YELLOW]]\u30b9\u30ab\u30eb\u30b9\u30d7\u30ea\u30c3\u30bf\u30fc [[GREEN]]\u30a2\u30d3\u30ea\u30c6\u30a3\u304c\u56de\u5fa9\u3057\u307e\u3057\u305f\uff01
SuperAbility.SkullSplitter.Other.Off=[[YELLOW]]{0}\u304c [[WHITE]]\u30b9\u30ab\u30eb\u30b9\u30d7\u30ea\u30c3\u30bf\u30fc [[GREEN]]\u3092\u6469\u640d\u3057\u305f
SuperAbility.SkullSplitter.Other.Off=[[YELLOW]]{0}\u304c [[WHITE]]\u30b9\u30ab\u30eb\u30b9\u30d7\u30ea\u30c3\u30bf\u30fc [[GREEN]]\u3092\u6d88\u8017\u3057\u305f
SuperAbility.SkullSplitter.Other.On=[[GREEN]]{0}[[DARK_GREEN]]\u304c [[RED]]\u30b9\u30ab\u30eb\u30b9\u30d7\u30ea\u30c3\u30bf\u30fc [[DARK_GREEN]]\u3092\u4f7f\u3063\u305f\uff01
# EXCAVATION
@ -212,10 +212,10 @@ Excavation.SubSkill.Archaeology.Stat.Extra=\u8003\u53e4\u5b66 \u7d4c\u9a13\u5024
Excavation.Listener=\u6398\u524a:
Excavation.SkillName=\u6398\u524a
SuperAbility.GigaDrillBreaker.Off=**\u30ae\u30ac\u30c9\u30ea\u30eb\u30d6\u30ec\u30fc\u30ab\u30fc \u3092\u6469\u640d\u3057\u305f**
SuperAbility.GigaDrillBreaker.Off=**\u30ae\u30ac\u30c9\u30ea\u30eb\u30d6\u30ec\u30fc\u30ab\u30fc \u3092\u6d88\u8017\u3057\u305f**
SuperAbility.GigaDrillBreaker.On=[[GREEN]]**\u30ae\u30ac\u30c9\u30ea\u30eb\u30d6\u30ec\u30fc\u30ab\u30fc \u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8**
SuperAbility.GigaDrillBreaker.Refresh=[[YELLOW]]\u30ae\u30ac\u30c9\u30ea\u30eb\u30d6\u30ec\u30fc\u30ab\u30fc [[GREEN]]\u30a2\u30d3\u30ea\u30c6\u30a3\u304c\u56de\u5fa9\u3057\u307e\u3057\u305f\uff01
SuperAbility.GigaDrillBreaker.Other.Off=[[YELLOW]]{0}\u304c [[WHITE]]\u30ae\u30ac\u30c9\u30ea\u30eb\u30d6\u30ec\u30fc\u30ab\u30fc [[GREEN]]\u3092\u6469\u640d\u3057\u305f
SuperAbility.GigaDrillBreaker.Other.Off=[[YELLOW]]{0}\u304c [[WHITE]]\u30ae\u30ac\u30c9\u30ea\u30eb\u30d6\u30ec\u30fc\u30ab\u30fc [[GREEN]]\u3092\u6d88\u8017\u3057\u305f
SuperAbility.GigaDrillBreaker.Other.On=[[GREEN]]{0}[[DARK_GREEN]]\u304c [[RED]]\u30ae\u30ac\u30c9\u30ea\u30eb\u30d6\u30ec\u30fc\u30ab\u30fc [[DARK_GREEN]]\u3092\u4f7f\u3063\u305f\uff01
# FISHING
@ -284,10 +284,10 @@ Herbalism.SubSkill.ShroomThumb.Stat=\u30ad\u30ce\u30b3\u306e\u89aa\u6307 \u78ba\
Herbalism.HylianLuck=[[GREEN]]\u30cf\u30a4\u30e9\u30eb\u306e\u904b\u306f\u4eca\u65e5\u306e\u3042\u306a\u305f\u306b\u3064\u3044\u3066\u3044\u307e\u3059\uff01
Herbalism.Listener=\u8fb2\u696d:
Herbalism.SkillName=\u8fb2\u696d
SuperAbility.GreenTerra.Off=**\u304c\u3059\u308a\u6e1b\u3063\u305f \u3092\u6469\u640d\u3057\u305f**
SuperAbility.GreenTerra.On=[[GREEN]]**\u304c\u3059\u308a\u6e1b\u3063\u305f \u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8**
SuperAbility.GreenTerra.Refresh=[[YELLOW]]\u304c\u3059\u308a\u6e1b\u3063\u305f [[GREEN]]\u30a2\u30d3\u30ea\u30c6\u30a3\u304c\u56de\u5fa9\u3057\u307e\u3057\u305f\uff01
SuperAbility.GreenTerra.Other.Off=[[YELLOW]]{0}\u304c [[WHITE]]\u304c\u3059\u308a\u6e1b\u3063\u305f [[GREEN]]\u3092\u6469\u640d\u3057\u305f
SuperAbility.GreenTerra.Off=**\u30b0\u30ea\u30fc\u30f3\u30c6\u30e9 \u3092\u6d88\u8017\u3057\u305f**
SuperAbility.GreenTerra.On=[[GREEN]]**\u30b0\u30ea\u30fc\u30f3\u30c6\u30e9 \u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8**
SuperAbility.GreenTerra.Refresh=[[YELLOW]]\u30b0\u30ea\u30fc\u30f3\u30c6\u30e9 [[GREEN]]\u30a2\u30d3\u30ea\u30c6\u30a3\u304c\u56de\u5fa9\u3057\u307e\u3057\u305f\uff01
SuperAbility.GreenTerra.Other.Off=[[YELLOW]]{0}\u304c [[WHITE]]\u30b0\u30ea\u30fc\u30f3\u30c6\u30e9 [[GREEN]]\u3092\u6d88\u8017\u3057\u305f
SuperAbility.GreenTerra.Other.On=[[GREEN]]{0}[[DARK_GREEN]]\u304c [[RED]]\u30b0\u30ea\u30fc\u30f3\u30c6\u30e9 [[DARK_GREEN]]\u3092\u4f7f\u3063\u305f\uff01
# MINING
@ -313,10 +313,10 @@ Mining.SubSkill.DemolitionsExpertise.Description=TNT\u306b\u3088\u308b\u30c0\u30
Mining.SubSkill.DemolitionsExpertise.Stat=\u89e3\u4f53\u30a8\u30ad\u30b9\u30d1\u30fc\u30c8\u306e\u30c0\u30e1\u30fc\u30b8\u8efd\u6e1b
Mining.Listener=\u63a1\u6398:
Mining.SkillName=\u63a1\u6398
SuperAbility.SuperBreaker.Off=**\u30b9\u30fc\u30d1\u30fc\u30d6\u30ec\u30fc\u30ab\u30fc \u3092\u6469\u640d\u3057\u305f**
SuperAbility.SuperBreaker.Off=**\u30b9\u30fc\u30d1\u30fc\u30d6\u30ec\u30fc\u30ab\u30fc \u3092\u6d88\u8017\u3057\u305f**
SuperAbility.SuperBreaker.On=[[GREEN]]**\u30b9\u30fc\u30d1\u30fc\u30d6\u30ec\u30fc\u30ab\u30fc \u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8**
SuperAbility.SuperBreaker.Refresh=[[YELLOW]]\u30b9\u30fc\u30d1\u30fc\u30d6\u30ec\u30fc\u30ab\u30fc [[GREEN]]\u30a2\u30d3\u30ea\u30c6\u30a3\u304c\u56de\u5fa9\u3057\u307e\u3057\u305f\uff01
SuperAbility.SuperBreaker.Other.Off=[[YELLOW]]{0}\u304c [[WHITE]]\u30b9\u30fc\u30d1\u30fc\u30d6\u30ec\u30fc\u30ab\u30fc [[GREEN]]\u3092\u6469\u640d\u3057\u305f
SuperAbility.SuperBreaker.Other.Off=[[YELLOW]]{0}\u304c [[WHITE]]\u30b9\u30fc\u30d1\u30fc\u30d6\u30ec\u30fc\u30ab\u30fc [[GREEN]]\u3092\u6d88\u8017\u3057\u305f
SuperAbility.SuperBreaker.Other.On=[[GREEN]]{0}[[DARK_GREEN]]\u304c [[RED]]\u30b9\u30fc\u30d1\u30fc\u30d6\u30ec\u30fc\u30ab\u30fc [[DARK_GREEN]]\u3092\u4f7f\u3063\u305f\uff01
# Blast Mining
@ -428,10 +428,10 @@ Swords.Effect.4=\u92f8\u6b6f\u72b6\u306e\u653b\u6483\u306e\u7834\u88c2+
Swords.Effect.5={0} Tick \u7834\u88c2
Swords.Listener=\u5263:
Swords.SkillName=\u5263
SuperAbility.SerratedStrikes.Off=**\u92f8\u6b6f\u72b6\u306e\u653b\u6483 \u3092\u6469\u640d\u3057\u305f**
SuperAbility.SerratedStrikes.Off=**\u92f8\u6b6f\u72b6\u306e\u653b\u6483 \u3092\u6d88\u8017\u3057\u305f**
SuperAbility.SerratedStrikes.On=[[GREEN]]**\u92f8\u6b6f\u72b6\u306e\u653b\u6483 \u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8**
SuperAbility.SerratedStrikes.Refresh=[[YELLOW]]\u92f8\u6b6f\u72b6\u306e\u653b\u6483 [[GREEN]]\u30a2\u30d3\u30ea\u30c6\u30a3\u304c\u56de\u5fa9\u3057\u307e\u3057\u305f\uff01
SuperAbility.SerratedStrikes.Other.Off=[[YELLOW]]{0}\u304c [[WHITE]]\u92f8\u6b6f\u72b6\u306e\u653b\u6483 [[GREEN]]\u3092\u6469\u640d\u3057\u305f
SuperAbility.SerratedStrikes.Other.Off=[[YELLOW]]{0}\u304c [[WHITE]]\u92f8\u6b6f\u72b6\u306e\u653b\u6483 [[GREEN]]\u3092\u6d88\u8017\u3057\u305f
SuperAbility.SerratedStrikes.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u304c [[RED]]\u92f8\u6b6f\u72b6\u306e\u653b\u6483 [[DARK_GREEN]]\u3092\u4f7f\u3063\u305f\uff01
# TAMING
@ -515,10 +515,10 @@ Unarmed.SubSkill.BlockCracker.Name=\u30d6\u30ed\u30c3\u30af\u30af\u30e9\u30c3\u3
Unarmed.SubSkill.BlockCracker.Description=\u62f3\u3067\u5ca9\u3092\u7834\u58ca\u3059\u308b\u3002
Unarmed.Listener=\u7d20\u624b:
Unarmed.SkillName=\u7d20\u624b
SuperAbility.Berserk.Off=**\u30d0\u30fc\u30b5\u30fc\u30ab\u30fc \u3092\u6469\u640d\u3057\u305f**
SuperAbility.Berserk.Off=**\u30d0\u30fc\u30b5\u30fc\u30ab\u30fc \u3092\u6d88\u8017\u3057\u305f**
SuperAbility.Berserk.On=[[GREEN]]**\u30d0\u30fc\u30b5\u30fc\u30ab\u30fc \u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8**
SuperAbility.Berserk.Refresh=[[YELLOW]]\u30d0\u30fc\u30b5\u30fc\u30ab\u30fc [[GREEN]]\u30a2\u30d3\u30ea\u30c6\u30a3\u304c\u56de\u5fa9\u3057\u307e\u3057\u305f\uff01
SuperAbility.Berserk.Other.Off=[[YELLOW]]{0}\u304c [[WHITE]]\u30d0\u30fc\u30b5\u30fc\u30ab\u30fc [[GREEN]]\u3092\u6469\u640d\u3057\u305f
SuperAbility.Berserk.Other.Off=[[YELLOW]]{0}\u304c [[WHITE]]\u30d0\u30fc\u30b5\u30fc\u30ab\u30fc [[GREEN]]\u3092\u6d88\u8017\u3057\u305f
SuperAbility.Berserk.Other.On=[[GREEN]]{0}[[DARK_GREEN]]\u304c [[RED]]\u30d0\u30fc\u30b5\u30fc\u30ab\u30fc [[DARK_GREEN]]\u3092\u4f7f\u3063\u305f\uff01
# WOODCUTTING
@ -541,10 +541,10 @@ Woodcutting.SubSkill.NaturesBounty.Name=\u81ea\u7136\u306e\u6075\u307f
Woodcutting.SubSkill.NaturesBounty.Description=\u81ea\u7136\u304b\u3089\u7d4c\u9a13\u5024\u3092\u96c6\u3081\u308b\u3002
Woodcutting.Listener=\u6728\u3053\u308a:
Woodcutting.SkillName=\u6728\u3053\u308a
SuperAbility.TreeFeller.Off=**\u30c4\u30ea\u30fc\u30d5\u30a7\u30e9\u30fc \u3092\u6469\u640d\u3057\u305f**
SuperAbility.TreeFeller.Off=**\u30c4\u30ea\u30fc\u30d5\u30a7\u30e9\u30fc \u3092\u6d88\u8017\u3057\u305f**
SuperAbility.TreeFeller.On=[[GREEN]]**\u30c4\u30ea\u30fc\u30d5\u30a7\u30e9\u30fc \u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8**
SuperAbility.TreeFeller.Refresh=[[YELLOW]]\u30c4\u30ea\u30fc\u30d5\u30a7\u30e9\u30fc [[GREEN]]\u30a2\u30d3\u30ea\u30c6\u30a3\u304c\u56de\u5fa9\u3057\u307e\u3057\u305f\uff01
SuperAbility.TreeFeller.Other.Off=[[YELLOW]]{0}\u304c [[WHITE]]\u30c4\u30ea\u30fc\u30d5\u30a7\u30e9\u30fc [[GREEN]]\u3092\u6469\u640d\u3057\u305f
SuperAbility.TreeFeller.Other.Off=[[YELLOW]]{0}\u304c [[WHITE]]\u30c4\u30ea\u30fc\u30d5\u30a7\u30e9\u30fc [[GREEN]]\u3092\u6d88\u8017\u3057\u305f
SuperAbility.TreeFeller.Other.On=[[GREEN]]{0}[[DARK_GREEN]]\u304c [[RED]]\u30c4\u30ea\u30fc\u30d5\u30a7\u30e9\u30fc [[DARK_GREEN]]\u3092\u4f7f\u3063\u305f\uff01
SuperAbility.TreeFeller.Splinter=\u65a7\u306f\u4f55\u5341\u3082\u306e\u7834\u7247\u306b\u7815\u3051\u305f\uff01
SuperAbility.TreeFeller.Threshold=\u6728\u304c\u5927\u304d\u3059\u304e\u308b\uff01
@ -988,19 +988,19 @@ 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.MaxXP=\u6700\u5927
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.TooTired=\u305d\u306e\u30a2\u30d3\u30ea\u30c6\u30a3\u3092\u518d\u3073\u4f7f\u3046\u306e\u306b\u306f\u75b2\u308c\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.Combat=[[GOLD]]-=\u6226\u95d8\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.Name=\u7d4c\u9a13\u5024
Perks.XP.Desc=\u7279\u5b9a\u306e\u30b9\u30ad\u30eb\u306e\u30d6\u30fc\u30b9\u30c8XP\u3092\u53d7\u3051\u53d6\u308b\u3002
Perks.Lucky.Name=\u30e9\u30c3\u30ad\u30fc
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

File diff suppressed because it is too large Load Diff

View File

@ -456,6 +456,7 @@ Bonus_Drops:
Lilac: true
Rose_Bush: true
Peony: true
Lily_Of_The_Valley: true
Mining:
Andesite: true
Diorite: true

View File

@ -274,7 +274,8 @@ Experience_Values:
Brown_Mushroom_Block: 70
Mushroom_Stem: 80
Herbalism:
Sweet_Berry_Bush: 300
Bee_Nest: 200
Sweet_Berry_Bush: 50
Seagrass: 10
Tall_Seagrass: 10
Kelp: 3
@ -440,6 +441,7 @@ Experience_Values:
Cat: 500
Fox: 1000
Panda: 1000
Bee: 100
Combat:
Multiplier:
Animals: 1.0
@ -501,4 +503,5 @@ Experience_Values:
Ravager: 4.0
Trader_Llama: 1.0
Wandering_trader: 1.0
Bee: 1.5