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 9794bfc2e22..78b10cd554b 100644
--- a/src/main/java/ch/njol/skript/classes/data/BukkitClasses.java
+++ b/src/main/java/ch/njol/skript/classes/data/BukkitClasses.java
@@ -4,7 +4,11 @@
import ch.njol.skript.bukkitutil.BukkitUtils;
import ch.njol.skript.bukkitutil.EntityUtils;
import ch.njol.skript.bukkitutil.SkriptTeleportFlag;
-import ch.njol.skript.classes.*;
+import ch.njol.skript.classes.ClassInfo;
+import ch.njol.skript.classes.EnumClassInfo;
+import ch.njol.skript.classes.Parser;
+import ch.njol.skript.classes.PatternedParser;
+import ch.njol.skript.classes.Serializer;
import ch.njol.skript.classes.registry.RegistryClassInfo;
import ch.njol.skript.expressions.ExprDamageCause;
import ch.njol.skript.expressions.base.EventValueExpression;
@@ -26,7 +30,12 @@
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.enchantments.EnchantmentOffer;
-import org.bukkit.entity.*;
+import org.bukkit.entity.EntitySnapshot;
+import org.bukkit.entity.Item;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Projectile;
+import org.bukkit.entity.Vehicle;
+import org.bukkit.entity.Villager;
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityPotionEffectEvent;
@@ -52,15 +61,20 @@
import org.bukkit.util.CachedServerIcon;
import org.bukkit.util.Vector;
import org.jetbrains.annotations.Nullable;
-import org.skriptlang.skript.bukkit.base.types.*;
+import org.skriptlang.skript.bukkit.base.types.BlockClassInfo;
+import org.skriptlang.skript.bukkit.base.types.EntityClassInfo;
import org.skriptlang.skript.bukkit.base.types.EntityClassInfo.EntityChanger;
+import org.skriptlang.skript.bukkit.base.types.InventoryClassInfo;
+import org.skriptlang.skript.bukkit.base.types.ItemStackClassInfo;
+import org.skriptlang.skript.bukkit.base.types.NameableClassInfo;
+import org.skriptlang.skript.bukkit.base.types.OfflinePlayerClassInfo;
+import org.skriptlang.skript.bukkit.base.types.PlayerClassInfo;
+import org.skriptlang.skript.bukkit.base.types.WorldClassInfo;
import org.skriptlang.skript.lang.properties.Property;
import org.skriptlang.skript.lang.properties.PropertyHandler.ExpressionPropertyHandler;
import java.io.StreamCorruptedException;
import java.util.Arrays;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
public class BukkitClasses {
@@ -331,87 +345,7 @@ protected boolean canBeInstantiated() {
})
.cloner(Vector::clone));
- Classes.registerClass(new ClassInfo<>(World.class, "world")
- .user("worlds?")
- .name("World")
- .description("One of the server's worlds. Worlds can be put into scripts by surrounding their name with double quotes, e.g. \"world_nether\", " +
- "but this might not work reliably as text uses the same syntax.")
- .usage("\"world_name\", e.g. \"world\"")
- .examples("broadcast \"Hello!\" to the world \"world_nether\"")
- .since("1.0, 2.2 (alternate syntax)")
- .after("string")
- .defaultExpression(new EventValueExpression<>(World.class))
- .parser(new Parser() {
- @SuppressWarnings("null")
- private final Pattern parsePattern = Pattern.compile("(?:(?:the )?world )?\"(.+)\"", Pattern.CASE_INSENSITIVE);
-
- @Override
- @Nullable
- public World parse(final String s, final ParseContext context) {
- // REMIND allow shortcuts '[over]world', 'nether' and '[the_]end' (server.properties: 'level-name=world') // inconsistent with 'world is "..."'
- if (context == ParseContext.COMMAND || context == ParseContext.PARSE || context == ParseContext.CONFIG)
- return Bukkit.getWorld(s);
- final Matcher m = parsePattern.matcher(s);
- if (m.matches())
- return Bukkit.getWorld(m.group(1));
- return null;
- }
-
- @Override
- public String toString(final World w, final int flags) {
- return "" + w.getName();
- }
-
- @Override
- public String toVariableNameString(final World w) {
- return "" + w.getName();
- }
- }).serializer(new Serializer() {
- @Override
- public Fields serialize(final World w) {
- final Fields f = new Fields();
- f.putObject("name", w.getName());
- return f;
- }
-
- @Override
- public void deserialize(final World o, final Fields f) {
- assert false;
- }
-
- @Override
- public boolean canBeInstantiated() {
- return false;
- }
-
- @Override
- protected World deserialize(final Fields fields) throws StreamCorruptedException {
- final String name = fields.getObject("name", String.class);
- assert name != null;
- final World w = Bukkit.getWorld(name);
- if (w == null)
- throw new StreamCorruptedException("Missing world " + name);
- return w;
- }
-
- // return w.getName();
- @Override
- @Nullable
- public World deserialize(final String s) {
- return Bukkit.getWorld(s);
- }
-
- @Override
- public boolean mustSyncDeserialization() {
- return true;
- }
- })
- .property(Property.NAME,
- "A world's name, as text. Cannot be changed.",
- Skript.instance(),
- ExpressionPropertyHandler.of(World::getName, String.class))
- );
-
+ Classes.registerClass(new WorldClassInfo());
Classes.registerClass(new InventoryClassInfo());
Classes.registerClass(new EnumClassInfo<>(InventoryAction.class, "inventoryaction", "inventory actions")
diff --git a/src/main/java/ch/njol/skript/effects/EffScriptFile.java b/src/main/java/ch/njol/skript/effects/EffScriptFile.java
deleted file mode 100644
index 5a90098798b..00000000000
--- a/src/main/java/ch/njol/skript/effects/EffScriptFile.java
+++ /dev/null
@@ -1,216 +0,0 @@
-package ch.njol.skript.effects;
-
-import ch.njol.skript.ScriptLoader;
-import ch.njol.skript.Skript;
-import ch.njol.skript.SkriptCommand;
-import ch.njol.skript.command.ScriptCommand;
-import ch.njol.skript.doc.Description;
-import ch.njol.skript.doc.Examples;
-import ch.njol.skript.doc.Name;
-import ch.njol.skript.doc.Since;
-import ch.njol.skript.lang.Effect;
-import ch.njol.skript.lang.Expression;
-import ch.njol.skript.localization.Language;
-import ch.njol.skript.localization.PluralizingArgsMessage;
-import ch.njol.skript.log.LogEntry;
-import ch.njol.skript.log.LogHandler;
-import ch.njol.skript.log.RedirectingLogHandler;
-import ch.njol.skript.log.RetainingLogHandler;
-import ch.njol.skript.log.TimingLogHandler;
-import ch.njol.skript.registrations.Feature;
-import ch.njol.skript.util.Utils;
-import ch.njol.util.StringUtils;
-import org.bukkit.Bukkit;
-import org.bukkit.command.CommandSender;
-import org.jetbrains.annotations.Nullable;
-import org.jetbrains.annotations.UnknownNullability;
-import org.skriptlang.skript.lang.script.Script;
-import ch.njol.skript.lang.SkriptParser;
-import ch.njol.skript.util.FileUtils;
-import ch.njol.util.Kleenean;
-import ch.njol.util.OpenCloseable;
-import org.bukkit.event.Event;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.stream.Collectors;
-
-@Name("Enable/Disable/Unload/Reload Script")
-@Description("""
- Enables, disables, unloads, or reloads a script.
-
- Disabling a script unloads it and prepends - to its name so it will not be loaded the next time the server restarts.
- If the script reflection experiment is enabled: unloading a script terminates it and removes it from memory, but does not alter the file.""")
-@Examples({
- "reload script \"test\"",
- "enable script file \"testing\"",
- "unload script file \"script.sk\"",
- "set {_script} to the script \"MyScript.sk\"",
- "reload {_script}"
-})
-@Since("2.4, 2.10 (unloading)")
-public class EffScriptFile extends Effect {
-
- static {
- Skript.registerEffect(EffScriptFile.class,
- "(1:(enable|load)|2:reload|3:disable|4:unload) script [file|named] %string% [print:with errors]",
- "(1:(enable|load)|2:reload|3:disable|4:unload) skript file %string% [print:with errors]",
- "(1:(enable|load)|2:reload|3:disable|4:unload) %scripts% [print:with errors]"
- );
- /*
- The string-pattern must come first (since otherwise `script X` would match the expression)
- and we cannot get a script object for a non-loaded script.
- */
- }
-
- private static final int ENABLE = 1, RELOAD = 2, DISABLE = 3, UNLOAD = 4;
-
- private int mark;
-
- private @UnknownNullability Expression scriptNameExpression;
- private @UnknownNullability Expression