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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,38 +1,15 @@
package com.volmit.iris.nms; package com.volmit.iris.nms;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.bukkit.block.Biome; import org.bukkit.block.Biome;
public interface INMSBinding public interface INMSBinding
{ {
public INMSCreator getCreator();
public Object getBiomeBase(World world, Biome biome); public Object getBiomeBase(World world, Biome biome);
public Object getBiomeBase(Object registry, Biome biome); public Object getBiomeBase(Object registry, Biome biome);
public boolean isBukkit(); 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); int getBiomeId(Biome biome);
} }

View File

@ -1,8 +1,6 @@
package com.volmit.iris.nms.v16_2; package com.volmit.iris.nms.v16_2;
import com.volmit.iris.nms.INMSBinding; 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 com.volmit.iris.util.KMap;
import net.minecraft.server.v1_16_R2.BiomeBase; import net.minecraft.server.v1_16_R2.BiomeBase;
import net.minecraft.server.v1_16_R2.IRegistry; 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 public class NMSBinding16_2 implements INMSBinding
{ {
private final KMap<Biome, Object> baseBiomeCache = new KMap<>(); 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 @Override
public Object getBiomeBase(World world, Biome biome) public Object getBiomeBase(World world, Biome biome)

View File

@ -1,8 +1,6 @@
package com.volmit.iris.nms.v16_3; package com.volmit.iris.nms.v16_3;
import com.volmit.iris.nms.INMSBinding; 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 com.volmit.iris.util.KMap;
import net.minecraft.server.v1_16_R3.BiomeBase; import net.minecraft.server.v1_16_R3.BiomeBase;
import net.minecraft.server.v1_16_R3.IRegistry; 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 public class NMSBinding16_3 implements INMSBinding
{ {
private final KMap<Biome, Object> baseBiomeCache = new KMap<>(); 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 @Override
public Object getBiomeBase(World world, Biome biome) public Object getBiomeBase(World world, Biome biome)

View File

@ -1,21 +1,11 @@
package com.volmit.iris.nms.v1X; package com.volmit.iris.nms.v1X;
import com.volmit.iris.nms.INMSBinding; 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.World;
import org.bukkit.block.Biome; import org.bukkit.block.Biome;
public class NMSBinding1X implements INMSBinding 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) public Object getBiomeBase(World world, Biome biome)
{ {
return null; return null;

View File

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

View File

@ -50,7 +50,7 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
public double modifyZ(double z); 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(); public EngineMetrics getMetrics();