From 65588bd14757dfe9124a880f15e311684d5e07e5 Mon Sep 17 00:00:00 2001 From: shanebeee Date: Fri, 21 Jun 2024 21:55:58 -0700 Subject: [PATCH 1/3] Registry - more registries --- .../skript/classes/data/BukkitClasses.java | 22 ++++++++-- src/main/resources/lang/default.lang | 43 +++++++++++++++++++ 2 files changed, 62 insertions(+), 3 deletions(-) diff --git a/src/main/java/ch/njol/skript/classes/data/BukkitClasses.java b/src/main/java/ch/njol/skript/classes/data/BukkitClasses.java index ba1a419aad0..bfe04951041 100644 --- a/src/main/java/ch/njol/skript/classes/data/BukkitClasses.java +++ b/src/main/java/ch/njol/skript/classes/data/BukkitClasses.java @@ -116,6 +116,10 @@ public BukkitClasses() {} public static final Pattern UUID_PATTERN = Pattern.compile("(?i)[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}"); + private static boolean registryExists(String registry) { + return Skript.classExists("org.bukkit.Registry") && Skript.fieldExists(Registry.class, registry); + } + static { final boolean GET_ENTITY_METHOD_EXISTS = Skript.methodExists(Bukkit.class, "getEntity", UUID.class); Classes.registerClass(new ClassInfo<>(Entity.class, "entity") @@ -980,7 +984,7 @@ public String toVariableNameString(final ItemStack i) { .changer(DefaultChangers.itemChanger)); ClassInfo biomeClassInfo; - if (Skript.classExists("org.bukkit.Registry") && Skript.fieldExists(Registry.class, "BIOME")) { + if (registryExists("BIOME")) { biomeClassInfo = new RegistryClassInfo<>(Biome.class, Registry.BIOME, "biome", "biomes"); } else { biomeClassInfo = new EnumClassInfo<>(Biome.class, "biome", "biomes"); @@ -1453,7 +1457,13 @@ public String toVariableNameString(FireworkEffect effect) { .examples("") .since("2.5")); if (Skript.classExists("org.bukkit.entity.Cat$Type")) { - Classes.registerClass(new EnumClassInfo<>(Cat.Type.class, "cattype", "cat types") + ClassInfo catTypeClassInfo; + if (registryExists("CAT_VARIANT")) { + catTypeClassInfo = new RegistryClassInfo<>(Cat.Type.class, Registry.CAT_VARIANT, "cattype", "cat types"); + } else { + catTypeClassInfo = new EnumClassInfo<>(Cat.Type.class, "cattype", "cat types"); + } + Classes.registerClass(catTypeClassInfo .user("cat ?(type|race)s?") .name("Cat Type") .description("Represents the race/type of a cat entity.") @@ -1514,7 +1524,13 @@ public String toVariableNameString(EnchantmentOffer eo) { } })); - Classes.registerClass(new EnumClassInfo<>(Attribute.class, "attributetype", "attribute types") + ClassInfo attributeClassInfo; + if (registryExists("ATTRIBUTE")) { + attributeClassInfo = new RegistryClassInfo<>(Attribute.class, Registry.ATTRIBUTE, "attributetype", "attribute types"); + } else { + attributeClassInfo = new EnumClassInfo<>(Attribute.class, "attributetype", "attribute types"); + } + Classes.registerClass(attributeClassInfo .user("attribute ?types?") .name("Attribute Type") .description("Represents the type of an attribute. Note that this type does not contain any numerical values." diff --git a/src/main/resources/lang/default.lang b/src/main/resources/lang/default.lang index 90a37eb9e32..a4c9fd9df1d 100644 --- a/src/main/resources/lang/default.lang +++ b/src/main/resources/lang/default.lang @@ -2163,11 +2163,14 @@ genes: # -- Attribute Types -- attribute types: + # Enum variation generic_armor: generic armor, armor generic_armor_toughness: generic armor toughness, armor toughness generic_attack_damage: generic attack damage, attack damage generic_attack_knockback: generic attack knockback, attack knockback generic_attack_speed: generic attack speed, attack speed + generic_burning_time: generic burning time, burning time + generic_explosion_knockback_resistance: generic explosion knockback resistance, explosion knockback resistance generic_flying_speed: generic flying speed, flying speed generic_follow_range: generic follow range, follow range generic_gravity: generic gravity, gravity @@ -2176,16 +2179,56 @@ attribute types: generic_luck: generic luck, luck generic_max_absorption: generic max absorption, max absorption generic_max_health: generic max health, max health + generic_movement_efficiency: generic movement efficiency, movement efficiency generic_movement_speed: generic movement speed, movement speed + generic_oxygen_bonus: generic oxygen bonus, oxygen bonus generic_safe_fall_distance: generic safe fall distance, safe fall distance generic_fall_damage_multiplier: generic fall damage multiplier, fall damage multiplier generic_scale: generic scale, scale generic_step_height: generic step height, step height + generic_water_movement_efficiency: generic water movement efficiency, water movement efficiency horse_jump_strength: horse jump strength player_block_break_speed: player block break speed, block break speed player_block_interaction_range: player block interaction range, block interaction range player_entity_interaction_range: player entity interaction range, entity interaction range + player_mining_efficiency: player mining efficiency, mining efficiency + player_sneaking_speed: player sneaking speed, sneaking speed + player_submerged_mining_speed: player submerged mining speed, submerged mining speed + player_sweeping_damage_ratio: player sweeping damage ratio, sweeping damage ratio zombie_spawn_reinforcements: zombie spawn reinforcements + # Registry variation (minecraft keys) + generic.armor: generic armor, armor + generic.armor_toughness: generic armor toughness, armor toughness + generic.attack_damage: generic attack damage, attack damage + generic.attack_knockback: generic attack knockback, attack knockback + generic.attack_speed: generic attack speed, attack speed + generic.burning_time: generic burning time, burning time + generic.explosion_knockback_resistance: generic explosion knockback resistance, explosion knockback resistance + generic.flying_speed: generic flying speed, flying speed + generic.follow_range: generic follow range, follow range + generic.gravity: generic gravity, gravity + generic.jump_strength: generic jump strength, jump strength + generic.knockback_resistance: generic knockback resistance, knockback resistance + generic.luck: generic luck, luck + generic.max_absorption: generic max absorption, max absorption + generic.max_health: generic max health, max health + generic.movement_efficiency: generic movement efficiency, movement efficiency + generic.movement_speed: generic movement speed, movement speed + generic.oxygen_bonus: generic oxygen bonus, oxygen bonus + generic.safe_fall_distance: generic safe fall distance, safe fall distance + generic.fall_damage_multiplier: generic fall damage multiplier, fall damage multiplier + generic.scale: generic scale, scale + generic.step_height: generic step height, step height + generic.water_movement_efficiency: generic water movement efficiency, water movement efficiency + horse_jump_strength: horse jump strength + player.block_break_speed: player block break speed, block break speed + player.block_interaction_range: player block interaction range, block interaction range + player.entity_interaction_range: player entity interaction range, entity interaction range + player.mining_efficiency: player mining efficiency, mining efficiency + player.sneaking_speed: player sneaking speed, sneaking speed + player.submerged_mining_speed: player submerged mining speed, submerged mining speed + player.sweeping_damage_ratio: player sweeping damage ratio, sweeping damage ratio + zombie.spawn_reinforcements: zombie spawn reinforcements # -- Environments -- environments: From 52b53fd939085acb97525dd22b25558a5bbf0f7b Mon Sep 17 00:00:00 2001 From: shanebeee Date: Thu, 27 Jun 2024 12:18:17 -0700 Subject: [PATCH 2/3] BukkitClasses - make registryExists method public --- src/main/java/ch/njol/skript/classes/data/BukkitClasses.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/classes/data/BukkitClasses.java b/src/main/java/ch/njol/skript/classes/data/BukkitClasses.java index bfe04951041..d1baa72409a 100644 --- a/src/main/java/ch/njol/skript/classes/data/BukkitClasses.java +++ b/src/main/java/ch/njol/skript/classes/data/BukkitClasses.java @@ -116,7 +116,7 @@ public BukkitClasses() {} public static final Pattern UUID_PATTERN = Pattern.compile("(?i)[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}"); - private static boolean registryExists(String registry) { + public static boolean registryExists(String registry) { return Skript.classExists("org.bukkit.Registry") && Skript.fieldExists(Registry.class, registry); } From f9121ff5d271c812e8ab3b3878b14558c54fd174 Mon Sep 17 00:00:00 2001 From: shanebeee Date: Thu, 27 Jun 2024 12:25:38 -0700 Subject: [PATCH 3/3] BukkitUtils - create a bukkit utils class --- .../njol/skript/bukkitutil/BukkitUtils.java | 21 +++++++++++++++++++ .../skript/classes/data/BukkitClasses.java | 11 ++++------ 2 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 src/main/java/ch/njol/skript/bukkitutil/BukkitUtils.java diff --git a/src/main/java/ch/njol/skript/bukkitutil/BukkitUtils.java b/src/main/java/ch/njol/skript/bukkitutil/BukkitUtils.java new file mode 100644 index 00000000000..df551c268f5 --- /dev/null +++ b/src/main/java/ch/njol/skript/bukkitutil/BukkitUtils.java @@ -0,0 +1,21 @@ +package ch.njol.skript.bukkitutil; + +import ch.njol.skript.Skript; +import org.bukkit.Registry; + +/** + * Utility class with methods pertaining to Bukkit API + */ +public class BukkitUtils { + + /** + * Check if a registry exists + * + * @param registry Registry to check for (Fully qualified name of registry) + * @return True if registry exists else false + */ + public static boolean registryExists(String registry) { + return Skript.classExists("org.bukkit.Registry") && Skript.fieldExists(Registry.class, registry); + } + +} diff --git a/src/main/java/ch/njol/skript/classes/data/BukkitClasses.java b/src/main/java/ch/njol/skript/classes/data/BukkitClasses.java index d1baa72409a..dbcea22166f 100644 --- a/src/main/java/ch/njol/skript/classes/data/BukkitClasses.java +++ b/src/main/java/ch/njol/skript/classes/data/BukkitClasses.java @@ -29,6 +29,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; +import ch.njol.skript.bukkitutil.BukkitUtils; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Difficulty; @@ -116,10 +117,6 @@ public BukkitClasses() {} public static final Pattern UUID_PATTERN = Pattern.compile("(?i)[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}"); - public static boolean registryExists(String registry) { - return Skript.classExists("org.bukkit.Registry") && Skript.fieldExists(Registry.class, registry); - } - static { final boolean GET_ENTITY_METHOD_EXISTS = Skript.methodExists(Bukkit.class, "getEntity", UUID.class); Classes.registerClass(new ClassInfo<>(Entity.class, "entity") @@ -984,7 +981,7 @@ public String toVariableNameString(final ItemStack i) { .changer(DefaultChangers.itemChanger)); ClassInfo biomeClassInfo; - if (registryExists("BIOME")) { + if (BukkitUtils.registryExists("BIOME")) { biomeClassInfo = new RegistryClassInfo<>(Biome.class, Registry.BIOME, "biome", "biomes"); } else { biomeClassInfo = new EnumClassInfo<>(Biome.class, "biome", "biomes"); @@ -1458,7 +1455,7 @@ public String toVariableNameString(FireworkEffect effect) { .since("2.5")); if (Skript.classExists("org.bukkit.entity.Cat$Type")) { ClassInfo catTypeClassInfo; - if (registryExists("CAT_VARIANT")) { + if (BukkitUtils.registryExists("CAT_VARIANT")) { catTypeClassInfo = new RegistryClassInfo<>(Cat.Type.class, Registry.CAT_VARIANT, "cattype", "cat types"); } else { catTypeClassInfo = new EnumClassInfo<>(Cat.Type.class, "cattype", "cat types"); @@ -1525,7 +1522,7 @@ public String toVariableNameString(EnchantmentOffer eo) { })); ClassInfo attributeClassInfo; - if (registryExists("ATTRIBUTE")) { + if (BukkitUtils.registryExists("ATTRIBUTE")) { attributeClassInfo = new RegistryClassInfo<>(Attribute.class, Registry.ATTRIBUTE, "attributetype", "attribute types"); } else { attributeClassInfo = new EnumClassInfo<>(Attribute.class, "attributetype", "attribute types");