Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
74 changes: 0 additions & 74 deletions src/main/java/ch/njol/skript/classes/data/BukkitClasses.java
Original file line number Diff line number Diff line change
Expand Up @@ -347,80 +347,6 @@ public String toVariableNameString(InventoryHolder holder) {
.since("2.0")
.after("itemtype", "itemstack", "entitydata", "entitytype"));

Classes.registerClass(new ClassInfo<>(Chunk.class, "chunk")
.user("chunks?")
.name("Chunk")
.description("A chunk is a cuboid of 16×16×128 (x×z×y) blocks. Chunks are spread on a fixed rectangular grid in their world.")
.usage("")
.examples("")
.since("2.0")
.parser(new Parser<>() {
@Override
public boolean canParse(final ParseContext context) {
return false;
}

@Override
public String toString(final Chunk c, final int flags) {
return "chunk (" + c.getX() + "," + c.getZ() + ") of " + c.getWorld().getName();
}

@Override
public String toVariableNameString(final Chunk c) {
return c.getWorld().getName() + ":" + c.getX() + "," + c.getZ();
}
})
.serializer(new Serializer<>() {
@Override
public Fields serialize(Chunk chunk) {
final Fields f = new Fields();
f.putObject("world", chunk.getWorld());
f.putPrimitive("x", chunk.getX());
f.putPrimitive("z", chunk.getZ());
return f;
}

@Override
public boolean canBeInstantiated() {
return false;
}

@Override
protected Chunk deserialize(Fields fields) throws StreamCorruptedException {
World world = fields.getObject("world", World.class);
if (world == null)
throw new StreamCorruptedException("Missing world");

int x = fields.getPrimitive("x", int.class);
int z = fields.getPrimitive("z", int.class);
return world.getChunkAt(x, z);
}

// return c.getWorld().getName() + ":" + c.getX() + "," + c.getZ();
@Override
@Nullable
public Chunk deserialize(final String s) {
final String[] split = s.split("[:,]");
if (split.length != 3)
return null;
final World w = Bukkit.getWorld(split[0]);
if (w == null)
return null;
try {
final int x = Integer.parseInt(split[1]);
final int z = Integer.parseInt(split[1]);
return w.getChunkAt(x, z);
} catch (final NumberFormatException e) {
return null;
}
}

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

Material[] allMaterials = Material.values();
Classes.registerClass(new ClassInfo<>(Material.class, "material")
.name(ClassInfo.NO_DOC)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public Iterable<AddonModule> children() {
@Override
protected void initSelf(SkriptAddon addon) {
Classes.registerClass(new BlockClassInfo());
Classes.registerClass(new ChunkClassInfo());
Classes.registerClass(new EntityClassInfo());
Classes.registerClass(new InventoryClassInfo());
Classes.registerClass(new ItemStackClassInfo());
Expand Down
118 changes: 118 additions & 0 deletions src/main/java/org/skriptlang/skript/bukkit/types/ChunkClassInfo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
package org.skriptlang.skript.bukkit.types;

import ch.njol.skript.Skript;
import ch.njol.skript.classes.ClassInfo;
import ch.njol.skript.classes.Parser;
import ch.njol.skript.classes.Serializer;
import ch.njol.skript.lang.ParseContext;
import ch.njol.yggdrasil.Fields;
import org.bukkit.Chunk;
import org.bukkit.World;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.skriptlang.skript.lang.properties.Property;
import org.skriptlang.skript.lang.properties.handlers.WXYZHandler;
import org.skriptlang.skript.lang.properties.handlers.base.PropertyHandler;

import java.io.StreamCorruptedException;

@ApiStatus.Internal
public class ChunkClassInfo extends ClassInfo<Chunk> {

public ChunkClassInfo() {
super(Chunk.class, "chunk");
user("chunks?")
.name("Chunk")
.description("""
A chunk is a 16 by 16 segment of a world, stretching from the world's bottom to its top. \
Chunks are spread on a fixed rectangular grid in their world.\
""")
.since("2.0")
.parser(new ChunkParser())
.serializer(new ChunkSerializer())
.property(Property.WXYZ,
"The X or Z coordinate of the chunk. Added in INSERT VERSION.",
Skript.instance(),
new ChunkWXYZHandler());
}

private static class ChunkParser extends Parser<Chunk> {
//<editor-fold desc="chunk parser" defaultstate="collapsed">
@Override
public boolean canParse(ParseContext context) {
return false;
}

@Override
public String toString(Chunk chunk, int flags) {
return "chunk (" + chunk.getX() + "," + chunk.getZ() + ") of " + chunk.getWorld().getName();
}

@Override
public String toVariableNameString(final Chunk c) {
return c.getWorld().getName() + ":" + c.getX() + "," + c.getZ();
}
Comment thread
APickledWalrus marked this conversation as resolved.
Outdated
//</editor-fold>
}

private static class ChunkSerializer extends Serializer<Chunk> {
//<editor-fold desc="chunk serializer" defaultstate="collapsed">
@Override
public Fields serialize(Chunk chunk) {
Fields fields = new Fields();
fields.putObject("world", chunk.getWorld());
fields.putPrimitive("x", chunk.getX());
fields.putPrimitive("z", chunk.getZ());
return fields;
}

@Override
public boolean canBeInstantiated() {
return false;
}

@Override
protected Chunk deserialize(Fields fields) throws StreamCorruptedException {
World world = fields.getObject("world", World.class);
if (world == null) {
throw new StreamCorruptedException("Missing world");
}
int x = fields.getPrimitive("x", int.class);
int z = fields.getPrimitive("z", int.class);
return world.getChunkAt(x, z);
}

@Override
public boolean mustSyncDeserialization() {
return true;
}
//</editor-fold>
}

private static class ChunkWXYZHandler extends WXYZHandler<Chunk, Integer> {
//<editor-fold desc="chunk wxyz handler" defaultstate="collapsed">
@Override
public PropertyHandler<Chunk> newInstance() {
var instance = new ChunkClassInfo.ChunkWXYZHandler();
instance.axis(axis);
return instance;
}

@Override
public Integer convert(Chunk chunk) {
return axis == Axis.X ? chunk.getX() : chunk.getZ();
}

@Override
public boolean supportsAxis(Axis axis) {
return axis == Axis.X || axis == Axis.Z;
}

@Override
public @NotNull Class<Integer> returnType() {
return Integer.class;
}
//</editor-fold>
}

}
Loading