1.21.9 support for treasures.yml, experience.yml, fishing_treasures.yml, and settings for mannequins and a fix for armor stands

This commit is contained in:
nossr50
2025-10-05 12:27:20 -07:00
parent c958a86aa3
commit 07d18e2eba
8 changed files with 77 additions and 12 deletions

View File

@@ -1,15 +1,24 @@
Version 2.2.043 Version 2.2.043
Added support for the new copper tools and weapons added in Minecraft 1.21.9 Added support for the new copper tools and weapons added in Minecraft 1.21.9
Added many missing buttons, trapdoors, doors, fence gates, etc to the ability/tool blacklists (see notes)
Added copper tools and armor to repair.vanilla.yml (see notes) Added copper tools and armor to repair.vanilla.yml (see notes)
Added copper tools and armor to salvage.vanilla.yml (see notes) Added copper tools and armor to salvage.vanilla.yml (see notes)
Added many missing buttons, trapdoors, doors, fence gates, etc to the ability/tool blacklists (see notes) Added copper tools and armor to fishing_treasures.yml (see notes)
TOOD: Smelting Added Copper_Nugget to treasures.yml (see notes)
Added Copper_Nugget to experience.yml for Smelting XP
Added Copper_Golem to experience.yml for Combat XP
Fixed ExploitFix.PreventArmorStandInteraction in experience.yml not being respected
Added ExploitFix.PreventMannequinInteraction to experience.yml to prevent mannequins from granting XP or other effects
NOTES: NOTES:
You will need to manually update your repair.vanilla.yml and salvage.vanilla.yml files to get support for copper tools and armor. You don't need to update your experience.yml, that one updates automatically when you run mcMMO after an update.
You will need to manually update the following files manually repair.vanilla.yml, salvage.vanilla.yml, treasures.yml, and fishing_treasures.yml files to get support for copper tools and armor.
You can find the default config files in the defaults folder at plugins\mcMMO\defaults after running this mcMMO update at least once. You can find the default config files in the defaults folder at plugins\mcMMO\defaults after running this mcMMO update at least once.
You can use this default file to copy paste if you please, or if you haven't customizes these two config files, simply delete them to have mcMMO regenerate them with the new entries. You can use this default file to copy paste if you please
OR if you haven't customizes these config files, simply delete them to have mcMMO regenerate them with the new entries.
mcMMO has an internal blacklist of blocks that abilities and tools won't activate or "ready" on, pretty much anything that is interactable should go on this list, and I performed an audit and there were quite a few missing entries, so I've added them in this update, what this means is you won't click on a button and have it ready your tool anymore, as it should have been doing. mcMMO has an internal blacklist of blocks that abilities and tools won't activate or "ready" on, pretty much anything that is interactable should go on this list, and I performed an audit and there were quite a few missing entries, so I've added them in this update, what this means is you won't click on a button and have it ready your tool anymore, as it should have been doing.
Mannequins are treated the same way armor stands are treated, the default behavior is mcMMO won't process on them unless you turn on the setting under ExploitFix in experience.yml, in addition to this their default XP is set to 0.0
mcMMO had a setting 'ExploitFix.PreventArmorStandInteraction' to allow mcMMO to process abilities and XP on armor stands, but it was never hooked up! I fixed that mistake in this update.
Version 2.2.042 Version 2.2.042
mcMMO now listens to BlockDropItemEvent at LOW priority instead of HIGHEST mcMMO now listens to BlockDropItemEvent at LOW priority instead of HIGHEST

View File

@@ -201,6 +201,10 @@ public class ExperienceConfig extends BukkitConfig {
return config.getBoolean("ExploitFix.PreventArmorStandInteraction", true); return config.getBoolean("ExploitFix.PreventArmorStandInteraction", true);
} }
public boolean isMannequinInteractionPrevented() {
return config.getBoolean("ExploitFix.PreventMannequinInteraction", true);
}
public boolean isFishingExploitingPrevented() { public boolean isFishingExploitingPrevented() {
return config.getBoolean("ExploitFix.Fishing", true); return config.getBoolean("ExploitFix.Fishing", true);
} }

View File

@@ -34,6 +34,7 @@ import com.gmail.nossr50.util.skills.CombatUtils;
import com.gmail.nossr50.util.skills.ProjectileUtils; import com.gmail.nossr50.util.skills.ProjectileUtils;
import com.gmail.nossr50.worldguard.WorldGuardManager; import com.gmail.nossr50.worldguard.WorldGuardManager;
import com.gmail.nossr50.worldguard.WorldGuardUtils; import com.gmail.nossr50.worldguard.WorldGuardUtils;
import java.util.Locale;
import java.util.Set; import java.util.Set;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
@@ -352,11 +353,13 @@ public class EntityListener implements Listener {
return; return;
} }
// Don't process this event for marked entities, for players this is handled above, if (ExperienceConfig.getInstance().isArmorStandInteractionPrevented()
// However, for entities, we do not wanna cancel this event to allow plugins to observe changes && attacker.getType().toString().toLowerCase(Locale.ENGLISH).equals("armor_stand")) {
// properly return;
}
if (event.getEntity() instanceof ArmorStand) { if (ExperienceConfig.getInstance().isMannequinInteractionPrevented()
&& attacker.getType().toString().toLowerCase(Locale.ENGLISH).equals("mannequin")) {
return; return;
} }

View File

@@ -1408,6 +1408,7 @@ public class MaterialMapStore {
blackList.add("dropper"); blackList.add("dropper");
blackList.add("hopper"); blackList.add("hopper");
blackList.add("armor_stand"); blackList.add("armor_stand");
blackList.add("mannequin");
} }
private void fillAbilityBlackList() { private void fillAbilityBlackList() {

View File

@@ -58,7 +58,7 @@ import org.jetbrains.annotations.Nullable;
public final class CombatUtils { public final class CombatUtils {
private static final ThreadLocal<Boolean> IN_MCMO_DAMAGE private static final ThreadLocal<Boolean> IN_MCMMO_DAMAGE
= ThreadLocal.withInitial(() -> false); = ThreadLocal.withInitial(() -> false);
@@ -75,14 +75,14 @@ public final class CombatUtils {
*/ */
public static void safeDealDamage(@NotNull LivingEntity target, double amount, public static void safeDealDamage(@NotNull LivingEntity target, double amount,
@Nullable Entity attacker) { @Nullable Entity attacker) {
boolean prev = IN_MCMO_DAMAGE.get(); boolean prev = IN_MCMMO_DAMAGE.get();
if (prev || target.isDead()) { if (prev || target.isDead()) {
return; return;
} }
try { try {
IN_MCMO_DAMAGE.set(true); IN_MCMMO_DAMAGE.set(true);
if (!hasIgnoreDamageMetadata(target)) { if (!hasIgnoreDamageMetadata(target)) {
applyIgnoreDamageMetadata(target); applyIgnoreDamageMetadata(target);
} }
@@ -93,7 +93,7 @@ public final class CombatUtils {
target.damage(amount); target.damage(amount);
} }
} finally { } finally {
IN_MCMO_DAMAGE.set(false); IN_MCMMO_DAMAGE.set(false);
if (hasIgnoreDamageMetadata(target)) { if (hasIgnoreDamageMetadata(target)) {
removeIgnoreDamageMetadata(target); removeIgnoreDamageMetadata(target);
} }

View File

@@ -30,6 +30,7 @@ ExploitFix:
PistonCheating: true PistonCheating: true
SnowGolemExcavation: true SnowGolemExcavation: true
PreventArmorStandInteraction: true PreventArmorStandInteraction: true
PreventMannequinInteraction: true
# This include NPCs from stuff like Citizens, this is not a setting for Vanilla Minecraft Villagers (Which can be considered NPCs) # This include NPCs from stuff like Citizens, this is not a setting for Vanilla Minecraft Villagers (Which can be considered NPCs)
# mcMMO normally doesn't process attacks against an Entity if it is an NPC from another plugin # mcMMO normally doesn't process attacks against an Entity if it is an NPC from another plugin
# Of course, mcMMO doesn't know for sure whether something is an NPC, it checks a few known things, see our source code to see how # Of course, mcMMO doesn't know for sure whether something is an NPC, it checks a few known things, see our source code to see how
@@ -553,6 +554,7 @@ Experience_Values:
String: 1.8 String: 1.8
Other: 1.5 Other: 1.5
Smelting: Smelting:
Copper_Nugget: 85
Raw_Copper: 75 Raw_Copper: 75
Deepslate_Redstone_Ore: 30 Deepslate_Redstone_Ore: 30
Deepslate_Copper_Ore: 100 Deepslate_Copper_Ore: 100
@@ -683,3 +685,5 @@ Experience_Values:
Camel: 1.2 Camel: 1.2
Bogged: 2.0 Bogged: 2.0
Breeze: 4.0 Breeze: 4.0
Armor_Stand: 0.0
Mannequin: 0.0

View File

@@ -63,6 +63,26 @@ Fishing:
Amount: 1 Amount: 1
XP: 200 XP: 200
Rarity: UNCOMMON Rarity: UNCOMMON
COPPER_SWORD:
Amount: 1
XP: 200
Rarity: UNCOMMON
COPPER_SHOVEL:
Amount: 1
XP: 200
Rarity: UNCOMMON
COPPER_PICKAXE:
Amount: 1
XP: 200
Rarity: UNCOMMON
COPPER_AXE:
Amount: 1
XP: 200
Rarity: UNCOMMON
COPPER_HOE:
Amount: 1
XP: 200
Rarity: UNCOMMON
GOLDEN_SWORD: GOLDEN_SWORD:
Amount: 1 Amount: 1
XP: 200 XP: 200
@@ -143,6 +163,22 @@ Fishing:
Amount: 1 Amount: 1
XP: 200 XP: 200
Rarity: RARE Rarity: RARE
COPPER_BOOTS:
Amount: 1
XP: 200
Rarity: COMMON
COPPER_HELMET:
Amount: 1
XP: 200
Rarity: COMMON
COPPER_LEGGINGS:
Amount: 1
XP: 200
Rarity: COMMON
COPPER_CHESTPLATE:
Amount: 1
XP: 200
Rarity: COMMON
IRON_BOOTS: IRON_BOOTS:
Amount: 1 Amount: 1
XP: 200 XP: 200

View File

@@ -296,3 +296,11 @@ Hylian_Luck:
Standard_Mode: 0 Standard_Mode: 0
Retro_Mode: 0 Retro_Mode: 0
Drops_From: [Pots] Drops_From: [Pots]
COPPER_NUGGET:
Amount: 1
XP: 5
Drop_Chance: 100.0
Level_Requirement:
Standard_Mode: 0
Retro_Mode: 0
Drops_From: [Pots]