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