From 91e1b614f3fb1fb6c3cf9814887612208c73e641 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Fri, 8 Jan 2021 02:50:35 -0500 Subject: [PATCH] Performance --- src/main/java/com/volmit/iris/Iris.java | 25 +++++++------------ .../com/volmit/iris/generator/IrisEngine.java | 9 +++---- .../iris/generator/IrisEngineCompound.java | 16 ++---------- .../com/volmit/iris/manager/IrisProject.java | 3 +-- .../manager/command/CommandIrisCreate.java | 15 ++++++++--- .../java/com/volmit/iris/nms/INMSBinding.java | 25 +------------------ .../volmit/iris/nms/v16_2/NMSBinding16_2.java | 9 ------- .../volmit/iris/nms/v16_3/NMSBinding16_3.java | 9 ------- .../com/volmit/iris/nms/v1X/NMSBinding1X.java | 10 -------- .../com/volmit/iris/scaffold/IrisWorlds.java | 5 ++++ .../volmit/iris/scaffold/engine/Engine.java | 2 +- 11 files changed, 33 insertions(+), 95 deletions(-) diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index 0ca049413..6e7a9eb72 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -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) diff --git a/src/main/java/com/volmit/iris/generator/IrisEngine.java b/src/main/java/com/volmit/iris/generator/IrisEngine.java index 514179c01..8564161cb 100644 --- a/src/main/java/com/volmit/iris/generator/IrisEngine.java +++ b/src/main/java/com/volmit/iris/generator/IrisEngine.java @@ -99,22 +99,19 @@ public class IrisEngine extends BlockPopulator implements Engine } @Override - public void generate(int x, int z, Hunk vblocks, Hunk postblocks, Hunk vbiomes) { + public void generate(int x, int z, Hunk vblocks, Hunk vbiomes) { try { - boolean structures = postblocks != null; PrecisionStopwatch p = PrecisionStopwatch.start(); Hunk blocks = vblocks.synchronize().listen((xx,y,zz,t) -> catchBlockUpdates(x+xx,y+getMinHeight(),z+zz, t)); - Hunk pblocks = structures ? postblocks.synchronize().listen((xx,y,zz,t) -> catchBlockUpdates(x+xx,y+getMinHeight(),z+zz, t)) : null; - Hunk 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()); } diff --git a/src/main/java/com/volmit/iris/generator/IrisEngineCompound.java b/src/main/java/com/volmit/iris/generator/IrisEngineCompound.java index 5793914f8..958274a50 100644 --- a/src/main/java/com/volmit/iris/generator/IrisEngineCompound.java +++ b/src/main/java/com/volmit/iris/generator/IrisEngineCompound.java @@ -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 cblock = Hunk.newArrayHunk(16, height, 16); - Hunk cpblock = structures ? Hunk.newArrayHunk(16, height, 16) : null; Hunk 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; } diff --git a/src/main/java/com/volmit/iris/manager/IrisProject.java b/src/main/java/com/volmit/iris/manager/IrisProject.java index 288e8eb53..c871ab691 100644 --- a/src/main/java/com/volmit/iris/manager/IrisProject.java +++ b/src/main/java/com/volmit/iris/manager/IrisProject.java @@ -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); diff --git a/src/main/java/com/volmit/iris/manager/command/CommandIrisCreate.java b/src/main/java/com/volmit/iris/manager/command/CommandIrisCreate.java index 2a98ca8f0..bd89de72d 100644 --- a/src/main/java/com/volmit/iris/manager/command/CommandIrisCreate.java +++ b/src/main/java/com/volmit/iris/manager/command/CommandIrisCreate.java @@ -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); } diff --git a/src/main/java/com/volmit/iris/nms/INMSBinding.java b/src/main/java/com/volmit/iris/nms/INMSBinding.java index 80e33ff9a..2a2d616a3 100644 --- a/src/main/java/com/volmit/iris/nms/INMSBinding.java +++ b/src/main/java/com/volmit/iris/nms/INMSBinding.java @@ -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); } diff --git a/src/main/java/com/volmit/iris/nms/v16_2/NMSBinding16_2.java b/src/main/java/com/volmit/iris/nms/v16_2/NMSBinding16_2.java index a19c457eb..caae4a41e 100644 --- a/src/main/java/com/volmit/iris/nms/v16_2/NMSBinding16_2.java +++ b/src/main/java/com/volmit/iris/nms/v16_2/NMSBinding16_2.java @@ -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 baseBiomeCache = new KMap<>(); - private final AtomicCache creator = new AtomicCache<>(); - - @Override - public INMSCreator getCreator() - { - return creator.aquire(NMSCreator16_2::new); - } @Override public Object getBiomeBase(World world, Biome biome) diff --git a/src/main/java/com/volmit/iris/nms/v16_3/NMSBinding16_3.java b/src/main/java/com/volmit/iris/nms/v16_3/NMSBinding16_3.java index c79b0b661..c13209766 100644 --- a/src/main/java/com/volmit/iris/nms/v16_3/NMSBinding16_3.java +++ b/src/main/java/com/volmit/iris/nms/v16_3/NMSBinding16_3.java @@ -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 baseBiomeCache = new KMap<>(); - private final AtomicCache creator = new AtomicCache<>(); - - @Override - public INMSCreator getCreator() - { - return creator.aquire(NMSCreator16_3::new); - } @Override public Object getBiomeBase(World world, Biome biome) diff --git a/src/main/java/com/volmit/iris/nms/v1X/NMSBinding1X.java b/src/main/java/com/volmit/iris/nms/v1X/NMSBinding1X.java index 5be467e47..290f98e8c 100644 --- a/src/main/java/com/volmit/iris/nms/v1X/NMSBinding1X.java +++ b/src/main/java/com/volmit/iris/nms/v1X/NMSBinding1X.java @@ -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 creator = new AtomicCache<>(); - - @Override - public INMSCreator getCreator() - { - return creator.aquire(NMSCreator1X::new); - } - public Object getBiomeBase(World world, Biome biome) { return null; diff --git a/src/main/java/com/volmit/iris/scaffold/IrisWorlds.java b/src/main/java/com/volmit/iris/scaffold/IrisWorlds.java index 58e9bb17d..ecb719545 100644 --- a/src/main/java/com/volmit/iris/scaffold/IrisWorlds.java +++ b/src/main/java/com/volmit/iris/scaffold/IrisWorlds.java @@ -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; diff --git a/src/main/java/com/volmit/iris/scaffold/engine/Engine.java b/src/main/java/com/volmit/iris/scaffold/engine/Engine.java index 29dbbe280..70da17fb7 100644 --- a/src/main/java/com/volmit/iris/scaffold/engine/Engine.java +++ b/src/main/java/com/volmit/iris/scaffold/engine/Engine.java @@ -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 blocks, Hunk postblocks, Hunk biomes); + public void generate(int x, int z, Hunk blocks, Hunk biomes); public EngineMetrics getMetrics();