mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 02:03:59 +00:00
tweaks
This commit is contained in:
parent
fa201d21e2
commit
a48400535f
@ -5,7 +5,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group 'com.volmit.iris'
|
group 'com.volmit.iris'
|
||||||
version '1.4.2'
|
version '1.4.3'
|
||||||
def apiVersion = '1.17'
|
def apiVersion = '1.17'
|
||||||
def name = 'Iris'
|
def name = 'Iris'
|
||||||
def main = 'com.volmit.iris.Iris'
|
def main = 'com.volmit.iris.Iris'
|
||||||
|
@ -134,86 +134,85 @@ public class IrisProject
|
|||||||
.seed(1337)
|
.seed(1337)
|
||||||
.name(wfp)
|
.name(wfp)
|
||||||
.studioMode()
|
.studioMode()
|
||||||
.asyncPrepare()
|
|
||||||
.create();
|
.create();
|
||||||
IrisAccess gx = ((IrisAccess)c.generator());
|
|
||||||
sender.sendMessage("Generating with " + Iris.getThreadCount() + " threads per chunk");
|
|
||||||
O<Boolean> done = new O<>();
|
|
||||||
done.set(false);
|
|
||||||
activeProvider = gx;
|
|
||||||
|
|
||||||
J.a(() ->
|
IrisAccess gx = ((IrisAccess)c.generator());
|
||||||
{
|
sender.sendMessage("Generating with " + Iris.getThreadCount() + " threads per chunk");
|
||||||
double last = 0;
|
O<Boolean> done = new O<>();
|
||||||
int req = 300;
|
done.set(false);
|
||||||
double lpc = 0;
|
activeProvider = gx;
|
||||||
boolean fc;
|
|
||||||
|
|
||||||
while(!done.get())
|
J.a(() ->
|
||||||
{
|
{
|
||||||
boolean derp = false;
|
double last = 0;
|
||||||
|
int req = 300;
|
||||||
|
double lpc = 0;
|
||||||
|
boolean fc;
|
||||||
|
|
||||||
assert gx != null;
|
while(!done.get())
|
||||||
double v = (double) gx.getGenerated() / (double) req;
|
{
|
||||||
fc = lpc != v;
|
boolean derp = false;
|
||||||
lpc = v;
|
|
||||||
|
|
||||||
if(last > v || v > 1)
|
assert gx != null;
|
||||||
{
|
double v = (double) gx.getGenerated() / (double) req;
|
||||||
derp = true;
|
fc = lpc != v;
|
||||||
v = last;
|
lpc = v;
|
||||||
}
|
|
||||||
|
|
||||||
else
|
if(last > v || v > 1)
|
||||||
{
|
{
|
||||||
last = v;
|
derp = true;
|
||||||
}
|
v = last;
|
||||||
|
}
|
||||||
|
|
||||||
if(fc)
|
else
|
||||||
{
|
{
|
||||||
sender.sendMessage(C.WHITE + "Generating " + Form.pc(v) + (derp ? (C.GRAY + " (Waiting on Server...)") : (C.GRAY + " (" + (req - gx.getGenerated()) + " Left)")));
|
last = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sender.isPlayer()){
|
if(fc)
|
||||||
sender.player().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(C.BLUE + "Creating studio world. Please wait..."));
|
{
|
||||||
}
|
sender.sendMessage(C.WHITE + "Generating " + Form.pc(v) + (derp ? (C.GRAY + " (Waiting on Server...)") : (C.GRAY + " (" + (req - gx.getGenerated()) + " Left)")));
|
||||||
|
}
|
||||||
|
|
||||||
J.sleep(1500);
|
if (sender.isPlayer()){
|
||||||
|
sender.player().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(C.BLUE + "Creating studio world. Please wait..."));
|
||||||
|
}
|
||||||
|
|
||||||
if(gx.isFailing())
|
J.sleep(1500);
|
||||||
{
|
|
||||||
|
|
||||||
sender.sendMessage("Generation Failed!");
|
if(gx.isFailing())
|
||||||
return;
|
{
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//@builder
|
sender.sendMessage("Generation Failed!");
|
||||||
World world = c.createWorld();
|
return;
|
||||||
Iris.linkMultiverseCore.removeFromConfig(world);
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
done.set(true);
|
//@builder
|
||||||
sender.sendMessage(C.WHITE + "Generating Complete!");
|
World world = c.createWorld();
|
||||||
|
Iris.linkMultiverseCore.removeFromConfig(world);
|
||||||
|
|
||||||
if(sender.isPlayer())
|
done.set(true);
|
||||||
{
|
sender.sendMessage(C.WHITE + "Generating Complete!");
|
||||||
assert world != null;
|
|
||||||
sender.player().teleport(world.getSpawnLocation());
|
|
||||||
}
|
|
||||||
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () ->
|
if(sender.isPlayer())
|
||||||
{
|
{
|
||||||
sender.sendMessage("Hotloading Active! Change any files and watch your changes appear as you load new chunks!");
|
assert world != null;
|
||||||
|
sender.player().teleport(world.getSpawnLocation());
|
||||||
|
}
|
||||||
|
|
||||||
if(sender.isPlayer())
|
Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () ->
|
||||||
{
|
{
|
||||||
sender.player().setGameMode(GameMode.SPECTATOR);
|
sender.sendMessage("Hotloading Active! Change any files and watch your changes appear as you load new chunks!");
|
||||||
}
|
|
||||||
|
|
||||||
onDone.run();
|
if(sender.isPlayer())
|
||||||
}, 0);
|
{
|
||||||
|
sender.player().setGameMode(GameMode.SPECTATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
onDone.run();
|
||||||
|
}, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close()
|
public void close()
|
||||||
|
@ -14,6 +14,9 @@ import org.bukkit.World;
|
|||||||
import org.bukkit.WorldCreator;
|
import org.bukkit.WorldCreator;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
import java.util.concurrent.atomic.AtomicReferenceArray;
|
||||||
|
|
||||||
public class CommandIrisCreate extends MortarCommand
|
public class CommandIrisCreate extends MortarCommand
|
||||||
{
|
{
|
||||||
@ -42,20 +45,80 @@ public class CommandIrisCreate extends MortarCommand
|
|||||||
String worldName = args[0];
|
String worldName = args[0];
|
||||||
String type = IrisSettings.get().getGenerator().getDefaultWorldType();
|
String type = IrisSettings.get().getGenerator().getDefaultWorldType();
|
||||||
long seed = 1337;
|
long seed = 1337;
|
||||||
int pregen = 0;
|
AtomicInteger pregen = new AtomicInteger(0);
|
||||||
boolean multiverse = Iris.linkMultiverseCore.supported();
|
boolean multiverse = Iris.linkMultiverseCore.supported();
|
||||||
|
|
||||||
for(String i : args)
|
for(String i : args)
|
||||||
{
|
{
|
||||||
type = i.startsWith("type=") ? i.split("\\Q=\\E")[1] : type;
|
type = i.startsWith("type=") ? i.split("\\Q=\\E")[1] : type;
|
||||||
seed = i.startsWith("seed=") ? Long.valueOf(i.split("\\Q=\\E")[1]) : seed;
|
seed = i.startsWith("seed=") ? Long.valueOf(i.split("\\Q=\\E")[1]) : seed;
|
||||||
pregen = i.startsWith("pregen=") ? getVal(i.split("\\Q=\\E")[1]) : pregen;
|
pregen.set(i.startsWith("pregen=") ? getVal(i.split("\\Q=\\E")[1]) : pregen.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
Iris.linkMultiverseCore.assignWorldType(worldName, type);
|
Iris.linkMultiverseCore.assignWorldType(worldName, type);
|
||||||
World world = null;
|
final AtomicReference<World> world = new AtomicReference<>();
|
||||||
IrisDimension dim;
|
IrisDimension dim;
|
||||||
File folder = new File(worldName);
|
File folder = new File(worldName);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Runnable onDone = () -> {
|
||||||
|
|
||||||
|
sender.sendMessage(worldName + " Spawn Area generated.");
|
||||||
|
sender.sendMessage("You must remember to either have multiverse installed or use the Bukkit method, otherwise the world will go corrupt!");
|
||||||
|
sender.sendMessage("Wiki: https://volmitsoftware.gitbook.io/iris/getting-started");
|
||||||
|
|
||||||
|
O<Boolean> b = new O<Boolean>();
|
||||||
|
b.set(true);
|
||||||
|
|
||||||
|
if(sender.isPlayer())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
sender.player().teleport(world.get().getSpawnLocation());
|
||||||
|
}
|
||||||
|
|
||||||
|
catch(Throwable e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pregen.get() > 0)
|
||||||
|
{
|
||||||
|
b.set(false);
|
||||||
|
sender.sendMessage("Pregenerating " + worldName + " " + pregen + " x " + pregen);
|
||||||
|
sender.sendMessage("Expect server lag during this time. Use '/iris pregen stop' to cancel");
|
||||||
|
|
||||||
|
new Pregenerator(world.get(), pregen.get(), () ->
|
||||||
|
{
|
||||||
|
b.set(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
World ww = world.get();
|
||||||
|
if (ww == null){
|
||||||
|
sender.sendMessage("World not created, can not finish");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
J.a(() ->
|
||||||
|
{
|
||||||
|
while(!b.get())
|
||||||
|
{
|
||||||
|
J.sleep(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () ->
|
||||||
|
{
|
||||||
|
ww.save();
|
||||||
|
sender.sendMessage("All Done!");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(multiverse)
|
if(multiverse)
|
||||||
{
|
{
|
||||||
dim = IrisDataManager.loadAnyDimension(type);
|
dim = IrisDataManager.loadAnyDimension(type);
|
||||||
@ -81,7 +144,8 @@ public class CommandIrisCreate extends MortarCommand
|
|||||||
command += " -g Iris:" + dim.getLoadKey();
|
command += " -g Iris:" + dim.getLoadKey();
|
||||||
sender.sendMessage("Delegating " + command);
|
sender.sendMessage("Delegating " + command);
|
||||||
Bukkit.dispatchCommand(sender, command);
|
Bukkit.dispatchCommand(sender, command);
|
||||||
world= Bukkit.getWorld(worldName);
|
world.set(Bukkit.getWorld(worldName));
|
||||||
|
onDone.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -99,92 +163,43 @@ public class CommandIrisCreate extends MortarCommand
|
|||||||
|
|
||||||
WorldCreator wc = new IrisWorldCreator().dimension(dim).name(worldName)
|
WorldCreator wc = new IrisWorldCreator().dimension(dim).name(worldName)
|
||||||
.productionMode().seed(seed).create();
|
.productionMode().seed(seed).create();
|
||||||
sender.sendMessage("Generating with " + Iris.getThreadCount() + " threads per chunk");
|
|
||||||
O<Boolean> done = new O<Boolean>();
|
|
||||||
done.set(false);
|
|
||||||
|
|
||||||
J.a(() ->
|
J.s(() -> {
|
||||||
{
|
sender.sendMessage("Generating with " + Iris.getThreadCount() + " threads per chunk");
|
||||||
double last = 0;
|
O<Boolean> done = new O<>();
|
||||||
int req = 800;
|
done.set(false);
|
||||||
while(!done.get())
|
|
||||||
|
J.a(() ->
|
||||||
{
|
{
|
||||||
boolean derp = false;
|
double last = 0;
|
||||||
double v = (double) ((IrisAccess) wc.generator()).getGenerated() / (double) req;
|
int req = 800;
|
||||||
|
while(!done.get())
|
||||||
if(last > v || v > 1)
|
|
||||||
{
|
{
|
||||||
derp = true;
|
boolean derp = false;
|
||||||
v = last;
|
double v = (double) ((IrisAccess) wc.generator()).getGenerated() / (double) req;
|
||||||
|
|
||||||
|
if(last > v || v > 1)
|
||||||
|
{
|
||||||
|
derp = true;
|
||||||
|
v = last;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
last = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.sendMessage("Generating " + Form.pc(v) + (derp ? " (Waiting on Server...)" : ""));
|
||||||
|
J.sleep(3000);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
else
|
world.set(wc.createWorld());
|
||||||
{
|
|
||||||
last = v;
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage("Generating " + Form.pc(v) + (derp ? " (Waiting on Server...)" : ""));
|
done.set(true);
|
||||||
J.sleep(3000);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
world = wc.createWorld();
|
|
||||||
|
|
||||||
done.set(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sender.sendMessage(worldName + " Spawn Area generated.");
|
|
||||||
sender.sendMessage("You must remember to either have multiverse installed or use the Bukkit method, otherwise the world will go corrupt!");
|
|
||||||
sender.sendMessage("Wiki: https://volmitsoftware.gitbook.io/iris/getting-started");
|
|
||||||
|
|
||||||
O<Boolean> b = new O<Boolean>();
|
|
||||||
b.set(true);
|
|
||||||
|
|
||||||
if(sender.isPlayer())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
sender.player().teleport(world.getSpawnLocation());
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable e)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(pregen > 0)
|
|
||||||
{
|
|
||||||
b.set(false);
|
|
||||||
sender.sendMessage("Pregenerating " + worldName + " " + pregen + " x " + pregen);
|
|
||||||
sender.sendMessage("Expect server lag during this time. Use '/iris pregen stop' to cancel");
|
|
||||||
|
|
||||||
new Pregenerator(world, pregen, () ->
|
|
||||||
{
|
|
||||||
b.set(true);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
World ww = world;
|
|
||||||
if (ww == null){
|
|
||||||
sender.sendMessage("World not created, can not finish");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
J.a(() ->
|
|
||||||
{
|
|
||||||
while(!b.get())
|
|
||||||
{
|
|
||||||
J.sleep(1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () ->
|
|
||||||
{
|
|
||||||
ww.save();
|
|
||||||
sender.sendMessage("All Done!");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,10 @@
|
|||||||
package com.volmit.iris.scaffold;
|
package com.volmit.iris.scaffold;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.manager.IrisDataManager;
|
import com.volmit.iris.manager.IrisDataManager;
|
||||||
import com.volmit.iris.object.IrisDimension;
|
import com.volmit.iris.object.IrisDimension;
|
||||||
import com.volmit.iris.scaffold.engine.EngineCompositeGenerator;
|
import com.volmit.iris.scaffold.engine.EngineCompositeGenerator;
|
||||||
import com.volmit.iris.util.Form;
|
|
||||||
import com.volmit.iris.util.J;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.World.Environment;
|
|
||||||
import org.bukkit.WorldCreator;
|
import org.bukkit.WorldCreator;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.generator.ChunkGenerator;
|
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class IrisWorldCreator
|
public class IrisWorldCreator
|
||||||
{
|
{
|
||||||
@ -22,7 +12,6 @@ public class IrisWorldCreator
|
|||||||
private boolean studio = false;
|
private boolean studio = false;
|
||||||
private String dimensionName = null;
|
private String dimensionName = null;
|
||||||
private long seed = 1337;
|
private long seed = 1337;
|
||||||
private boolean asyncPrepare = false;
|
|
||||||
|
|
||||||
public IrisWorldCreator()
|
public IrisWorldCreator()
|
||||||
{
|
{
|
||||||
@ -59,12 +48,6 @@ public class IrisWorldCreator
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IrisWorldCreator asyncPrepare()
|
|
||||||
{
|
|
||||||
this.asyncPrepare = true;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IrisWorldCreator productionMode()
|
public IrisWorldCreator productionMode()
|
||||||
{
|
{
|
||||||
this.studio = false;
|
this.studio = false;
|
||||||
@ -81,24 +64,6 @@ public class IrisWorldCreator
|
|||||||
.generator(g).seed(seed);
|
.generator(g).seed(seed);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createAsync(Consumer<WorldCreator> result)
|
|
||||||
{
|
|
||||||
EngineCompositeGenerator g = new EngineCompositeGenerator(dimensionName, !studio);
|
|
||||||
Environment env = findEnvironment();
|
|
||||||
g.prepareSpawnAsync(seed, name, env, 16, (progresss) -> {
|
|
||||||
for(Player i : Bukkit.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
i.sendMessage("Async Prepare 32x32: " + Form.pc(progresss, 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
}, () -> {
|
|
||||||
J.s(() -> result.accept(new WorldCreator(name)
|
|
||||||
.environment(env)
|
|
||||||
.generateStructures(true)
|
|
||||||
.generator(g).seed(seed)));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private World.Environment findEnvironment() {
|
private World.Environment findEnvironment() {
|
||||||
IrisDimension dim = IrisDataManager.loadAnyDimension(dimensionName);
|
IrisDimension dim = IrisDataManager.loadAnyDimension(dimensionName);
|
||||||
if(dim == null || dim.getEnvironment() == null)
|
if(dim == null || dim.getEnvironment() == null)
|
||||||
|
@ -77,40 +77,6 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void prepareSpawnAsync(long seed, String worldName, World.Environment env, int radius, Consumer<Double> progress, Runnable onComplete)
|
|
||||||
{
|
|
||||||
// TODO: WARNING HEIGHT
|
|
||||||
prepareSpawnAsync(256, seed, worldName, env, radius, progress, onComplete);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void prepareSpawnAsync(int worldHeight, long seed, String worldName, World.Environment env, int radius, Consumer<Double> progress, Runnable onComplete)
|
|
||||||
{
|
|
||||||
FakeWorld world = new FakeWorld(worldHeight, seed, new File(worldName), env);
|
|
||||||
world.setWorldName(worldName);
|
|
||||||
AtomicInteger generated = new AtomicInteger();
|
|
||||||
int total = (int) Math.pow(radius * 2, 2);
|
|
||||||
MultiBurst.burst.lazy(() -> {
|
|
||||||
progress.accept(0D);
|
|
||||||
BurstExecutor burst = MultiBurst.burst.burst(total);
|
|
||||||
new Spiraler(radius * 2, radius * 2, (x, z) -> burst.queue(() -> {
|
|
||||||
try {
|
|
||||||
precache(world, x, z);
|
|
||||||
generated.getAndIncrement();
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
})).drain();
|
|
||||||
burst.complete();
|
|
||||||
System.out.println("BURSTER FINISHED TOTAL IS " + total + " OF GENNED " + generated.get());
|
|
||||||
J.sleep(5000);
|
|
||||||
progress.accept(1D);
|
|
||||||
onComplete.run();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void hotload()
|
public void hotload()
|
||||||
{
|
{
|
||||||
if(isStudio())
|
if(isStudio())
|
||||||
@ -318,7 +284,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
|||||||
return dim;
|
return dim;
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void initialize(World world) {
|
public synchronized void initialize(World world) {
|
||||||
if (initialized.get()) {
|
if (initialized.get()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -353,6 +319,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public ChunkData generateChunkData(@NotNull World world, @NotNull Random ignored, int x, int z, @NotNull BiomeGrid biome) {
|
public ChunkData generateChunkData(@NotNull World world, @NotNull Random ignored, int x, int z, @NotNull BiomeGrid biome) {
|
||||||
|
long key = Cache.key(x, z);
|
||||||
TerrainChunk tc = TerrainChunk.create(world, biome);
|
TerrainChunk tc = TerrainChunk.create(world, biome);
|
||||||
generateChunkRawData(world, x, z, tc).run();
|
generateChunkRawData(world, x, z, tc).run();
|
||||||
return tc.getRaw();
|
return tc.getRaw();
|
||||||
@ -370,9 +337,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
|||||||
for(int j = 0; j < 32; j++)
|
for(int j = 0; j < 32; j++)
|
||||||
{
|
{
|
||||||
int jj = j;
|
int jj = j;
|
||||||
e.queue(() -> {
|
e.queue(() -> directWriteChunk(w, ii + mcaox, jj + mcaoz, writer));
|
||||||
directWriteChunk(w, ii + mcaox, jj + mcaoz, writer);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user