mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-10-25 21:40:05 +00:00
sync
This commit is contained in:
1 parent
ac5d5793ab
commit
dfd27ecbff
1 file changed
+55
-4
@@ -1,6 +1,7 @@
|
|||||||
package com.volmit.iris.engine.object;
|
package com.volmit.iris.engine.object;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.core.nms.IMemoryWorld;
|
||||||
import com.volmit.iris.core.nms.INMS;
|
import com.volmit.iris.core.nms.INMS;
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
import com.volmit.iris.engine.object.annotations.Desc;
|
import com.volmit.iris.engine.object.annotations.Desc;
|
||||||
@@ -14,14 +15,17 @@ import com.volmit.iris.util.scheduling.PrecisionStopwatch;
|
|||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.*;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static org.bukkit.Bukkit.createChunkData;
|
||||||
|
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@Desc("Dimension Merging only supports 1 for now.")
|
@Desc("Dimension Merging only supports 1 for now.")
|
||||||
@@ -33,6 +37,9 @@ public class IrisMerger {
|
|||||||
@Desc("Selected Generator")
|
@Desc("Selected Generator")
|
||||||
private String generator;
|
private String generator;
|
||||||
|
|
||||||
|
@Desc("Uses a world instead of a generator")
|
||||||
|
private String world;
|
||||||
|
|
||||||
@Desc("Uses the generator as a datapack key")
|
@Desc("Uses the generator as a datapack key")
|
||||||
private boolean datapackMode;
|
private boolean datapackMode;
|
||||||
|
|
||||||
@@ -60,10 +67,20 @@ public class IrisMerger {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
PrecisionStopwatch p = PrecisionStopwatch.start();
|
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||||
var memoryWorld = engine.getMemoryWorld();
|
|
||||||
var bukkit = memoryWorld.getBukkit();
|
|
||||||
|
|
||||||
var chunkData = memoryWorld.getChunkData(x, z);
|
IMemoryWorld memoryWorld;
|
||||||
|
World bukkit;
|
||||||
|
|
||||||
|
ChunkGenerator.ChunkData chunkData;
|
||||||
|
if (world.isBlank()) {
|
||||||
|
memoryWorld = engine.getMemoryWorld();
|
||||||
|
bukkit = memoryWorld.getBukkit();
|
||||||
|
chunkData = memoryWorld.getChunkData(x, z);
|
||||||
|
} else {
|
||||||
|
bukkit = loadWorld(world);
|
||||||
|
chunkData = getChunkDataAt(bukkit, x, z);
|
||||||
|
}
|
||||||
|
|
||||||
var vh = new ChunkDataHunkView(chunkData);
|
var vh = new ChunkDataHunkView(chunkData);
|
||||||
|
|
||||||
int totalHeight = bukkit.getMaxHeight() - bukkit.getMinHeight();
|
int totalHeight = bukkit.getMaxHeight() - bukkit.getMinHeight();
|
||||||
@@ -166,4 +183,38 @@ public class IrisMerger {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ChunkGenerator.ChunkData getChunkDataAt(World world, int chunkX, int chunkZ) {
|
||||||
|
ChunkGenerator.ChunkData chunkData = createChunkData(world);
|
||||||
|
Chunk chunk = world.getChunkAt(chunkX, chunkZ);
|
||||||
|
|
||||||
|
if (!chunk.isGenerated())
|
||||||
|
throw new IllegalStateException("Chunk is not generated!");
|
||||||
|
|
||||||
|
if (!chunk.isLoaded()) {
|
||||||
|
chunk.load();
|
||||||
|
}
|
||||||
|
|
||||||
|
int minY = world.getMinHeight();
|
||||||
|
int maxY = world.getMaxHeight();
|
||||||
|
|
||||||
|
for (int y = minY; y < maxY; y++) {
|
||||||
|
for (int x = 0; x < 16; x++) {
|
||||||
|
for (int z = 0; z < 16; z++) {
|
||||||
|
BlockData blockData = chunk.getBlock(x, y, z).getBlockData();
|
||||||
|
chunkData.setBlock(x, y, z, blockData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return chunkData;
|
||||||
|
}
|
||||||
|
|
||||||
|
private World loadWorld(String worldName) {
|
||||||
|
World world = Bukkit.getWorld(worldName);
|
||||||
|
if (world != null)
|
||||||
|
return world;
|
||||||
|
WorldCreator worldCreator = new WorldCreator(worldName);
|
||||||
|
world = Bukkit.createWorld(worldCreator);
|
||||||
|
return world;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user