mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-03 00:17:15 +00:00
Matter apis
This commit is contained in:
parent
f2b301cb17
commit
ad324df937
@ -33,6 +33,8 @@ import com.volmit.iris.engine.object.biome.IrisBiome;
|
|||||||
import com.volmit.iris.engine.object.biome.IrisBiomeCustom;
|
import com.volmit.iris.engine.object.biome.IrisBiomeCustom;
|
||||||
import com.volmit.iris.engine.object.compat.IrisCompat;
|
import com.volmit.iris.engine.object.compat.IrisCompat;
|
||||||
import com.volmit.iris.engine.object.dimensional.IrisDimension;
|
import com.volmit.iris.engine.object.dimensional.IrisDimension;
|
||||||
|
import com.volmit.iris.util.io.JarScanner;
|
||||||
|
import com.volmit.iris.util.matter.Sliced;
|
||||||
import com.volmit.iris.util.parallel.MultiBurst;
|
import com.volmit.iris.util.parallel.MultiBurst;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import com.volmit.iris.util.collection.KList;
|
||||||
import com.volmit.iris.util.collection.KSet;
|
import com.volmit.iris.util.collection.KSet;
|
||||||
@ -64,6 +66,8 @@ import org.bukkit.generator.ChunkGenerator;
|
|||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
@ -100,6 +104,25 @@ public class Iris extends VolmitPlugin implements Listener {
|
|||||||
J.s(() -> Bukkit.getPluginManager().callEvent(e));
|
J.s(() -> Bukkit.getPluginManager().callEvent(e));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static KList<Object> initialize(String s, Class<? extends Annotation> slicedClass) {
|
||||||
|
JarScanner js = new JarScanner(instance.getJarFile(), s);
|
||||||
|
KList<Object> v = new KList<>();
|
||||||
|
J.attempt(js::scan);
|
||||||
|
for(Class<?> i : js.getClasses())
|
||||||
|
{
|
||||||
|
if(slicedClass == null || i.isAnnotationPresent(slicedClass))
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
v.add(i.getDeclaredConstructor().newInstance());
|
||||||
|
} catch (Throwable ignored) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
instance = this;
|
instance = this;
|
||||||
|
79
src/main/java/com/volmit/iris/util/matter/IrisMatter.java
Normal file
79
src/main/java/com/volmit/iris/util/matter/IrisMatter.java
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* Iris is a World Generator for Minecraft Bukkit Servers
|
||||||
|
* Copyright (c) 2021 Arcane Arts (Volmit Software)
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.volmit.iris.util.matter;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.util.collection.KMap;
|
||||||
|
import com.volmit.iris.util.io.JarScanner;
|
||||||
|
import com.volmit.iris.util.matter.slices.BlockMatter;
|
||||||
|
import com.volmit.iris.util.matter.slices.BooleanMatter;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class IrisMatter implements Matter{
|
||||||
|
private static final KMap<Class<?>, MatterSlice<?>> slicers = buildSlicers();
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final MatterHeader header;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final int width;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final int height;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final int depth;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private KMap<Class<?>, MatterSlice<?>> sliceMap;
|
||||||
|
|
||||||
|
public IrisMatter(int width, int height, int depth)
|
||||||
|
{
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
this.depth = depth;
|
||||||
|
this.header = new MatterHeader();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> MatterSlice<T> createSlice(Class<T> type, Matter m) {
|
||||||
|
MatterSlice<?> slice = slicers.get(type);
|
||||||
|
|
||||||
|
if(slice == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (MatterSlice<T>) slice;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static KMap<Class<?>, MatterSlice<?>> buildSlicers() {
|
||||||
|
KMap<Class<?>, MatterSlice<?>> c = new KMap<>();
|
||||||
|
for(Object i : Iris.initialize("com.volmit.iris.util.matter.slices", Sliced.class))
|
||||||
|
{
|
||||||
|
MatterSlice<?> s = (MatterSlice<?>) i;
|
||||||
|
c.put(s.getType(), s);
|
||||||
|
}
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
}
|
@ -157,6 +157,23 @@ public interface Matter {
|
|||||||
return (MatterSlice<T>) getSliceMap().put(c, slice);
|
return (MatterSlice<T>) getSliceMap().put(c, slice);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default <T> MatterSlice<T> slice(Class<?> c)
|
||||||
|
{
|
||||||
|
if(!hasSlice(c))
|
||||||
|
{
|
||||||
|
MatterSlice<?> s = createSlice(c, this);
|
||||||
|
|
||||||
|
if(s == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
putSlice(c, (MatterSlice<T>) s);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (MatterSlice<T>) getSlice(c);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if a slice exists for a given type
|
* Check if a slice exists for a given type
|
||||||
* @param c the slice class type
|
* @param c the slice class type
|
||||||
|
27
src/main/java/com/volmit/iris/util/matter/Sliced.java
Normal file
27
src/main/java/com/volmit/iris/util/matter/Sliced.java
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Iris is a World Generator for Minecraft Bukkit Servers
|
||||||
|
* Copyright (c) 2021 Arcane Arts (Volmit Software)
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.volmit.iris.util.matter;
|
||||||
|
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface Sliced {
|
||||||
|
|
||||||
|
}
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
package com.volmit.iris.util.matter.slices;
|
package com.volmit.iris.util.matter.slices;
|
||||||
|
|
||||||
|
import com.volmit.iris.util.matter.Sliced;
|
||||||
import com.volmit.iris.util.nbt.io.NBTUtil;
|
import com.volmit.iris.util.nbt.io.NBTUtil;
|
||||||
import com.volmit.iris.util.nbt.mca.NBTWorld;
|
import com.volmit.iris.util.nbt.mca.NBTWorld;
|
||||||
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
||||||
@ -27,8 +28,14 @@ import java.io.DataInputStream;
|
|||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@Sliced
|
||||||
public class BlockMatter extends RawMatter<BlockData>
|
public class BlockMatter extends RawMatter<BlockData>
|
||||||
{
|
{
|
||||||
|
public BlockMatter()
|
||||||
|
{
|
||||||
|
this(1,1,1);
|
||||||
|
}
|
||||||
|
|
||||||
public BlockMatter(int width, int height, int depth) {
|
public BlockMatter(int width, int height, int depth) {
|
||||||
super(width, height, depth, BlockData.class);
|
super(width, height, depth, BlockData.class);
|
||||||
}
|
}
|
||||||
|
@ -18,12 +18,20 @@
|
|||||||
|
|
||||||
package com.volmit.iris.util.matter.slices;
|
package com.volmit.iris.util.matter.slices;
|
||||||
|
|
||||||
|
import com.volmit.iris.util.matter.Sliced;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@Sliced
|
||||||
public class BooleanMatter extends RawMatter<Boolean>
|
public class BooleanMatter extends RawMatter<Boolean>
|
||||||
{
|
{
|
||||||
|
public BooleanMatter()
|
||||||
|
{
|
||||||
|
this(1,1,1);
|
||||||
|
}
|
||||||
|
|
||||||
public BooleanMatter(int width, int height, int depth) {
|
public BooleanMatter(int width, int height, int depth) {
|
||||||
super(width, height, depth, Boolean.class);
|
super(width, height, depth, Boolean.class);
|
||||||
}
|
}
|
||||||
|
@ -18,10 +18,17 @@
|
|||||||
|
|
||||||
package com.volmit.iris.util.matter.slices;
|
package com.volmit.iris.util.matter.slices;
|
||||||
|
|
||||||
|
import com.volmit.iris.util.matter.Sliced;
|
||||||
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
||||||
|
|
||||||
|
@Sliced
|
||||||
public class CompoundMatter extends NBTMatter<CompoundTag>
|
public class CompoundMatter extends NBTMatter<CompoundTag>
|
||||||
{
|
{
|
||||||
|
public CompoundMatter()
|
||||||
|
{
|
||||||
|
this(1,1,1);
|
||||||
|
}
|
||||||
|
|
||||||
public CompoundMatter(int width, int height, int depth) {
|
public CompoundMatter(int width, int height, int depth) {
|
||||||
super(width, height, depth, CompoundTag.class);
|
super(width, height, depth, CompoundTag.class);
|
||||||
}
|
}
|
||||||
|
@ -19,13 +19,19 @@
|
|||||||
package com.volmit.iris.util.matter.slices;
|
package com.volmit.iris.util.matter.slices;
|
||||||
|
|
||||||
import com.volmit.iris.util.data.Varint;
|
import com.volmit.iris.util.data.Varint;
|
||||||
|
import com.volmit.iris.util.matter.Sliced;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@Sliced
|
||||||
public class IntMatter extends RawMatter<Integer>
|
public class IntMatter extends RawMatter<Integer>
|
||||||
{
|
{
|
||||||
|
public IntMatter()
|
||||||
|
{
|
||||||
|
this(1,1,1);
|
||||||
|
}
|
||||||
public IntMatter(int width, int height, int depth) {
|
public IntMatter(int width, int height, int depth) {
|
||||||
super(width, height, depth, Integer.class);
|
super(width, height, depth, Integer.class);
|
||||||
}
|
}
|
||||||
|
@ -19,13 +19,19 @@
|
|||||||
package com.volmit.iris.util.matter.slices;
|
package com.volmit.iris.util.matter.slices;
|
||||||
|
|
||||||
import com.volmit.iris.util.data.Varint;
|
import com.volmit.iris.util.data.Varint;
|
||||||
|
import com.volmit.iris.util.matter.Sliced;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@Sliced
|
||||||
public class LongMatter extends RawMatter<Long>
|
public class LongMatter extends RawMatter<Long>
|
||||||
{
|
{
|
||||||
|
public LongMatter()
|
||||||
|
{
|
||||||
|
this(1,1,1);
|
||||||
|
}
|
||||||
public LongMatter(int width, int height, int depth) {
|
public LongMatter(int width, int height, int depth) {
|
||||||
super(width, height, depth, Long.class);
|
super(width, height, depth, Long.class);
|
||||||
}
|
}
|
||||||
|
@ -19,13 +19,19 @@
|
|||||||
package com.volmit.iris.util.matter.slices;
|
package com.volmit.iris.util.matter.slices;
|
||||||
|
|
||||||
import com.volmit.iris.util.matter.MatterSlice;
|
import com.volmit.iris.util.matter.MatterSlice;
|
||||||
|
import com.volmit.iris.util.matter.Sliced;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@Sliced
|
||||||
public class StringMatter extends RawMatter<String>
|
public class StringMatter extends RawMatter<String>
|
||||||
{
|
{
|
||||||
|
public StringMatter()
|
||||||
|
{
|
||||||
|
this(1,1,1);
|
||||||
|
}
|
||||||
public StringMatter(int width, int height, int depth) {
|
public StringMatter(int width, int height, int depth) {
|
||||||
super(width, height, depth, String.class);
|
super(width, height, depth, String.class);
|
||||||
}
|
}
|
||||||
|
@ -152,6 +152,11 @@ public abstract class VolmitPlugin extends JavaPlugin implements Listener {
|
|||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public File getJarFile()
|
||||||
|
{
|
||||||
|
return getFile();
|
||||||
|
}
|
||||||
|
|
||||||
public void l(Object l) {
|
public void l(Object l) {
|
||||||
Iris.info("[" + getName() + "]: " + l);
|
Iris.info("[" + getName() + "]: " + l);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user