mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-26 07:06:45 +01:00
2.1.81
This commit is contained in:
parent
adefda42df
commit
ef71661db1
@ -1,4 +1,13 @@
|
|||||||
Version 2.1.81
|
Version 2.1.81
|
||||||
|
Fixed a bug where Arrow Deflect would never trigger outside of PVP
|
||||||
|
Fixed a bug where failing to salvage enchantments incorrectly colored the text
|
||||||
|
mcMMO no longer allows players to keep enchantments exceeding normal limitations by default when salvaging or repairing (you can turn this off in the config, see below)
|
||||||
|
Added new setting 'ExploitFix.UnsafeEnchantments' to experience.yml, turn this on to allow players to salvage/repair enchantments higher than normal game restrictions
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
If a player tries to salvage/repair an item with an illegal enchant (for example Sharpness X) it will downgrade that item to the highest legal version when calculating rewards
|
||||||
|
If you don't like this change you can turn it off in experience.yml under 'ExploitFix.UnsafeEnchantments'
|
||||||
|
|
||||||
|
|
||||||
Version 2.1.80
|
Version 2.1.80
|
||||||
(Fix) mcMMO now respects the NBT "Unbreakable" tag and does not deal durability damage to items with that tag
|
(Fix) mcMMO now respects the NBT "Unbreakable" tag and does not deal durability damage to items with that tag
|
||||||
|
2
pom.xml
2
pom.xml
@ -2,7 +2,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.gmail.nossr50.mcMMO</groupId>
|
<groupId>com.gmail.nossr50.mcMMO</groupId>
|
||||||
<artifactId>mcMMO</artifactId>
|
<artifactId>mcMMO</artifactId>
|
||||||
<version>2.1.81-SNAPSHOT</version>
|
<version>2.1.81</version>
|
||||||
<name>mcMMO</name>
|
<name>mcMMO</name>
|
||||||
<url>https://github.com/mcMMO-Dev/mcMMO</url>
|
<url>https://github.com/mcMMO-Dev/mcMMO</url>
|
||||||
<scm>
|
<scm>
|
||||||
|
@ -147,6 +147,7 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
|
|||||||
/* EXPLOIT TOGGLES */
|
/* EXPLOIT TOGGLES */
|
||||||
public boolean isEndermanEndermiteFarmingPrevented() { return config.getBoolean("ExploitFix.EndermanEndermiteFarms", true); }
|
public boolean isEndermanEndermiteFarmingPrevented() { return config.getBoolean("ExploitFix.EndermanEndermiteFarms", true); }
|
||||||
public boolean isPistonExploitPrevented() { return config.getBoolean("ExploitFix.Pistons", false); }
|
public boolean isPistonExploitPrevented() { return config.getBoolean("ExploitFix.Pistons", false); }
|
||||||
|
public boolean allowUnsafeEnchantments() { return config.getBoolean("ExploitFix.UnsafeEnchantments", false); }
|
||||||
|
|
||||||
public boolean isFishingExploitingPrevented() { return config.getBoolean("ExploitFix.Fishing", true); }
|
public boolean isFishingExploitingPrevented() { return config.getBoolean("ExploitFix.Fishing", true); }
|
||||||
public boolean isAcrobaticsExploitingPrevented() { return config.getBoolean("ExploitFix.Acrobatics", true); }
|
public boolean isAcrobaticsExploitingPrevented() { return config.getBoolean("ExploitFix.Acrobatics", true); }
|
||||||
|
@ -17,6 +17,7 @@ import com.gmail.nossr50.skills.mining.BlastMining;
|
|||||||
import com.gmail.nossr50.skills.mining.MiningManager;
|
import com.gmail.nossr50.skills.mining.MiningManager;
|
||||||
import com.gmail.nossr50.skills.taming.Taming;
|
import com.gmail.nossr50.skills.taming.Taming;
|
||||||
import com.gmail.nossr50.skills.taming.TamingManager;
|
import com.gmail.nossr50.skills.taming.TamingManager;
|
||||||
|
import com.gmail.nossr50.skills.unarmed.UnarmedManager;
|
||||||
import com.gmail.nossr50.util.BlockUtils;
|
import com.gmail.nossr50.util.BlockUtils;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
@ -346,6 +347,18 @@ public class EntityListener implements Listener {
|
|||||||
if (projectileSource instanceof LivingEntity) {
|
if (projectileSource instanceof LivingEntity) {
|
||||||
attacker = (LivingEntity) projectileSource;
|
attacker = (LivingEntity) projectileSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(defender instanceof Player) {
|
||||||
|
Player playerDefender = (Player) defender;
|
||||||
|
UnarmedManager unarmedManager = UserManager.getPlayer(playerDefender).getUnarmedManager();
|
||||||
|
|
||||||
|
if (unarmedManager.canDeflect()) {
|
||||||
|
if(unarmedManager.deflectCheck()) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (attacker instanceof Tameable) {
|
else if (attacker instanceof Tameable) {
|
||||||
AnimalTamer animalTamer = ((Tameable) attacker).getOwner();
|
AnimalTamer animalTamer = ((Tameable) attacker).getOwner();
|
||||||
|
@ -328,10 +328,17 @@ public class RepairManager extends SkillManager {
|
|||||||
boolean downgraded = false;
|
boolean downgraded = false;
|
||||||
|
|
||||||
for (Entry<Enchantment, Integer> enchant : enchants.entrySet()) {
|
for (Entry<Enchantment, Integer> enchant : enchants.entrySet()) {
|
||||||
|
int enchantLevel = enchant.getValue();
|
||||||
|
|
||||||
|
if(!ExperienceConfig.getInstance().allowUnsafeEnchantments()) {
|
||||||
|
if(enchantLevel > enchant.getKey().getMaxLevel()) {
|
||||||
|
enchantLevel = enchant.getKey().getMaxLevel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Enchantment enchantment = enchant.getKey();
|
Enchantment enchantment = enchant.getKey();
|
||||||
|
|
||||||
if (RandomChanceUtil.checkRandomChanceExecutionSuccess(new RandomChanceSkillStatic(getKeepEnchantChance(), getPlayer(), SubSkillType.REPAIR_ARCANE_FORGING))) {
|
if (RandomChanceUtil.checkRandomChanceExecutionSuccess(new RandomChanceSkillStatic(getKeepEnchantChance(), getPlayer(), SubSkillType.REPAIR_ARCANE_FORGING))) {
|
||||||
int enchantLevel = enchant.getValue();
|
|
||||||
|
|
||||||
if (ArcaneForging.arcaneForgingDowngrades && enchantLevel > 1
|
if (ArcaneForging.arcaneForgingDowngrades && enchantLevel > 1
|
||||||
&& (!RandomChanceUtil.checkRandomChanceExecutionSuccess(new RandomChanceSkillStatic(100 - getDowngradeEnchantChance(), getPlayer(), SubSkillType.REPAIR_ARCANE_FORGING)))) {
|
&& (!RandomChanceUtil.checkRandomChanceExecutionSuccess(new RandomChanceSkillStatic(100 - getDowngradeEnchantChance(), getPlayer(), SubSkillType.REPAIR_ARCANE_FORGING)))) {
|
||||||
@ -347,13 +354,13 @@ public class RepairManager extends SkillManager {
|
|||||||
Map<Enchantment, Integer> newEnchants = item.getEnchantments();
|
Map<Enchantment, Integer> newEnchants = item.getEnchantments();
|
||||||
|
|
||||||
if (newEnchants.isEmpty()) {
|
if (newEnchants.isEmpty()) {
|
||||||
NotificationManager.sendPlayerInformation(getPlayer(), NotificationType.SUBSKILL_MESSAGE_FAILED, "Repair.Arcane.Fail");
|
NotificationManager.sendPlayerInformationChatOnly(getPlayer(), "Repair.Arcane.Fail");
|
||||||
}
|
}
|
||||||
else if (downgraded || newEnchants.size() < enchants.size()) {
|
else if (downgraded || newEnchants.size() < enchants.size()) {
|
||||||
NotificationManager.sendPlayerInformation(getPlayer(), NotificationType.SUBSKILL_MESSAGE_FAILED, "Repair.Arcane.Downgrade");
|
NotificationManager.sendPlayerInformationChatOnly(getPlayer(), "Repair.Arcane.Downgrade");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
NotificationManager.sendPlayerInformation(getPlayer(), NotificationType.SUBSKILL_MESSAGE, "Repair.Arcane.Perfect");
|
NotificationManager.sendPlayerInformationChatOnly(getPlayer(), "Repair.Arcane.Perfect");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package com.gmail.nossr50.skills.salvage;
|
|||||||
|
|
||||||
import com.gmail.nossr50.config.AdvancedConfig;
|
import com.gmail.nossr50.config.AdvancedConfig;
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||||
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
@ -214,7 +215,7 @@ public class SalvageManager extends SkillManager {
|
|||||||
Player player = getPlayer();
|
Player player = getPlayer();
|
||||||
|
|
||||||
if (!RankUtils.hasUnlockedSubskill(player, SubSkillType.SALVAGE_ARCANE_SALVAGE) || !Permissions.arcaneSalvage(player)) {
|
if (!RankUtils.hasUnlockedSubskill(player, SubSkillType.SALVAGE_ARCANE_SALVAGE) || !Permissions.arcaneSalvage(player)) {
|
||||||
NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE_FAILED, "Salvage.Skills.ArcaneFailed");
|
NotificationManager.sendPlayerInformationChatOnly(player, "Salvage.Skills.ArcaneFailed");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,15 +226,24 @@ public class SalvageManager extends SkillManager {
|
|||||||
int arcaneFailureCount = 0;
|
int arcaneFailureCount = 0;
|
||||||
|
|
||||||
for (Entry<Enchantment, Integer> enchant : enchants.entrySet()) {
|
for (Entry<Enchantment, Integer> enchant : enchants.entrySet()) {
|
||||||
|
|
||||||
|
int enchantLevel = enchant.getValue();
|
||||||
|
|
||||||
|
if(!ExperienceConfig.getInstance().allowUnsafeEnchantments()) {
|
||||||
|
if(enchantLevel > enchant.getKey().getMaxLevel()) {
|
||||||
|
enchantLevel = enchant.getKey().getMaxLevel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!Salvage.arcaneSalvageEnchantLoss
|
if (!Salvage.arcaneSalvageEnchantLoss
|
||||||
|| Permissions.hasSalvageEnchantBypassPerk(player)
|
|| Permissions.hasSalvageEnchantBypassPerk(player)
|
||||||
|| RandomChanceUtil.checkRandomChanceExecutionSuccess(new RandomChanceSkillStatic(getExtractFullEnchantChance(), getPlayer(), SubSkillType.SALVAGE_ARCANE_SALVAGE))) {
|
|| RandomChanceUtil.checkRandomChanceExecutionSuccess(new RandomChanceSkillStatic(getExtractFullEnchantChance(), getPlayer(), SubSkillType.SALVAGE_ARCANE_SALVAGE))) {
|
||||||
enchantMeta.addStoredEnchant(enchant.getKey(), enchant.getValue(), true);
|
enchantMeta.addStoredEnchant(enchant.getKey(), enchantLevel, true);
|
||||||
}
|
}
|
||||||
else if (enchant.getValue() > 1
|
else if (enchantLevel > 1
|
||||||
&& Salvage.arcaneSalvageDowngrades
|
&& Salvage.arcaneSalvageDowngrades
|
||||||
&& RandomChanceUtil.checkRandomChanceExecutionSuccess(new RandomChanceSkillStatic(getExtractPartialEnchantChance(), getPlayer(), SubSkillType.SALVAGE_ARCANE_SALVAGE))) {
|
&& RandomChanceUtil.checkRandomChanceExecutionSuccess(new RandomChanceSkillStatic(getExtractPartialEnchantChance(), getPlayer(), SubSkillType.SALVAGE_ARCANE_SALVAGE))) {
|
||||||
enchantMeta.addStoredEnchant(enchant.getKey(), enchant.getValue() - 1, true);
|
enchantMeta.addStoredEnchant(enchant.getKey(), enchantLevel - 1, true);
|
||||||
downgraded = true;
|
downgraded = true;
|
||||||
} else {
|
} else {
|
||||||
arcaneFailureCount++;
|
arcaneFailureCount++;
|
||||||
@ -242,11 +252,11 @@ public class SalvageManager extends SkillManager {
|
|||||||
|
|
||||||
if(failedAllEnchants(arcaneFailureCount, enchants.entrySet().size()))
|
if(failedAllEnchants(arcaneFailureCount, enchants.entrySet().size()))
|
||||||
{
|
{
|
||||||
NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE_FAILED, "Salvage.Skills.ArcaneFailed");
|
NotificationManager.sendPlayerInformationChatOnly(player, "Salvage.Skills.ArcaneFailed");
|
||||||
return null;
|
return null;
|
||||||
} else if(downgraded)
|
} else if(downgraded)
|
||||||
{
|
{
|
||||||
NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE_FAILED, "Salvage.Skills.ArcanePartial");
|
NotificationManager.sendPlayerInformationChatOnly(player, "Salvage.Skills.ArcanePartial");
|
||||||
}
|
}
|
||||||
|
|
||||||
book.setItemMeta(enchantMeta);
|
book.setItemMeta(enchantMeta);
|
||||||
|
@ -27,6 +27,7 @@ EarlyGameBoost:
|
|||||||
#Used to determine the cap of the max boot, with default level cap it will be 5 on standard, and 50 on retro
|
#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
|
MaxLevelMultiplier: 0.05
|
||||||
ExploitFix:
|
ExploitFix:
|
||||||
|
UnsafeEnchantments: false
|
||||||
# Prevent many exploits related to fishing
|
# Prevent many exploits related to fishing
|
||||||
Fishing: true
|
Fishing: true
|
||||||
EndermanEndermiteFarms: true
|
EndermanEndermiteFarms: true
|
||||||
|
Loading…
Reference in New Issue
Block a user