Performance

This commit is contained in:
Daniel Mills 2021-01-08 02:50:35 -05:00
parent b6f3e3a62f
commit 91e1b614f3
11 changed files with 33 additions and 95 deletions

View File

@ -9,8 +9,8 @@ import com.volmit.iris.manager.link.MultiverseCoreLink;
import com.volmit.iris.manager.link.MythicMobsLink;
import com.volmit.iris.nms.INMS;
import com.volmit.iris.object.IrisCompat;
import com.volmit.iris.scaffold.IrisWorldCreator;
import com.volmit.iris.scaffold.IrisWorlds;
import com.volmit.iris.scaffold.engine.EngineCompositeGenerator;
import com.volmit.iris.util.*;
import io.papermc.lib.PaperLib;
import org.bukkit.Bukkit;
@ -289,27 +289,20 @@ public class Iris extends VolmitPlugin
s.sendMessage(C.GREEN + "[" + C.DARK_GRAY + "Iris" + C.GREEN + "]" + C.GRAY + ": " + msg);
}
@Override
public ChunkGenerator getDefaultWorldGenerator(String worldName, String id)
{
//TODO: Support ID
try
String dimension = IrisSettings.get().getGenerator().getDefaultWorldType();
if(id != null && !id.isEmpty())
{
return INMS.get().createWorld(new IrisWorldCreator()
.productionMode()
.name(worldName)
.create()).getGenerator();
dimension = id;
Iris.info("Generator ID: " + id + " requested by bukkit/plugin. Assuming IrisDimension: " + id);
}
catch(Throwable e)
{
}
return new IrisWorldCreator()
.productionMode()
.name(worldName)
.create().generator();
return new EngineCompositeGenerator(dimension, true);
}
public static void msg(String string)

View File

@ -99,22 +99,19 @@ public class IrisEngine extends BlockPopulator implements Engine
}
@Override
public void generate(int x, int z, Hunk<BlockData> vblocks, Hunk<BlockData> postblocks, Hunk<Biome> vbiomes) {
public void generate(int x, int z, Hunk<BlockData> vblocks, Hunk<Biome> vbiomes) {
try
{
boolean structures = postblocks != null;
PrecisionStopwatch p = PrecisionStopwatch.start();
Hunk<BlockData> blocks = vblocks.synchronize().listen((xx,y,zz,t) -> catchBlockUpdates(x+xx,y+getMinHeight(),z+zz, t));
Hunk<BlockData> pblocks = structures ? postblocks.synchronize().listen((xx,y,zz,t) -> catchBlockUpdates(x+xx,y+getMinHeight(),z+zz, t)) : null;
Hunk<BlockData> fringe = structures ? Hunk.fringe(blocks, pblocks) : null;
getFramework().getEngineParallax().generateParallaxArea(x>>4, z>>4);
getFramework().getBiomeActuator().actuate(x, z, vbiomes);
getFramework().getTerrainActuator().actuate(x, z, blocks);
getFramework().getCaveModifier().modify(x, z, blocks);
getFramework().getRavineModifier().modify(x, z, blocks);
getFramework().getPostModifier().modify(x, z, blocks);
getFramework().getDecorantActuator().actuate(x, z, structures ? fringe : blocks);
getFramework().getEngineParallax().insertParallax(x, z, structures ? fringe : blocks);
getFramework().getDecorantActuator().actuate(x, z, blocks);
getFramework().getEngineParallax().insertParallax(x, z, blocks);
getFramework().getDepositModifier().modify(x, z, blocks);
getMetrics().getTotal().put(p.getMilliseconds());
}

View File

@ -212,7 +212,7 @@ public class IrisEngineCompound implements EngineCompound {
PrecisionStopwatch p = PrecisionStopwatch.start();
if(engines.length == 1 && !getEngine(0).getTarget().isInverted())
{
engines[0].generate(x, z, blocks, postblocks, biomes);
engines[0].generate(x, z, blocks, biomes);
}
else
@ -229,28 +229,16 @@ public class IrisEngineCompound implements EngineCompound {
int doffset = offset;
int height = engine.getTarget().getHeight();
Hunk<BlockData> cblock = Hunk.newArrayHunk(16, height, 16);
Hunk<BlockData> cpblock = structures ? Hunk.newArrayHunk(16, height, 16) : null;
Hunk<Biome> cbiome = Hunk.newArrayHunk(16, height, 16);
if(engine.getTarget().isInverted())
{
cblock = cblock.invertY();
cbiome = cbiome.invertY();
if(structures)
{
cpblock = cpblock.invertY();
}
}
engine.generate(x, z, cblock, cpblock, cbiome);
engine.generate(x, z, cblock, cbiome);
blocks.insert(0, doffset, 0, cblock);
if(structures)
{
postblocks.insert(0, doffset, 0, cpblock);
}
biomes.insert(0, doffset, 0, cbiome);
offset += height;
}

View File

@ -3,7 +3,6 @@ package com.volmit.iris.manager;
import com.google.gson.Gson;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.nms.INMS;
import com.volmit.iris.object.*;
import com.volmit.iris.scaffold.IrisWorldCreator;
import com.volmit.iris.scaffold.engine.IrisAccess;
@ -171,7 +170,7 @@ public class IrisProject
});
//@builder
World world = INMS.get().createWorld(c, false);
World world = c.createWorld();
Iris.linkMultiverseCore.removeFromConfig(world);
done.set(true);

View File

@ -1,9 +1,9 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.manager.link.MultiverseCoreLink;
import com.volmit.iris.nms.INMS;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.pregen.Pregenerator;
import com.volmit.iris.scaffold.IrisWorldCreator;
@ -40,7 +40,7 @@ public class CommandIrisCreate extends MortarCommand
}
String worldName = args[0];
String type = "overworld";
String type = IrisSettings.get().getGenerator().getDefaultWorldType();
long seed = 1337;
int pregen = 0;
boolean multiverse = Iris.linkMultiverseCore.supported();
@ -59,6 +59,13 @@ public class CommandIrisCreate extends MortarCommand
if(multiverse)
{
dim = IrisDataManager.loadAnyDimension(type);
if(dim == null)
{
sender.sendMessage("Cant find dimension type: " + type);
return true;
}
if(dim.getEnvironment() == null)
{
dim.setEnvironment(World.Environment.NORMAL);
@ -71,7 +78,7 @@ public class CommandIrisCreate extends MortarCommand
String command = "mv create " + worldName + " " + Iris.linkMultiverseCore.envName(dim.getEnvironment());
command += " -s " + seed;
command += " -g Iris";
command += " -g Iris:" + dim.getLoadKey();
sender.sendMessage("Delegating " + command);
Bukkit.dispatchCommand(sender, command);
world= Bukkit.getWorld(worldName);
@ -121,7 +128,7 @@ public class CommandIrisCreate extends MortarCommand
}
});
world = INMS.get().createWorld(wc, false);
world = wc.createWorld();
done.set(true);
}

View File

@ -1,38 +1,15 @@
package com.volmit.iris.nms;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.bukkit.block.Biome;
public interface INMSBinding
{
public INMSCreator getCreator();
public Object getBiomeBase(World world, Biome biome);
public Object getBiomeBase(Object registry, Biome biome);
public boolean isBukkit();
default World createWorld(WorldCreator creator)
{
return getCreator().createWorld(creator);
}
default World createWorld(WorldCreator creator, boolean loadSpawn)
{
if(!isBukkit())
{
if(creator.environment().equals(World.Environment.NORMAL))
{
return getCreator().createWorld(creator, loadSpawn);
}
return creator.createWorld();
}
return getCreator().createWorld(creator, loadSpawn);
}
int getBiomeId(Biome biome);
}

View File

@ -1,8 +1,6 @@
package com.volmit.iris.nms.v16_2;
import com.volmit.iris.nms.INMSBinding;
import com.volmit.iris.nms.INMSCreator;
import com.volmit.iris.scaffold.cache.AtomicCache;
import com.volmit.iris.util.KMap;
import net.minecraft.server.v1_16_R2.BiomeBase;
import net.minecraft.server.v1_16_R2.IRegistry;
@ -15,13 +13,6 @@ import org.bukkit.craftbukkit.v1_16_R2.block.CraftBlock;
public class NMSBinding16_2 implements INMSBinding
{
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
private final AtomicCache<INMSCreator> creator = new AtomicCache<>();
@Override
public INMSCreator getCreator()
{
return creator.aquire(NMSCreator16_2::new);
}
@Override
public Object getBiomeBase(World world, Biome biome)

View File

@ -1,8 +1,6 @@
package com.volmit.iris.nms.v16_3;
import com.volmit.iris.nms.INMSBinding;
import com.volmit.iris.nms.INMSCreator;
import com.volmit.iris.scaffold.cache.AtomicCache;
import com.volmit.iris.util.KMap;
import net.minecraft.server.v1_16_R3.BiomeBase;
import net.minecraft.server.v1_16_R3.IRegistry;
@ -14,13 +12,6 @@ import org.bukkit.craftbukkit.v1_16_R3.CraftWorld;
public class NMSBinding16_3 implements INMSBinding
{
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
private final AtomicCache<INMSCreator> creator = new AtomicCache<>();
@Override
public INMSCreator getCreator()
{
return creator.aquire(NMSCreator16_3::new);
}
@Override
public Object getBiomeBase(World world, Biome biome)

View File

@ -1,21 +1,11 @@
package com.volmit.iris.nms.v1X;
import com.volmit.iris.nms.INMSBinding;
import com.volmit.iris.nms.INMSCreator;
import com.volmit.iris.scaffold.cache.AtomicCache;
import org.bukkit.World;
import org.bukkit.block.Biome;
public class NMSBinding1X implements INMSBinding
{
private final AtomicCache<INMSCreator> creator = new AtomicCache<>();
@Override
public INMSCreator getCreator()
{
return creator.aquire(NMSCreator1X::new);
}
public Object getBiomeBase(World world, Biome biome)
{
return null;

View File

@ -20,6 +20,11 @@ public class IrisWorlds
public static boolean isIrisWorld(World world)
{
if(world == null)
{
return false;
}
if(provisioned.containsKey(world.getUID().toString()))
{
return true;

View File

@ -50,7 +50,7 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
public double modifyZ(double z);
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<BlockData> postblocks, Hunk<Biome> biomes);
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes);
public EngineMetrics getMetrics();