mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-03 08:26:11 +00:00
- New Noise color < need further testing >
- Iris schem converter
This commit is contained in:
parent
a2ff5f58ed
commit
e21fdf46e0
@ -171,6 +171,7 @@ public class IrisSettings {
|
|||||||
public static class IrisSettingsGUI {
|
public static class IrisSettingsGUI {
|
||||||
public boolean useServerLaunchedGuis = true;
|
public boolean useServerLaunchedGuis = true;
|
||||||
public boolean maximumPregenGuiFPS = false;
|
public boolean maximumPregenGuiFPS = false;
|
||||||
|
public boolean colorMode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@ -26,6 +26,7 @@ import com.volmit.iris.core.nms.datapack.DataVersion;
|
|||||||
import com.volmit.iris.core.nms.v1X.NMSBinding1X;
|
import com.volmit.iris.core.nms.v1X.NMSBinding1X;
|
||||||
import com.volmit.iris.core.pregenerator.ChunkUpdater;
|
import com.volmit.iris.core.pregenerator.ChunkUpdater;
|
||||||
import com.volmit.iris.core.service.IrisEngineSVC;
|
import com.volmit.iris.core.service.IrisEngineSVC;
|
||||||
|
import com.volmit.iris.core.tools.IrisConverter;
|
||||||
import com.volmit.iris.core.tools.IrisPackBenchmarking;
|
import com.volmit.iris.core.tools.IrisPackBenchmarking;
|
||||||
import com.volmit.iris.core.tools.IrisToolbelt;
|
import com.volmit.iris.core.tools.IrisToolbelt;
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
|
@ -24,6 +24,7 @@ import com.volmit.iris.core.loader.IrisData;
|
|||||||
import com.volmit.iris.core.service.ObjectSVC;
|
import com.volmit.iris.core.service.ObjectSVC;
|
||||||
import com.volmit.iris.core.service.StudioSVC;
|
import com.volmit.iris.core.service.StudioSVC;
|
||||||
import com.volmit.iris.core.service.WandSVC;
|
import com.volmit.iris.core.service.WandSVC;
|
||||||
|
import com.volmit.iris.core.tools.IrisConverter;
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
import com.volmit.iris.engine.object.*;
|
import com.volmit.iris.engine.object.*;
|
||||||
import com.volmit.iris.util.data.Cuboid;
|
import com.volmit.iris.util.data.Cuboid;
|
||||||
@ -210,6 +211,16 @@ public class CommandObject implements DecreeExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Decree(description = "Convert .schem files in the 'convert' folder to .iob files.")
|
||||||
|
public void convert () {
|
||||||
|
try {
|
||||||
|
IrisConverter.convertSchematics(sender());
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Decree(description = "Get a powder that reveals objects", studio = true, aliases = "d")
|
@Decree(description = "Get a powder that reveals objects", studio = true, aliases = "d")
|
||||||
public void dust() {
|
public void dust() {
|
||||||
player().getInventory().addItem(WandSVC.createDust());
|
player().getInventory().addItem(WandSVC.createDust());
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
package com.volmit.iris.core.gui;
|
package com.volmit.iris.core.gui;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.core.IrisSettings;
|
||||||
import com.volmit.iris.core.events.IrisEngineHotloadEvent;
|
import com.volmit.iris.core.events.IrisEngineHotloadEvent;
|
||||||
import com.volmit.iris.engine.object.NoiseStyle;
|
import com.volmit.iris.engine.object.NoiseStyle;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import com.volmit.iris.util.collection.KList;
|
||||||
@ -61,7 +62,7 @@ public class NoiseExplorerGUI extends JPanel implements MouseWheelListener, List
|
|||||||
@SuppressWarnings("CanBeFinal")
|
@SuppressWarnings("CanBeFinal")
|
||||||
RollingSequence r = new RollingSequence(20);
|
RollingSequence r = new RollingSequence(20);
|
||||||
@SuppressWarnings("CanBeFinal")
|
@SuppressWarnings("CanBeFinal")
|
||||||
boolean colorMode = true;
|
boolean colorMode = IrisSettings.get().getGui().colorMode;
|
||||||
double scale = 1;
|
double scale = 1;
|
||||||
CNG cng = NoiseStyle.STATIC.create(new RNG(RNG.r.nextLong()));
|
CNG cng = NoiseStyle.STATIC.create(new RNG(RNG.r.nextLong()));
|
||||||
@SuppressWarnings("CanBeFinal")
|
@SuppressWarnings("CanBeFinal")
|
||||||
@ -274,7 +275,10 @@ public class NoiseExplorerGUI extends JPanel implements MouseWheelListener, List
|
|||||||
n = n > 1 ? 1 : n < 0 ? 0 : n;
|
n = n > 1 ? 1 : n < 0 ? 0 : n;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Color color = colorMode ? Color.getHSBColor((float) (n), 1f - (float) (n * n * n * n * n * n), 1f - (float) n) : Color.getHSBColor(0f, 0f, (float) n);
|
//Color color = colorMode ? Color.getHSBColor((float) (n), 1f - (float) (n * n * n * n * n * n), 1f - (float) n) : Color.getHSBColor(0f, 0f, (float) n);
|
||||||
|
//Color color = colorMode ? Color.getHSBColor((float) (n), (float) (n * n * n * n * n * n), (float) n) : Color.getHSBColor(0f, 0f, (float) n);
|
||||||
|
Color color = colorMode ? Color.getHSBColor((float) n, (float) (n * n * n * n * n * n), (float) n) : Color.getHSBColor(0f, 0f, (float) n);
|
||||||
|
|
||||||
int rgb = color.getRGB();
|
int rgb = color.getRGB();
|
||||||
img.setRGB(xx, z, rgb);
|
img.setRGB(xx, z, rgb);
|
||||||
} catch (Throwable ignored) {
|
} catch (Throwable ignored) {
|
||||||
|
@ -12,9 +12,11 @@ import com.volmit.iris.util.reflect.V;
|
|||||||
import com.volmit.iris.util.scheduling.J;
|
import com.volmit.iris.util.scheduling.J;
|
||||||
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
|
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
import org.bukkit.util.FileUtil;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -33,11 +35,15 @@ public class IrisConverter {
|
|||||||
|
|
||||||
FilenameFilter filter = (dir, name) -> name.endsWith(".schem");
|
FilenameFilter filter = (dir, name) -> name.endsWith(".schem");
|
||||||
File[] fileList = folder.listFiles(filter);
|
File[] fileList = folder.listFiles(filter);
|
||||||
|
if (fileList == null) {
|
||||||
|
sender.sendMessage("No schematic files to convert found in " + folder.getAbsolutePath());
|
||||||
|
return;
|
||||||
|
}
|
||||||
ExecutorService executorService = Executors.newFixedThreadPool(1);
|
ExecutorService executorService = Executors.newFixedThreadPool(1);
|
||||||
executorService.submit(() -> {
|
executorService.submit(() -> {
|
||||||
for (File schem : fileList) {
|
for (File schem : fileList) {
|
||||||
try {
|
try {
|
||||||
PrecisionStopwatch p = new PrecisionStopwatch();
|
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||||
boolean largeObject = false;
|
boolean largeObject = false;
|
||||||
NamedTag tag = null;
|
NamedTag tag = null;
|
||||||
try {
|
try {
|
||||||
@ -52,21 +58,17 @@ public class IrisConverter {
|
|||||||
int objW = ((ShortTag) compound.get("Width")).getValue();
|
int objW = ((ShortTag) compound.get("Width")).getValue();
|
||||||
int objH = ((ShortTag) compound.get("Height")).getValue();
|
int objH = ((ShortTag) compound.get("Height")).getValue();
|
||||||
int objD = ((ShortTag) compound.get("Length")).getValue();
|
int objD = ((ShortTag) compound.get("Length")).getValue();
|
||||||
|
int i = -1;
|
||||||
int mv = objW * objH * objD;
|
int mv = objW * objH * objD;
|
||||||
AtomicInteger v = new AtomicInteger(0);
|
AtomicInteger v = new AtomicInteger(0);
|
||||||
AtomicInteger fv = new AtomicInteger(0);
|
|
||||||
if (mv > 500_000) {
|
if (mv > 500_000) {
|
||||||
largeObject = true;
|
largeObject = true;
|
||||||
Iris.info(C.GRAY + "Converting.. "+ schem.getName() + " -> " + schem.getName().replace(".schem", ".iob"));
|
Iris.info(C.GRAY + "Converting.. "+ schem.getName() + " -> " + schem.getName().replace(".schem", ".iob"));
|
||||||
Iris.info(C.GRAY + "- It may take a while");
|
Iris.info(C.GRAY + "- It may take a while");
|
||||||
if (sender.isPlayer()) {
|
if (sender.isPlayer()) {
|
||||||
J.a(() -> {
|
i = J.ar(() -> {
|
||||||
// while (v.get() != mv) {
|
sender.sendProgress((double) v.get() / mv, "Converting");
|
||||||
// double pr = ((double) v.get() / (double ) mv);
|
}, 0);
|
||||||
// sender.sendProgress(pr, "Converting");
|
|
||||||
// J.sleep(16);
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,165 +84,8 @@ public class IrisConverter {
|
|||||||
|
|
||||||
ByteArrayTag byteArray = (ByteArrayTag) compound.get("BlockData");
|
ByteArrayTag byteArray = (ByteArrayTag) compound.get("BlockData");
|
||||||
byte[] originalBlockArray = byteArray.getValue();
|
byte[] originalBlockArray = byteArray.getValue();
|
||||||
int b = 0;
|
|
||||||
int a = 0;
|
|
||||||
Map<Integer, Byte> y = new HashMap<>();
|
|
||||||
Map<Integer, Byte> x = new HashMap<>();
|
|
||||||
Map<Integer, Byte> z = new HashMap<>();
|
|
||||||
|
|
||||||
// Height adjustments
|
|
||||||
for (int h = 0; h < objH; h++) {
|
|
||||||
if (b == 0) {
|
|
||||||
y.put(h, (byte) 0);
|
|
||||||
}
|
|
||||||
if (b > 0) {
|
|
||||||
y.put(h, (byte) 1);
|
|
||||||
}
|
|
||||||
a = 0;
|
|
||||||
b = 0;
|
|
||||||
for (int d = 0; d < objD; d++) {
|
|
||||||
for (int w = 0; w < objW; w++) {
|
|
||||||
BlockData db = blockmap.get((int) originalBlockArray[fv.get()]);
|
|
||||||
if(db.getAsString().contains("minecraft:air")) {
|
|
||||||
a++;
|
|
||||||
} else {
|
|
||||||
b++;
|
|
||||||
}
|
|
||||||
fv.getAndAdd(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fv.set(0);
|
|
||||||
|
|
||||||
// Width adjustments
|
|
||||||
for (int w = 0; w < objW; w++) {
|
|
||||||
if (b == 0) {
|
|
||||||
x.put(w, (byte) 0);
|
|
||||||
}
|
|
||||||
if (b > 0) {
|
|
||||||
x.put(w, (byte) 1);
|
|
||||||
}
|
|
||||||
a = 0;
|
|
||||||
b = 0;
|
|
||||||
for (int h = 0; h < objH; h++) {
|
|
||||||
for (int d = 0; d < objD; d++) {
|
|
||||||
BlockData db = blockmap.get((int) originalBlockArray[fv.get()]);
|
|
||||||
if(db.getAsString().contains("minecraft:air")) {
|
|
||||||
a++;
|
|
||||||
} else {
|
|
||||||
b++;
|
|
||||||
}
|
|
||||||
fv.getAndAdd(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fv.set(0);
|
|
||||||
|
|
||||||
// Depth adjustments
|
|
||||||
for (int d = 0; d < objD; d++) {
|
|
||||||
if (b == 0) {
|
|
||||||
z.put(d, (byte) 0);
|
|
||||||
}
|
|
||||||
if (b > 0) {
|
|
||||||
z.put(d, (byte) 1);
|
|
||||||
}
|
|
||||||
a = 0;
|
|
||||||
b = 0;
|
|
||||||
for (int h = 0; h < objH; h++) {
|
|
||||||
for (int w = 0; w < objW; w++) {
|
|
||||||
BlockData db = blockmap.get((int) originalBlockArray[fv.get()]);
|
|
||||||
if(db.getAsString().contains("minecraft:air")) {
|
|
||||||
a++;
|
|
||||||
} else {
|
|
||||||
b++;
|
|
||||||
}
|
|
||||||
fv.getAndAdd(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fv.set(0);
|
|
||||||
int CorrectObjH = getCorrectY(y, objH);
|
|
||||||
int CorrectObjW = getCorrectX(x, objW);
|
|
||||||
int CorrectObjD = getCorrectZ(z, objD);
|
|
||||||
|
|
||||||
//IrisObject object = new IrisObject(CorrectObjW, CorrectObjH, CorrectObjH);
|
|
||||||
IrisObject object = new IrisObject(objW, objH, objD);
|
IrisObject object = new IrisObject(objW, objH, objD);
|
||||||
Vector originalVector = new Vector(objW,objH,objD);
|
|
||||||
|
|
||||||
|
|
||||||
int[] yc = null;
|
|
||||||
int[] xc = null;
|
|
||||||
int[] zc = null;
|
|
||||||
|
|
||||||
|
|
||||||
int fo = 0;
|
|
||||||
int so = 0;
|
|
||||||
int o = 0;
|
|
||||||
int c = 0;
|
|
||||||
for (Integer i : y.keySet()) {
|
|
||||||
if (y.get(i) == 0) {
|
|
||||||
o++;
|
|
||||||
}
|
|
||||||
if (y.get(i) == 1) {
|
|
||||||
c++;
|
|
||||||
if (c == 1) {
|
|
||||||
fo = o;
|
|
||||||
}
|
|
||||||
o = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
so = o;
|
|
||||||
yc = new int[]{fo, so};
|
|
||||||
|
|
||||||
fo = 0;
|
|
||||||
so = 0;
|
|
||||||
o = 0;
|
|
||||||
c = 0;
|
|
||||||
for (Integer i : x.keySet()) {
|
|
||||||
if (x.get(i) == 0) {
|
|
||||||
o++;
|
|
||||||
}
|
|
||||||
if (x.get(i) == 1) {
|
|
||||||
c++;
|
|
||||||
if (c == 1) {
|
|
||||||
fo = o;
|
|
||||||
}
|
|
||||||
o = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
so = o;
|
|
||||||
xc = new int[]{fo, so};
|
|
||||||
|
|
||||||
fo = 0;
|
|
||||||
so = 0;
|
|
||||||
o = 0;
|
|
||||||
c = 0;
|
|
||||||
for (Integer i : z.keySet()) {
|
|
||||||
if (z.get(i) == 0) {
|
|
||||||
o++;
|
|
||||||
}
|
|
||||||
if (z.get(i) == 1) {
|
|
||||||
c++;
|
|
||||||
if (c == 1) {
|
|
||||||
fo = o;
|
|
||||||
}
|
|
||||||
o = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
so = o;
|
|
||||||
zc = new int[]{fo, so};
|
|
||||||
|
|
||||||
int h1, h2, w1, w2, v1 = 0, volume = objW * objH * objD;
|
|
||||||
Map<Integer, Integer> blockLocationMap = new LinkedHashMap<>();
|
|
||||||
boolean hasAir = false;
|
|
||||||
int pos = 0;
|
|
||||||
for (int i : originalBlockArray) {
|
|
||||||
blockLocationMap.put(pos, i);
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (int h = 0; h < objH; h++) {
|
for (int h = 0; h < objH; h++) {
|
||||||
for (int d = 0; d < objD; d++) {
|
for (int d = 0; d < objD; d++) {
|
||||||
for (int w = 0; w < objW; w++) {
|
for (int w = 0; w < objW; w++) {
|
||||||
@ -252,9 +97,9 @@ public class IrisConverter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (i != -1) J.car(i);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
object.shrinkwrap();
|
||||||
object.write(new File(folder, schem.getName().replace(".schem", ".iob")));
|
object.write(new File(folder, schem.getName().replace(".schem", ".iob")));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Iris.info(C.RED + "Failed to save: " + schem.getName());
|
Iris.info(C.RED + "Failed to save: " + schem.getName());
|
||||||
@ -272,7 +117,7 @@ public class IrisConverter {
|
|||||||
} else {
|
} else {
|
||||||
Iris.info(C.GRAY + "Converted " + schem.getName() + " -> " + schem.getName().replace(".schem", ".iob"));
|
Iris.info(C.GRAY + "Converted " + schem.getName() + " -> " + schem.getName().replace(".schem", ".iob"));
|
||||||
}
|
}
|
||||||
// schem.delete();
|
FileUtils.delete(schem);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Iris.info(C.RED + "Failed to convert: " + schem.getName());
|
Iris.info(C.RED + "Failed to convert: " + schem.getName());
|
||||||
@ -283,112 +128,10 @@ public class IrisConverter {
|
|||||||
Iris.reportError(e);
|
Iris.reportError(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sender.sendMessage(C.GRAY + "converted: " + fileList.length);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isNewPointFurther(int[] originalPoint, int[] oldPoint, int[] newPoint) {
|
|
||||||
int oX = oldPoint[1];
|
|
||||||
int oY = oldPoint[2];
|
|
||||||
int oZ = oldPoint[3];
|
|
||||||
|
|
||||||
int nX = newPoint[1];
|
|
||||||
int nY = newPoint[2];
|
|
||||||
int nZ = newPoint[3];
|
|
||||||
|
|
||||||
int orX = originalPoint[1];
|
|
||||||
int orY = originalPoint[2];
|
|
||||||
int orZ = originalPoint[3];
|
|
||||||
|
|
||||||
double oldDistance = Math.sqrt(Math.pow(oX - orX, 2) + Math.pow(oY - orY, 2) + Math.pow(oZ - orZ, 2));
|
|
||||||
double newDistance = Math.sqrt(Math.pow(nX - orX, 2) + Math.pow(nY - orY, 2) + Math.pow(nZ - orZ, 2));
|
|
||||||
|
|
||||||
if (newDistance > oldDistance) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int[] getCoordinates(int pos, int obX, int obY, int obZ) {
|
|
||||||
int z = 0;
|
|
||||||
int[] coords = new int[4];
|
|
||||||
for (int h = 0; h < obY; h++) {
|
|
||||||
for (int d = 0; d < obZ; d++) {
|
|
||||||
for (int w = 0; w < obX; w++) {
|
|
||||||
if (z == pos) {
|
|
||||||
coords[1] = w;
|
|
||||||
coords[2] = h;
|
|
||||||
coords[3] = d;
|
|
||||||
return coords;
|
|
||||||
}
|
|
||||||
z++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getCorrectY(Map<Integer, Byte> y, int H) {
|
|
||||||
int fo = 0;
|
|
||||||
int so = 0;
|
|
||||||
int o = 0;
|
|
||||||
int c = 0;
|
|
||||||
for (Integer i : y.keySet()) {
|
|
||||||
if (y.get(i) == 0) {
|
|
||||||
o++;
|
|
||||||
}
|
|
||||||
if (y.get(i) == 1) {
|
|
||||||
c++;
|
|
||||||
if(c == 1){
|
|
||||||
fo = o;
|
|
||||||
}
|
|
||||||
o = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
so = o;
|
|
||||||
return H = H - (fo + so);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getCorrectX(Map<Integer, Byte> x, int W) {
|
|
||||||
int fo = 0;
|
|
||||||
int so = 0;
|
|
||||||
int o = 0;
|
|
||||||
int c = 0;
|
|
||||||
for (Integer i : x.keySet()) {
|
|
||||||
if (x.get(i) == 0) {
|
|
||||||
o++;
|
|
||||||
}
|
|
||||||
if (x.get(i) == 1) {
|
|
||||||
c++;
|
|
||||||
if(c == 1){
|
|
||||||
fo = o;
|
|
||||||
}
|
|
||||||
o = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
so = o;
|
|
||||||
return W = W - (fo + so);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getCorrectZ(Map<Integer, Byte> z, int D) {
|
|
||||||
int fo = 0;
|
|
||||||
int so = 0;
|
|
||||||
int o = 0;
|
|
||||||
int c = 0;
|
|
||||||
for (Integer i : z.keySet()) {
|
|
||||||
if (z.get(i) == 0) {
|
|
||||||
o++;
|
|
||||||
}
|
|
||||||
if (z.get(i) == 1) {
|
|
||||||
c++;
|
|
||||||
if(c == 1){
|
|
||||||
fo = o;
|
|
||||||
}
|
|
||||||
o = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
so = o;
|
|
||||||
return D = D - (fo + so);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user