mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 08:27:43 +01:00
Config to allow unsafe enchants
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
--- a/net/minecraft/server/commands/EnchantCommand.java
|
||||
+++ b/net/minecraft/server/commands/EnchantCommand.java
|
||||
@@ -70,7 +_,7 @@
|
||||
|
||||
private static int enchant(CommandSourceStack source, Collection<? extends Entity> targets, Holder<Enchantment> enchantment, int level) throws CommandSyntaxException {
|
||||
Enchantment enchantment1 = enchantment.value();
|
||||
- if (level > enchantment1.getMaxLevel()) {
|
||||
+ if (!org.purpurmc.purpur.PurpurConfig.allowUnsafeEnchantCommand && level > enchantment1.getMaxLevel()) { // Purpur - Config to allow unsafe enchants
|
||||
throw ERROR_LEVEL_TOO_HIGH.create(level, enchantment1.getMaxLevel());
|
||||
} else {
|
||||
int i = 0;
|
||||
@@ -81,7 +_,7 @@
|
||||
ItemStack mainHandItem = livingEntity.getMainHandItem();
|
||||
if (!mainHandItem.isEmpty()) {
|
||||
if (enchantment1.canEnchant(mainHandItem)
|
||||
- && EnchantmentHelper.isEnchantmentCompatible(EnchantmentHelper.getEnchantmentsForCrafting(mainHandItem).keySet(), enchantment)) {
|
||||
+ && EnchantmentHelper.isEnchantmentCompatible(EnchantmentHelper.getEnchantmentsForCrafting(mainHandItem).keySet(), enchantment) || (org.purpurmc.purpur.PurpurConfig.allowUnsafeEnchantCommand && !mainHandItem.hasEnchantment(enchantment))) { // Purpur - Config to allow unsafe enchants
|
||||
mainHandItem.enchant(enchantment, level);
|
||||
i++;
|
||||
} else if (targets.size() == 1) {
|
||||
@@ -64,15 +64,49 @@
|
||||
ItemStack itemStack = item.copy();
|
||||
ItemStack item1 = this.inputSlots.getItem(1);
|
||||
ItemEnchantments.Mutable mutable = new ItemEnchantments.Mutable(EnchantmentHelper.getEnchantmentsForCrafting(itemStack));
|
||||
@@ -198,7 +_,7 @@
|
||||
@@ -191,23 +_,36 @@
|
||||
int intValue = entry.getIntValue();
|
||||
intValue = level == intValue ? intValue + 1 : Math.max(intValue, level);
|
||||
Enchantment enchantment = holder.value();
|
||||
- boolean canEnchant = enchantment.canEnchant(item);
|
||||
+ // Purpur start - Config to allow unsafe enchants
|
||||
+ boolean canEnchant = this.canDoUnsafeEnchants || org.purpurmc.purpur.PurpurConfig.allowInapplicableEnchants || enchantment.canEnchant(item); // whether the enchantment can be applied on specific item type
|
||||
+ boolean canEnchant1 = true; // whether two incompatible enchantments can be applied on a single item
|
||||
+ // Purpur end - Config to allow unsafe enchants
|
||||
if (this.player.getAbilities().instabuild || item.is(Items.ENCHANTED_BOOK)) {
|
||||
canEnchant = true;
|
||||
}
|
||||
|
||||
for (Holder<Enchantment> holder1 : mutable.keySet()) {
|
||||
- for (Holder<Enchantment> holder1 : mutable.keySet()) {
|
||||
+ // Purpur start - Config to allow unsafe enchants
|
||||
+ java.util.Iterator<Holder<Enchantment>> mutableIterator = mutable.keySet().iterator();
|
||||
+ while (mutableIterator.hasNext()) {
|
||||
+ Holder<Enchantment> holder1 = mutableIterator.next();
|
||||
+ // Purpur end - Config to allow unsafe enchants
|
||||
if (!holder1.equals(holder) && !Enchantment.areCompatible(holder, holder1)) {
|
||||
- canEnchant = false;
|
||||
+ canEnchant = this.canDoUnsafeEnchants; // Purpur - Anvil API
|
||||
i++;
|
||||
- i++;
|
||||
+ canEnchant1 = this.canDoUnsafeEnchants || org.purpurmc.purpur.PurpurConfig.allowIncompatibleEnchants; // Purpur - Anvil API // Purpur - flag3 -> canEnchant1 - Config to allow unsafe enchants
|
||||
+ // Purpur start - Config to allow unsafe enchants
|
||||
+ if (!canEnchant1 && org.purpurmc.purpur.PurpurConfig.replaceIncompatibleEnchants) {
|
||||
+ mutableIterator.remove(); // replace current enchant with the incompatible one trying to be applied // TODO: is this needed?
|
||||
+ canEnchant1 = true;
|
||||
+ }
|
||||
+ // Purpur end - Config to allow unsafe enchants
|
||||
+ ++i;
|
||||
}
|
||||
}
|
||||
|
||||
- if (!canEnchant) {
|
||||
+ if (!canEnchant || !canEnchant1) { // Purpur - Config to allow unsafe enchants
|
||||
flag1 = true;
|
||||
} else {
|
||||
flag = true;
|
||||
- if (intValue > enchantment.getMaxLevel() && !this.bypassEnchantmentLevelRestriction) { // Paper - bypass anvil level restrictions
|
||||
+ if (!org.purpurmc.purpur.PurpurConfig.allowHigherEnchantsLevels && intValue > enchantment.getMaxLevel() && !this.bypassEnchantmentLevelRestriction) { // Paper - bypass anvil level restrictions // Purpur - Config to allow unsafe enchants
|
||||
intValue = enchantment.getMaxLevel();
|
||||
}
|
||||
|
||||
@@ -236,6 +_,54 @@
|
||||
if (!this.itemName.equals(item.getHoverName().getString())) {
|
||||
i1 = 1;
|
||||
@@ -147,7 +181,7 @@
|
||||
this.broadcastChanges();
|
||||
+
|
||||
+ // Purpur start - Anvil API
|
||||
+ if (this.canDoUnsafeEnchants && itemStack != ItemStack.EMPTY) {
|
||||
+ if ((this.canDoUnsafeEnchants || org.purpurmc.purpur.PurpurConfig.allowInapplicableEnchants || org.purpurmc.purpur.PurpurConfig.allowIncompatibleEnchants) && itemStack != ItemStack.EMPTY) { // Purpur - Config to allow unsafe enchants
|
||||
+ ((ServerPlayer) this.player).connection.send(new ClientboundContainerSetSlotPacket(this.containerId, this.incrementStateId(), 2, itemStack));
|
||||
+ ((ServerPlayer) this.player).connection.send(new ClientboundContainerSetDataPacket(this.containerId, 0, this.cost.get()));
|
||||
+ }
|
||||
|
||||
@@ -27,3 +27,16 @@
|
||||
public int getDamageValue() {
|
||||
return Mth.clamp(this.getOrDefault(DataComponents.DAMAGE, Integer.valueOf(0)), 0, this.getMaxDamage());
|
||||
}
|
||||
@@ -1232,6 +_,12 @@
|
||||
public boolean isEnchanted() {
|
||||
return !this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY).isEmpty();
|
||||
}
|
||||
+
|
||||
+ // Purpur start - Config to allow unsafe enchants
|
||||
+ public boolean hasEnchantment(Holder<Enchantment> enchantment) {
|
||||
+ return this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY).getLevel(enchantment) > 0;
|
||||
+ }
|
||||
+ // Purpur end - Config to allow unsafe enchants
|
||||
|
||||
public ItemEnchantments getEnchantments() {
|
||||
return this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY);
|
||||
|
||||
@@ -271,6 +271,36 @@ public class PurpurConfig {
|
||||
cryingObsidianValidForPortalFrame = getBoolean("settings.blocks.crying_obsidian.valid-for-portal-frame", cryingObsidianValidForPortalFrame);
|
||||
}
|
||||
|
||||
public static boolean allowInapplicableEnchants = false;
|
||||
public static boolean allowIncompatibleEnchants = false;
|
||||
public static boolean allowHigherEnchantsLevels = false;
|
||||
public static boolean allowUnsafeEnchantCommand = false;
|
||||
public static boolean replaceIncompatibleEnchants = false;
|
||||
private static void enchantmentSettings() {
|
||||
if (version < 30) {
|
||||
boolean oldValue = getBoolean("settings.enchantment.allow-unsafe-enchants", false);
|
||||
set("settings.enchantment.anvil.allow-unsafe-enchants", oldValue);
|
||||
set("settings.enchantment.anvil.allow-inapplicable-enchants", true);
|
||||
set("settings.enchantment.anvil.allow-incompatible-enchants", true);
|
||||
set("settings.enchantment.anvil.allow-higher-enchants-levels", true);
|
||||
set("settings.enchantment.allow-unsafe-enchants", null);
|
||||
}
|
||||
if (version < 37) {
|
||||
boolean allowUnsafeEnchants = getBoolean("settings.enchantment.anvil.allow-unsafe-enchants", false);
|
||||
if (!allowUnsafeEnchants) {
|
||||
set("settings.enchantment.anvil.allow-inapplicable-enchants", false);
|
||||
set("settings.enchantment.anvil.allow-incompatible-enchants", false);
|
||||
set("settings.enchantment.anvil.allow-higher-enchants-levels", false);
|
||||
}
|
||||
set("settings.enchantment.anvil.allow-unsafe-enchants", null);
|
||||
}
|
||||
allowInapplicableEnchants = getBoolean("settings.enchantment.anvil.allow-inapplicable-enchants", allowInapplicableEnchants);
|
||||
allowIncompatibleEnchants = getBoolean("settings.enchantment.anvil.allow-incompatible-enchants", allowIncompatibleEnchants);
|
||||
allowHigherEnchantsLevels = getBoolean("settings.enchantment.anvil.allow-higher-enchants-levels", allowHigherEnchantsLevels);
|
||||
allowUnsafeEnchantCommand = getBoolean("settings.enchantment.allow-unsafe-enchant-command", allowUnsafeEnchantCommand);
|
||||
replaceIncompatibleEnchants = getBoolean("settings.enchantment.anvil.replace-incompatible-enchants", replaceIncompatibleEnchants);
|
||||
}
|
||||
|
||||
public static boolean endermanShortHeight = false;
|
||||
private static void entitySettings() {
|
||||
endermanShortHeight = getBoolean("settings.entity.enderman.short-height", endermanShortHeight);
|
||||
|
||||
Reference in New Issue
Block a user