mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 10:12:53 +00:00
Matter loaders
This commit is contained in:
parent
09bf15fa05
commit
af0d282a1f
@ -31,25 +31,7 @@ import com.google.gson.stream.JsonWriter;
|
|||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.engine.data.cache.AtomicCache;
|
import com.volmit.iris.engine.data.cache.AtomicCache;
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
import com.volmit.iris.engine.object.IrisBiome;
|
import com.volmit.iris.engine.object.*;
|
||||||
import com.volmit.iris.engine.object.IrisBlockData;
|
|
||||||
import com.volmit.iris.engine.object.IrisCave;
|
|
||||||
import com.volmit.iris.engine.object.IrisDimension;
|
|
||||||
import com.volmit.iris.engine.object.IrisEntity;
|
|
||||||
import com.volmit.iris.engine.object.IrisExpression;
|
|
||||||
import com.volmit.iris.engine.object.IrisGenerator;
|
|
||||||
import com.volmit.iris.engine.object.IrisImage;
|
|
||||||
import com.volmit.iris.engine.object.IrisJigsawPiece;
|
|
||||||
import com.volmit.iris.engine.object.IrisJigsawPool;
|
|
||||||
import com.volmit.iris.engine.object.IrisJigsawStructure;
|
|
||||||
import com.volmit.iris.engine.object.IrisLootTable;
|
|
||||||
import com.volmit.iris.engine.object.IrisMarker;
|
|
||||||
import com.volmit.iris.engine.object.IrisMod;
|
|
||||||
import com.volmit.iris.engine.object.IrisObject;
|
|
||||||
import com.volmit.iris.engine.object.IrisRavine;
|
|
||||||
import com.volmit.iris.engine.object.IrisRegion;
|
|
||||||
import com.volmit.iris.engine.object.IrisScript;
|
|
||||||
import com.volmit.iris.engine.object.IrisSpawner;
|
|
||||||
import com.volmit.iris.engine.object.annotations.Snippet;
|
import com.volmit.iris.engine.object.annotations.Snippet;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import com.volmit.iris.util.collection.KList;
|
||||||
import com.volmit.iris.util.collection.KMap;
|
import com.volmit.iris.util.collection.KMap;
|
||||||
@ -87,6 +69,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
|
|||||||
private ResourceLoader<IrisBlockData> blockLoader;
|
private ResourceLoader<IrisBlockData> blockLoader;
|
||||||
private ResourceLoader<IrisExpression> expressionLoader;
|
private ResourceLoader<IrisExpression> expressionLoader;
|
||||||
private ResourceLoader<IrisObject> objectLoader;
|
private ResourceLoader<IrisObject> objectLoader;
|
||||||
|
private ResourceLoader<IrisMatterObject> matterLoader;
|
||||||
private ResourceLoader<IrisImage> imageLoader;
|
private ResourceLoader<IrisImage> imageLoader;
|
||||||
private ResourceLoader<IrisScript> scriptLoader;
|
private ResourceLoader<IrisScript> scriptLoader;
|
||||||
private ResourceLoader<IrisCave> caveLoader;
|
private ResourceLoader<IrisCave> caveLoader;
|
||||||
@ -131,6 +114,9 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
|
|||||||
public static IrisObject loadAnyObject(String key) {
|
public static IrisObject loadAnyObject(String key) {
|
||||||
return loadAny(key, (dm) -> dm.getObjectLoader().load(key, false));
|
return loadAny(key, (dm) -> dm.getObjectLoader().load(key, false));
|
||||||
}
|
}
|
||||||
|
public static IrisMatterObject loadAnyMatter(String key) {
|
||||||
|
return loadAny(key, (dm) -> dm.getMatterLoader().load(key, false));
|
||||||
|
}
|
||||||
|
|
||||||
public static IrisBiome loadAnyBiome(String key) {
|
public static IrisBiome loadAnyBiome(String key) {
|
||||||
return loadAny(key, (dm) -> dm.getBiomeLoader().load(key, false));
|
return loadAny(key, (dm) -> dm.getBiomeLoader().load(key, false));
|
||||||
@ -295,9 +281,12 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
|
|||||||
if(registrant.equals(IrisObject.class)) {
|
if(registrant.equals(IrisObject.class)) {
|
||||||
r = (ResourceLoader<T>) new ObjectResourceLoader(dataFolder, this, rr.getFolderName(),
|
r = (ResourceLoader<T>) new ObjectResourceLoader(dataFolder, this, rr.getFolderName(),
|
||||||
rr.getTypeName());
|
rr.getTypeName());
|
||||||
|
} else if(registrant.equals(IrisMatterObject.class)) {
|
||||||
|
r = (ResourceLoader<T>) new MatterObjectResourceLoader(dataFolder, this, rr.getFolderName(),
|
||||||
|
rr.getTypeName());
|
||||||
} else if(registrant.equals(IrisScript.class)) {
|
} else if(registrant.equals(IrisScript.class)) {
|
||||||
r = (ResourceLoader<T>) new ScriptResourceLoader(dataFolder, this, rr.getFolderName(),
|
r = (ResourceLoader<T>) new ScriptResourceLoader(dataFolder, this, rr.getFolderName(),
|
||||||
rr.getTypeName());
|
rr.getTypeName());
|
||||||
} else if(registrant.equals(IrisImage.class)) {
|
} else if(registrant.equals(IrisImage.class)) {
|
||||||
r = (ResourceLoader<T>) new ImageResourceLoader(dataFolder, this, rr.getFolderName(),
|
r = (ResourceLoader<T>) new ImageResourceLoader(dataFolder, this, rr.getFolderName(),
|
||||||
rr.getTypeName());
|
rr.getTypeName());
|
||||||
|
@ -0,0 +1,147 @@
|
|||||||
|
/*
|
||||||
|
* Iris is a World Generator for Minecraft Bukkit Servers
|
||||||
|
* Copyright (c) 2022 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.core.loader;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.core.IrisSettings;
|
||||||
|
import com.volmit.iris.engine.object.IrisMatterObject;
|
||||||
|
import com.volmit.iris.engine.object.IrisObject;
|
||||||
|
import com.volmit.iris.util.collection.KList;
|
||||||
|
import com.volmit.iris.util.collection.KSet;
|
||||||
|
import com.volmit.iris.util.data.KCache;
|
||||||
|
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class MatterObjectResourceLoader extends ResourceLoader<IrisMatterObject> {
|
||||||
|
public MatterObjectResourceLoader(File root, IrisData idm, String folderName, String resourceTypeName) {
|
||||||
|
super(root, idm, folderName, resourceTypeName, IrisMatterObject.class);
|
||||||
|
loadCache = new KCache<>(this::loadRaw, IrisSettings.get().getPerformance().getObjectLoaderCacheSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean supportsSchemas() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getSize() {
|
||||||
|
return loadCache.getSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTotalStorage() {
|
||||||
|
return getSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IrisMatterObject loadFile(File j, String name) {
|
||||||
|
try {
|
||||||
|
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||||
|
IrisMatterObject t = IrisMatterObject.from(j);
|
||||||
|
t.setLoadKey(name);
|
||||||
|
t.setLoader(manager);
|
||||||
|
t.setLoadFile(j);
|
||||||
|
logLoad(j, t);
|
||||||
|
tlt.addAndGet(p.getMilliseconds());
|
||||||
|
return t;
|
||||||
|
} catch(Throwable e) {
|
||||||
|
Iris.reportError(e);
|
||||||
|
Iris.warn("Couldn't read " + resourceTypeName + " file: " + j.getPath() + ": " + e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getPossibleKeys() {
|
||||||
|
if(possibleKeys != null) {
|
||||||
|
return possibleKeys;
|
||||||
|
}
|
||||||
|
|
||||||
|
Iris.debug("Building " + resourceTypeName + " Possibility Lists");
|
||||||
|
KSet<String> m = new KSet<>();
|
||||||
|
|
||||||
|
for(File i : getFolders()) {
|
||||||
|
for(File j : i.listFiles()) {
|
||||||
|
if(j.isFile() && j.getName().endsWith(".mat")) {
|
||||||
|
m.add(j.getName().replaceAll("\\Q.mat\\E", ""));
|
||||||
|
} else if(j.isDirectory()) {
|
||||||
|
for(File k : j.listFiles()) {
|
||||||
|
if(k.isFile() && k.getName().endsWith(".mat")) {
|
||||||
|
m.add(j.getName() + "/" + k.getName().replaceAll("\\Q.mat\\E", ""));
|
||||||
|
} else if(k.isDirectory()) {
|
||||||
|
for(File l : k.listFiles()) {
|
||||||
|
if(l.isFile() && l.getName().endsWith(".mat")) {
|
||||||
|
m.add(j.getName() + "/" + k.getName() + "/" + l.getName().replaceAll("\\Q.mat\\E", ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
KList<String> v = new KList<>(m);
|
||||||
|
possibleKeys = v.toArray(new String[0]);
|
||||||
|
return possibleKeys;
|
||||||
|
}
|
||||||
|
|
||||||
|
public File findFile(String name) {
|
||||||
|
for(File i : getFolders(name)) {
|
||||||
|
for(File j : i.listFiles()) {
|
||||||
|
if(j.isFile() && j.getName().endsWith(".mat") && j.getName().split("\\Q.\\E")[0].equals(name)) {
|
||||||
|
return j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
File file = new File(i, name + ".mat");
|
||||||
|
|
||||||
|
if(file.exists()) {
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Iris.warn("Couldn't find " + resourceTypeName + ": " + name);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IrisMatterObject load(String name) {
|
||||||
|
return load(name, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IrisMatterObject loadRaw(String name) {
|
||||||
|
for(File i : getFolders(name)) {
|
||||||
|
for(File j : i.listFiles()) {
|
||||||
|
if(j.isFile() && j.getName().endsWith(".mat") && j.getName().split("\\Q.\\E")[0].equals(name)) {
|
||||||
|
return loadFile(j, name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
File file = new File(i, name + ".mat");
|
||||||
|
|
||||||
|
if(file.exists()) {
|
||||||
|
return loadFile(file, name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Iris.warn("Couldn't find " + resourceTypeName + ": " + name);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IrisMatterObject load(String name, boolean warn) {
|
||||||
|
return loadCache.get(name);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
package com.volmit.iris.engine.object;
|
||||||
|
|
||||||
|
import com.volmit.iris.core.loader.IrisData;
|
||||||
|
import com.volmit.iris.core.loader.IrisRegistrant;
|
||||||
|
import com.volmit.iris.util.json.JSONObject;
|
||||||
|
import com.volmit.iris.util.matter.IrisMatter;
|
||||||
|
import com.volmit.iris.util.matter.Matter;
|
||||||
|
import com.volmit.iris.util.plugin.VolmitSender;
|
||||||
|
import jdk.jfr.DataAmount;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class IrisMatterObject extends IrisRegistrant {
|
||||||
|
private final Matter matter;
|
||||||
|
|
||||||
|
public IrisMatterObject()
|
||||||
|
{
|
||||||
|
this(1,1,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IrisMatterObject(int w, int h, int d)
|
||||||
|
{
|
||||||
|
this(new IrisMatter(w,h,d));
|
||||||
|
}
|
||||||
|
|
||||||
|
public IrisMatterObject(Matter matter)
|
||||||
|
{
|
||||||
|
this.matter = matter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IrisMatterObject from(IrisObject object)
|
||||||
|
{
|
||||||
|
return new IrisMatterObject(Matter.from(object));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IrisMatterObject from(File j) throws IOException, ClassNotFoundException {
|
||||||
|
return new IrisMatterObject(Matter.read(j));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFolderName() {
|
||||||
|
return "matter";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getTypeName() {
|
||||||
|
return "Matter";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void scanForErrors(JSONObject p, VolmitSender sender) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -18,8 +18,9 @@
|
|||||||
|
|
||||||
package com.volmit.iris.engine.object;
|
package com.volmit.iris.engine.object;
|
||||||
|
|
||||||
import com.volmit.iris.engine.object.annotations.Desc;
|
import com.volmit.iris.core.loader.ObjectResourceLoader;
|
||||||
import com.volmit.iris.engine.object.annotations.Snippet;
|
import com.volmit.iris.engine.object.annotations.*;
|
||||||
|
import com.volmit.iris.util.collection.KList;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
@ -29,8 +30,12 @@ import lombok.experimental.Accessors;
|
|||||||
@EqualsAndHashCode()
|
@EqualsAndHashCode()
|
||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@Desc("Represents an iris object placer. It places objects.")
|
@Desc("Represents an iris object placer. It places matter objects.")
|
||||||
@Data
|
@Data
|
||||||
public class IrisMatterPlacement {
|
public class IrisMatterPlacement {
|
||||||
|
@RegistryListResource(IrisMatterObject.class)
|
||||||
|
@Required
|
||||||
|
@ArrayType(min = 1, type = String.class)
|
||||||
|
@Desc("List of objects to place")
|
||||||
|
private KList<String> place = new KList<>();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user