mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-04-07 00:06:10 +00:00
Actually decent
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package com.volmit.iris.platform.bukkit;
|
||||
|
||||
import art.arcane.amulet.io.IO;
|
||||
import com.volmit.iris.engine.EngineConfiguration;
|
||||
import com.volmit.iris.platform.IrisPlatform;
|
||||
import com.volmit.iris.platform.PlatformBiome;
|
||||
@@ -14,9 +15,13 @@ import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.WorldCreator;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Stream;
|
||||
@@ -30,11 +35,45 @@ public class IrisBukkit extends JavaPlugin implements IrisPlatform {
|
||||
getServer().getScheduler().scheduleSyncDelayedTask(this, () -> {
|
||||
World world = Bukkit.createWorld(new WorldCreator("iristests/" + UUID.randomUUID()).generator(new IrisBukkitChunkGenerator(this, EngineConfiguration.builder()
|
||||
.build())));
|
||||
for(Player i : Bukkit.getOnlinePlayers())
|
||||
{
|
||||
i.teleport(world.getSpawnLocation());
|
||||
}
|
||||
}, 10);
|
||||
}
|
||||
|
||||
public void onDisable() {
|
||||
World w = null;
|
||||
for(World i : Bukkit.getWorlds()) {
|
||||
if(!i.getName().startsWith("iristest")) {
|
||||
w = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for(World i : Bukkit.getWorlds()) {
|
||||
if(i.getName().startsWith("iristest"))
|
||||
{
|
||||
for(Player j : i.getPlayers())
|
||||
{
|
||||
j.teleport(w.getSpawnLocation());
|
||||
}
|
||||
|
||||
if(i.getGenerator() instanceof Closeable c)
|
||||
{
|
||||
try {
|
||||
c.close();
|
||||
} catch(IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
i.bukkitWorld().unloadChunks(false, true);
|
||||
File folder = i.getWorldFolder();
|
||||
Bukkit.unloadWorld(i, false);
|
||||
IO.delete(folder);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static IrisBukkit getInstance() {
|
||||
|
||||
@@ -4,10 +4,9 @@ import art.arcane.amulet.collections.hunk.Hunk;
|
||||
import art.arcane.amulet.metric.Average;
|
||||
import art.arcane.amulet.metric.PrecisionStopwatch;
|
||||
import com.volmit.iris.engine.EngineConfiguration;
|
||||
import com.volmit.iris.engine.IrisEngine;
|
||||
import com.volmit.iris.engine.Engine;
|
||||
import com.volmit.iris.engine.feature.IrisFeatureSizedTarget;
|
||||
import com.volmit.iris.engine.feature.IrisFeatureTarget;
|
||||
import com.volmit.iris.engine.feature.features.FeatureTerrain;
|
||||
import com.volmit.iris.engine.pipeline.PipedHunkStack;
|
||||
import com.volmit.iris.platform.IrisPlatform;
|
||||
import com.volmit.iris.platform.PlatformBlock;
|
||||
@@ -16,16 +15,17 @@ import org.bukkit.World;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
import com.volmit.iris.platform.bukkit.util.ChunkDataHunkView;
|
||||
|
||||
import java.nio.channels.Pipe;
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
public class IrisBukkitChunkGenerator extends ChunkGenerator {
|
||||
public class IrisBukkitChunkGenerator extends ChunkGenerator implements Closeable {
|
||||
private final IrisPlatform platform;
|
||||
private final EngineConfiguration configuration;
|
||||
private final AtomicReference<IrisEngine> engine;
|
||||
private final AtomicReference<Engine> engine;
|
||||
private final ReentrantLock engineLock;
|
||||
private final AtomicInteger perSecond;
|
||||
private final PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||
@@ -46,8 +46,6 @@ public class IrisBukkitChunkGenerator extends ChunkGenerator {
|
||||
initEngine(world);
|
||||
ChunkData data = Bukkit.createChunkData(world);
|
||||
Hunk<PlatformBlock> chunk = new ChunkDataHunkView(data);
|
||||
PipedHunkStack stack = new PipedHunkStack();
|
||||
stack.register(PlatformBlock.class, chunk);
|
||||
IrisFeatureSizedTarget targetSize = IrisFeatureSizedTarget.builder()
|
||||
.width(chunk.getWidth())
|
||||
.height(chunk.getHeight())
|
||||
@@ -56,6 +54,9 @@ public class IrisBukkitChunkGenerator extends ChunkGenerator {
|
||||
.offsetZ(z << 4)
|
||||
.offsetY(0)
|
||||
.build();
|
||||
IrisFeatureTarget<PlatformBlock> blockTarget = new IrisFeatureTarget<>(chunk, targetSize);
|
||||
PipedHunkStack stack = new PipedHunkStack();
|
||||
stack.register(PlatformBlock.class, blockTarget);
|
||||
engine.get().getPlumbing().generate(engine.get(), targetSize, stack);
|
||||
perSecond.incrementAndGet();
|
||||
a.put(pp.getMilliseconds());
|
||||
@@ -77,7 +78,7 @@ public class IrisBukkitChunkGenerator extends ChunkGenerator {
|
||||
|
||||
if(engine.get() == null)
|
||||
{
|
||||
engine.set(new IrisEngine(platform, world.bukkitWorld(), configuration));
|
||||
engine.set(new Engine(platform, world.bukkitWorld(), configuration));
|
||||
}
|
||||
|
||||
engineLock.unlock();
|
||||
@@ -88,4 +89,9 @@ public class IrisBukkitChunkGenerator extends ChunkGenerator {
|
||||
public boolean canSpawn(World world, int x, int z) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
engine.get().close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ public class ChunkDataHunkView implements Hunk<PlatformBlock> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void set(int x1, int y1, int z1, int x2, int y2, int z2, PlatformBlock t) {
|
||||
public synchronized void set(int x1, int y1, int z1, int x2, int y2, int z2, PlatformBlock t) {
|
||||
if(t == null) {
|
||||
return;
|
||||
}
|
||||
@@ -38,7 +38,7 @@ public class ChunkDataHunkView implements Hunk<PlatformBlock> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRaw(int x, int y, int z, PlatformBlock t) {
|
||||
public synchronized void setRaw(int x, int y, int z, PlatformBlock t) {
|
||||
if(t == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user