mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-08-28 08:25:56 +02:00
Compare commits
4 commits
0ab7abd6b4
...
460114ac01
| Author | SHA1 | Date | |
|---|---|---|---|
| 460114ac01 | |||
| d67d998dc1 | |||
| f1c3cf46e1 | |||
| 45dd92e0f4 |
32 changed files with 204 additions and 108 deletions
|
|
@ -17,7 +17,7 @@ These plugins have compatibility handled by custom anvil. seek help on custom an
|
||||||
Also use ExcellentEnchant max enchant limit
|
Also use ExcellentEnchant max enchant limit
|
||||||
|
|
||||||
- [EcoEnchant](https://www.spigotmc.org/resources/ecoenchants-%E2%AD%95-250-enchantments-%E2%9C%85-create-custom-enchants-%E2%9C%A8-essentials-cmi-support.79573/) by Auxilor:
|
- [EcoEnchant](https://www.spigotmc.org/resources/ecoenchants-%E2%AD%95-250-enchantments-%E2%9C%85-create-custom-enchants-%E2%9C%A8-essentials-cmi-support.79573/) by Auxilor:
|
||||||
Need to use /anvilconfigreload or a server restart to add newly added enchantment.
|
Need to use /ca reload or a server restart to add newly added enchantment.
|
||||||
Use EcoEnchant restriction system but new restriction can be added in custom anvil
|
Use EcoEnchant restriction system but new restriction can be added in custom anvil
|
||||||
|
|
||||||
- [Enchantment²](https://www.spigotmc.org/resources/enchants-squared-the-enchantsplus-rewrite-custom-enchantments-that-act-like-vanilla-ones.86747/) by Athlaeos:
|
- [Enchantment²](https://www.spigotmc.org/resources/enchants-squared-the-enchantsplus-rewrite-custom-enchantments-that-act-like-vanilla-ones.86747/) by Athlaeos:
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "xyz.alexcrea"
|
group = "xyz.alexcrea"
|
||||||
version = "1.17.6"
|
version = "1.17.7"
|
||||||
|
|
||||||
val isDevBuild = System.getenv("SMALL_COMMIT_HASH") != null
|
val isDevBuild = System.getenv("SMALL_COMMIT_HASH") != null
|
||||||
val isPreRelease = System.getenv("IS_GITHUB_PRERELEASE") == "true"
|
val isPreRelease = System.getenv("IS_GITHUB_PRERELEASE") == "true"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# What service of metric should custom anvil use
|
# What service of metric should custom anvil use
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# material conflicts
|
# material conflicts
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# Please note this config use spigot material names.
|
# Please note this config use spigot material names.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# Unit repair configuration
|
# Unit repair configuration
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# What service of metric should custom anvil use
|
# What service of metric should custom anvil use
|
||||||
|
|
@ -154,7 +154,6 @@ enchant_limits:
|
||||||
minecraft:knockback: 2
|
minecraft:knockback: 2
|
||||||
minecraft:fire_aspect: 2
|
minecraft:fire_aspect: 2
|
||||||
minecraft:looting: 3
|
minecraft:looting: 3
|
||||||
minecraft:sweeping: 3
|
|
||||||
minecraft:sweeping_edge: 3
|
minecraft:sweeping_edge: 3
|
||||||
minecraft:efficiency: 5
|
minecraft:efficiency: 5
|
||||||
minecraft:unbreaking: 3
|
minecraft:unbreaking: 3
|
||||||
|
|
@ -293,9 +292,6 @@ enchant_values:
|
||||||
minecraft:swift_sneak:
|
minecraft:swift_sneak:
|
||||||
item: 8
|
item: 8
|
||||||
book: 4
|
book: 4
|
||||||
minecraft:sweeping:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:sweeping_edge:
|
minecraft:sweeping_edge:
|
||||||
item: 4
|
item: 4
|
||||||
book: 2
|
book: 2
|
||||||
|
|
@ -489,5 +485,5 @@ debug_log_verbose: false
|
||||||
# Whether to show inside the console or require to run /ca debug get
|
# Whether to show inside the console or require to run /ca debug get
|
||||||
display_debug_in_console: false
|
display_debug_in_console: false
|
||||||
|
|
||||||
configVersion: 1.15.5
|
configVersion: 1.17.7
|
||||||
lowMinecraftVersion: 1.21.11
|
lowMinecraftVersion: 1.21.11
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# material conflicts
|
# material conflicts
|
||||||
|
|
@ -270,7 +270,6 @@ restriction_soul_speed:
|
||||||
|
|
||||||
restriction_sweeping_edge:
|
restriction_sweeping_edge:
|
||||||
enchantments:
|
enchantments:
|
||||||
- minecraft:sweeping
|
|
||||||
- minecraft:sweeping_edge
|
- minecraft:sweeping_edge
|
||||||
notAffectedGroups:
|
notAffectedGroups:
|
||||||
- enchanted_book
|
- enchanted_book
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# Please note this config use spigot material names.
|
# Please note this config use spigot material names.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# Unit repair configuration
|
# Unit repair configuration
|
||||||
|
|
@ -104,7 +104,7 @@ leather:
|
||||||
phantom_membrane:
|
phantom_membrane:
|
||||||
elytra: 0.25
|
elytra: 0.25
|
||||||
|
|
||||||
scute:
|
turtle_scute:
|
||||||
turtle_helmet: 0.25
|
turtle_helmet: 0.25
|
||||||
|
|
||||||
oak_planks:
|
oak_planks:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# What service of metric should custom anvil use
|
# What service of metric should custom anvil use
|
||||||
|
|
@ -152,7 +152,6 @@ enchant_limits:
|
||||||
minecraft:knockback: 2
|
minecraft:knockback: 2
|
||||||
minecraft:fire_aspect: 2
|
minecraft:fire_aspect: 2
|
||||||
minecraft:looting: 3
|
minecraft:looting: 3
|
||||||
minecraft:sweeping: 3
|
|
||||||
minecraft:sweeping_edge: 3
|
minecraft:sweeping_edge: 3
|
||||||
minecraft:efficiency: 5
|
minecraft:efficiency: 5
|
||||||
minecraft:unbreaking: 3
|
minecraft:unbreaking: 3
|
||||||
|
|
@ -290,9 +289,6 @@ enchant_values:
|
||||||
minecraft:swift_sneak:
|
minecraft:swift_sneak:
|
||||||
item: 8
|
item: 8
|
||||||
book: 4
|
book: 4
|
||||||
minecraft:sweeping:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:sweeping_edge:
|
minecraft:sweeping_edge:
|
||||||
item: 4
|
item: 4
|
||||||
book: 2
|
book: 2
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# material conflicts
|
# material conflicts
|
||||||
|
|
@ -267,7 +267,6 @@ restriction_soul_speed:
|
||||||
|
|
||||||
restriction_sweeping_edge:
|
restriction_sweeping_edge:
|
||||||
enchantments:
|
enchantments:
|
||||||
- minecraft:sweeping
|
|
||||||
- minecraft:sweeping_edge
|
- minecraft:sweeping_edge
|
||||||
notAffectedGroups:
|
notAffectedGroups:
|
||||||
- enchanted_book
|
- enchanted_book
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# Please note this config use spigot material names.
|
# Please note this config use spigot material names.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# Unit repair configuration
|
# Unit repair configuration
|
||||||
|
|
@ -98,7 +98,7 @@ leather:
|
||||||
phantom_membrane:
|
phantom_membrane:
|
||||||
elytra: 0.25
|
elytra: 0.25
|
||||||
|
|
||||||
scute:
|
turtle_scute:
|
||||||
turtle_helmet: 0.25
|
turtle_helmet: 0.25
|
||||||
|
|
||||||
oak_planks:
|
oak_planks:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# What service of metric should custom anvil use
|
# What service of metric should custom anvil use
|
||||||
|
|
@ -152,7 +152,6 @@ enchant_limits:
|
||||||
minecraft:knockback: 2
|
minecraft:knockback: 2
|
||||||
minecraft:fire_aspect: 2
|
minecraft:fire_aspect: 2
|
||||||
minecraft:looting: 3
|
minecraft:looting: 3
|
||||||
minecraft:sweeping: 3
|
|
||||||
minecraft:sweeping_edge: 3
|
minecraft:sweeping_edge: 3
|
||||||
minecraft:efficiency: 5
|
minecraft:efficiency: 5
|
||||||
minecraft:unbreaking: 3
|
minecraft:unbreaking: 3
|
||||||
|
|
@ -287,9 +286,6 @@ enchant_values:
|
||||||
minecraft:swift_sneak:
|
minecraft:swift_sneak:
|
||||||
item: 8
|
item: 8
|
||||||
book: 4
|
book: 4
|
||||||
minecraft:sweeping:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:sweeping_edge:
|
minecraft:sweeping_edge:
|
||||||
item: 4
|
item: 4
|
||||||
book: 2
|
book: 2
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# material conflicts
|
# material conflicts
|
||||||
|
|
@ -157,13 +157,10 @@ restriction_soul_speed:
|
||||||
notAffectedGroups: [ enchanted_book, boots ]
|
notAffectedGroups: [ enchanted_book, boots ]
|
||||||
|
|
||||||
restriction_sweeping_edge:
|
restriction_sweeping_edge:
|
||||||
enchantments: [ minecraft:sweeping, minecraft:sweeping_edge ]
|
enchantments: [ minecraft:sweeping_edge ]
|
||||||
notAffectedGroups: [ enchanted_book, swords ]
|
notAffectedGroups: [ enchanted_book, swords ]
|
||||||
|
|
||||||
# Do not exist in 1.18, that mean useInFuture will be set to true
|
|
||||||
# useInFuture set to true also mean it will not warn if there is an issue
|
|
||||||
restriction_swift_sneak:
|
restriction_swift_sneak:
|
||||||
useInFuture: true
|
|
||||||
enchantments: [ minecraft:swift_sneak ]
|
enchantments: [ minecraft:swift_sneak ]
|
||||||
notAffectedGroups: [ enchanted_book, leggings ]
|
notAffectedGroups: [ enchanted_book, leggings ]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# Please note this config use spigot material names.
|
# Please note this config use spigot material names.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# Unit repair configuration
|
# Unit repair configuration
|
||||||
|
|
@ -98,7 +98,7 @@ leather:
|
||||||
phantom_membrane:
|
phantom_membrane:
|
||||||
elytra: 0.25
|
elytra: 0.25
|
||||||
|
|
||||||
scute:
|
turtle_scute:
|
||||||
turtle_helmet: 0.25
|
turtle_helmet: 0.25
|
||||||
|
|
||||||
oak_planks:
|
oak_planks:
|
||||||
|
|
|
||||||
|
|
@ -285,14 +285,14 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int getConfiguredValue() {
|
public int getConfiguredValue() {
|
||||||
return ConfigOptions.INSTANCE.enchantmentValue(enchantment, false);
|
return ConfigOptions.INSTANCE.enchantmentValue(enchantment, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The configured value for the enchant setting book value.
|
* @return The configured value for the enchant setting book value.
|
||||||
*/
|
*/
|
||||||
public int getConfiguredBookValue() {
|
public int getConfiguredBookValue() {
|
||||||
return ConfigOptions.INSTANCE.enchantmentValue(enchantment, true);
|
return ConfigOptions.INSTANCE.enchantmentValue(enchantment, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,7 @@ package xyz.alexcrea.cuanvil.update;
|
||||||
|
|
||||||
import io.delilaheve.CustomAnvil;
|
import io.delilaheve.CustomAnvil;
|
||||||
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||||
import xyz.alexcrea.cuanvil.update.minecraft.MCUpdate;
|
import xyz.alexcrea.cuanvil.update.minecraft.*;
|
||||||
import xyz.alexcrea.cuanvil.update.minecraft.Update_1_21;
|
|
||||||
import xyz.alexcrea.cuanvil.update.minecraft.Update_1_21_11;
|
|
||||||
import xyz.alexcrea.cuanvil.update.minecraft.Update_1_21_9;
|
|
||||||
import xyz.alexcrea.cuanvil.update.plugin.*;
|
import xyz.alexcrea.cuanvil.update.plugin.*;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
@ -32,10 +29,12 @@ public class UpdateHandler {
|
||||||
new Version(1, 8, 0), PUpdate_1_8_0::handleUpdate,
|
new Version(1, 8, 0), PUpdate_1_8_0::handleUpdate,
|
||||||
new Version(1, 11, 0), PUpdate_1_11_0::handleUpdate,
|
new Version(1, 11, 0), PUpdate_1_11_0::handleUpdate,
|
||||||
new Version(1, 15, 5), PUpdate_1_15_5::handleUpdate,
|
new Version(1, 15, 5), PUpdate_1_15_5::handleUpdate,
|
||||||
new Version(1, 15, 6), PUpdate_1_15_6::handleUpdate
|
new Version(1, 15, 6), PUpdate_1_15_6::handleUpdate,
|
||||||
|
new Version(1, 17, 7), PUpdate_1_17_7::handleUpdate
|
||||||
);
|
);
|
||||||
|
|
||||||
private static final List<MCUpdate> mcUpdateMap = List.of(
|
private static final List<MCUpdate> mcUpdateMap = List.of(
|
||||||
|
new Update_1_20_5(),
|
||||||
new Update_1_21(),
|
new Update_1_21(),
|
||||||
new Update_1_21_9(),
|
new Update_1_21_9(),
|
||||||
new Update_1_21_11()
|
new Update_1_21_11()
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package xyz.alexcrea.cuanvil.update;
|
package xyz.alexcrea.cuanvil.update;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -33,4 +34,20 @@ public class UpdateUtils {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean removeFromList(FileConfiguration config, String path, String toRemove) {
|
||||||
|
List<String> groups = new ArrayList<>(config.getStringList(path));
|
||||||
|
if (!groups.remove(toRemove)) return false;
|
||||||
|
|
||||||
|
config.set(path, groups);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void mergeSections(ConfigurationSection source, ConfigurationSection target) {
|
||||||
|
for (String key : source.getKeys(false)) {
|
||||||
|
if(target.contains(key)) continue;
|
||||||
|
target.set(key, source.get(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,98 @@
|
||||||
|
package xyz.alexcrea.cuanvil.update.minecraft;
|
||||||
|
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||||
|
import xyz.alexcrea.cuanvil.update.Version;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static xyz.alexcrea.cuanvil.update.UpdateUtils.*;
|
||||||
|
|
||||||
|
public class Update_1_20_5 extends MCUpdate {
|
||||||
|
|
||||||
|
public Update_1_20_5() {
|
||||||
|
super(new Version(1, 20, 5));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doUpdate() {
|
||||||
|
var tosave = new HashSet<ConfigHolder>();
|
||||||
|
updateName(tosave);
|
||||||
|
|
||||||
|
for (ConfigHolder holder : tosave) {
|
||||||
|
holder.saveToDisk(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String SWEEPING_ENCHANTS = "restriction_sweeping_edge.enchantments";
|
||||||
|
|
||||||
|
public static void updateName(@NotNull Set<ConfigHolder> tosave) {
|
||||||
|
var config = ConfigHolder.DEFAULT_CONFIG.getConfig();
|
||||||
|
var unitConfig = ConfigHolder.UNIT_REPAIR_HOLDER.getConfig();
|
||||||
|
var conflict = ConfigHolder.CONFLICT_HOLDER.getConfig();
|
||||||
|
|
||||||
|
// Rename sweeping to sweeping_edge
|
||||||
|
migrateEnchantLimit(config, "minecraft:sweeping");
|
||||||
|
migrateEnchantLimit(config, "sweeping");
|
||||||
|
|
||||||
|
migrateEnchantValues(config, "minecraft:sweeping");
|
||||||
|
migrateEnchantValues(config, "sweeping");
|
||||||
|
|
||||||
|
if (removeFromList(conflict, SWEEPING_ENCHANTS, "minecraft:sweeping"))
|
||||||
|
addAbsentToList(conflict, SWEEPING_ENCHANTS, "minecraft:sweeping_edge");
|
||||||
|
if (removeFromList(conflict, SWEEPING_ENCHANTS, "sweeping"))
|
||||||
|
addAbsentToList(conflict, SWEEPING_ENCHANTS, "minecraft:sweeping_edge");
|
||||||
|
|
||||||
|
// Rename scute to turtle_scute
|
||||||
|
migrateUnitRepair(unitConfig, "minecraft:scute");
|
||||||
|
migrateUnitRepair(unitConfig, "scute");
|
||||||
|
|
||||||
|
ConfigHolder.ITEM_GROUP_HOLDER.reload();
|
||||||
|
|
||||||
|
tosave.add(ConfigHolder.DEFAULT_CONFIG);
|
||||||
|
tosave.add(ConfigHolder.UNIT_REPAIR_HOLDER);
|
||||||
|
tosave.add(ConfigHolder.CONFLICT_HOLDER);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void migrateEnchantLimit(FileConfiguration config, String path) {
|
||||||
|
var finalPath = "enchant_limits." + path;
|
||||||
|
if (!config.isInt(finalPath)) return;
|
||||||
|
var value = config.getInt(finalPath);
|
||||||
|
|
||||||
|
config.set(finalPath, null);
|
||||||
|
if (!config.contains("enchant_limits.minecraft:sweeping_edge")) return;
|
||||||
|
if (!config.contains("enchant_limits.sweeping_edge")) return;
|
||||||
|
|
||||||
|
config.set("enchant_limits.minecraft:sweeping_edge", value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void migrateEnchantValues(FileConfiguration config, String path) {
|
||||||
|
migrateEnchantValues(config, path, "item");
|
||||||
|
migrateEnchantValues(config, path, "book");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void migrateEnchantValues(FileConfiguration config, String path, String child) {
|
||||||
|
var finalPath = "enchant_values." + path + "." + child;
|
||||||
|
if (config.isInt(finalPath)) return;
|
||||||
|
var value = config.getInt(finalPath);
|
||||||
|
|
||||||
|
config.set(finalPath, null);
|
||||||
|
if (!config.contains("enchant_values.minecraft:sweeping_edge." + child)) return;
|
||||||
|
if (!config.contains("enchant_values.sweeping_edge." + child)) return;
|
||||||
|
|
||||||
|
config.set("enchant_values.minecraft:sweeping_edge." + child, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void migrateUnitRepair(FileConfiguration config, String path) {
|
||||||
|
var section = config.getConfigurationSection(path);
|
||||||
|
if (section == null) return;
|
||||||
|
|
||||||
|
config.set(path, null);
|
||||||
|
var turtle_scute = config.getConfigurationSection("minecraft:turtle_scute");
|
||||||
|
if (turtle_scute == null) config.set("minecraft:turtle_scute", section);
|
||||||
|
else mergeSections(section, turtle_scute);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
package xyz.alexcrea.cuanvil.update.plugin;
|
||||||
|
|
||||||
|
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||||
|
import xyz.alexcrea.cuanvil.update.UpdateUtils;
|
||||||
|
import xyz.alexcrea.cuanvil.update.Version;
|
||||||
|
import xyz.alexcrea.cuanvil.update.minecraft.Update_1_20_5;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class PUpdate_1_17_7 {
|
||||||
|
|
||||||
|
public static void handleUpdate(@Nonnull Set<ConfigHolder> toSave) {
|
||||||
|
// fix only needed for 1.20.5 and above
|
||||||
|
Version current = UpdateUtils.currentMinecraftVersion();
|
||||||
|
if (new Version(1, 20, 5).greaterThan(current)) return;
|
||||||
|
|
||||||
|
Update_1_20_5.updateName(toSave);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -86,6 +86,7 @@ object ConfigOptions {
|
||||||
|
|
||||||
// Keys for specific enchantment values
|
// Keys for specific enchantment values
|
||||||
private const val KEY_BOOK = "book"
|
private const val KEY_BOOK = "book"
|
||||||
|
private const val KEY_BOOK_ON_BOOK = "book_on_book"
|
||||||
private const val KEY_ITEM = "item"
|
private const val KEY_ITEM = "item"
|
||||||
|
|
||||||
// Debug flag
|
// Debug flag
|
||||||
|
|
@ -578,14 +579,15 @@ object ConfigOptions {
|
||||||
*/
|
*/
|
||||||
fun enchantmentValue(
|
fun enchantmentValue(
|
||||||
enchantment: CAEnchantment,
|
enchantment: CAEnchantment,
|
||||||
isFromBook: Boolean
|
isToBook: Boolean,
|
||||||
|
isFromBook: Boolean,
|
||||||
): Int {
|
): Int {
|
||||||
// Test namespace
|
// Test namespace
|
||||||
var limit = enchantmentValue(enchantment.key.toString(), isFromBook)
|
var limit = enchantmentValue(enchantment.key.toString(), isToBook, isFromBook)
|
||||||
if (limit != null) return limit
|
if (limit != null) return limit
|
||||||
|
|
||||||
// Test legacy (name only)
|
// Test legacy (name only)
|
||||||
limit = enchantmentValue(enchantment.enchantmentName, isFromBook)
|
limit = enchantmentValue(enchantment.enchantmentName, isToBook, isFromBook)
|
||||||
if (limit != null) return limit
|
if (limit != null) return limit
|
||||||
|
|
||||||
// get default (and test old legacy if present)
|
// get default (and test old legacy if present)
|
||||||
|
|
@ -599,13 +601,22 @@ object ConfigOptions {
|
||||||
*/
|
*/
|
||||||
private fun enchantmentValue(
|
private fun enchantmentValue(
|
||||||
enchantmentName: String,
|
enchantmentName: String,
|
||||||
isFromBook: Boolean
|
isToBook: Boolean,
|
||||||
|
isFromBook: Boolean,
|
||||||
): Int? {
|
): Int? {
|
||||||
val typeKey = if (isFromBook) KEY_BOOK else KEY_ITEM
|
val typeKey = if (isFromBook) KEY_BOOK else KEY_ITEM
|
||||||
val path = "${ENCHANT_VALUES_ROOT}.${enchantmentName}.$typeKey"
|
val path = "${ENCHANT_VALUES_ROOT}.${enchantmentName}.$typeKey"
|
||||||
return CustomAnvil.instance
|
|
||||||
.config
|
val config = ConfigHolder.DEFAULT_CONFIG.config
|
||||||
.getInt(path, DEFAULT_ENCHANT_VALUE - 1)
|
if(isFromBook && isToBook) {
|
||||||
|
val specialPath = "${ENCHANT_VALUES_ROOT}.${enchantmentName}.$KEY_BOOK_ON_BOOK"
|
||||||
|
|
||||||
|
if(config.isInt(specialPath))
|
||||||
|
return config.getInt(specialPath)
|
||||||
|
.takeIf { it >= DEFAULT_ENCHANT_VALUE }
|
||||||
|
}
|
||||||
|
|
||||||
|
return config.getInt(path, DEFAULT_ENCHANT_VALUE - 1)
|
||||||
.takeIf { it >= DEFAULT_ENCHANT_VALUE }
|
.takeIf { it >= DEFAULT_ENCHANT_VALUE }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -613,20 +624,9 @@ object ConfigOptions {
|
||||||
* Get default value if enchantment do not exist on config
|
* Get default value if enchantment do not exist on config
|
||||||
*/
|
*/
|
||||||
private fun getDefaultValue(
|
private fun getDefaultValue(
|
||||||
enchantment: CAEnchantment, // compatibility with 1.20.5. TODO better update system
|
enchantment: CAEnchantment,
|
||||||
isFromBook: Boolean
|
isFromBook: Boolean
|
||||||
): Int {
|
): Int {
|
||||||
|
|
||||||
val enchantmentName = enchantment.key.toString()
|
|
||||||
if (enchantmentName == "minecraft:sweeping_edge") {
|
|
||||||
var limit = enchantmentValue("minecraft:sweeping", isFromBook)
|
|
||||||
if (limit != null) return limit
|
|
||||||
|
|
||||||
// legacy name
|
|
||||||
limit = enchantmentValue("sweeping", isFromBook)
|
|
||||||
if (limit != null) return limit
|
|
||||||
}
|
|
||||||
|
|
||||||
val rarity = enchantment.defaultRarity()
|
val rarity = enchantment.defaultRarity()
|
||||||
return if (isFromBook)
|
return if (isFromBook)
|
||||||
rarity.bookValue
|
rarity.bookValue
|
||||||
|
|
@ -648,15 +648,6 @@ object ConfigOptions {
|
||||||
value = maxBeforeMergeDisabled(legacy)
|
value = maxBeforeMergeDisabled(legacy)
|
||||||
if (value >= 0) return value
|
if (value >= 0) return value
|
||||||
|
|
||||||
if (key == "minecraft:sweeping_edge") {
|
|
||||||
value = maxBeforeMergeDisabled("minecraft:sweeping")
|
|
||||||
if (value >= 0) return value
|
|
||||||
|
|
||||||
// legacy name of legacy enchantment name
|
|
||||||
value = maxBeforeMergeDisabled("sweeping")
|
|
||||||
if (value >= 0) return value
|
|
||||||
}
|
|
||||||
|
|
||||||
return DEFAULT_MAX_BEFORE_MERGE_DISABLED
|
return DEFAULT_MAX_BEFORE_MERGE_DISABLED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ class EditConfigExecutor: CASubCommand() {
|
||||||
sender.sendMessage("§eIt is may come in a future version.")
|
sender.sendMessage("§eIt is may come in a future version.")
|
||||||
sender.sendMessage("")
|
sender.sendMessage("")
|
||||||
sender.sendMessage("§eCurrently you need to edit manually the config or copy from another server (spigot or better)")
|
sender.sendMessage("§eCurrently you need to edit manually the config or copy from another server (spigot or better)")
|
||||||
sender.sendMessage("§eThen /anvilconfigreload after config file is edited")
|
sender.sendMessage("§eThen /ca reload after config file is edited")
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,13 +39,6 @@ class EnchantConflictManager {
|
||||||
|
|
||||||
// Default name for a joining group
|
// Default name for a joining group
|
||||||
const val DEFAULT_GROUP_NAME = "joinedGroup"
|
const val DEFAULT_GROUP_NAME = "joinedGroup"
|
||||||
|
|
||||||
// 1.20.5 compatibility TODO better update system
|
|
||||||
private val SWEEPING_EDGE_ENCHANT = Collections.singletonList<CAEnchantment>(
|
|
||||||
CAEnchantment.getByKey(NamespacedKey.minecraft("sweeping_edge"))
|
|
||||||
?: CAEnchantment.getByKey(Enchantment.SWEEPING_EDGE.key)
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lateinit var conflictList: ArrayList<EnchantConflictGroup>
|
lateinit var conflictList: ArrayList<EnchantConflictGroup>
|
||||||
|
|
@ -172,14 +165,6 @@ class EnchantConflictManager {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Temporary solution for 1.20.5
|
|
||||||
when (enchantName) {
|
|
||||||
"minecraft:sweeping", "sweeping",
|
|
||||||
"minecraft:sweeping_edge", "sweeping_edge" -> {
|
|
||||||
return SWEEPING_EDGE_ENCHANT
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return CAEnchantment.getListByName(enchantName)
|
return CAEnchantment.getListByName(enchantName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import xyz.alexcrea.cuanvil.dependency.economy.EconomyManager
|
||||||
import xyz.alexcrea.cuanvil.group.ConflictType
|
import xyz.alexcrea.cuanvil.group.ConflictType
|
||||||
import xyz.alexcrea.cuanvil.util.AnvilTitleUtil
|
import xyz.alexcrea.cuanvil.util.AnvilTitleUtil
|
||||||
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
|
import xyz.alexcrea.cuanvil.util.dialog.AnvilRenameDialogUtil
|
||||||
|
import kotlin.math.sqrt
|
||||||
|
|
||||||
object AnvilXpUtil {
|
object AnvilXpUtil {
|
||||||
|
|
||||||
|
|
@ -35,7 +36,8 @@ object AnvilXpUtil {
|
||||||
inventory: AnvilInventory,
|
inventory: AnvilInventory,
|
||||||
view: InventoryView,
|
view: InventoryView,
|
||||||
player: Player,
|
player: Player,
|
||||||
result: AnvilResult) {
|
result: AnvilResult
|
||||||
|
) {
|
||||||
if (result.item == null) {
|
if (result.item == null) {
|
||||||
onNoResult(player, view)
|
onNoResult(player, view)
|
||||||
return
|
return
|
||||||
|
|
@ -246,7 +248,8 @@ object AnvilXpUtil {
|
||||||
fun getRightValues(left: ItemStack, right: ItemStack, result: ItemStack, cost: AnvilCost) {
|
fun getRightValues(left: ItemStack, right: ItemStack, result: ItemStack, cost: AnvilCost) {
|
||||||
// Calculate right value and illegal enchant penalty
|
// Calculate right value and illegal enchant penalty
|
||||||
|
|
||||||
val rightIsFormBook = right.isEnchantedBook()
|
val isToBook = left.isEnchantedBook()
|
||||||
|
val isFromBook = right.isEnchantedBook()
|
||||||
val rightEnchs = EnchantmentApi.getEnchantments(right)
|
val rightEnchs = EnchantmentApi.getEnchantments(right)
|
||||||
val resultEnchs = EnchantmentApi.getEnchantments(result)
|
val resultEnchs = EnchantmentApi.getEnchantments(result)
|
||||||
val resultEnchsKeys = HashMap(resultEnchs)
|
val resultEnchsKeys = HashMap(resultEnchs)
|
||||||
|
|
@ -274,14 +277,13 @@ object AnvilXpUtil {
|
||||||
// We know "enchantment.key in resultEnchs" true
|
// We know "enchantment.key in resultEnchs" true
|
||||||
val resultLevel = resultEnchs[enchantment.key]!!
|
val resultLevel = resultEnchs[enchantment.key]!!
|
||||||
|
|
||||||
val enchantmentMultiplier = ConfigOptions.enchantmentValue(enchantment.key, rightIsFormBook)
|
val enchantmentMultiplier = ConfigOptions.enchantmentValue(enchantment.key, isFromBook, isToBook)
|
||||||
val value = resultLevel * enchantmentMultiplier
|
val value = resultLevel * enchantmentMultiplier
|
||||||
CustomAnvil.log("Value for sacrifice item ${enchantment.key.enchantmentName} level ${enchantment.value} is $value ($resultLevel * $enchantmentMultiplier)")
|
CustomAnvil.log("Value for sacrifice item ${enchantment.key.enchantmentName} level ${enchantment.value} is $value ($resultLevel * $enchantmentMultiplier)")
|
||||||
rightValue += value
|
rightValue += value
|
||||||
|
|
||||||
}
|
}
|
||||||
if (ConfigOptions.includeLeftEnchantmentForCost) {
|
if (ConfigOptions.includeLeftEnchantmentForCost) {
|
||||||
val leftIsFormBook = left.isEnchantedBook()
|
|
||||||
val leftEnchs = EnchantmentApi.getEnchantments(left)
|
val leftEnchs = EnchantmentApi.getEnchantments(left)
|
||||||
for (enchantment in leftEnchs) {
|
for (enchantment in leftEnchs) {
|
||||||
// Do not process enchantment that are present on the sacrifice
|
// Do not process enchantment that are present on the sacrifice
|
||||||
|
|
@ -289,7 +291,7 @@ object AnvilXpUtil {
|
||||||
|
|
||||||
val resultLevel = resultEnchs.getOrDefault(enchantment.key, 0)
|
val resultLevel = resultEnchs.getOrDefault(enchantment.key, 0)
|
||||||
|
|
||||||
val enchantmentMultiplier = ConfigOptions.enchantmentValue(enchantment.key, leftIsFormBook)
|
val enchantmentMultiplier = ConfigOptions.enchantmentValue(enchantment.key, isFromBook, isToBook)
|
||||||
val value = resultLevel * enchantmentMultiplier
|
val value = resultLevel * enchantmentMultiplier
|
||||||
CustomAnvil.log("Value for left item ${enchantment.key.enchantmentName} level ${enchantment.value} is $value ($resultLevel * $enchantmentMultiplier)")
|
CustomAnvil.log("Value for left item ${enchantment.key.enchantmentName} level ${enchantment.value} is $value ($resultLevel * $enchantmentMultiplier)")
|
||||||
leftValue += value
|
leftValue += value
|
||||||
|
|
@ -312,15 +314,15 @@ object AnvilXpUtil {
|
||||||
*/
|
*/
|
||||||
fun calculateLevelForXp(xp: Int): Int {
|
fun calculateLevelForXp(xp: Int): Int {
|
||||||
return when {
|
return when {
|
||||||
xp <= 352 -> (Math.sqrt((xp + 9).toDouble()) - 3).toInt()
|
xp <= 352 -> (sqrt((xp + 9).toDouble()) - 3).toInt()
|
||||||
xp <= 1507 -> {
|
xp <= 1507 -> {
|
||||||
val inner = (2.0 / 5.0) * (xp - 7839.0 / 40.0)
|
val inner = (2.0 / 5.0) * (xp - 7839.0 / 40.0)
|
||||||
(81.0 / 10.0 + Math.sqrt(inner)).toInt()
|
(81.0 / 10.0 + sqrt(inner)).toInt()
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
val inner = (2.0 / 9.0) * (xp - 54215.0 / 72.0)
|
val inner = (2.0 / 9.0) * (xp - 54215.0 / 72.0)
|
||||||
(325.0 / 18.0 + Math.sqrt(inner)).toInt()
|
(325.0 / 18.0 + sqrt(inner)).toInt()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit most of these config.
|
# It is recommended that you use /configanvil to edit most of these config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# What service of metric should custom anvil use
|
# What service of metric should custom anvil use
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# material conflicts
|
# material conflicts
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# Please note this config use spigot material names.
|
# Please note this config use spigot material names.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
# It is recommended that you use /configanvil to edit theses config.
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /ca reload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# Unit repair configuration
|
# Unit repair configuration
|
||||||
|
|
|
||||||
|
|
@ -49,8 +49,8 @@ public class DefaultConfigTests extends SharedCustomAnvilTest {
|
||||||
CAEnchantment enchantment = CAEnchantmentRegistry.getInstance().getByKey(key);
|
CAEnchantment enchantment = CAEnchantmentRegistry.getInstance().getByKey(key);
|
||||||
Assertions.assertNotNull(enchantment, "Enchantment was somehow not found");
|
Assertions.assertNotNull(enchantment, "Enchantment was somehow not found");
|
||||||
|
|
||||||
int itemValue = ConfigOptions.INSTANCE.enchantmentValue(enchantment, false);
|
int itemValue = ConfigOptions.INSTANCE.enchantmentValue(enchantment, false, false);
|
||||||
int bookValue = ConfigOptions.INSTANCE.enchantmentValue(enchantment, true);
|
int bookValue = ConfigOptions.INSTANCE.enchantmentValue(enchantment, false, true);
|
||||||
|
|
||||||
EnchantmentRarity rarity = enchantment.defaultRarity();
|
EnchantmentRarity rarity = enchantment.defaultRarity();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue