Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/main/java/org/linia/linizen/Linizen.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public class Linizen extends JavaPlugin {
@Override
public void onEnable() {
instance = this;
saveDefaultConfig();
Debug.log("Linizen loading...");
new ASPBridge().init();
OneBlock.init();
Expand Down
49 changes: 2 additions & 47 deletions src/main/java/org/linia/linizen/bridges/ASP/ASPBridge.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,9 @@
import com.denizenscript.denizencore.objects.ObjectFetcher;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.denizencore.objects.core.MapTag;
import com.denizenscript.denizencore.tags.PseudoObjectTagBase;
import com.denizenscript.denizencore.tags.TagManager;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import com.denizenscript.denizencore.utilities.text.StringHolder;
import com.infernalsuite.asp.api.AdvancedSlimePaperAPI;
import com.infernalsuite.asp.api.exceptions.CorruptedWorldException;
import com.infernalsuite.asp.api.exceptions.NewerFormatException;
Expand All @@ -17,37 +15,27 @@
import com.infernalsuite.asp.api.world.SlimeWorld;
import com.infernalsuite.asp.api.world.SlimeWorldInstance;
import com.infernalsuite.asp.api.world.properties.SlimePropertyMap;
import org.linia.linizen.bridges.ASP.commands.FileLoaderCommand;
import org.linia.linizen.bridges.ASP.commands.SlimeWorldCommand;
import org.linia.linizen.bridges.ASP.objects.FileWorldLoaderTag;
import org.linia.linizen.bridges.ASP.objects.SlimeLoaderTag;
import org.linia.linizen.bridges.ASP.objects.SlimeWorldTag;
import org.linia.linizen.bridges.ASP.worldloaders.SlimeWorldLoaderRegistry;
import org.linia.linizen.bridges.Bridge;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class ASPBridge implements Bridge {

public static AdvancedSlimePaperAPI instance;
public static Loaders<FileWorldLoaderTag> fileLoaders;

@Override
public void init() {
instance = AdvancedSlimePaperAPI.instance();
/* ASP Objects */
ObjectFetcher.registerWithObjectFetcher(FileWorldLoaderTag.class, FileWorldLoaderTag.tagProcessor).generateBaseTag();
ObjectFetcher.registerWithObjectFetcher(SlimeWorldTag.class, SlimeWorldTag.tagProcessor).generateBaseTag();
new ASPTagBase();
/* ASP Commands */
DenizenCore.commandRegistry.registerCommand(SlimeWorldCommand.class);
DenizenCore.commandRegistry.registerCommand(FileLoaderCommand.class);
/* ASP Utils */
fileLoaders = new Loaders<>();
TagManager.registerStaticTagBaseHandler(FileWorldLoaderTag.class, FileWorldLoaderTag.class, "fileworldloader", (attribute, input) -> {
return input;
});
SlimeWorldLoaderRegistry.registerFileLoaders();
}

public static void saveAll() {
Expand Down Expand Up @@ -105,40 +93,7 @@ public void register() {
tagProcessor.registerTag(ListTag.class, "worlds_in_use", (attribute, object) -> {
return new ListTag(SlimeWorldCommand.worldsInUse, ElementTag::new);
});

// <--[tag]
// @attribute <asp.file_loaders>
// @returns MapTag
// @plugin Linizen, ASP
// @description
// Returns a map of all known file loaders with their folder names.
// -->
tagProcessor.registerTag(MapTag.class, "file_loaders", (attribute, object) -> {
MapTag map = new MapTag();
for (Map.Entry<StringHolder, FileWorldLoaderTag> entry : fileLoaders.loaders.entrySet()) {
map.putObject(entry.getKey(), entry.getValue());
}
return map;
});
}
}

public static class Loaders<T extends SlimeLoaderTag> {

private final Map<StringHolder, T> loaders = new HashMap<>();

public void registerLoader(String name, T loader) {
loaders.put(new StringHolder(name), loader);
}

public T getLoader(String name) {
return loaders.getOrDefault(new StringHolder(name), null);
}

public boolean hasLoader(String name) {
return loaders.containsKey(new StringHolder(name));
}

}

// https://github.com/InfernalSuite/AdvancedSlimePaper/blob/a192a031930f76dda4d68457e8381090b9e022bc/plugin/src/main/java/com/infernalsuite/asp/plugin/commands/SlimeCommand.java#L30
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
import org.bukkit.World;
import org.linia.linizen.bridges.ASP.ASPBridge;
import org.linia.linizen.bridges.ASP.SlimeWorldFlagHandler;
import org.linia.linizen.bridges.ASP.objects.FileWorldLoaderTag;
import org.linia.linizen.bridges.ASP.objects.SlimeWorldTag;
import org.linia.linizen.bridges.ASP.worldloaders.AbstractSlimeWorldLoader;
import org.linia.linizen.utils.ExecutorUtil;

import java.io.IOException;
Expand Down Expand Up @@ -58,7 +58,7 @@ public class SlimeWorldCommand extends AbstractCommand implements Holdable {

public SlimeWorldCommand() {
setName("slimeworld");
setSyntax("slimeworld [create/load/clone] [<name>] (loader:<loader>) (from:<world>)");
setSyntax("slimeworld [create/load/clone] [<name>] (loader:<loader>) (from:<world>) (from_loader:<loader>)");
isProcedural = false;
setRequiredArguments(3, 4);
autoCompile();
Expand All @@ -69,8 +69,9 @@ public enum Action { CREATE, LOAD, CLONE }
public static void autoExecute(ScriptEntry scriptEntry,
@ArgName("action") @ArgLinear Action action,
@ArgName("name") @ArgLinear String name,
@ArgName("loader") @ArgPrefixed FileWorldLoaderTag loader,
@ArgName("from") @ArgPrefixed @ArgDefaultNull String cloneFrom) {
@ArgName("loader") @ArgPrefixed AbstractSlimeWorldLoader loader,
@ArgName("from") @ArgPrefixed @ArgDefaultNull String cloneFrom,
@ArgName("from_loader") @ArgPrefixed @ArgDefaultNull AbstractSlimeWorldLoader cloneLoader) {
switch (action) {
case CREATE -> {
if (Bukkit.getWorld(name) != null) {
Expand Down Expand Up @@ -158,7 +159,7 @@ public static void autoExecute(ScriptEntry scriptEntry,

CompletableFuture.runAsync(() -> {
try {
SlimeWorld sw = ASPBridge.getWorldReadyForCloning(cloneFrom, loader, new SlimePropertyMap());
SlimeWorld sw = ASPBridge.getWorldReadyForCloning(cloneFrom, cloneLoader == null ? loader : cloneLoader, new SlimePropertyMap());
SlimeWorld cloned = sw.clone(name, loader);

ExecutorUtil.runSyncAndWait(() -> {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import org.bukkit.World;
import org.linia.linizen.bridges.ASP.ASPBridge;
import org.linia.linizen.bridges.ASP.SlimeWorldFlagHandler;
import org.linia.linizen.bridges.ASP.worldloaders.AbstractSlimeWorldLoader;

import java.io.IOException;
import java.lang.ref.WeakReference;
Expand Down Expand Up @@ -70,17 +71,17 @@ public static void register() {
AbstractFlagTracker.registerFlagHandlers(tagProcessor);

// <--[tag]
// @attribute <SlimeWorldTag.get_file_loader>
// @returns FileWorldLoaderTag
// @attribute <SlimeWorldTag.loader>
// @returns AbstractSlimeWorldLoaderTag
// @plugin Linizen, ASP
// @description
// Returns a file loader which this world is loaded from, if any.
// Returns a loader which this world is loaded from, if any.
// -->
tagProcessor.registerTag(FileWorldLoaderTag.class, "get_file_loader", (attribute, object) -> {
tagProcessor.registerTag(AbstractSlimeWorldLoader.class, "loader", (attribute, object) -> {
if (!requireLoadedWorld(object, attribute)) {
return null;
}
return (object.getSlimeWorld().getLoader() instanceof FileWorldLoaderTag f) ? f : null;
return (object.getSlimeWorld().getLoader() instanceof AbstractSlimeWorldLoader l) ? l : null;
});

// <--[tag]
Expand Down Expand Up @@ -176,7 +177,7 @@ public static boolean requireLoadedWorld(SlimeWorldTag slimeWorldTag, Attribute
}

public boolean isLoaded() {
return getSlimeWorld() == null || !ASPBridge.instance.worldLoaded(getSlimeWorld());
return getSlimeWorld() != null && ASPBridge.instance.worldLoaded(getSlimeWorld());
}

public World getWorld() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package org.linia.linizen.bridges.ASP.worldloaders;

import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.denizencore.tags.ObjectTagProcessor;
import com.infernalsuite.asp.api.loaders.SlimeLoader;

import java.io.IOException;

public abstract class AbstractSlimeWorldLoader implements SlimeLoader, ObjectTag {

private String prefix;

public AbstractSlimeWorldLoader(String prefix) {
this.prefix = prefix;
}

@Override
public AbstractSlimeWorldLoader setPrefix(String prefix) {
this.prefix = prefix;
return this;
}

@Override
public String getPrefix() {
return prefix;
}

@Override
public boolean isUnique() {
return true;
}

@Override
public String identifySimple() {
return identify();
}

@Override
public String toString() {
return identify();
}

public static <T extends AbstractSlimeWorldLoader> void registerTags(ObjectTagProcessor<T> tagProcessor) {

// <--[tag]
// @attribute <WorldLoaderTag.all_worlds>
// @returns ListTag
// @plugin Linizen, ASP
// @description
// Returns a list of all known worlds loaded and unloaded.
// -->
tagProcessor.registerTag(ListTag.class, "all_worlds", (attribute, object) -> {
try {
return new ListTag(object.listWorlds(), ElementTag::new);
}
catch (IOException e) {
attribute.echoError(e);
return null;
}
});

// <--[tag]
// @attribute <WorldLoaderTag.world_exists[<name>]>
// @returns ElementTag(Boolean)
// @plugin Linizen, ASP
// @description
// Returns whether the world exists.
// -->
tagProcessor.registerTag(ElementTag.class, ElementTag.class, "world_exists", (attribute, object, input) -> {
try {
return new ElementTag(object.worldExists(input.asString()));
}
catch (IOException e) {
attribute.echoError("Could not check if world exists.");
return null;
}
});
}

}
Loading
Loading