From 2ac84f14be4399585791458721acc01072cb21d1 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 23 Sep 2021 17:06:48 +0200 Subject: [PATCH 01/24] Just so they don't go on multiple lines :) --- src/main/java/com/volmit/iris/core/ServerConfigurator.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/ServerConfigurator.java b/src/main/java/com/volmit/iris/core/ServerConfigurator.java index 403a717e8..a9a84bc0c 100644 --- a/src/main/java/com/volmit/iris/core/ServerConfigurator.java +++ b/src/main/java/com/volmit/iris/core/ServerConfigurator.java @@ -224,7 +224,9 @@ public class ServerConfigurator { public static void restart() { J.s(() -> { - Iris.warn("New data pack entries have been installed in Iris! Restarting server! (You can disable this auto restart in iris settings). This will only happen when your pack changes (updates/first time setup)"); + Iris.warn("New data pack entries have been installed in Iris! Restarting server!"); + Iris.warn("This will only happen when your pack changes (updates/first time setup)"); + Iris.warn("(You can disable this auto restart in iris settings)"); J.s(() -> { Iris.warn("Looks like the restart command diddn't work. Stopping the server instead!"); Bukkit.shutdown(); @@ -268,7 +270,8 @@ public class ServerConfigurator { } if (warn) { - Iris.error("The Pack " + dimension.getLoadKey() + " is INCAPABLE of generating custom biomes, restart your server before generating with this pack!"); + Iris.error("The Pack " + dimension.getLoadKey() + " is INCAPABLE of generating custom biomes"); + Iris.error("If not done automatically, restart your server before generating with this pack!"); } return !warn; From ef2fe6a775bc76278e08b7b2c5f77636b4a20560 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Thu, 23 Sep 2021 17:07:40 +0200 Subject: [PATCH 02/24] Two more --- src/main/java/com/volmit/iris/core/ServerConfigurator.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/ServerConfigurator.java b/src/main/java/com/volmit/iris/core/ServerConfigurator.java index a9a84bc0c..117678f9f 100644 --- a/src/main/java/com/volmit/iris/core/ServerConfigurator.java +++ b/src/main/java/com/volmit/iris/core/ServerConfigurator.java @@ -65,7 +65,8 @@ public class ServerConfigurator { if(tt < TimeUnit.MINUTES.toSeconds(5)) { - Iris.warn("Updating spigot.yml timeout-time: " + tt + " -> " + TimeUnit.MINUTES.toSeconds(5) + " (5 minutes). You can disable this change (autoconfigureServer) in Iris settings, then change back the value."); + Iris.warn("Updating spigot.yml timeout-time: " + tt + " -> " + TimeUnit.MINUTES.toSeconds(5) + " (5 minutes)"); + Iris.warn("You can disable this change (autoconfigureServer) in Iris settings, then change back the value."); f.set("settings.timeout-time", TimeUnit.MINUTES.toSeconds(5)); f.save(spigotConfig); } @@ -79,7 +80,8 @@ public class ServerConfigurator { if(tt < TimeUnit.MINUTES.toMillis(3)) { - Iris.warn("Updating paper.yml watchdog early-warning-delay: " + tt + " -> " + TimeUnit.MINUTES.toMillis(3) + " (3 minutes). You can disable this change (autoconfigureServer) in Iris settings, then change back the value."); + Iris.warn("Updating paper.yml watchdog early-warning-delay: " + tt + " -> " + TimeUnit.MINUTES.toMillis(3) + " (3 minutes)"); + Iris.warn("You can disable this change (autoconfigureServer) in Iris settings, then change back the value."); f.set("settings.watchdog.early-warning-delay", TimeUnit.MINUTES.toMillis(3)); f.save(spigotConfig); } From 8ef75f7c34554fd255dcd6f922df8a005f945f8e Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 24 Sep 2021 09:52:18 +0200 Subject: [PATCH 03/24] option picking auto-pick nr1 for consoles Consoles cannot pick options, so we select the first option for them. --- .../iris/util/decree/virtual/VirtualDecreeCommand.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java b/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java index 03f905231..eaadf8d43 100644 --- a/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java +++ b/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java @@ -518,6 +518,13 @@ public class VirtualDecreeCommand { } private String pickValidOption(VolmitSender sender, KList validOptions, DecreeParameterHandler handler, String name, String type) { + + if (!sender.isPlayer()) { + sender.sendMessage(C.YELLOW + "There were multiple (" + validOptions.size() + ") options for '" + name + "' (of type '" + type + "'), but we selected '" + handler.toStringForce(validOptions.get(0)) + "'"); + return handler.toStringForce(validOptions.get(0)); + } + + sender.sendHeader("Pick a " + name + " (" + type + ")"); sender.sendMessageRaw("This query will expire in 15 seconds."); String password = UUID.randomUUID().toString().replaceAll("\\Q-\\E", ""); From 6ce37944a72cf7ae9f1a07c45c0a6fad61eda7c3 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 24 Sep 2021 11:00:27 +0200 Subject: [PATCH 04/24] This is better --- .../volmit/iris/core/service/CommandSVC.java | 18 ++++++++++ .../decree/virtual/VirtualDecreeCommand.java | 36 ++++++++++--------- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/service/CommandSVC.java b/src/main/java/com/volmit/iris/core/service/CommandSVC.java index 63fe2f0de..371fa3379 100644 --- a/src/main/java/com/volmit/iris/core/service/CommandSVC.java +++ b/src/main/java/com/volmit/iris/core/service/CommandSVC.java @@ -31,11 +31,14 @@ import com.volmit.iris.util.plugin.VolmitSender; import com.volmit.iris.util.scheduling.J; import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.server.ServerCommandEvent; +import java.util.Locale; import java.util.concurrent.CompletableFuture; public class CommandSVC implements IrisService, DecreeSystem { private final KMap> futures = new KMap<>(); + private CompletableFuture consoleFuture = null; private final transient AtomicCache commandCache = new AtomicCache<>(); @Override @@ -70,6 +73,17 @@ public class CommandSVC implements IrisService, DecreeSystem { } } + @EventHandler + public void on(ServerCommandEvent e) { + if (consoleFuture != null && !consoleFuture.isCancelled() && !consoleFuture.isDone()) { + if (!e.getCommand().contains(" ")) { + String pick = e.getCommand().trim().toLowerCase(Locale.ROOT); + consoleFuture.complete(pick); + e.setCancelled(true); + } + } + } + @Override public VirtualDecreeCommand getRoot() { return commandCache.aquireNastyPrint(() -> VirtualDecreeCommand.createRoot(new CommandIris())); @@ -78,4 +92,8 @@ public class CommandSVC implements IrisService, DecreeSystem { public void post(String password, CompletableFuture future) { futures.put(password, future); } + + public void postConsole(CompletableFuture future) { + consoleFuture = future; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java b/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java index eaadf8d43..02ef2e15d 100644 --- a/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java +++ b/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java @@ -34,6 +34,7 @@ import com.volmit.iris.util.decree.exceptions.DecreeParsingException; import com.volmit.iris.util.decree.exceptions.DecreeWhichException; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; +import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.CommandDummy; import com.volmit.iris.util.plugin.VolmitSender; import com.volmit.iris.util.scheduling.ChronoLatch; @@ -518,13 +519,6 @@ public class VirtualDecreeCommand { } private String pickValidOption(VolmitSender sender, KList validOptions, DecreeParameterHandler handler, String name, String type) { - - if (!sender.isPlayer()) { - sender.sendMessage(C.YELLOW + "There were multiple (" + validOptions.size() + ") options for '" + name + "' (of type '" + type + "'), but we selected '" + handler.toStringForce(validOptions.get(0)) + "'"); - return handler.toStringForce(validOptions.get(0)); - } - - sender.sendHeader("Pick a " + name + " (" + type + ")"); sender.sendMessageRaw("This query will expire in 15 seconds."); String password = UUID.randomUUID().toString().replaceAll("\\Q-\\E", ""); @@ -535,18 +529,28 @@ public class VirtualDecreeCommand { m++; } - CompletableFuture future = new CompletableFuture<>(); - Iris.service(CommandSVC.class).post(password, future); + if (sender.isPlayer()) { + CompletableFuture future = new CompletableFuture<>(); + Iris.service(CommandSVC.class).post(password, future); - if (IrisSettings.get().getGeneral().isCommandSounds() && sender.isPlayer()) { - (sender.player()).playSound((sender.player()).getLocation(), Sound.BLOCK_AMETHYST_CLUSTER_BREAK, 0.77f, 0.65f); - (sender.player()).playSound((sender.player()).getLocation(), Sound.BLOCK_BEACON_DEACTIVATE, 0.125f, 1.99f); - } + if (IrisSettings.get().getGeneral().isCommandSounds()) { + (sender.player()).playSound((sender.player()).getLocation(), Sound.BLOCK_AMETHYST_CLUSTER_BREAK, 0.77f, 0.65f); + (sender.player()).playSound((sender.player()).getLocation(), Sound.BLOCK_BEACON_DEACTIVATE, 0.125f, 1.99f); + } - try { - return future.get(15, TimeUnit.SECONDS); - } catch (InterruptedException | ExecutionException | TimeoutException e) { + try { + return future.get(15, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException ignored) { + } + } else { + CompletableFuture future = new CompletableFuture<>(); + Iris.service(CommandSVC.class).postConsole(future); + try { + return future.get(15, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException ignored) { + + } } return null; From b0060bcb82dc17cc7f2a13cc5a688998e8ed280a Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 08:22:13 -0400 Subject: [PATCH 05/24] More settings --- .../com/volmit/iris/core/IrisSettings.java | 22 +++- .../volmit/iris/engine/IrisWorldManager.java | 105 +++++++++++------- 2 files changed, 85 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/IrisSettings.java b/src/main/java/com/volmit/iris/core/IrisSettings.java index 318c5b5ae..bbe1c0787 100644 --- a/src/main/java/com/volmit/iris/core/IrisSettings.java +++ b/src/main/java/com/volmit/iris/core/IrisSettings.java @@ -25,6 +25,8 @@ import com.volmit.iris.util.json.JSONException; import com.volmit.iris.util.json.JSONObject; import com.volmit.iris.util.plugin.VolmitSender; import lombok.Data; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; import java.io.IOException; @@ -34,13 +36,13 @@ import java.io.IOException; public class IrisSettings { public static transient IrisSettings settings; private IrisSettingsGeneral general = new IrisSettingsGeneral(); + private IrisSettingsWorld world = new IrisSettingsWorld(); private IrisSettingsGUI gui = new IrisSettingsGUI(); private IrisSettingsAutoconfiguration autoConfiguration = new IrisSettingsAutoconfiguration(); private IrisSettingsGenerator generator = new IrisSettingsGenerator(); private IrisSettingsConcurrency concurrency = new IrisSettingsConcurrency(); private IrisSettingsStudio studio = new IrisSettingsStudio(); private IrisSettingsPerformance performance = new IrisSettingsPerformance(); - public static int getThreadCount(int c) { return switch (c) { case -1, -2, -4 -> Runtime.getRuntime().availableProcessors() / -c; @@ -56,6 +58,24 @@ public class IrisSettings { public boolean autoRestartOnCustomBiomeInstall = true; } + @Data + public static class IrisAsyncTeleport { + public boolean enabled = true; + public int loadViewDistance = 2; + public boolean urgent = false; + } + + @Data + public static class IrisSettingsWorld { + public IrisAsyncTeleport asyncTeleport = new IrisAsyncTeleport(); + public boolean postLoadBlockUpdates = true; + public boolean anbientEntitySpawningSystem = true; + public long asyncTickIntervalMS = 700; + public double targetSpawnEntitiesPerChunk = 0.95; + public boolean markerEntitySpawningSystem = true; + public boolean effectSystem = true; + } + @Data public static class IrisSettingsConcurrency { public int parallelism = -1; diff --git a/src/main/java/com/volmit/iris/engine/IrisWorldManager.java b/src/main/java/com/volmit/iris/engine/IrisWorldManager.java index d3cddf856..a09e055da 100644 --- a/src/main/java/com/volmit/iris/engine/IrisWorldManager.java +++ b/src/main/java/com/volmit/iris/engine/IrisWorldManager.java @@ -133,6 +133,11 @@ public class IrisWorldManager extends EngineAssignedWorldManager { getEngine().getWorld().tryGetRealWorld(); } + if(!IrisSettings.get().getWorld().isMarkerEntitySpawningSystem() && !IrisSettings.get().getWorld().isAnbientEntitySpawningSystem()) + { + return 3000; + } + if (getEngine().getWorld().hasRealWorld()) { if (getEngine().getWorld().getPlayers().isEmpty()) { return 5000; @@ -179,7 +184,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager { onAsyncTick(); } - return 700; + return IrisSettings.get().getWorld().getAsyncTickIntervalMS(); } }; looper.setPriority(Thread.MIN_PRIORITY); @@ -195,22 +200,30 @@ public class IrisWorldManager extends EngineAssignedWorldManager { for (int x = -r; x <= r; x++) { for (int z = -r; z <= r; z++) { if (c.getWorld().isChunkLoaded(c.getX() + x, c.getZ() + z) && Chunks.isSafe(getEngine().getWorld().realWorld(), c.getX() + x, c.getZ() + z)) { - getEngine().updateChunk(c.getWorld().getChunkAt(c.getX() + x, c.getZ() + z)); - Chunk cx = getEngine().getWorld().realWorld().getChunkAt(c.getX() + x, c.getZ() + z); - int finalX = c.getX() + x; - int finalZ = c.getZ() + z; - J.a(() -> getMantle().raiseFlag(finalX, finalZ, MantleFlag.INITIAL_SPAWNED_MARKER, - () -> { - J.a(() -> spawnIn(cx, true), RNG.r.i(5, 200)); - getSpawnersFromMarkers(cx).forEach((block, spawners) -> { - if (spawners.isEmpty()) { - return; - } - IrisSpawner s = new KList<>(spawners).getRandom(); - spawn(block, s, true); - }); - })); + if(IrisSettings.get().getWorld().isPostLoadBlockUpdates()) + { + getEngine().updateChunk(c.getWorld().getChunkAt(c.getX() + x, c.getZ() + z)); + } + + if(IrisSettings.get().getWorld().isMarkerEntitySpawningSystem()) + { + Chunk cx = getEngine().getWorld().realWorld().getChunkAt(c.getX() + x, c.getZ() + z); + int finalX = c.getX() + x; + int finalZ = c.getZ() + z; + J.a(() -> getMantle().raiseFlag(finalX, finalZ, MantleFlag.INITIAL_SPAWNED_MARKER, + () -> { + J.a(() -> spawnIn(cx, true), RNG.r.i(5, 200)); + getSpawnersFromMarkers(cx).forEach((block, spawners) -> { + if (spawners.isEmpty()) { + return; + } + + IrisSpawner s = new KList<>(spawners).getRandom(); + spawn(block, s, true); + }); + })); + } } } } @@ -231,12 +244,12 @@ public class IrisWorldManager extends EngineAssignedWorldManager { if (!getEngine().getWorld().hasRealWorld()) { Iris.debug("Can't spawn. No real world"); - J.sleep(10000); + J.sleep(5000); return false; } double epx = getEntitySaturation(); - if (epx > 1) { + if (epx > IrisSettings.get().getWorld().getTargetSpawnEntitiesPerChunk()) { Iris.debug("Can't spawn. The entity per chunk ratio is at " + Form.pc(epx, 2) + " > 100% (total entities " + entityCount + ")"); J.sleep(5000); return false; @@ -295,10 +308,11 @@ public class IrisWorldManager extends EngineAssignedWorldManager { energy += 1.2; } - IrisBiome biome = getEngine().getSurfaceBiome(c); - IrisRegion region = getEngine().getRegion(c); //@builder - IrisEntitySpawn v = spawnRandomly(Stream.concat(getData().getSpawnerLoader() + IrisBiome biome = IrisSettings.get().getWorld().isAnbientEntitySpawningSystem() + ? getEngine().getSurfaceBiome(c) : null; + IrisEntitySpawn v = IrisSettings.get().getWorld().isAnbientEntitySpawningSystem() + ? spawnRandomly(Stream.concat(getData().getSpawnerLoader() .loadAll(getDimension().getEntitySpawners()) .shuffleCopy(RNG.r).stream() .filter(this::canSpawn) @@ -313,18 +327,22 @@ public class IrisWorldManager extends EngineAssignedWorldManager { .shuffleCopy(RNG.r).stream().filter(this::canSpawn) .flatMap((i) -> stream(i, initial)))) .collect(Collectors.toList())) - .popRandom(RNG.r); + .popRandom(RNG.r) : null; + //@done - getSpawnersFromMarkers(c).forEach((block, spawners) -> { - if (spawners.isEmpty()) { - return; - } + if(IrisSettings.get().getWorld().isMarkerEntitySpawningSystem()) + { + getSpawnersFromMarkers(c).forEach((block, spawners) -> { + if (spawners.isEmpty()) { + return; + } - IrisSpawner s = new KList<>(spawners).getRandom(); - spawn(block, s, false); - J.a(() -> getMantle().raiseFlag(c.getX(), c.getZ(), MantleFlag.INITIAL_SPAWNED_MARKER, - () -> spawn(block, s, true))); - }); + IrisSpawner s = new KList<>(spawners).getRandom(); + spawn(block, s, false); + J.a(() -> getMantle().raiseFlag(c.getX(), c.getZ(), MantleFlag.INITIAL_SPAWNED_MARKER, + () -> spawn(block, s, true))); + }); + } if (v != null && v.getReferenceSpawner() != null) { int maxEntCount = v.getReferenceSpawner().getMaxEntitiesPerChunk(); @@ -343,7 +361,6 @@ public class IrisWorldManager extends EngineAssignedWorldManager { J.s(() -> spawn(c, v)); } } - //@done } private void spawn(Chunk c, IrisEntitySpawn i) { @@ -521,18 +538,20 @@ public class IrisWorldManager extends EngineAssignedWorldManager { @Override public void teleportAsync(PlayerTeleportEvent e) { - e.setCancelled(true); - warmupAreaAsync(e.getPlayer(), e.getTo(), () - -> J.s(() -> { - ignoreTP.set(true); - e.getPlayer().teleport(e.getTo(), e.getCause()); - ignoreTP.set(false); - })); + if(IrisSettings.get().getWorld().getAsyncTeleport().isEnabled()) + { + e.setCancelled(true); + warmupAreaAsync(e.getPlayer(), e.getTo(), () -> J.s(() -> { + ignoreTP.set(true); + e.getPlayer().teleport(e.getTo(), e.getCause()); + ignoreTP.set(false); + })); + } } private void warmupAreaAsync(Player player, Location to, Runnable r) { J.a(() -> { - int viewDistance = 3; + int viewDistance = IrisSettings.get().getWorld().getAsyncTeleport().getLoadViewDistance(); KList> futures = new KList<>(); for(int i = -viewDistance; i <= viewDistance; i++) { @@ -547,7 +566,11 @@ public class IrisWorldManager extends EngineAssignedWorldManager { continue; } - futures.add(MultiBurst.burst.completeValue(() -> PaperLib.getChunkAtAsync(to.getWorld(), (to.getBlockX() >> 4) + finalI, (to.getBlockZ() >> 4) + finalJ, true).get())); + futures.add(MultiBurst.burst.completeValue(() + -> PaperLib.getChunkAtAsync(to.getWorld(), + (to.getBlockX() >> 4) + finalI, + (to.getBlockZ() >> 4) + finalJ, + true, IrisSettings.get().getWorld().getAsyncTeleport().isUrgent()).get())); } } From d2c373b27d502f95a439db3d16c56ca393b08f51 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 08:40:35 -0400 Subject: [PATCH 06/24] Force stop bursters if longer than 7s --- .../volmit/iris/util/parallel/MultiBurst.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/util/parallel/MultiBurst.java b/src/main/java/com/volmit/iris/util/parallel/MultiBurst.java index 17a671eaf..4559dc672 100644 --- a/src/main/java/com/volmit/iris/util/parallel/MultiBurst.java +++ b/src/main/java/com/volmit/iris/util/parallel/MultiBurst.java @@ -23,6 +23,7 @@ import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.service.PreservationSVC; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.math.M; +import com.volmit.iris.util.scheduling.PrecisionStopwatch; import java.util.List; import java.util.concurrent.Callable; @@ -151,9 +152,26 @@ public class MultiBurst { public void close() { if (service != null) { service.shutdown(); + PrecisionStopwatch p = PrecisionStopwatch.start(); try { - while (!service.awaitTermination(10, TimeUnit.SECONDS)) { + while (!service.awaitTermination(1, TimeUnit.SECONDS)) { Iris.info("Still waiting to shutdown burster..."); + if(p.getMilliseconds() > 7000) + { + Iris.warn("Forcing Shutdown..."); + + try + { + service.shutdownNow(); + } + + catch(Throwable e) + { + + } + + break; + } } } catch (Throwable e) { e.printStackTrace(); From adb2a32fda1a9dec861664a1eb8af7e6544fdb7f Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 08:45:28 -0400 Subject: [PATCH 07/24] Fix index OOB for caves / mca cap fixes #655 --- .../engine/modifier/IrisCarveModifier.java | 37 ++++++++++--------- .../com/volmit/iris/util/nbt/mca/Chunk.java | 15 +++++++- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java b/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java index d711512ab..b03dac036 100644 --- a/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java +++ b/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java @@ -237,24 +237,27 @@ public class IrisCarveModifier extends EngineAssignedModifier { blocks = biome.generateCeilingLayers(getDimension(), xx, zz, rng, 3, zone.ceiling, getData(), getComplex()); - for (int i = 0; i < zone.ceiling + 1; i++) { - if (!blocks.hasIndex(i)) { - break; + if(zone.ceiling + 1 < mantle.getWorldHeight()) + { + for (int i = 0; i < zone.ceiling + 1; i++) { + if (!blocks.hasIndex(i)) { + break; + } + + BlockData b = blocks.get(i); + BlockData up = output.get(rx, zone.ceiling + i + 1, rz); + + if (!B.isSolid(up)) { + continue; + } + + if (B.isOre(up)) { + output.set(rx, zone.ceiling + i + 1, rz, B.toDeepSlateOre(up, b)); + continue; + } + + output.set(rx, zone.ceiling + i + 1, rz, b); } - - BlockData b = blocks.get(i); - BlockData up = output.get(rx, zone.ceiling + i + 1, rz); - - if (!B.isSolid(up)) { - continue; - } - - if (B.isOre(up)) { - output.set(rx, zone.ceiling + i + 1, rz, B.toDeepSlateOre(up, b)); - continue; - } - - output.set(rx, zone.ceiling + i + 1, rz, b); } } diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/Chunk.java b/src/main/java/com/volmit/iris/util/nbt/mca/Chunk.java index 801c95345..c2a3adc11 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/Chunk.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/Chunk.java @@ -253,7 +253,14 @@ public class Chunk { } public CompoundTag getBlockStateAt(int blockX, int blockY, int blockZ) { - Section section = sections.get(MCAUtil.blockToChunk(blockY)); + int s = MCAUtil.blockToChunk(blockY); + + if(sections.length() <= s) + { + return null; + } + + Section section = sections.get(s); if (section == null) { return null; } @@ -274,6 +281,12 @@ public class Chunk { */ public void setBlockStateAt(int blockX, int blockY, int blockZ, CompoundTag state, boolean cleanup) { int sectionIndex = MCAUtil.blockToChunk(blockY); + + if(sections.length() <= sectionIndex) + { + return; + } + Section section = sections.get(sectionIndex); if (section == null) { section = Section.newSection(); From aee42cdeccdc6eeb0823e531a101650a48dec7d4 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 08:55:10 -0400 Subject: [PATCH 08/24] Fix issues with decorants on objects fixes #660 --- .../java/com/volmit/iris/engine/mode/ModeOverworld.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java b/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java index 5d98d0ec5..07269ca3d 100644 --- a/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java +++ b/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java @@ -49,11 +49,9 @@ public class ModeOverworld extends IrisEngineMode implements EngineMode { )); registerStage((x, z, k, p, m) -> cave.modify(x >> 4, z >> 4, k, m)); registerStage((x, z, k, p, m) -> deposit.modify(x, z, k, m)); - registerStage(burst( - (x, z, k, p, m) -> decorant.actuate(x, z, k, m), - (x, z, k, p, m) -> post.modify(x, z, k, m), - (x, z, K, p, m) -> getMantle().insertMatter(x >> 4, z >> 4, BlockData.class, K, m) - )); + registerStage((x, z, k, p, m) -> decorant.actuate(x, z, k, m)); + registerStage((x, z, k, p, m) -> post.modify(x, z, k, m)); + registerStage((x, z, K, p, m) -> getMantle().insertMatter(x >> 4, z >> 4, BlockData.class, K, m)); registerStage((x, z, k, p, m) -> perfection.modify(x, z, k, m)); } } From 4ba8ecd3fdb903fbff4b76207d88f26be3734950 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 08:55:19 -0400 Subject: [PATCH 09/24] Fix mode fail due to pres svc --- .../volmit/iris/core/service/PreservationSVC.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/service/PreservationSVC.java b/src/main/java/com/volmit/iris/core/service/PreservationSVC.java index d054619c7..8c44e4a51 100644 --- a/src/main/java/com/volmit/iris/core/service/PreservationSVC.java +++ b/src/main/java/com/volmit/iris/core/service/PreservationSVC.java @@ -32,14 +32,16 @@ import com.volmit.iris.util.scheduling.Looper; import com.volmit.iris.util.stream.utility.CachedStream2D; import java.util.Comparator; +import java.util.List; import java.util.Objects; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ExecutorService; public class PreservationSVC implements IrisService { - private final KList threads = new KList<>(); - private final KList services = new KList<>(); + private final List threads = new CopyOnWriteArrayList<>(); + private final List services = new CopyOnWriteArrayList<>(); private Looper dereferencer; - private final KList caches = new KList<>(); + private final List caches = new CopyOnWriteArrayList<>(); public void register(Thread t) { threads.add(t); @@ -79,8 +81,8 @@ public class PreservationSVC implements IrisService { public void dereference() { IrisContext.dereference(); IrisData.dereference(); - threads.removeWhere((i) -> !i.isAlive()); - services.removeWhere(ExecutorService::isShutdown); + threads.removeIf((i) -> !i.isAlive()); + services.removeIf(ExecutorService::isShutdown); updateCaches(); } @@ -129,7 +131,7 @@ public class PreservationSVC implements IrisService { public void updateCaches() { - caches.removeWhere(MeteredCache::isClosed); + caches.removeIf(MeteredCache::isClosed); } public void registerCache(MeteredCache cache) { From 67baf07efc3c8b52f30fa2dd5b4a61c0f5879a8c Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Sat, 25 Sep 2021 17:56:14 +0200 Subject: [PATCH 10/24] Make headless default --- src/main/java/com/volmit/iris/core/IrisSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/core/IrisSettings.java b/src/main/java/com/volmit/iris/core/IrisSettings.java index bbe1c0787..129a79ed1 100644 --- a/src/main/java/com/volmit/iris/core/IrisSettings.java +++ b/src/main/java/com/volmit/iris/core/IrisSettings.java @@ -120,7 +120,7 @@ public class IrisSettings { @Data public static class IrisSettingsGenerator { public String defaultWorldType = "overworld"; - public boolean headlessPregeneration = false; + public boolean headlessPregeneration = true; public int maxBiomeChildDepth = 4; public boolean preventLeafDecay = true; } From 333e158ca58c43904fc11b3cc4807ee31bca2af1 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 12:55:27 -0400 Subject: [PATCH 11/24] Bust the cache --- .../com/volmit/iris/engine/IrisComplex.java | 14 ++--- .../com/volmit/iris/engine/IrisEngine.java | 11 ---- .../com/volmit/iris/util/data/ChunkCache.java | 53 +++++++++++++++++++ .../volmit/iris/util/data/ComplexCache.java | 46 ++++++++++++++++ .../com/volmit/iris/util/data/Heafty.java | 24 +++++++++ .../com/volmit/iris/util/data/KCache.java | 20 +++++-- .../iris/util/stream/ProceduralStream.java | 9 ++-- .../util/stream/utility/CachedStream2D.java | 3 +- 8 files changed, 148 insertions(+), 32 deletions(-) create mode 100644 src/main/java/com/volmit/iris/util/data/ChunkCache.java create mode 100644 src/main/java/com/volmit/iris/util/data/ComplexCache.java create mode 100644 src/main/java/com/volmit/iris/util/data/Heafty.java diff --git a/src/main/java/com/volmit/iris/engine/IrisComplex.java b/src/main/java/com/volmit/iris/engine/IrisComplex.java index 9706bd379..93a79d6ec 100644 --- a/src/main/java/com/volmit/iris/engine/IrisComplex.java +++ b/src/main/java/com/volmit/iris/engine/IrisComplex.java @@ -171,7 +171,8 @@ public class IrisComplex implements DataProvider { Interpolated.of(a -> 0D, a -> focus.getInferredType())) : engine.getDimension().getContinentalStyle().create(rng.nextParallelRNG(234234565), getData()) .bake().scale(1D / engine.getDimension().getContinentZoom()).bake().stream() - .convert((v) -> v >= engine.getDimension().getLandChance() ? InferredType.SEA : InferredType.LAND).cache2D(engine, cacheSize); + .convert((v) -> v >= engine.getDimension().getLandChance() ? InferredType.SEA : InferredType.LAND) + .cache2D(engine, cacheSize); baseBiomeStream = focus != null ? ProceduralStream.of((x, z) -> focus, Interpolated.of(a -> 0D, a -> focus)) : bridgeStream.convertAware2D((t, x, z) -> inferredStreams.get(t).get(x, z)) @@ -179,16 +180,9 @@ public class IrisComplex implements DataProvider { heightStream = ProceduralStream.of((x, z) -> { IrisBiome b = focus != null ? focus : baseBiomeStream.get(x, z); return getHeight(engine, b, x, z, engine.getSeedManager().getHeight()); - }, Interpolated.DOUBLE).clamp(0, engine.getHeight()).cache2D(engine, cacheSize, true); + }, Interpolated.DOUBLE).clamp(0, engine.getHeight()).cache2D(engine, cacheSize); roundedHeighteightStream = heightStream.round(); slopeStream = heightStream.slope(3).cache2D(engine, cacheSize); - trueBiomeStream = focus != null ? ProceduralStream.of((x, y) -> focus, Interpolated.of(a -> 0D, - b -> focus)) - .cache2D(engine, cacheSize) : heightStream - .convertAware2D((h, x, z) -> - fixBiomeType(h, baseBiomeStream.get(x, z), - regionStream.get(x, z), x, z, fluidHeight)) - .cache2D(engine, cacheSize); trueBiomeStream = focus != null ? ProceduralStream.of((x, y) -> focus, Interpolated.of(a -> 0D, b -> focus)) .cache2D(engine, cacheSize) : heightStream @@ -197,7 +191,7 @@ public class IrisComplex implements DataProvider { regionStream.get(x, z), x, z, fluidHeight)) .cache2D(engine, cacheSize); trueBiomeDerivativeStream = trueBiomeStream.convert(IrisBiome::getDerivative).cache2D(engine, cacheSize); - heightFluidStream = heightStream.max(fluidHeight).cache2D(engine, cacheSize, true); + heightFluidStream = heightStream.max(fluidHeight).cache2D(engine, cacheSize); maxHeightStream = ProceduralStream.ofDouble((x, z) -> height); terrainSurfaceDecoration = trueBiomeStream .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.NONE)).cache2D(engine, cacheSize); diff --git a/src/main/java/com/volmit/iris/engine/IrisEngine.java b/src/main/java/com/volmit/iris/engine/IrisEngine.java index aef072a23..0000487c9 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngine.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngine.java @@ -462,17 +462,6 @@ public class IrisEngine implements Engine { mode.generate(x, z, blocks, vbiomes, multicore); } - if(!multicore) - { - for(int i = 0; i < 16; i++) - { - for(int j = 0; j < 16; j++) - { - blocks.set(i, 255, j, B.get("GLASS")); - } - } - } - getMantle().getMantle().flag(x>>4, z>>4, MantleFlag.REAL, true); getMetrics().getTotal().put(p.getMilliseconds()); generated.incrementAndGet(); diff --git a/src/main/java/com/volmit/iris/util/data/ChunkCache.java b/src/main/java/com/volmit/iris/util/data/ChunkCache.java new file mode 100644 index 000000000..6b0be1d26 --- /dev/null +++ b/src/main/java/com/volmit/iris/util/data/ChunkCache.java @@ -0,0 +1,53 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.util.data; + +import com.volmit.iris.util.function.Function2; + +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicReferenceArray; + +public class ChunkCache { + private final AtomicReferenceArray cache; + + public ChunkCache() { + cache = new AtomicReferenceArray<>(256); + } + + public T compute(int x, int z, Function2 function) + { + T t = get(x&15, z&15); + + if(t == null) + { + t = function.apply(x, z); + set(x&15, z&15, t); + } + + return t; + } + + private void set(int x, int z, T t) { + cache.set(x * 16 + z, t); + } + + private T get(int x, int z) { + return cache.get(x * 16 + z); + } +} diff --git a/src/main/java/com/volmit/iris/util/data/ComplexCache.java b/src/main/java/com/volmit/iris/util/data/ComplexCache.java new file mode 100644 index 000000000..2d4db1958 --- /dev/null +++ b/src/main/java/com/volmit/iris/util/data/ComplexCache.java @@ -0,0 +1,46 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.util.data; + +import com.volmit.iris.engine.data.cache.Cache; +import com.volmit.iris.util.collection.KMap; + +public class ComplexCache { + private KMap> chunks; + + public ComplexCache() + { + chunks = new KMap<>(); + } + + public boolean has(int x, int z) + { + return chunks.containsKey(Cache.key(x, z)); + } + + public void invalidate(int x, int z) + { + chunks.remove(Cache.key(x, z)); + } + + public ChunkCache chunk(int x, int z) + { + return chunks.computeIfAbsent(Cache.key(x, z), (f) -> new ChunkCache<>()); + } +} diff --git a/src/main/java/com/volmit/iris/util/data/Heafty.java b/src/main/java/com/volmit/iris/util/data/Heafty.java new file mode 100644 index 000000000..f0995987b --- /dev/null +++ b/src/main/java/com/volmit/iris/util/data/Heafty.java @@ -0,0 +1,24 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.util.data; + +@FunctionalInterface +public interface Heafty { + int getHeaft(); +} diff --git a/src/main/java/com/volmit/iris/util/data/KCache.java b/src/main/java/com/volmit/iris/util/data/KCache.java index d8276288d..cecef8303 100644 --- a/src/main/java/com/volmit/iris/util/data/KCache.java +++ b/src/main/java/com/volmit/iris/util/data/KCache.java @@ -21,18 +21,29 @@ package com.volmit.iris.util.data; import com.github.benmanes.caffeine.cache.CacheLoader; import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.LoadingCache; +import com.volmit.iris.Iris; import com.volmit.iris.engine.framework.MeteredCache; +import com.volmit.iris.util.format.Form; +import com.volmit.iris.util.scheduling.J; +import java.util.concurrent.TimeUnit; import java.util.function.Function; public class KCache implements MeteredCache { - private long max; + private final long max; private CacheLoader loader; private LoadingCache cache; + private final boolean fastDump; public KCache(CacheLoader loader, long max) + { + this(loader, max, false); + } + + public KCache(CacheLoader loader, long max, boolean fastDump) { this.max = max; + this.fastDump = fastDump; this.loader = loader; this.cache = create(loader); } @@ -41,6 +52,9 @@ public class KCache implements MeteredCache { return Caffeine .newBuilder() .maximumSize(max) + .initialCapacity((int) (max)) + .softValues() + .expireAfterAccess(5, TimeUnit.MINUTES) .build((k) -> loader == null ? null : loader.load(k)); } @@ -57,9 +71,7 @@ public class KCache implements MeteredCache { public void invalidate() { - LoadingCache c = cache; - cache = create(loader); - c.invalidateAll(); + cache.invalidateAll(); } public V get(K k) diff --git a/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java b/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java index e2de6093a..082417576 100644 --- a/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java +++ b/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java @@ -24,6 +24,7 @@ import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.IRare; import com.volmit.iris.engine.object.IrisStyledRange; import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.data.ComplexCache; import com.volmit.iris.util.function.Function2; import com.volmit.iris.util.function.Function3; import com.volmit.iris.util.function.Function4; @@ -288,12 +289,8 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated { return new To3DStream(this); } - default ProceduralStream cache2D(Engine engine, int maxSize) { - return cache2D(engine, maxSize, false); - } - - default ProceduralStream cache2D(Engine engine, int maxSize, boolean weak) { - return new CachedStream2D(engine, this, maxSize, weak); + default ProceduralStream cache2D(Engine engine, int size) { + return new CachedStream2D(engine, this, size); } default ProceduralStream cache3D(Engine engine, int maxSize) { diff --git a/src/main/java/com/volmit/iris/util/stream/utility/CachedStream2D.java b/src/main/java/com/volmit/iris/util/stream/utility/CachedStream2D.java index fa6f4e2fd..16d7b380b 100644 --- a/src/main/java/com/volmit/iris/util/stream/utility/CachedStream2D.java +++ b/src/main/java/com/volmit/iris/util/stream/utility/CachedStream2D.java @@ -27,6 +27,7 @@ import com.volmit.iris.core.service.PreservationSVC; import com.volmit.iris.engine.data.cache.Cache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.MeteredCache; +import com.volmit.iris.util.data.ComplexCache; import com.volmit.iris.util.data.KCache; import com.volmit.iris.util.stream.BasicStream; import com.volmit.iris.util.stream.ProceduralStream; @@ -36,7 +37,7 @@ public class CachedStream2D extends BasicStream implements ProceduralStrea private final KCache cache; private final Engine engine; - public CachedStream2D(Engine engine, ProceduralStream stream, int size, boolean weak) { + public CachedStream2D(Engine engine, ProceduralStream stream, int size) { super(); this.stream = stream; this.engine = engine; From bee920f96a7213eebd12eafda90f4e926a970dbc Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 13:37:54 -0400 Subject: [PATCH 12/24] DANGER V+ --- build.gradle | 2 +- .../com/volmit/iris/core/IrisSettings.java | 2 +- .../iris/core/commands/CommandIris.java | 3 ++ .../iris/core/loader/ResourceLoader.java | 5 +++ .../iris/core/service/PreservationSVC.java | 6 +++ .../com/volmit/iris/engine/IrisComplex.java | 42 +++++++++---------- .../iris/engine/framework/MeteredCache.java | 4 ++ .../com/volmit/iris/util/data/KCache.java | 16 +++---- .../iris/util/stream/ProceduralStream.java | 8 ++-- .../util/stream/utility/CachedStream2D.java | 7 +++- .../util/stream/utility/CachedStream3D.java | 7 +++- 11 files changed, 65 insertions(+), 37 deletions(-) diff --git a/build.gradle b/build.gradle index 8520dd45f..26bbcfa4f 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ plugins { } group 'com.volmit.iris' -version '1.8.13' +version '1.9-DangerouslyUnstable' def apiVersion = '1.17' def name = getRootProject().getName() // Defined in settings.gradle def main = 'com.volmit.iris.Iris' diff --git a/src/main/java/com/volmit/iris/core/IrisSettings.java b/src/main/java/com/volmit/iris/core/IrisSettings.java index bbe1c0787..66b5fc98b 100644 --- a/src/main/java/com/volmit/iris/core/IrisSettings.java +++ b/src/main/java/com/volmit/iris/core/IrisSettings.java @@ -60,7 +60,7 @@ public class IrisSettings { @Data public static class IrisAsyncTeleport { - public boolean enabled = true; + public boolean enabled = false; public int loadViewDistance = 2; public boolean urgent = false; } diff --git a/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/src/main/java/com/volmit/iris/core/commands/CommandIris.java index 92f9784a5..7bb133722 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -20,12 +20,15 @@ package com.volmit.iris.core.commands; import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; +import com.volmit.iris.core.service.PreservationSVC; import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.engine.platform.PlatformChunkGenerator; import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.collection.KMap; +import com.volmit.iris.util.data.KCache; import com.volmit.iris.util.decree.DecreeContext; import com.volmit.iris.util.decree.DecreeExecutor; import com.volmit.iris.util.decree.DecreeOrigin; diff --git a/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java b/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java index ce553b5e6..5f03fbef3 100644 --- a/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java +++ b/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java @@ -364,6 +364,11 @@ public class ResourceLoader implements MeteredCache { return loadCache.getSize(); } + @Override + public KCache getRawCache() { + return loadCache; + } + @Override public long getMaxSize() { return loadCache.getMaxSize(); diff --git a/src/main/java/com/volmit/iris/core/service/PreservationSVC.java b/src/main/java/com/volmit/iris/core/service/PreservationSVC.java index 8c44e4a51..c6d57940b 100644 --- a/src/main/java/com/volmit/iris/core/service/PreservationSVC.java +++ b/src/main/java/com/volmit/iris/core/service/PreservationSVC.java @@ -25,6 +25,7 @@ import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.MeteredCache; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.context.IrisContext; +import com.volmit.iris.util.data.KCache; import com.volmit.iris.util.format.Form; import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.IrisService; @@ -36,6 +37,7 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ExecutorService; +import java.util.stream.Collectors; public class PreservationSVC implements IrisService { private final List threads = new CopyOnWriteArrayList<>(); @@ -137,4 +139,8 @@ public class PreservationSVC implements IrisService { public void registerCache(MeteredCache cache) { caches.add(cache); } + + public List> caches() { + return caches.stream().map(MeteredCache::getRawCache).collect(Collectors.toList()); + } } diff --git a/src/main/java/com/volmit/iris/engine/IrisComplex.java b/src/main/java/com/volmit/iris/engine/IrisComplex.java index 93a79d6ec..69c054c7e 100644 --- a/src/main/java/com/volmit/iris/engine/IrisComplex.java +++ b/src/main/java/com/volmit/iris/engine/IrisComplex.java @@ -124,7 +124,7 @@ public class IrisComplex implements DataProvider { Interpolated.of(a -> 0D, a -> focusRegion)) : regionStyleStream .selectRarity(engine.getDimension().getRegions(), (i) -> data.getRegionLoader().load(i)) - .convertCached((s) -> data.getRegionLoader().load(s)).cache2D(engine, cacheSize); + .convertCached((s) -> data.getRegionLoader().load(s)).cache2D("regionStream", engine, cacheSize); regionIDStream = regionIdentityStream.convertCached((i) -> new UUID(Double.doubleToLongBits(i), String.valueOf(i * 38445).hashCode() * 3245556666L)); caveBiomeStream = regionStream.convert((r) -> engine.getDimension().getCaveBiomeStyle().create(rng.nextParallelRNG(InferredType.CAVE.ordinal()), getData()).stream() @@ -139,7 +139,7 @@ public class IrisComplex implements DataProvider { return data.getBiomeLoader().load(s) .setInferredType(InferredType.CAVE); }) - ).convertAware2D(ProceduralStream::get).cache2D(engine, cacheSize); + ).convertAware2D(ProceduralStream::get).cache2D("caveBiomeStream", engine, cacheSize); inferredStreams.put(InferredType.CAVE, caveBiomeStream); landBiomeStream = regionStream.convert((r) -> engine.getDimension().getLandBiomeStyle().create(rng.nextParallelRNG(InferredType.LAND.ordinal()), getData()).stream() @@ -148,7 +148,7 @@ public class IrisComplex implements DataProvider { .convertCached((s) -> data.getBiomeLoader().load(s) .setInferredType(InferredType.LAND)) ).convertAware2D(ProceduralStream::get) - .cache2D(engine, cacheSize); + .cache2D("landBiomeStream", engine, cacheSize); inferredStreams.put(InferredType.LAND, landBiomeStream); seaBiomeStream = regionStream.convert((r) -> engine.getDimension().getSeaBiomeStyle().create(rng.nextParallelRNG(InferredType.SEA.ordinal()), getData()).stream() @@ -157,7 +157,7 @@ public class IrisComplex implements DataProvider { .convertCached((s) -> data.getBiomeLoader().load(s) .setInferredType(InferredType.SEA)) ).convertAware2D(ProceduralStream::get) - .cache2D(engine, cacheSize); + .cache2D("seaBiomeStream", engine, cacheSize); inferredStreams.put(InferredType.SEA, seaBiomeStream); shoreBiomeStream = regionStream.convert((r) -> engine.getDimension().getShoreBiomeStyle().create(rng.nextParallelRNG(InferredType.SHORE.ordinal()), getData()).stream() @@ -165,54 +165,54 @@ public class IrisComplex implements DataProvider { .selectRarity(r.getShoreBiomes(), (i) -> data.getBiomeLoader().load(i)) .convertCached((s) -> data.getBiomeLoader().load(s) .setInferredType(InferredType.SHORE)) - ).convertAware2D(ProceduralStream::get).cache2D(engine, cacheSize); + ).convertAware2D(ProceduralStream::get).cache2D("shoreBiomeStream", engine, cacheSize); inferredStreams.put(InferredType.SHORE, shoreBiomeStream); bridgeStream = focus != null ? ProceduralStream.of((x, z) -> focus.getInferredType(), Interpolated.of(a -> 0D, a -> focus.getInferredType())) : engine.getDimension().getContinentalStyle().create(rng.nextParallelRNG(234234565), getData()) .bake().scale(1D / engine.getDimension().getContinentZoom()).bake().stream() .convert((v) -> v >= engine.getDimension().getLandChance() ? InferredType.SEA : InferredType.LAND) - .cache2D(engine, cacheSize); + .cache2D("bridgeStream", engine, cacheSize); baseBiomeStream = focus != null ? ProceduralStream.of((x, z) -> focus, Interpolated.of(a -> 0D, a -> focus)) : bridgeStream.convertAware2D((t, x, z) -> inferredStreams.get(t).get(x, z)) - .convertAware2D(this::implode).cache2D(engine, cacheSize); + .convertAware2D(this::implode).cache2D("baseBiomeStream", engine, cacheSize); heightStream = ProceduralStream.of((x, z) -> { IrisBiome b = focus != null ? focus : baseBiomeStream.get(x, z); return getHeight(engine, b, x, z, engine.getSeedManager().getHeight()); - }, Interpolated.DOUBLE).clamp(0, engine.getHeight()).cache2D(engine, cacheSize); + }, Interpolated.DOUBLE).clamp(0, engine.getHeight()).cache2D("heightStream", engine, cacheSize); roundedHeighteightStream = heightStream.round(); - slopeStream = heightStream.slope(3).cache2D(engine, cacheSize); + slopeStream = heightStream.slope(3).cache2D("slopeStream", engine, cacheSize); trueBiomeStream = focus != null ? ProceduralStream.of((x, y) -> focus, Interpolated.of(a -> 0D, b -> focus)) - .cache2D(engine, cacheSize) : heightStream + .cache2D("trueBiomeStream-focus", engine, cacheSize) : heightStream .convertAware2D((h, x, z) -> fixBiomeType(h, baseBiomeStream.get(x, z), regionStream.get(x, z), x, z, fluidHeight)) - .cache2D(engine, cacheSize); - trueBiomeDerivativeStream = trueBiomeStream.convert(IrisBiome::getDerivative).cache2D(engine, cacheSize); - heightFluidStream = heightStream.max(fluidHeight).cache2D(engine, cacheSize); + .cache2D("trueBiomeStream", engine, cacheSize); + trueBiomeDerivativeStream = trueBiomeStream.convert(IrisBiome::getDerivative).cache2D("trueBiomeDerivativeStream", engine, cacheSize); + heightFluidStream = heightStream.max(fluidHeight).cache2D("heightFluidStream", engine, cacheSize); maxHeightStream = ProceduralStream.ofDouble((x, z) -> height); terrainSurfaceDecoration = trueBiomeStream - .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.NONE)).cache2D(engine, cacheSize); + .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.NONE)).cache2D("terrainSurfaceDecoration", engine, cacheSize); terrainCeilingDecoration = trueBiomeStream - .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.CEILING)).cache2D(engine, cacheSize); + .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.CEILING)).cache2D("terrainCeilingDecoration", engine, cacheSize); terrainCaveSurfaceDecoration = caveBiomeStream - .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.NONE)).cache2D(engine, cacheSize); + .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.NONE)).cache2D("terrainCaveSurfaceDecoration", engine, cacheSize); terrainCaveCeilingDecoration = caveBiomeStream - .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.CEILING)).cache2D(engine, cacheSize); + .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.CEILING)).cache2D("terrainCaveCeilingDecoration", engine, cacheSize); shoreSurfaceDecoration = trueBiomeStream - .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SHORE_LINE)).cache2D(engine, cacheSize); + .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SHORE_LINE)).cache2D("shoreSurfaceDecoration", engine, cacheSize); seaSurfaceDecoration = trueBiomeStream - .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SEA_SURFACE)).cache2D(engine, cacheSize); + .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SEA_SURFACE)).cache2D("seaSurfaceDecoration", engine, cacheSize); seaFloorDecoration = trueBiomeStream - .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SEA_FLOOR)).cache2D(engine, cacheSize); + .convertAware2D((b, xx, zz) -> decorateFor(b, xx, zz, IrisDecorationPart.SEA_FLOOR)).cache2D("seaFloorDecoration", engine, cacheSize); baseBiomeIDStream = trueBiomeStream.convertAware2D((b, x, z) -> { UUID d = regionIDStream.get(x, z); return new UUID(b.getLoadKey().hashCode() * 818223L, d.hashCode()); }) - .cache2D(engine, cacheSize); + .cache2D("", engine, cacheSize); //@done } diff --git a/src/main/java/com/volmit/iris/engine/framework/MeteredCache.java b/src/main/java/com/volmit/iris/engine/framework/MeteredCache.java index cd9dcc0fa..1f566a861 100644 --- a/src/main/java/com/volmit/iris/engine/framework/MeteredCache.java +++ b/src/main/java/com/volmit/iris/engine/framework/MeteredCache.java @@ -18,10 +18,14 @@ package com.volmit.iris.engine.framework; +import com.volmit.iris.util.data.KCache; + public interface MeteredCache { long getSize(); + KCache getRawCache(); + long getMaxSize(); default double getUsage() diff --git a/src/main/java/com/volmit/iris/util/data/KCache.java b/src/main/java/com/volmit/iris/util/data/KCache.java index cecef8303..effab2c66 100644 --- a/src/main/java/com/volmit/iris/util/data/KCache.java +++ b/src/main/java/com/volmit/iris/util/data/KCache.java @@ -21,19 +21,15 @@ package com.volmit.iris.util.data; import com.github.benmanes.caffeine.cache.CacheLoader; import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.LoadingCache; -import com.volmit.iris.Iris; import com.volmit.iris.engine.framework.MeteredCache; -import com.volmit.iris.util.format.Form; -import com.volmit.iris.util.scheduling.J; - -import java.util.concurrent.TimeUnit; -import java.util.function.Function; +import com.volmit.iris.util.math.RollingSequence; public class KCache implements MeteredCache { private final long max; private CacheLoader loader; private LoadingCache cache; private final boolean fastDump; + private final RollingSequence msu = new RollingSequence(100); public KCache(CacheLoader loader, long max) { @@ -52,9 +48,8 @@ public class KCache implements MeteredCache { return Caffeine .newBuilder() .maximumSize(max) - .initialCapacity((int) (max)) .softValues() - .expireAfterAccess(5, TimeUnit.MINUTES) + .initialCapacity((int) (max)) .build((k) -> loader == null ? null : loader.load(k)); } @@ -84,6 +79,11 @@ public class KCache implements MeteredCache { return cache.estimatedSize(); } + @Override + public KCache getRawCache() { + return this; + } + @Override public long getMaxSize() { return max; diff --git a/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java b/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java index 082417576..48cf0fe6b 100644 --- a/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java +++ b/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java @@ -289,12 +289,12 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated { return new To3DStream(this); } - default ProceduralStream cache2D(Engine engine, int size) { - return new CachedStream2D(engine, this, size); + default ProceduralStream cache2D(String name, Engine engine, int size) { + return new CachedStream2D(name, engine, this, size); } - default ProceduralStream cache3D(Engine engine, int maxSize) { - return new CachedStream3D(engine, this, maxSize); + default ProceduralStream cache3D(String name, Engine engine, int maxSize) { + return new CachedStream3D(name, engine, this, maxSize); } default ProceduralStream convert(Function converter) { diff --git a/src/main/java/com/volmit/iris/util/stream/utility/CachedStream2D.java b/src/main/java/com/volmit/iris/util/stream/utility/CachedStream2D.java index 16d7b380b..203ecaf52 100644 --- a/src/main/java/com/volmit/iris/util/stream/utility/CachedStream2D.java +++ b/src/main/java/com/volmit/iris/util/stream/utility/CachedStream2D.java @@ -37,7 +37,7 @@ public class CachedStream2D extends BasicStream implements ProceduralStrea private final KCache cache; private final Engine engine; - public CachedStream2D(Engine engine, ProceduralStream stream, int size) { + public CachedStream2D(String name, Engine engine, ProceduralStream stream, int size) { super(); this.stream = stream; this.engine = engine; @@ -70,6 +70,11 @@ public class CachedStream2D extends BasicStream implements ProceduralStrea return cache.getSize(); } + @Override + public KCache getRawCache() { + return cache; + } + @Override public long getMaxSize() { return cache.getMaxSize(); diff --git a/src/main/java/com/volmit/iris/util/stream/utility/CachedStream3D.java b/src/main/java/com/volmit/iris/util/stream/utility/CachedStream3D.java index 97a3c171d..b80b7b66b 100644 --- a/src/main/java/com/volmit/iris/util/stream/utility/CachedStream3D.java +++ b/src/main/java/com/volmit/iris/util/stream/utility/CachedStream3D.java @@ -32,7 +32,7 @@ public class CachedStream3D extends BasicStream implements ProceduralStrea private final KCache cache; private final Engine engine; - public CachedStream3D(Engine engine, ProceduralStream stream, int size) { + public CachedStream3D(String name, Engine engine, ProceduralStream stream, int size) { super(); this.stream = stream; this.engine = engine; @@ -65,6 +65,11 @@ public class CachedStream3D extends BasicStream implements ProceduralStrea return cache.getSize(); } + @Override + public KCache getRawCache() { + return cache; + } + @Override public long getMaxSize() { return cache.getMaxSize(); From 1f783ddf445596ecbbe86ba1490d8e96e64e4fba Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 13:42:45 -0400 Subject: [PATCH 13/24] Remap settings --- src/main/java/com/volmit/iris/core/IrisSettings.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/IrisSettings.java b/src/main/java/com/volmit/iris/core/IrisSettings.java index 66b5fc98b..8bf37d44a 100644 --- a/src/main/java/com/volmit/iris/core/IrisSettings.java +++ b/src/main/java/com/volmit/iris/core/IrisSettings.java @@ -85,10 +85,10 @@ public class IrisSettings { public static class IrisSettingsPerformance { public boolean trimMantleInStudio = false; public int mantleKeepAliveSeconds = 25; - public int maxStreamCacheSize = 256_000; - public int maxResourceLoaderCacheSize = 1_000; - public int maxObjectLoaderCacheSize = 3_000; - public int maxScriptLoaderCacheSize = 500; + public int cacheSize = 4_096; + public int resourceLoaderCacheSize = 1_024; + public int objectLoaderCacheSize = 4_096; + public int scriptLoaderCacheSize = 512; } @Data From 2ac1de4ae9fe178aab8830d4067772a3864b0738 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 13:44:09 -0400 Subject: [PATCH 14/24] Reduced cache defaults --- .../java/com/volmit/iris/core/loader/ObjectResourceLoader.java | 2 +- src/main/java/com/volmit/iris/core/loader/ResourceLoader.java | 2 +- .../java/com/volmit/iris/core/loader/ScriptResourceLoader.java | 2 +- src/main/java/com/volmit/iris/engine/IrisComplex.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/loader/ObjectResourceLoader.java b/src/main/java/com/volmit/iris/core/loader/ObjectResourceLoader.java index 6c3b4a302..2f0af8fa1 100644 --- a/src/main/java/com/volmit/iris/core/loader/ObjectResourceLoader.java +++ b/src/main/java/com/volmit/iris/core/loader/ObjectResourceLoader.java @@ -38,7 +38,7 @@ import java.util.concurrent.atomic.AtomicInteger; public class ObjectResourceLoader extends ResourceLoader { public ObjectResourceLoader(File root, IrisData idm, String folderName, String resourceTypeName) { super(root, idm, folderName, resourceTypeName, IrisObject.class); - loadCache = new KCache<>(this::loadRaw, IrisSettings.get().getPerformance().getMaxObjectLoaderCacheSize()); + loadCache = new KCache<>(this::loadRaw, IrisSettings.get().getPerformance().getObjectLoaderCacheSize()); } public boolean supportsSchemas() { diff --git a/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java b/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java index 5f03fbef3..61e3f65af 100644 --- a/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java +++ b/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java @@ -70,7 +70,7 @@ public class ResourceLoader implements MeteredCache { this.resourceTypeName = resourceTypeName; this.root = root; this.folderName = folderName; - loadCache = new KCache<>(this::loadRaw, IrisSettings.get().getPerformance().getMaxResourceLoaderCacheSize()); + loadCache = new KCache<>(this::loadRaw, IrisSettings.get().getPerformance().getResourceLoaderCacheSize()); Iris.debug("Loader<" + C.GREEN + resourceTypeName + C.LIGHT_PURPLE + "> created in " + C.RED + "IDM/" + manager.getId() + C.LIGHT_PURPLE + " on " + C.GRAY + manager.getDataFolder().getPath()); Iris.service(PreservationSVC.class).registerCache(this); } diff --git a/src/main/java/com/volmit/iris/core/loader/ScriptResourceLoader.java b/src/main/java/com/volmit/iris/core/loader/ScriptResourceLoader.java index 816fb3213..7e725c372 100644 --- a/src/main/java/com/volmit/iris/core/loader/ScriptResourceLoader.java +++ b/src/main/java/com/volmit/iris/core/loader/ScriptResourceLoader.java @@ -32,7 +32,7 @@ import java.io.File; public class ScriptResourceLoader extends ResourceLoader { public ScriptResourceLoader(File root, IrisData idm, String folderName, String resourceTypeName) { super(root, idm, folderName, resourceTypeName, IrisScript.class); - loadCache = new KCache<>(this::loadRaw, IrisSettings.get().getPerformance().getMaxScriptLoaderCacheSize()); + loadCache = new KCache<>(this::loadRaw, IrisSettings.get().getPerformance().getScriptLoaderCacheSize()); } public boolean supportsSchemas() { diff --git a/src/main/java/com/volmit/iris/engine/IrisComplex.java b/src/main/java/com/volmit/iris/engine/IrisComplex.java index 69c054c7e..9541a4287 100644 --- a/src/main/java/com/volmit/iris/engine/IrisComplex.java +++ b/src/main/java/com/volmit/iris/engine/IrisComplex.java @@ -89,7 +89,7 @@ public class IrisComplex implements DataProvider { } public IrisComplex(Engine engine, boolean simple) { - int cacheSize = IrisSettings.get().getPerformance().getMaxStreamCacheSize(); + int cacheSize = IrisSettings.get().getPerformance().getCacheSize(); IrisBiome emptyBiome = new IrisBiome(); UUID focusUUID = UUID.nameUUIDFromBytes("focus".getBytes()); this.rng = new RNG(engine.getSeedManager().getComplex()); From 1dd89597fde93330a3aa065ac7a0273376d16160 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 13:49:40 -0400 Subject: [PATCH 15/24] Fix --- plugins/Iris/cache/instance | 1 - .../java/com/volmit/iris/core/loader/ObjectResourceLoader.java | 1 - 2 files changed, 2 deletions(-) delete mode 100644 plugins/Iris/cache/instance diff --git a/plugins/Iris/cache/instance b/plugins/Iris/cache/instance deleted file mode 100644 index 4a40e9617..000000000 --- a/plugins/Iris/cache/instance +++ /dev/null @@ -1 +0,0 @@ -1036166928 diff --git a/src/main/java/com/volmit/iris/core/loader/ObjectResourceLoader.java b/src/main/java/com/volmit/iris/core/loader/ObjectResourceLoader.java index 2f0af8fa1..3985f325c 100644 --- a/src/main/java/com/volmit/iris/core/loader/ObjectResourceLoader.java +++ b/src/main/java/com/volmit/iris/core/loader/ObjectResourceLoader.java @@ -33,7 +33,6 @@ import com.volmit.iris.util.scheduling.J; import com.volmit.iris.util.scheduling.PrecisionStopwatch; import java.io.File; -import java.util.concurrent.atomic.AtomicInteger; public class ObjectResourceLoader extends ResourceLoader { public ObjectResourceLoader(File root, IrisData idm, String folderName, String resourceTypeName) { From 57ef3842e95f31c792f4163030bb62c35f09ad7f Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 13:51:36 -0400 Subject: [PATCH 16/24] UCW --- api/build.gradle | 18 ++++++++++++++++++ .../volmit/iris/engine/object/IrisCommand.java | 18 ++++++++++++++++++ .../engine/object/IrisCommandRegistry.java | 18 ++++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/api/build.gradle b/api/build.gradle index 0fab76640..6d0d4e93c 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -1,3 +1,21 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + plugins { id 'java' } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisCommand.java b/src/main/java/com/volmit/iris/engine/object/IrisCommand.java index 008fe5d51..d9027d2a3 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisCommand.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisCommand.java @@ -1,3 +1,21 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package com.volmit.iris.engine.object; import com.volmit.iris.Iris; diff --git a/src/main/java/com/volmit/iris/engine/object/IrisCommandRegistry.java b/src/main/java/com/volmit/iris/engine/object/IrisCommandRegistry.java index dc77a1f17..ace70422a 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisCommandRegistry.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisCommandRegistry.java @@ -1,3 +1,21 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package com.volmit.iris.engine.object; import com.volmit.iris.engine.object.annotations.*; From 384a28c51798e5d6e6f4c8ce72f60b00aeb72db4 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 13:52:50 -0400 Subject: [PATCH 17/24] Clean up --- src/main/java/com/volmit/iris/Iris.java | 3 +- .../com/volmit/iris/core/IrisSettings.java | 3 +- .../volmit/iris/core/ServerConfigurator.java | 31 ++---- .../iris/core/commands/CommandIris.java | 11 +-- .../iris/core/commands/CommandStudio.java | 3 +- .../volmit/iris/core/gui/PregeneratorJob.java | 22 ++--- .../com/volmit/iris/core/loader/IrisData.java | 1 - .../core/loader/ObjectResourceLoader.java | 8 +- .../iris/core/loader/ResourceLoader.java | 5 +- .../core/loader/ScriptResourceLoader.java | 3 +- .../iris/core/pregenerator/PregenTask.java | 14 +-- .../methods/AsyncPregenMethod.java | 3 +- .../methods/HybridPregenMethod.java | 3 +- .../methods/MedievalPregenMethod.java | 3 +- .../iris/core/service/PreservationSVC.java | 22 ++--- .../com/volmit/iris/engine/IrisEngine.java | 19 +--- .../volmit/iris/engine/IrisWorldManager.java | 98 ++++++++----------- .../volmit/iris/engine/framework/Engine.java | 16 +-- .../framework/EngineAssignedWorldManager.java | 17 +--- .../iris/engine/framework/EngineMode.java | 18 ++-- .../iris/engine/framework/IrisEngineMode.java | 9 +- .../iris/engine/framework/MeteredCache.java | 8 +- .../volmit/iris/engine/framework/Staged.java | 3 +- .../iris/engine/mantle/EngineMantle.java | 16 +-- .../iris/engine/mode/ModeEnclosure.java | 7 +- .../volmit/iris/engine/mode/ModeIslands.java | 7 +- .../iris/engine/mode/ModeOverworld.java | 9 +- .../iris/engine/mode/ModeSuperFlat.java | 7 +- .../engine/modifier/IrisCarveModifier.java | 4 +- .../iris/engine/object/IrisCommand.java | 1 - .../engine/object/IrisCommandRegistry.java | 7 +- .../engine/object/IrisDimensionModeType.java | 6 +- .../volmit/iris/engine/object/IrisEffect.java | 9 +- .../volmit/iris/engine/object/IrisLake.java | 3 - .../volmit/iris/engine/object/IrisRiver.java | 3 - .../engine/platform/HeadlessGenerator.java | 11 +-- .../com/volmit/iris/util/collection/KMap.java | 9 +- .../java/com/volmit/iris/util/data/B.java | 6 +- .../com/volmit/iris/util/data/ChunkCache.java | 11 +-- .../volmit/iris/util/data/ComplexCache.java | 14 +-- .../com/volmit/iris/util/data/KCache.java | 24 ++--- .../iris/util/data/palette/BitStorage.java | 24 ++--- .../CrudeIncrementalIntIdentityHashBiMap.java | 30 +++--- .../iris/util/data/palette/GlobalPalette.java | 8 +- .../util/data/palette/HashMapPalette.java | 10 +- .../iris/util/data/palette/IdMapper.java | 6 +- .../iris/util/data/palette/LinearPalette.java | 16 +-- .../iris/util/data/palette/Palette.java | 4 - .../iris/util/data/palette/PaletteType.java | 3 +- .../util/data/palette/PalettedContainer.java | 17 ++-- .../decree/virtual/VirtualDecreeCommand.java | 1 - .../iris/util/format/MemoryMonitor.java | 66 +++++-------- .../volmit/iris/util/hunk/bits/DataBits.java | 37 +++---- .../iris/util/hunk/bits/DataContainer.java | 77 +++++---------- .../iris/util/hunk/bits/HashPalette.java | 13 +-- .../iris/util/hunk/bits/LinearPalette.java | 24 ++--- .../volmit/iris/util/hunk/bits/Palette.java | 21 ++-- .../iris/util/hunk/storage/MappedHunk.java | 1 - .../iris/util/hunk/storage/PaletteHunk.java | 37 +++---- .../iris/util/hunk/storage/PaletteOrHunk.java | 20 ++-- src/main/java/com/volmit/iris/util/io/IO.java | 20 ++-- .../com/volmit/iris/util/mantle/Mantle.java | 1 - .../iris/util/mantle/TectonicPlate.java | 3 - .../volmit/iris/util/matter/MatterSlice.java | 17 +--- .../volmit/iris/util/matter/MatterTest.java | 15 +-- .../iris/util/matter/slices/BlockMatter.java | 1 - .../util/matter/slices/BooleanMatter.java | 1 - .../iris/util/matter/slices/CavernMatter.java | 1 - .../iris/util/matter/slices/EntityMatter.java | 1 - .../iris/util/matter/slices/IntMatter.java | 1 - .../iris/util/matter/slices/LongMatter.java | 1 - .../iris/util/matter/slices/MarkerMatter.java | 1 - .../iris/util/matter/slices/NBTMatter.java | 3 - .../iris/util/matter/slices/RawMatter.java | 1 - .../util/matter/slices/RegistryMatter.java | 1 - .../iris/util/matter/slices/UpdateMatter.java | 1 - .../com/volmit/iris/util/nbt/mca/Chunk.java | 6 +- .../com/volmit/iris/util/nbt/mca/MCAFile.java | 1 - .../nbt/mca/palette/MCALinearPalette.java | 3 +- .../volmit/iris/util/parallel/MultiBurst.java | 11 +-- .../volmit/iris/util/scheduling/jobs/Job.java | 3 +- .../iris/util/stream/ProceduralStream.java | 1 - .../util/stream/utility/CachedStream2D.java | 7 +- 83 files changed, 323 insertions(+), 670 deletions(-) diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index 5a8a90dc7..70cfe1f44 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -37,7 +37,6 @@ import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.exceptions.IrisException; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; -import com.volmit.iris.util.format.MemoryMonitor; import com.volmit.iris.util.function.NastyRunnable; import com.volmit.iris.util.io.FileWatcher; import com.volmit.iris.util.io.IO; @@ -449,7 +448,7 @@ public class Iris extends VolmitPlugin implements Listener { J.a(ServerConfigurator::configure, 20); splash(); J.a(MatterTest::test, 20); - + if (IrisSettings.get().getStudio().isAutoStartDefaultStudio()) { Iris.info("Starting up auto Studio!"); try { diff --git a/src/main/java/com/volmit/iris/core/IrisSettings.java b/src/main/java/com/volmit/iris/core/IrisSettings.java index 84fc1ba6c..dd8d32eee 100644 --- a/src/main/java/com/volmit/iris/core/IrisSettings.java +++ b/src/main/java/com/volmit/iris/core/IrisSettings.java @@ -25,8 +25,6 @@ import com.volmit.iris.util.json.JSONException; import com.volmit.iris.util.json.JSONObject; import com.volmit.iris.util.plugin.VolmitSender; import lombok.Data; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; import java.io.IOException; @@ -43,6 +41,7 @@ public class IrisSettings { private IrisSettingsConcurrency concurrency = new IrisSettingsConcurrency(); private IrisSettingsStudio studio = new IrisSettingsStudio(); private IrisSettingsPerformance performance = new IrisSettingsPerformance(); + public static int getThreadCount(int c) { return switch (c) { case -1, -2, -4 -> Runtime.getRuntime().availableProcessors() / -c; diff --git a/src/main/java/com/volmit/iris/core/ServerConfigurator.java b/src/main/java/com/volmit/iris/core/ServerConfigurator.java index 117678f9f..daff067c6 100644 --- a/src/main/java/com/volmit/iris/core/ServerConfigurator.java +++ b/src/main/java/com/volmit/iris/core/ServerConfigurator.java @@ -41,16 +41,13 @@ import java.io.IOException; import java.util.concurrent.TimeUnit; public class ServerConfigurator { - public static void configure() - { + public static void configure() { IrisSettings.IrisSettingsAutoconfiguration s = IrisSettings.get().getAutoConfiguration(); - if(s.isConfigureSpigotTimeoutTime()) - { + if (s.isConfigureSpigotTimeoutTime()) { J.attempt(ServerConfigurator::increaseKeepAliveSpigot); } - if(s.isConfigurePaperWatchdogDelay()) - { + if (s.isConfigurePaperWatchdogDelay()) { J.attempt(ServerConfigurator::increasePaperWatchdog); } @@ -63,8 +60,7 @@ public class ServerConfigurator { f.load(spigotConfig); long tt = f.getLong("settings.timeout-time"); - if(tt < TimeUnit.MINUTES.toSeconds(5)) - { + if (tt < TimeUnit.MINUTES.toSeconds(5)) { Iris.warn("Updating spigot.yml timeout-time: " + tt + " -> " + TimeUnit.MINUTES.toSeconds(5) + " (5 minutes)"); Iris.warn("You can disable this change (autoconfigureServer) in Iris settings, then change back the value."); f.set("settings.timeout-time", TimeUnit.MINUTES.toSeconds(5)); @@ -78,8 +74,7 @@ public class ServerConfigurator { f.load(spigotConfig); long tt = f.getLong("settings.watchdog.early-warning-delay"); - if(tt < TimeUnit.MINUTES.toMillis(3)) - { + if (tt < TimeUnit.MINUTES.toMillis(3)) { Iris.warn("Updating paper.yml watchdog early-warning-delay: " + tt + " -> " + TimeUnit.MINUTES.toMillis(3) + " (3 minutes)"); Iris.warn("You can disable this change (autoconfigureServer) in Iris settings, then change back the value."); f.set("settings.watchdog.early-warning-delay", TimeUnit.MINUTES.toMillis(3)); @@ -112,8 +107,7 @@ public class ServerConfigurator { return null; } - public static void installDataPacks(boolean fullInstall) - { + public static void installDataPacks(boolean fullInstall) { Iris.info("Checking Data Packs..."); boolean reboot = false; File packs = new File("plugins/Iris/packs"); @@ -153,8 +147,7 @@ public class ServerConfigurator { Iris.info("Data Packs Setup!"); - if(fullInstall) - { + if (fullInstall) { verifyDataPacksPost(IrisSettings.get().getAutoConfiguration().isAutoRestartOnCustomBiomeInstall()); } } @@ -196,14 +189,10 @@ public class ServerConfigurator { } } - if(bad) - { - if(allowRestarting) - { + if (bad) { + if (allowRestarting) { restart(); - } - - else if (INMS.get().supportsDataPacks()) { + } else if (INMS.get().supportsDataPacks()) { Iris.error("============================================================================"); Iris.error(C.ITALIC + "You need to restart your server to properly generate custom biomes."); Iris.error(C.ITALIC + "By continuing, Iris will use backup biomes in place of the custom biomes."); diff --git a/src/main/java/com/volmit/iris/core/commands/CommandIris.java b/src/main/java/com/volmit/iris/core/commands/CommandIris.java index 7bb133722..70ac5781d 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandIris.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandIris.java @@ -20,15 +20,12 @@ package com.volmit.iris.core.commands; import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; -import com.volmit.iris.core.service.PreservationSVC; import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.engine.platform.PlatformChunkGenerator; import com.volmit.iris.util.collection.KList; -import com.volmit.iris.util.collection.KMap; -import com.volmit.iris.util.data.KCache; import com.volmit.iris.util.decree.DecreeContext; import com.volmit.iris.util.decree.DecreeExecutor; import com.volmit.iris.util.decree.DecreeOrigin; @@ -260,13 +257,13 @@ public class CommandIris implements DecreeExecutor { @Decree(description = "Update the pack of a world (UNSAFE!)", name = "^world", aliases = "update-world") public void updateWorld( @Param(description = "The world to update", contextual = true) - World world, + World world, @Param(description = "The pack to install into the world", contextual = true, aliases = "dimension") - IrisDimension pack, + IrisDimension pack, @Param(description = "Make sure to make a backup & read the warnings first!", defaultValue = "false", aliases = "c") - boolean confirm, + boolean confirm, @Param(description = "Should Iris download the pack again for you", defaultValue = "false", name = "fresh-download", aliases = {"fresh", "new"}) - boolean freshDownload + boolean freshDownload ) { if (!confirm) { sender().sendMessage(new String[]{ diff --git a/src/main/java/com/volmit/iris/core/commands/CommandStudio.java b/src/main/java/com/volmit/iris/core/commands/CommandStudio.java index 9693d20cd..8c5e93674 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandStudio.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandStudio.java @@ -62,7 +62,6 @@ import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.math.Spiraler; import com.volmit.iris.util.noise.CNG; import com.volmit.iris.util.parallel.MultiBurst; -import com.volmit.iris.util.plugin.IrisService; import com.volmit.iris.util.scheduling.J; import com.volmit.iris.util.scheduling.O; import com.volmit.iris.util.scheduling.PrecisionStopwatch; @@ -367,7 +366,7 @@ public class CommandStudio implements DecreeExecutor { @Decree(description = "Hotload a studio", aliases = "reload") public void hotload() { - if (!Iris.service(StudioSVC.class).isProjectOpen()){ + if (!Iris.service(StudioSVC.class).isProjectOpen()) { sender().sendMessage(C.RED + "No studio world open!"); return; } diff --git a/src/main/java/com/volmit/iris/core/gui/PregeneratorJob.java b/src/main/java/com/volmit/iris/core/gui/PregeneratorJob.java index aa60b0f1c..79ce58ae6 100644 --- a/src/main/java/com/volmit/iris/core/gui/PregeneratorJob.java +++ b/src/main/java/com/volmit/iris/core/gui/PregeneratorJob.java @@ -24,7 +24,6 @@ import com.volmit.iris.core.pregenerator.IrisPregenerator; import com.volmit.iris.core.pregenerator.PregenListener; import com.volmit.iris.core.pregenerator.PregenTask; import com.volmit.iris.core.pregenerator.PregeneratorMethod; -import com.volmit.iris.engine.data.cache.Cache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.format.Form; @@ -35,7 +34,6 @@ import com.volmit.iris.util.math.M; import com.volmit.iris.util.math.Position2; import com.volmit.iris.util.scheduling.ChronoLatch; import com.volmit.iris.util.scheduling.J; -import com.volmit.iris.util.scheduling.Looper; import javax.swing.JFrame; import javax.swing.JPanel; @@ -46,7 +44,6 @@ import java.awt.Graphics2D; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.image.BufferedImage; -import java.util.List; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; import java.util.function.Consumer; @@ -72,9 +69,9 @@ public class PregeneratorJob implements PregenListener { private JFrame frame; private PregenRenderer renderer; private int rgc = 0; - private ChronoLatch cl = new ChronoLatch(TimeUnit.MINUTES.toMillis(1)); + private final ChronoLatch cl = new ChronoLatch(TimeUnit.MINUTES.toMillis(1)); private String[] info; - private Engine engine; + private final Engine engine; public PregeneratorJob(PregenTask task, PregeneratorMethod method, Engine engine) { this.engine = engine; @@ -101,8 +98,7 @@ public class PregeneratorJob implements PregenListener { J.a(this.pregenerator::start, 20); } - public Mantle getMantle() - { + public Mantle getMantle() { return pregenerator.getMantle(); } @@ -243,8 +239,7 @@ public class PregeneratorJob implements PregenListener { @Override public void onChunkGenerating(int x, int z) { - if(engine != null) - { + if (engine != null) { return; } @@ -253,8 +248,7 @@ public class PregeneratorJob implements PregenListener { @Override public void onChunkGenerated(int x, int z) { - if(engine != null) - { + if (engine != null) { draw(x, z, engine.draw((x << 4) + 8, (z << 4) + 8)); return; } @@ -269,8 +263,7 @@ public class PregeneratorJob implements PregenListener { } private void shouldGc() { - if(cl.flip() && rgc > 16) - { + if (cl.flip() && rgc > 16) { System.gc(); } } @@ -329,8 +322,7 @@ public class PregeneratorJob implements PregenListener { @Override public void onChunkExistsInRegionGen(int x, int z) { - if(engine != null) - { + if (engine != null) { draw(x, z, engine.draw((x << 4) + 8, (z << 4) + 8)); return; } diff --git a/src/main/java/com/volmit/iris/core/loader/IrisData.java b/src/main/java/com/volmit/iris/core/loader/IrisData.java index dbee39943..79ff87dae 100644 --- a/src/main/java/com/volmit/iris/core/loader/IrisData.java +++ b/src/main/java/com/volmit/iris/core/loader/IrisData.java @@ -55,7 +55,6 @@ import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.context.IrisContext; import com.volmit.iris.util.format.C; import com.volmit.iris.util.math.RNG; -import com.volmit.iris.util.matter.IrisMatter; import com.volmit.iris.util.scheduling.ChronoLatch; import com.volmit.iris.util.scheduling.J; import lombok.Data; diff --git a/src/main/java/com/volmit/iris/core/loader/ObjectResourceLoader.java b/src/main/java/com/volmit/iris/core/loader/ObjectResourceLoader.java index 3985f325c..62736470c 100644 --- a/src/main/java/com/volmit/iris/core/loader/ObjectResourceLoader.java +++ b/src/main/java/com/volmit/iris/core/loader/ObjectResourceLoader.java @@ -22,14 +22,8 @@ import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.engine.object.IrisObject; import com.volmit.iris.util.collection.KList; -import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.collection.KSet; import com.volmit.iris.util.data.KCache; -import com.volmit.iris.util.format.C; -import com.volmit.iris.util.format.Form; -import com.volmit.iris.util.math.M; -import com.volmit.iris.util.scheduling.ChronoLatch; -import com.volmit.iris.util.scheduling.J; import com.volmit.iris.util.scheduling.PrecisionStopwatch; import java.io.File; @@ -127,7 +121,7 @@ public class ObjectResourceLoader extends ResourceLoader { return load(name, true); } - private IrisObject loadRaw(String name){ + private IrisObject loadRaw(String name) { for (File i : getFolders(name)) { for (File j : i.listFiles()) { if (j.isFile() && j.getName().endsWith(".iob") && j.getName().split("\\Q.\\E")[0].equals(name)) { diff --git a/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java b/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java index 61e3f65af..93592b482 100644 --- a/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java +++ b/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java @@ -25,7 +25,6 @@ import com.volmit.iris.core.project.SchemaBuilder; import com.volmit.iris.core.service.PreservationSVC; import com.volmit.iris.engine.framework.MeteredCache; import com.volmit.iris.util.collection.KList; -import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.collection.KSet; import com.volmit.iris.util.data.KCache; import com.volmit.iris.util.format.C; @@ -34,7 +33,6 @@ import com.volmit.iris.util.io.IO; import com.volmit.iris.util.json.JSONArray; import com.volmit.iris.util.json.JSONObject; import com.volmit.iris.util.scheduling.ChronoLatch; -import com.volmit.iris.util.scheduling.IrisLock; import com.volmit.iris.util.scheduling.J; import com.volmit.iris.util.scheduling.PrecisionStopwatch; import lombok.Data; @@ -238,8 +236,7 @@ public class ResourceLoader implements MeteredCache { return load(name, true); } - private T loadRaw(String name) - { + private T loadRaw(String name) { for (File i : getFolders(name)) { //noinspection ConstantConditions for (File j : i.listFiles()) { diff --git a/src/main/java/com/volmit/iris/core/loader/ScriptResourceLoader.java b/src/main/java/com/volmit/iris/core/loader/ScriptResourceLoader.java index 7e725c372..329756a00 100644 --- a/src/main/java/com/volmit/iris/core/loader/ScriptResourceLoader.java +++ b/src/main/java/com/volmit/iris/core/loader/ScriptResourceLoader.java @@ -113,8 +113,7 @@ public class ScriptResourceLoader extends ResourceLoader { return null; } - private IrisScript loadRaw(String name) - { + private IrisScript loadRaw(String name) { for (File i : getFolders(name)) { for (File j : i.listFiles()) { if (j.isFile() && j.getName().endsWith(".js") && j.getName().split("\\Q.\\E")[0].equals(name)) { diff --git a/src/main/java/com/volmit/iris/core/pregenerator/PregenTask.java b/src/main/java/com/volmit/iris/core/pregenerator/PregenTask.java index 45d958489..facaf8e2e 100644 --- a/src/main/java/com/volmit/iris/core/pregenerator/PregenTask.java +++ b/src/main/java/com/volmit/iris/core/pregenerator/PregenTask.java @@ -18,28 +18,20 @@ package com.volmit.iris.core.pregenerator; -import com.volmit.iris.Iris; -import com.volmit.iris.core.gui.PregeneratorJob; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; -import com.volmit.iris.util.collection.KSet; import com.volmit.iris.util.math.Position2; -import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.math.Spiraled; import com.volmit.iris.util.math.Spiraler; import lombok.Builder; import lombok.Data; -import org.checkerframework.checker.units.qual.K; -import java.util.Arrays; import java.util.Comparator; -import java.util.Set; -import java.util.function.Function; @Builder @Data public class PregenTask { - private static final Position2 ZERO = new Position2(0,0); + private static final Position2 ZERO = new Position2(0, 0); private static final KList ORDER_CENTER = computeChunkOrder(); private static final KMap> ORDERS = new KMap<>(); @@ -51,13 +43,13 @@ public class PregenTask { private int height = 1; public static void iterateRegion(int xr, int zr, Spiraled s, Position2 pull) { - for (Position2 i : ORDERS.computeIfAbsent(pull, PregenTask::computeOrder)) { + for (Position2 i : ORDERS.computeIfAbsent(pull, PregenTask::computeOrder)) { s.on(i.getX() + (xr << 5), i.getZ() + (zr << 5)); } } public static void iterateRegion(int xr, int zr, Spiraled s) { - iterateRegion(xr, zr, s, new Position2(0,0)); + iterateRegion(xr, zr, s, new Position2(0, 0)); } private static KList computeOrder(Position2 pull) { diff --git a/src/main/java/com/volmit/iris/core/pregenerator/methods/AsyncPregenMethod.java b/src/main/java/com/volmit/iris/core/pregenerator/methods/AsyncPregenMethod.java index 249c21518..aa828ffd5 100644 --- a/src/main/java/com/volmit/iris/core/pregenerator/methods/AsyncPregenMethod.java +++ b/src/main/java/com/volmit/iris/core/pregenerator/methods/AsyncPregenMethod.java @@ -133,8 +133,7 @@ public class AsyncPregenMethod implements PregeneratorMethod { @Override public Mantle getMantle() { - if(IrisToolbelt.isIrisWorld(world)) - { + if (IrisToolbelt.isIrisWorld(world)) { return IrisToolbelt.access(world).getEngine().getMantle().getMantle(); } diff --git a/src/main/java/com/volmit/iris/core/pregenerator/methods/HybridPregenMethod.java b/src/main/java/com/volmit/iris/core/pregenerator/methods/HybridPregenMethod.java index 23fc072cc..753610582 100644 --- a/src/main/java/com/volmit/iris/core/pregenerator/methods/HybridPregenMethod.java +++ b/src/main/java/com/volmit/iris/core/pregenerator/methods/HybridPregenMethod.java @@ -102,8 +102,7 @@ public class HybridPregenMethod implements PregeneratorMethod { @Override public Mantle getMantle() { - if (headless == null) - { + if (headless == null) { return inWorld.getMantle(); } diff --git a/src/main/java/com/volmit/iris/core/pregenerator/methods/MedievalPregenMethod.java b/src/main/java/com/volmit/iris/core/pregenerator/methods/MedievalPregenMethod.java index 47d911268..2ee50ea2f 100644 --- a/src/main/java/com/volmit/iris/core/pregenerator/methods/MedievalPregenMethod.java +++ b/src/main/java/com/volmit/iris/core/pregenerator/methods/MedievalPregenMethod.java @@ -111,8 +111,7 @@ public class MedievalPregenMethod implements PregeneratorMethod { @Override public Mantle getMantle() { - if(IrisToolbelt.isIrisWorld(world)) - { + if (IrisToolbelt.isIrisWorld(world)) { return IrisToolbelt.access(world).getEngine().getMantle().getMantle(); } diff --git a/src/main/java/com/volmit/iris/core/service/PreservationSVC.java b/src/main/java/com/volmit/iris/core/service/PreservationSVC.java index c6d57940b..b3081f7dc 100644 --- a/src/main/java/com/volmit/iris/core/service/PreservationSVC.java +++ b/src/main/java/com/volmit/iris/core/service/PreservationSVC.java @@ -19,22 +19,16 @@ package com.volmit.iris.core.service; import com.volmit.iris.Iris; -import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.loader.IrisData; -import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.MeteredCache; -import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.context.IrisContext; import com.volmit.iris.util.data.KCache; import com.volmit.iris.util.format.Form; import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.IrisService; import com.volmit.iris.util.scheduling.Looper; -import com.volmit.iris.util.stream.utility.CachedStream2D; -import java.util.Comparator; import java.util.List; -import java.util.Objects; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ExecutorService; import java.util.stream.Collectors; @@ -57,27 +51,24 @@ public class PreservationSVC implements IrisService { services.add(service); } - public void printCaches() - { + public void printCaches() { long s = caches.stream().filter(i -> !i.isClosed()).mapToLong(MeteredCache::getSize).sum(); long m = caches.stream().filter(i -> !i.isClosed()).mapToLong(MeteredCache::getMaxSize).sum(); double p = 0; double mf = 0; - for(MeteredCache i : caches) - { - if(i.isClosed()) - { + for (MeteredCache i : caches) { + if (i.isClosed()) { continue; } mf++; - p+= i.getUsage(); + p += i.getUsage(); } mf = mf == 0 ? 1 : mf; - Iris.info("Cached " + Form.f(s) + " / " + Form.f(m) + " (" + Form.pc(p/mf) + ") from " + caches.size() + " Caches"); + Iris.info("Cached " + Form.f(s) + " / " + Form.f(m) + " (" + Form.pc(p / mf) + ") from " + caches.size() + " Caches"); } public void dereference() { @@ -131,8 +122,7 @@ public class PreservationSVC implements IrisService { }); } - public void updateCaches() - { + public void updateCaches() { caches.removeIf(MeteredCache::isClosed); } diff --git a/src/main/java/com/volmit/iris/engine/IrisEngine.java b/src/main/java/com/volmit/iris/engine/IrisEngine.java index 0000487c9..1d1ccedc9 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngine.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngine.java @@ -21,30 +21,20 @@ package com.volmit.iris.engine; import com.google.common.util.concurrent.AtomicDouble; import com.google.gson.Gson; import com.volmit.iris.Iris; -import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.events.IrisEngineHotloadEvent; import com.volmit.iris.core.gui.PregeneratorJob; import com.volmit.iris.core.project.IrisProject; import com.volmit.iris.core.service.PreservationSVC; -import com.volmit.iris.engine.actuator.IrisBiomeActuator; -import com.volmit.iris.engine.actuator.IrisDecorantActuator; -import com.volmit.iris.engine.actuator.IrisTerrainNormalActuator; import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.EngineEffects; import com.volmit.iris.engine.framework.EngineMetrics; import com.volmit.iris.engine.framework.EngineMode; -import com.volmit.iris.engine.framework.EngineStage; import com.volmit.iris.engine.framework.EngineTarget; import com.volmit.iris.engine.framework.EngineWorldManager; import com.volmit.iris.engine.framework.SeedManager; import com.volmit.iris.engine.framework.WrongEngineBroException; import com.volmit.iris.engine.mantle.EngineMantle; -import com.volmit.iris.engine.mode.ModeOverworld; -import com.volmit.iris.engine.modifier.IrisCarveModifier; -import com.volmit.iris.engine.modifier.IrisDepositModifier; -import com.volmit.iris.engine.modifier.IrisPerfectionModifier; -import com.volmit.iris.engine.modifier.IrisPostModifier; import com.volmit.iris.engine.object.IrisBiome; import com.volmit.iris.engine.object.IrisBiomePaletteLayer; import com.volmit.iris.engine.object.IrisDecorator; @@ -53,10 +43,8 @@ import com.volmit.iris.engine.object.IrisJigsawStructure; import com.volmit.iris.engine.object.IrisObjectPlacement; import com.volmit.iris.engine.scripting.EngineExecutionEnvironment; import com.volmit.iris.util.atomics.AtomicRollingSequence; -import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.context.IrisContext; -import com.volmit.iris.util.data.B; import com.volmit.iris.util.documentation.BlockCoordinates; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; @@ -65,8 +53,6 @@ import com.volmit.iris.util.io.IO; import com.volmit.iris.util.mantle.MantleFlag; import com.volmit.iris.util.math.M; import com.volmit.iris.util.math.RNG; -import com.volmit.iris.util.matter.MatterCavern; -import com.volmit.iris.util.matter.MatterFluidBody; import com.volmit.iris.util.scheduling.ChronoLatch; import com.volmit.iris.util.scheduling.J; import com.volmit.iris.util.scheduling.PrecisionStopwatch; @@ -196,8 +182,7 @@ public class IrisEngine implements Engine { } private void setupMode() { - if(mode != null) - { + if (mode != null) { mode.close(); } @@ -462,7 +447,7 @@ public class IrisEngine implements Engine { mode.generate(x, z, blocks, vbiomes, multicore); } - getMantle().getMantle().flag(x>>4, z>>4, MantleFlag.REAL, true); + getMantle().getMantle().flag(x >> 4, z >> 4, MantleFlag.REAL, true); getMetrics().getTotal().put(p.getMilliseconds()); generated.incrementAndGet(); recycle(); diff --git a/src/main/java/com/volmit/iris/engine/IrisWorldManager.java b/src/main/java/com/volmit/iris/engine/IrisWorldManager.java index a09e055da..0dc5719b8 100644 --- a/src/main/java/com/volmit/iris/engine/IrisWorldManager.java +++ b/src/main/java/com/volmit/iris/engine/IrisWorldManager.java @@ -21,7 +21,6 @@ package com.volmit.iris.engine; import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.engine.data.cache.Cache; -import com.volmit.iris.engine.data.cache.Multicache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.EngineAssignedWorldManager; import com.volmit.iris.engine.object.IRare; @@ -43,8 +42,6 @@ import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.mantle.MantleFlag; import com.volmit.iris.util.math.M; import com.volmit.iris.util.math.RNG; -import com.volmit.iris.util.matter.MatterCavern; -import com.volmit.iris.util.matter.MatterFluidBody; import com.volmit.iris.util.matter.MatterMarker; import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.Chunks; @@ -56,10 +53,8 @@ import com.volmit.iris.util.scheduling.jobs.QueueJob; import io.papermc.lib.PaperLib; import lombok.Data; import lombok.EqualsAndHashCode; -import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; -import org.bukkit.block.data.BlockData; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -68,7 +63,6 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.inventory.ItemStack; -import java.net.MalformedURLException; import java.util.List; import java.util.Map; import java.util.Set; @@ -76,7 +70,6 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -133,8 +126,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager { getEngine().getWorld().tryGetRealWorld(); } - if(!IrisSettings.get().getWorld().isMarkerEntitySpawningSystem() && !IrisSettings.get().getWorld().isAnbientEntitySpawningSystem()) - { + if (!IrisSettings.get().getWorld().isMarkerEntitySpawningSystem() && !IrisSettings.get().getWorld().isAnbientEntitySpawningSystem()) { return 3000; } @@ -201,13 +193,11 @@ public class IrisWorldManager extends EngineAssignedWorldManager { for (int z = -r; z <= r; z++) { if (c.getWorld().isChunkLoaded(c.getX() + x, c.getZ() + z) && Chunks.isSafe(getEngine().getWorld().realWorld(), c.getX() + x, c.getZ() + z)) { - if(IrisSettings.get().getWorld().isPostLoadBlockUpdates()) - { + if (IrisSettings.get().getWorld().isPostLoadBlockUpdates()) { getEngine().updateChunk(c.getWorld().getChunkAt(c.getX() + x, c.getZ() + z)); } - if(IrisSettings.get().getWorld().isMarkerEntitySpawningSystem()) - { + if (IrisSettings.get().getWorld().isMarkerEntitySpawningSystem()) { Chunk cx = getEngine().getWorld().realWorld().getChunkAt(c.getX() + x, c.getZ() + z); int finalX = c.getX() + x; int finalZ = c.getZ() + z; @@ -299,8 +289,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager { } private void spawnIn(Chunk c, boolean initial) { - if(getEngine().isClosed()) - { + if (getEngine().isClosed()) { return; } @@ -330,8 +319,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager { .popRandom(RNG.r) : null; //@done - if(IrisSettings.get().getWorld().isMarkerEntitySpawningSystem()) - { + if (IrisSettings.get().getWorld().isMarkerEntitySpawningSystem()) { getSpawnersFromMarkers(c).forEach((block, spawners) -> { if (spawners.isEmpty()) { return; @@ -496,8 +484,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager { @Override public void onChunkLoad(Chunk e, boolean generated) { - if(getEngine().isClosed()) - { + if (getEngine().isClosed()) { return; } @@ -507,8 +494,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager { } private void spawn(IrisPosition block, IrisSpawner spawner, boolean initial) { - if(getEngine().isClosed()) - { + if (getEngine().isClosed()) { return; } @@ -538,8 +524,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager { @Override public void teleportAsync(PlayerTeleportEvent e) { - if(IrisSettings.get().getWorld().getAsyncTeleport().isEnabled()) - { + if (IrisSettings.get().getWorld().getAsyncTeleport().isEnabled()) { e.setCancelled(true); warmupAreaAsync(e.getPlayer(), e.getTo(), () -> J.s(() -> { ignoreTP.set(true); @@ -550,46 +535,43 @@ public class IrisWorldManager extends EngineAssignedWorldManager { } private void warmupAreaAsync(Player player, Location to, Runnable r) { - J.a(() -> { - int viewDistance = IrisSettings.get().getWorld().getAsyncTeleport().getLoadViewDistance(); - KList> futures = new KList<>(); - for(int i = -viewDistance; i <= viewDistance; i++) - { - for(int j = -viewDistance; j <= viewDistance; j++) - { - int finalJ = j; - int finalI = i; + J.a(() -> { + int viewDistance = IrisSettings.get().getWorld().getAsyncTeleport().getLoadViewDistance(); + KList> futures = new KList<>(); + for (int i = -viewDistance; i <= viewDistance; i++) { + for (int j = -viewDistance; j <= viewDistance; j++) { + int finalJ = j; + int finalI = i; - if(to.getWorld().isChunkLoaded((to.getBlockX() >> 4) + i, (to.getBlockZ() >> 4) + j)) - { - futures.add(CompletableFuture.completedFuture(null)); - continue; - } + if (to.getWorld().isChunkLoaded((to.getBlockX() >> 4) + i, (to.getBlockZ() >> 4) + j)) { + futures.add(CompletableFuture.completedFuture(null)); + continue; + } - futures.add(MultiBurst.burst.completeValue(() - -> PaperLib.getChunkAtAsync(to.getWorld(), - (to.getBlockX() >> 4) + finalI, - (to.getBlockZ() >> 4) + finalJ, - true, IrisSettings.get().getWorld().getAsyncTeleport().isUrgent()).get())); - } - } + futures.add(MultiBurst.burst.completeValue(() + -> PaperLib.getChunkAtAsync(to.getWorld(), + (to.getBlockX() >> 4) + finalI, + (to.getBlockZ() >> 4) + finalJ, + true, IrisSettings.get().getWorld().getAsyncTeleport().isUrgent()).get())); + } + } - new QueueJob>() { - @Override - public void execute(Future chunkFuture) { - try { - chunkFuture.get(); - } catch (InterruptedException | ExecutionException e) { + new QueueJob>() { + @Override + public void execute(Future chunkFuture) { + try { + chunkFuture.get(); + } catch (InterruptedException | ExecutionException e) { - } - } + } + } - @Override - public String getName() { - return "Loading Chunks"; - } - }.queue(futures).execute(new VolmitSender(player), true, r); - }); + @Override + public String getName() { + return "Loading Chunks"; + } + }.queue(futures).execute(new VolmitSender(player), true, r); + }); } public Map> getSpawnersFromMarkers(Chunk c) { diff --git a/src/main/java/com/volmit/iris/engine/framework/Engine.java b/src/main/java/com/volmit/iris/engine/framework/Engine.java index 7805bab31..258bb6b6b 100644 --- a/src/main/java/com/volmit/iris/engine/framework/Engine.java +++ b/src/main/java/com/volmit/iris/engine/framework/Engine.java @@ -25,7 +25,6 @@ import com.volmit.iris.core.gui.components.Renderer; import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.loader.IrisRegistrant; import com.volmit.iris.engine.IrisComplex; -import com.volmit.iris.engine.IrisWorldManager; import com.volmit.iris.engine.data.cache.Cache; import com.volmit.iris.engine.data.chunk.TerrainChunk; import com.volmit.iris.engine.mantle.EngineMantle; @@ -61,7 +60,6 @@ import com.volmit.iris.util.math.M; import com.volmit.iris.util.math.Position2; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.matter.MatterCavern; -import com.volmit.iris.util.matter.MatterFluidBody; import com.volmit.iris.util.matter.MatterUpdate; import com.volmit.iris.util.parallel.BurstExecutor; import com.volmit.iris.util.parallel.MultiBurst; @@ -74,13 +72,11 @@ import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.Sound; import org.bukkit.block.Biome; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; import org.bukkit.command.CommandSender; -import org.bukkit.entity.EnderSignal; import org.bukkit.entity.Player; import org.bukkit.generator.ChunkGenerator; import org.bukkit.inventory.Inventory; @@ -794,12 +790,10 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat } default void gotoJigsaw(IrisJigsawStructure s, Player player) { - if(s.getLoadKey().equals(getDimension().getStronghold())) - { + if (s.getLoadKey().equals(getDimension().getStronghold())) { KList p = getDimension().getStrongholds(getSeedManager().getSpawn()); - if(p.isEmpty()) - { + if (p.isEmpty()) { player.sendMessage(C.GOLD + "No strongholds in world."); } @@ -905,10 +899,8 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat Locator.region(r.getLoadKey()).find(player); } - default void cleanupMantleChunk(int x, int z) - { - if(IrisSettings.get().getPerformance().isTrimMantleInStudio() || !isStudio()) - { + default void cleanupMantleChunk(int x, int z) { + if (IrisSettings.get().getPerformance().isTrimMantleInStudio() || !isStudio()) { J.a(() -> getMantle().cleanupChunk(x, z)); } } diff --git a/src/main/java/com/volmit/iris/engine/framework/EngineAssignedWorldManager.java b/src/main/java/com/volmit/iris/engine/framework/EngineAssignedWorldManager.java index 7b92a95c5..6632ebf1b 100644 --- a/src/main/java/com/volmit/iris/engine/framework/EngineAssignedWorldManager.java +++ b/src/main/java/com/volmit/iris/engine/framework/EngineAssignedWorldManager.java @@ -71,26 +71,19 @@ public abstract class EngineAssignedWorldManager extends EngineAssignedComponent @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void on(PlayerTeleportEvent e) { - if(ignoreTP.get()) - { + if (ignoreTP.get()) { return; } - if(!PaperLib.isPaper() || e.getTo() == null) - { + if (!PaperLib.isPaper() || e.getTo() == null) { return; } - try - { - if(e.getTo().getWorld().equals(getTarget().getWorld().realWorld())) - { + try { + if (e.getTo().getWorld().equals(getTarget().getWorld().realWorld())) { getEngine().getWorldManager().teleportAsync(e); } - } - - catch(Throwable ex) - { + } catch (Throwable ex) { } } diff --git a/src/main/java/com/volmit/iris/engine/framework/EngineMode.java b/src/main/java/com/volmit/iris/engine/framework/EngineMode.java index 22018a963..44bb57963 100644 --- a/src/main/java/com/volmit/iris/engine/framework/EngineMode.java +++ b/src/main/java/com/volmit/iris/engine/framework/EngineMode.java @@ -32,19 +32,16 @@ public interface EngineMode extends Staged { Engine getEngine(); - default MultiBurst burst() - { + default MultiBurst burst() { return getEngine().burst(); } - default EngineStage burst(EngineStage... stages) - { + default EngineStage burst(EngineStage... stages) { return (x, z, blocks, biomes, multicore) -> { BurstExecutor e = burst().burst(stages.length); e.setMulticore(multicore); - for(EngineStage i : stages) - { + for (EngineStage i : stages) { e.queue(() -> i.generate(x, z, blocks, biomes, multicore)); } @@ -52,13 +49,11 @@ public interface EngineMode extends Staged { }; } - default IrisComplex getComplex() - { + default IrisComplex getComplex() { return getEngine().getComplex(); } - default EngineMantle getMantle() - { + default EngineMantle getMantle() { return getEngine().getMantle(); } @@ -67,8 +62,7 @@ public interface EngineMode extends Staged { } @BlockCoordinates - default void generate(int x, int z, Hunk blocks, Hunk biomes, boolean multicore) - { + default void generate(int x, int z, Hunk blocks, Hunk biomes, boolean multicore) { for (EngineStage i : getStages()) { i.generate(x, z, blocks, biomes, multicore); } diff --git a/src/main/java/com/volmit/iris/engine/framework/IrisEngineMode.java b/src/main/java/com/volmit/iris/engine/framework/IrisEngineMode.java index f0b9d17fa..bdc675376 100644 --- a/src/main/java/com/volmit/iris/engine/framework/IrisEngineMode.java +++ b/src/main/java/com/volmit/iris/engine/framework/IrisEngineMode.java @@ -25,18 +25,15 @@ public abstract class IrisEngineMode implements EngineMode { private final KList stages; private boolean closed; - public IrisEngineMode(Engine engine) - { + public IrisEngineMode(Engine engine) { this.engine = engine; this.stages = new KList<>(); this.closed = false; } @Override - public synchronized void close() - { - if(closed) - { + public synchronized void close() { + if (closed) { return; } diff --git a/src/main/java/com/volmit/iris/engine/framework/MeteredCache.java b/src/main/java/com/volmit/iris/engine/framework/MeteredCache.java index 1f566a861..5548ce5a2 100644 --- a/src/main/java/com/volmit/iris/engine/framework/MeteredCache.java +++ b/src/main/java/com/volmit/iris/engine/framework/MeteredCache.java @@ -20,17 +20,15 @@ package com.volmit.iris.engine.framework; import com.volmit.iris.util.data.KCache; -public interface MeteredCache -{ +public interface MeteredCache { long getSize(); KCache getRawCache(); long getMaxSize(); - default double getUsage() - { - return (double)getSize() / (double)getMaxSize(); + default double getUsage() { + return (double) getSize() / (double) getMaxSize(); } boolean isClosed(); diff --git a/src/main/java/com/volmit/iris/engine/framework/Staged.java b/src/main/java/com/volmit/iris/engine/framework/Staged.java index 069d8af77..1a4709b74 100644 --- a/src/main/java/com/volmit/iris/engine/framework/Staged.java +++ b/src/main/java/com/volmit/iris/engine/framework/Staged.java @@ -25,8 +25,7 @@ public interface Staged { void registerStage(EngineStage stage); - default void dump() - { + default void dump() { getStages().forEach(EngineStage::close); getStages().clear(); } diff --git a/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java b/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java index bc5cd5e31..cf87b65f7 100644 --- a/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java +++ b/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java @@ -18,7 +18,6 @@ package com.volmit.iris.engine.mantle; -import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.engine.IrisComplex; @@ -46,12 +45,9 @@ import com.volmit.iris.util.matter.MatterMarker; import com.volmit.iris.util.matter.slices.UpdateMatter; import com.volmit.iris.util.parallel.BurstExecutor; import com.volmit.iris.util.parallel.MultiBurst; -import com.volmit.iris.util.scheduling.J; -import io.papermc.lib.PaperLib; import org.bukkit.block.TileState; import org.bukkit.block.data.BlockData; -import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; // TODO: MOVE PLACER OUT OF MATTER INTO ITS OWN THING @@ -269,16 +265,14 @@ public interface EngineMantle extends IObjectPlacer { MantleObjectComponent getObjectComponent(); - default boolean isCovered(int x, int z) - { + default boolean isCovered(int x, int z) { int s = getRealRadius(); for (int i = -s; i <= s; i++) { for (int j = -s; j <= s; j++) { int xx = i + x; int zz = j + z; - if(!getMantle().hasFlag(xx, zz, MantleFlag.REAL)) - { + if (!getMantle().hasFlag(xx, zz, MantleFlag.REAL)) { return false; } } @@ -287,10 +281,8 @@ public interface EngineMantle extends IObjectPlacer { return true; } - default void cleanupChunk(int x, int z) - { - if(!getMantle().hasFlag(x, z, MantleFlag.CLEANED) && isCovered(x, z)) - { + default void cleanupChunk(int x, int z) { + if (!getMantle().hasFlag(x, z, MantleFlag.CLEANED) && isCovered(x, z)) { getMantle().raiseFlag(x, z, MantleFlag.CLEANED, () -> { getMantle().deleteChunkSlice(x, z, BlockData.class); getMantle().deleteChunkSlice(x, z, String.class); diff --git a/src/main/java/com/volmit/iris/engine/mode/ModeEnclosure.java b/src/main/java/com/volmit/iris/engine/mode/ModeEnclosure.java index 24def0438..3ea7e28f4 100644 --- a/src/main/java/com/volmit/iris/engine/mode/ModeEnclosure.java +++ b/src/main/java/com/volmit/iris/engine/mode/ModeEnclosure.java @@ -25,15 +25,14 @@ import com.volmit.iris.engine.framework.EngineMode; import com.volmit.iris.engine.framework.IrisEngineMode; public class ModeEnclosure extends IrisEngineMode implements EngineMode { - public ModeEnclosure(Engine engine) - { + public ModeEnclosure(Engine engine) { super(engine); var terrain = new IrisTerrainNormalActuator(getEngine()); var biome = new IrisBiomeActuator(getEngine()); registerStage(burst( - (x, z, k, p, m) -> terrain.actuate(x, z, k, m), - (x, z, k, p, m) -> biome.actuate(x, z, p, m) + (x, z, k, p, m) -> terrain.actuate(x, z, k, m), + (x, z, k, p, m) -> biome.actuate(x, z, p, m) )); } } diff --git a/src/main/java/com/volmit/iris/engine/mode/ModeIslands.java b/src/main/java/com/volmit/iris/engine/mode/ModeIslands.java index 5dd557b52..0ad388a43 100644 --- a/src/main/java/com/volmit/iris/engine/mode/ModeIslands.java +++ b/src/main/java/com/volmit/iris/engine/mode/ModeIslands.java @@ -25,15 +25,14 @@ import com.volmit.iris.engine.framework.EngineMode; import com.volmit.iris.engine.framework.IrisEngineMode; public class ModeIslands extends IrisEngineMode implements EngineMode { - public ModeIslands(Engine engine) - { + public ModeIslands(Engine engine) { super(engine); var terrain = new IrisTerrainNormalActuator(getEngine()); var biome = new IrisBiomeActuator(getEngine()); registerStage(burst( - (x, z, k, p, m) -> terrain.actuate(x, z, k, m), - (x, z, k, p, m) -> biome.actuate(x, z, p, m) + (x, z, k, p, m) -> terrain.actuate(x, z, k, m), + (x, z, k, p, m) -> biome.actuate(x, z, p, m) )); } } diff --git a/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java b/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java index 07269ca3d..9530b043d 100644 --- a/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java +++ b/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java @@ -31,8 +31,7 @@ import com.volmit.iris.engine.modifier.IrisPostModifier; import org.bukkit.block.data.BlockData; public class ModeOverworld extends IrisEngineMode implements EngineMode { - public ModeOverworld(Engine engine) - { + public ModeOverworld(Engine engine) { super(engine); var terrain = new IrisTerrainNormalActuator(getEngine()); var biome = new IrisBiomeActuator(getEngine()); @@ -43,9 +42,9 @@ public class ModeOverworld extends IrisEngineMode implements EngineMode { var perfection = new IrisPerfectionModifier(getEngine()); registerStage(burst( - (x, z, k, p, m) -> generateMatter(x >> 4, z >> 4, m), - (x, z, k, p, m) -> terrain.actuate(x, z, k, m), - (x, z, k, p, m) -> biome.actuate(x, z, p, m) + (x, z, k, p, m) -> generateMatter(x >> 4, z >> 4, m), + (x, z, k, p, m) -> terrain.actuate(x, z, k, m), + (x, z, k, p, m) -> biome.actuate(x, z, p, m) )); registerStage((x, z, k, p, m) -> cave.modify(x >> 4, z >> 4, k, m)); registerStage((x, z, k, p, m) -> deposit.modify(x, z, k, m)); diff --git a/src/main/java/com/volmit/iris/engine/mode/ModeSuperFlat.java b/src/main/java/com/volmit/iris/engine/mode/ModeSuperFlat.java index 89e3b4d64..76c450500 100644 --- a/src/main/java/com/volmit/iris/engine/mode/ModeSuperFlat.java +++ b/src/main/java/com/volmit/iris/engine/mode/ModeSuperFlat.java @@ -25,15 +25,14 @@ import com.volmit.iris.engine.framework.EngineMode; import com.volmit.iris.engine.framework.IrisEngineMode; public class ModeSuperFlat extends IrisEngineMode implements EngineMode { - public ModeSuperFlat(Engine engine) - { + public ModeSuperFlat(Engine engine) { super(engine); var terrain = new IrisTerrainNormalActuator(getEngine()); var biome = new IrisBiomeActuator(getEngine()); registerStage(burst( - (x, z, k, p, m) -> terrain.actuate(x, z, k, m), - (x, z, k, p, m) -> biome.actuate(x, z, p, m) + (x, z, k, p, m) -> terrain.actuate(x, z, k, m), + (x, z, k, p, m) -> biome.actuate(x, z, p, m) )); } } diff --git a/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java b/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java index b03dac036..22d31655c 100644 --- a/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java +++ b/src/main/java/com/volmit/iris/engine/modifier/IrisCarveModifier.java @@ -39,7 +39,6 @@ import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.matter.MatterCavern; import com.volmit.iris.util.matter.slices.MarkerMatter; import com.volmit.iris.util.scheduling.PrecisionStopwatch; -import com.volmit.iris.util.stream.utility.CachedStream2D; import lombok.Data; import org.bukkit.Material; import org.bukkit.block.data.BlockData; @@ -237,8 +236,7 @@ public class IrisCarveModifier extends EngineAssignedModifier { blocks = biome.generateCeilingLayers(getDimension(), xx, zz, rng, 3, zone.ceiling, getData(), getComplex()); - if(zone.ceiling + 1 < mantle.getWorldHeight()) - { + if (zone.ceiling + 1 < mantle.getWorldHeight()) { for (int i = 0; i < zone.ceiling + 1; i++) { if (!blocks.hasIndex(i)) { break; diff --git a/src/main/java/com/volmit/iris/engine/object/IrisCommand.java b/src/main/java/com/volmit/iris/engine/object/IrisCommand.java index d9027d2a3..d64b4d213 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisCommand.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisCommand.java @@ -21,7 +21,6 @@ package com.volmit.iris.engine.object; import com.volmit.iris.Iris; import com.volmit.iris.engine.object.annotations.ArrayType; import com.volmit.iris.engine.object.annotations.Desc; -import com.volmit.iris.engine.object.annotations.RegistryListResource; import com.volmit.iris.engine.object.annotations.Snippet; import com.volmit.iris.util.collection.KList; import lombok.Data; diff --git a/src/main/java/com/volmit/iris/engine/object/IrisCommandRegistry.java b/src/main/java/com/volmit/iris/engine/object/IrisCommandRegistry.java index ace70422a..8dcc244a1 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisCommandRegistry.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisCommandRegistry.java @@ -18,7 +18,12 @@ package com.volmit.iris.engine.object; -import com.volmit.iris.engine.object.annotations.*; +import com.volmit.iris.engine.object.annotations.ArrayType; +import com.volmit.iris.engine.object.annotations.DependsOn; +import com.volmit.iris.engine.object.annotations.Desc; +import com.volmit.iris.engine.object.annotations.MaxNumber; +import com.volmit.iris.engine.object.annotations.MinNumber; +import com.volmit.iris.engine.object.annotations.Snippet; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.math.RNG; import lombok.Data; diff --git a/src/main/java/com/volmit/iris/engine/object/IrisDimensionModeType.java b/src/main/java/com/volmit/iris/engine/object/IrisDimensionModeType.java index 789ae615a..09f546825 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisDimensionModeType.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisDimensionModeType.java @@ -44,13 +44,11 @@ public enum IrisDimensionModeType { ; private final Function factory; - IrisDimensionModeType(Function factory) - { + IrisDimensionModeType(Function factory) { this.factory = factory; } - public EngineMode create(Engine e) - { + public EngineMode create(Engine e) { return factory.apply(e); } } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisEffect.java b/src/main/java/com/volmit/iris/engine/object/IrisEffect.java index 8175c19f3..c8305111e 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisEffect.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisEffect.java @@ -21,8 +21,13 @@ package com.volmit.iris.engine.object; import com.volmit.iris.Iris; import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.framework.Engine; -import com.volmit.iris.engine.object.annotations.*; -import com.volmit.iris.util.collection.KList; +import com.volmit.iris.engine.object.annotations.ArrayType; +import com.volmit.iris.engine.object.annotations.DependsOn; +import com.volmit.iris.engine.object.annotations.Desc; +import com.volmit.iris.engine.object.annotations.MaxNumber; +import com.volmit.iris.engine.object.annotations.MinNumber; +import com.volmit.iris.engine.object.annotations.Required; +import com.volmit.iris.engine.object.annotations.Snippet; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.scheduling.ChronoLatch; import com.volmit.iris.util.scheduling.J; diff --git a/src/main/java/com/volmit/iris/engine/object/IrisLake.java b/src/main/java/com/volmit/iris/engine/object/IrisLake.java index 7c463e553..b493ddaa3 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisLake.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisLake.java @@ -26,10 +26,7 @@ import com.volmit.iris.engine.object.annotations.MinNumber; import com.volmit.iris.engine.object.annotations.RegistryListResource; import com.volmit.iris.engine.object.annotations.Required; import com.volmit.iris.engine.object.annotations.Snippet; -import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.math.RNG; -import com.volmit.iris.util.matter.MatterFluidBody; -import com.volmit.iris.util.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/src/main/java/com/volmit/iris/engine/object/IrisRiver.java b/src/main/java/com/volmit/iris/engine/object/IrisRiver.java index 6a2e76c2b..f58d2635f 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisRiver.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisRiver.java @@ -26,10 +26,7 @@ import com.volmit.iris.engine.object.annotations.MinNumber; import com.volmit.iris.engine.object.annotations.RegistryListResource; import com.volmit.iris.engine.object.annotations.Required; import com.volmit.iris.engine.object.annotations.Snippet; -import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.math.RNG; -import com.volmit.iris.util.matter.MatterFluidBody; -import com.volmit.iris.util.noise.CNG; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/src/main/java/com/volmit/iris/engine/platform/HeadlessGenerator.java b/src/main/java/com/volmit/iris/engine/platform/HeadlessGenerator.java index f603f0157..e698bb0cb 100644 --- a/src/main/java/com/volmit/iris/engine/platform/HeadlessGenerator.java +++ b/src/main/java/com/volmit/iris/engine/platform/HeadlessGenerator.java @@ -29,7 +29,6 @@ import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.EngineTarget; import com.volmit.iris.engine.object.HeadlessWorld; import com.volmit.iris.util.collection.KList; -import com.volmit.iris.util.collection.KSet; import com.volmit.iris.util.documentation.ChunkCoordinates; import com.volmit.iris.util.documentation.RegionCoordinates; import com.volmit.iris.util.hunk.Hunk; @@ -41,7 +40,6 @@ import com.volmit.iris.util.nbt.mca.NBTWorld; import com.volmit.iris.util.nbt.tag.CompoundTag; import com.volmit.iris.util.parallel.BurstExecutor; import com.volmit.iris.util.parallel.MultiBurst; -import com.volmit.iris.util.scheduling.J; import lombok.Data; import org.bukkit.Material; import org.bukkit.World; @@ -51,7 +49,6 @@ import org.bukkit.generator.ChunkGenerator; import java.io.File; import java.io.IOException; import java.util.List; -import java.util.Set; import java.util.function.Consumer; @Data @@ -135,21 +132,19 @@ public class HeadlessGenerator implements PlatformChunkGenerator { } private Position2 avgLast(int x, int z) { - while(last.size() > 3) - { + while (last.size() > 3) { last.remove(0); } double xx = 0; double zz = 0; - for(Position2 i : last) - { + for (Position2 i : last) { xx += 27 * (i.getX() - x); zz += 27 * (i.getZ() - z); } - return new Position2((int)xx, (int)zz); + return new Position2((int) xx, (int) zz); } @RegionCoordinates diff --git a/src/main/java/com/volmit/iris/util/collection/KMap.java b/src/main/java/com/volmit/iris/util/collection/KMap.java index a46e28e5f..8ca4c9388 100644 --- a/src/main/java/com/volmit/iris/util/collection/KMap.java +++ b/src/main/java/com/volmit/iris/util/collection/KMap.java @@ -42,12 +42,9 @@ public class KMap extends ConcurrentHashMap { put(gMap); } - public K getKey(V value) - { - for(KeyPair i : keypair()) - { - if(i.getV().equals(value)) - { + public K getKey(V value) { + for (KeyPair i : keypair()) { + if (i.getV().equals(value)) { return i.getK(); } } diff --git a/src/main/java/com/volmit/iris/util/data/B.java b/src/main/java/com/volmit/iris/util/data/B.java index 8a157a191..10e524ebf 100644 --- a/src/main/java/com/volmit/iris/util/data/B.java +++ b/src/main/java/com/volmit/iris/util/data/B.java @@ -400,13 +400,11 @@ public class B { try { String bd = bdxf.trim(); - if(bd.startsWith("minecraft:cauldron[level=")) - { + if (bd.startsWith("minecraft:cauldron[level=")) { bd = bd.replaceAll("\\Q:cauldron[\\E", ":water_cauldron["); } - if(bd.equals("minecraft:grass_path")) - { + if (bd.equals("minecraft:grass_path")) { return DIRT_PATH.createBlockData(); } diff --git a/src/main/java/com/volmit/iris/util/data/ChunkCache.java b/src/main/java/com/volmit/iris/util/data/ChunkCache.java index 6b0be1d26..9214f8e20 100644 --- a/src/main/java/com/volmit/iris/util/data/ChunkCache.java +++ b/src/main/java/com/volmit/iris/util/data/ChunkCache.java @@ -20,7 +20,6 @@ package com.volmit.iris.util.data; import com.volmit.iris.util.function.Function2; -import java.util.Arrays; import java.util.concurrent.atomic.AtomicReferenceArray; public class ChunkCache { @@ -30,14 +29,12 @@ public class ChunkCache { cache = new AtomicReferenceArray<>(256); } - public T compute(int x, int z, Function2 function) - { - T t = get(x&15, z&15); + public T compute(int x, int z, Function2 function) { + T t = get(x & 15, z & 15); - if(t == null) - { + if (t == null) { t = function.apply(x, z); - set(x&15, z&15, t); + set(x & 15, z & 15, t); } return t; diff --git a/src/main/java/com/volmit/iris/util/data/ComplexCache.java b/src/main/java/com/volmit/iris/util/data/ComplexCache.java index 2d4db1958..801a32257 100644 --- a/src/main/java/com/volmit/iris/util/data/ComplexCache.java +++ b/src/main/java/com/volmit/iris/util/data/ComplexCache.java @@ -22,25 +22,21 @@ import com.volmit.iris.engine.data.cache.Cache; import com.volmit.iris.util.collection.KMap; public class ComplexCache { - private KMap> chunks; + private final KMap> chunks; - public ComplexCache() - { + public ComplexCache() { chunks = new KMap<>(); } - public boolean has(int x, int z) - { + public boolean has(int x, int z) { return chunks.containsKey(Cache.key(x, z)); } - public void invalidate(int x, int z) - { + public void invalidate(int x, int z) { chunks.remove(Cache.key(x, z)); } - public ChunkCache chunk(int x, int z) - { + public ChunkCache chunk(int x, int z) { return chunks.computeIfAbsent(Cache.key(x, z), (f) -> new ChunkCache<>()); } } diff --git a/src/main/java/com/volmit/iris/util/data/KCache.java b/src/main/java/com/volmit/iris/util/data/KCache.java index effab2c66..99bf04cd0 100644 --- a/src/main/java/com/volmit/iris/util/data/KCache.java +++ b/src/main/java/com/volmit/iris/util/data/KCache.java @@ -24,27 +24,25 @@ import com.github.benmanes.caffeine.cache.LoadingCache; import com.volmit.iris.engine.framework.MeteredCache; import com.volmit.iris.util.math.RollingSequence; -public class KCache implements MeteredCache { +public class KCache implements MeteredCache { private final long max; private CacheLoader loader; - private LoadingCache cache; + private final LoadingCache cache; private final boolean fastDump; private final RollingSequence msu = new RollingSequence(100); - public KCache(CacheLoader loader, long max) - { + public KCache(CacheLoader loader, long max) { this(loader, max, false); } - public KCache(CacheLoader loader, long max, boolean fastDump) - { + public KCache(CacheLoader loader, long max, boolean fastDump) { this.max = max; this.fastDump = fastDump; this.loader = loader; this.cache = create(loader); } - private LoadingCache create(CacheLoader loader) { + private LoadingCache create(CacheLoader loader) { return Caffeine .newBuilder() .maximumSize(max) @@ -54,23 +52,19 @@ public class KCache implements MeteredCache { } - public void setLoader(CacheLoader loader) - { + public void setLoader(CacheLoader loader) { this.loader = loader; } - public void invalidate(K k) - { + public void invalidate(K k) { cache.invalidate(k); } - public void invalidate() - { + public void invalidate() { cache.invalidateAll(); } - public V get(K k) - { + public V get(K k) { return cache.get(k); } diff --git a/src/main/java/com/volmit/iris/util/data/palette/BitStorage.java b/src/main/java/com/volmit/iris/util/data/palette/BitStorage.java index a0b664634..f79fa9a3d 100644 --- a/src/main/java/com/volmit/iris/util/data/palette/BitStorage.java +++ b/src/main/java/com/volmit/iris/util/data/palette/BitStorage.java @@ -59,32 +59,26 @@ public class BitStorage { this(bits, length, (AtomicLongArray) null); } - private static AtomicLongArray atomic(long[] data) - { - if(data == null) - { + private static AtomicLongArray atomic(long[] data) { + if (data == null) { return null; } AtomicLongArray d = new AtomicLongArray(data.length); - for(int i = 0; i < data.length; i++) - { + for (int i = 0; i < data.length; i++) { d.set(i, data[i]); } return d; } - private static long[] atomic(AtomicLongArray data) - { - if(data == null) - { + private static long[] atomic(AtomicLongArray data) { + if (data == null) { return null; } long[] d = new long[data.length()]; - for(int i = 0; i < data.length(); i++) - { + for (int i = 0; i < data.length(); i++) { d[i] = data.get(i); } @@ -107,8 +101,7 @@ public class BitStorage { this.divideShift = MAGIC[var3 + 2]; int var4 = (length + this.valuesPerLong - 1) / this.valuesPerLong; if (data != null) { - if (data.length() != var4) - { + if (data.length() != var4) { throw new RuntimeException("NO!"); } this.data = data; @@ -166,8 +159,7 @@ public class BitStorage { public void getAll(IntConsumer var0) { int var1 = 0; - for(int i = 0; i < data.length(); i++) - { + for (int i = 0; i < data.length(); i++) { long var5 = data.get(i); for (int var7 = 0; var7 < this.valuesPerLong; var7++) { var0.accept((int) (var5 & this.mask)); diff --git a/src/main/java/com/volmit/iris/util/data/palette/CrudeIncrementalIntIdentityHashBiMap.java b/src/main/java/com/volmit/iris/util/data/palette/CrudeIncrementalIntIdentityHashBiMap.java index 63dce90cc..49bcf4309 100644 --- a/src/main/java/com/volmit/iris/util/data/palette/CrudeIncrementalIntIdentityHashBiMap.java +++ b/src/main/java/com/volmit/iris/util/data/palette/CrudeIncrementalIntIdentityHashBiMap.java @@ -20,7 +20,6 @@ package com.volmit.iris.util.data.palette; import com.google.common.collect.Iterators; -import java.util.Arrays; import java.util.Iterator; import java.util.Objects; import java.util.concurrent.atomic.AtomicIntegerArray; @@ -49,16 +48,14 @@ public class CrudeIncrementalIntIdentityHashBiMap implements IdMap { public K byId(int var0) { - if (var0 < 0 || var0 >= this.byId.length()) - { + if (var0 < 0 || var0 >= this.byId.length()) { return null; } return this.byId.get(var0); } private int getValue(int var0) { - if (var0 == -1) - { + if (var0 == -1) { return -1; } return this.values.get(var0); @@ -79,8 +76,7 @@ public class CrudeIncrementalIntIdentityHashBiMap implements IdMap { } private int nextId() { - while (nextId < byId.length() && byId.get(nextId) != null) - { + while (nextId < byId.length() && byId.get(nextId) != null) { nextId++; } return nextId; @@ -95,8 +91,7 @@ public class CrudeIncrementalIntIdentityHashBiMap implements IdMap { this.nextId = 0; this.size = 0; for (int var3 = 0; var3 < var1.length(); var3++) { - if (var1.get(var3) != null) - { + if (var1.get(var3) != null) { addMapping(var1.get(var3), var2.get(var3)); } } @@ -126,8 +121,7 @@ public class CrudeIncrementalIntIdentityHashBiMap implements IdMap { private int indexOf(K var0, int var1) { int var2; for (var2 = var1; var2 < this.keys.length(); var2++) { - if (this.keys.get(var2) == null) - { + if (this.keys.get(var2) == null) { return 0; } if (this.keys.get(var2).equals(var0)) @@ -158,11 +152,12 @@ public class CrudeIncrementalIntIdentityHashBiMap implements IdMap { } public Iterator iterator() { - return Iterators.filter(new Iterator(){ + return Iterators.filter(new Iterator() { int i = 0; + @Override public boolean hasNext() { - return i < byId.length()-1; + return i < byId.length() - 1; } @Override @@ -174,15 +169,12 @@ public class CrudeIncrementalIntIdentityHashBiMap implements IdMap { public void clear() { - for(int i = 0; i < Math.max(keys.length(), byId.length()); i++) - { - if(i < keys.length() - 1) - { + for (int i = 0; i < Math.max(keys.length(), byId.length()); i++) { + if (i < keys.length() - 1) { keys.set(i, null); } - if(i < byId.length() - 1) - { + if (i < byId.length() - 1) { byId.set(i, null); } } diff --git a/src/main/java/com/volmit/iris/util/data/palette/GlobalPalette.java b/src/main/java/com/volmit/iris/util/data/palette/GlobalPalette.java index 502dd5e4f..5f76e0e46 100644 --- a/src/main/java/com/volmit/iris/util/data/palette/GlobalPalette.java +++ b/src/main/java/com/volmit/iris/util/data/palette/GlobalPalette.java @@ -18,8 +18,6 @@ package com.volmit.iris.util.data.palette; -import com.volmit.iris.util.nbt.tag.ListTag; - import java.util.List; import java.util.function.Predicate; @@ -28,11 +26,9 @@ public class GlobalPalette implements Palette { private final T defaultValue; - public GlobalPalette(T... f) - { + public GlobalPalette(T... f) { IdMapper mapper = new IdMapper<>(); - for(T i : f) - { + for (T i : f) { mapper.add(i); } registry = mapper; diff --git a/src/main/java/com/volmit/iris/util/data/palette/HashMapPalette.java b/src/main/java/com/volmit/iris/util/data/palette/HashMapPalette.java index 26c1561f4..e01bd848a 100644 --- a/src/main/java/com/volmit/iris/util/data/palette/HashMapPalette.java +++ b/src/main/java/com/volmit/iris/util/data/palette/HashMapPalette.java @@ -20,12 +20,8 @@ package com.volmit.iris.util.data.palette; import com.volmit.iris.Iris; import com.volmit.iris.util.collection.KMap; -import com.volmit.iris.util.nbt.tag.CompoundTag; -import com.volmit.iris.util.nbt.tag.ListTag; import java.util.List; -import java.util.function.Function; -import java.util.function.Predicate; public class HashMapPalette implements Palette { private final KMap values; @@ -41,16 +37,14 @@ public class HashMapPalette implements Palette { } public int idFor(T var0) { - if(var0 == null) - { + if (var0 == null) { return 0; } return this.values.computeIfAbsent(var0, (k) -> { int newId = id++; - if (newId >= 1 << this.bits) - { + if (newId >= 1 << this.bits) { Iris.info(newId + " to..."); newId = this.resizeHandler.onResize(this.bits + 1, var0); Iris.info(newId + ".."); diff --git a/src/main/java/com/volmit/iris/util/data/palette/IdMapper.java b/src/main/java/com/volmit/iris/util/data/palette/IdMapper.java index f5e287a8e..a9d840d60 100644 --- a/src/main/java/com/volmit/iris/util/data/palette/IdMapper.java +++ b/src/main/java/com/volmit/iris/util/data/palette/IdMapper.java @@ -49,8 +49,7 @@ public class IdMapper implements IdMap { public void addMapping(T var0, int var1) { this.tToId.put(var0, Integer.valueOf(var1)); - while (this.idToT.size() <= var1) - { + while (this.idToT.size() <= var1) { this.idToT.add(null); } this.idToT.set(var1, var0); @@ -68,8 +67,7 @@ public class IdMapper implements IdMap { } public final T byId(int var0) { - if (var0 >= 0 && var0 < this.idToT.size()) - { + if (var0 >= 0 && var0 < this.idToT.size()) { return this.idToT.get(var0); } return null; diff --git a/src/main/java/com/volmit/iris/util/data/palette/LinearPalette.java b/src/main/java/com/volmit/iris/util/data/palette/LinearPalette.java index f95bcd113..f8dd5ca54 100644 --- a/src/main/java/com/volmit/iris/util/data/palette/LinearPalette.java +++ b/src/main/java/com/volmit/iris/util/data/palette/LinearPalette.java @@ -20,7 +20,6 @@ package com.volmit.iris.util.data.palette; import java.util.List; import java.util.concurrent.atomic.AtomicReferenceArray; -import java.util.function.Predicate; public class LinearPalette implements Palette { private final AtomicReferenceArray values; @@ -37,13 +36,11 @@ public class LinearPalette implements Palette { public int idFor(T var0) { int var1; for (var1 = 0; var1 < size; var1++) { - if(values.get(var1) == null && var0 == null) - { + if (values.get(var1) == null && var0 == null) { return var1; } - if (values.get(var1) != null && values.get(var1).equals(var0)) - { + if (values.get(var1) != null && values.get(var1).equals(var0)) { return var1; } } @@ -57,8 +54,7 @@ public class LinearPalette implements Palette { } public T valueFor(int var0) { - if (var0 >= 0 && var0 < size) - { + if (var0 >= 0 && var0 < size) { return this.values.get(var0); } return null; @@ -70,8 +66,7 @@ public class LinearPalette implements Palette { @Override public void read(List fromList) { - for (int i = 0; i < fromList.size(); i++) - { + for (int i = 0; i < fromList.size(); i++) { values.set(i, fromList.get(i)); } @@ -80,8 +75,7 @@ public class LinearPalette implements Palette { @Override public void write(List toList) { - for (int i = 0; i < size; i++) - { + for (int i = 0; i < size; i++) { T v = values.get(i); toList.add(v); } diff --git a/src/main/java/com/volmit/iris/util/data/palette/Palette.java b/src/main/java/com/volmit/iris/util/data/palette/Palette.java index 57c148883..38b1479f9 100644 --- a/src/main/java/com/volmit/iris/util/data/palette/Palette.java +++ b/src/main/java/com/volmit/iris/util/data/palette/Palette.java @@ -18,11 +18,7 @@ package com.volmit.iris.util.data.palette; -import com.volmit.iris.util.nbt.tag.CompoundTag; -import com.volmit.iris.util.nbt.tag.ListTag; - import java.util.List; -import java.util.function.Predicate; public interface Palette { int idFor(T paramT); diff --git a/src/main/java/com/volmit/iris/util/data/palette/PaletteType.java b/src/main/java/com/volmit/iris/util/data/palette/PaletteType.java index cd908e021..a7e2eccc0 100644 --- a/src/main/java/com/volmit/iris/util/data/palette/PaletteType.java +++ b/src/main/java/com/volmit/iris/util/data/palette/PaletteType.java @@ -42,8 +42,7 @@ public interface PaletteType { int v = Varint.readUnsignedVarInt(din); List t = new ArrayList<>(); - for(int i = 0; i < v; i++) - { + for (int i = 0; i < v; i++) { t.add(readPaletteNode(din)); } diff --git a/src/main/java/com/volmit/iris/util/data/palette/PalettedContainer.java b/src/main/java/com/volmit/iris/util/data/palette/PalettedContainer.java index dad5291a0..075946a32 100644 --- a/src/main/java/com/volmit/iris/util/data/palette/PalettedContainer.java +++ b/src/main/java/com/volmit/iris/util/data/palette/PalettedContainer.java @@ -21,8 +21,8 @@ package com.volmit.iris.util.data.palette; import com.volmit.iris.Iris; import com.volmit.iris.util.math.M; import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; + import java.util.List; -import java.util.function.Predicate; @SuppressWarnings("DuplicatedCode") public class PalettedContainer implements PaletteResize { @@ -43,8 +43,7 @@ public class PalettedContainer implements PaletteResize { } private void setBits(int var0) { - if (var0 == this.bits) - { + if (var0 == this.bits) { return; } this.bits = var0; @@ -65,8 +64,7 @@ public class PalettedContainer implements PaletteResize { setBits(var0); for (int var4 = 0; var4 < var2.getSize(); var4++) { T var5 = var3.valueFor(var2.get(var4)); - if (var5 != null) - { + if (var5 != null) { set(var4, var5); } } @@ -95,8 +93,7 @@ public class PalettedContainer implements PaletteResize { private void set(int var0, T var1) { int var2 = this.palette.idFor(var1); - if(M.r(0.003)) - { + if (M.r(0.003)) { Iris.info("ID for " + var1 + " is " + var2 + " Palette: " + palette.getSize()); } @@ -113,8 +110,7 @@ public class PalettedContainer implements PaletteResize { public void read(List palette, long[] data) { int var2 = Math.max(4, Mth.ceillog2(palette.size())); - if (var2 != this.bits) - { + if (var2 != this.bits) { setBits(var2); } @@ -124,8 +120,7 @@ public class PalettedContainer implements PaletteResize { System.arraycopy(data, 0, this.storage.getRaw(), 0, data.length); } else { BitStorage var4 = new BitStorage(var3, 4096, data); - for (int var5 = 0; var5 < 4096; var5++) - { + for (int var5 = 0; var5 < 4096; var5++) { this.storage.set(var5, var4.get(var5)); } } diff --git a/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java b/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java index 02ef2e15d..8ff7a9f25 100644 --- a/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java +++ b/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java @@ -34,7 +34,6 @@ import com.volmit.iris.util.decree.exceptions.DecreeParsingException; import com.volmit.iris.util.decree.exceptions.DecreeWhichException; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; -import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.CommandDummy; import com.volmit.iris.util.plugin.VolmitSender; import com.volmit.iris.util.scheduling.ChronoLatch; diff --git a/src/main/java/com/volmit/iris/util/format/MemoryMonitor.java b/src/main/java/com/volmit/iris/util/format/MemoryMonitor.java index a04146b8b..c48147adc 100644 --- a/src/main/java/com/volmit/iris/util/format/MemoryMonitor.java +++ b/src/main/java/com/volmit/iris/util/format/MemoryMonitor.java @@ -18,7 +18,6 @@ package com.volmit.iris.util.format; -import com.volmit.iris.Iris; import com.volmit.iris.util.math.RollingSequence; import com.volmit.iris.util.scheduling.ChronoLatch; import com.volmit.iris.util.scheduling.Looper; @@ -30,14 +29,14 @@ public class MemoryMonitor { private long garbageLast; private long garbageBin; private long pressure; - private ChronoLatch cl; - private RollingSequence pressureAvg; - private Runtime runtime; + private final ChronoLatch cl; + private final RollingSequence pressureAvg; + private final Runtime runtime; - public MemoryMonitor(int sampleDelay){ + public MemoryMonitor(int sampleDelay) { this.runtime = Runtime.getRuntime(); usedMemory = -1; - pressureAvg = new RollingSequence(Math.max(Math.min(100, 1000/sampleDelay), 3)); + pressureAvg = new RollingSequence(Math.max(Math.min(100, 1000 / sampleDelay), 3)); garbageBin = 0; garbageMemory = -1; cl = new ChronoLatch(1000); @@ -56,74 +55,55 @@ public class MemoryMonitor { looper.start(); } - public long getGarbageBytes() - { + public long getGarbageBytes() { return garbageMemory; } - public long getUsedBytes() - { + public long getUsedBytes() { return usedMemory; } - public long getMaxBytes() - { + public long getMaxBytes() { return runtime.maxMemory(); } - public long getPressure() - { + public long getPressure() { return (long) pressureAvg.getAverage(); } - public double getUsagePercent() - { - return usedMemory / (double)getMaxBytes(); + public double getUsagePercent() { + return usedMemory / (double) getMaxBytes(); } private void sample() { long used = getVMUse(); - if(usedMemory == -1) - { + if (usedMemory == -1) { usedMemory = used; garbageMemory = 0; return; } - if(used < usedMemory) - { + if (used < usedMemory) { usedMemory = used; - } - - else - { + } else { garbageMemory = used - usedMemory; } long g = garbageMemory - garbageLast; - if(g >= 0) - { - garbageBin+= g; + if (g >= 0) { + garbageBin += g; garbageLast = garbageMemory; - } - - else - { + } else { garbageMemory = 0; garbageLast = 0; } - if(cl.flip()) - { - if(garbageMemory > 0) - { + if (cl.flip()) { + if (garbageMemory > 0) { pressure = garbageBin; garbageBin = 0; - } - - else - { + } else { pressure = 0; garbageBin = 0; } @@ -136,10 +116,8 @@ public class MemoryMonitor { return runtime.totalMemory() - runtime.freeMemory(); } - public void close() - { - if(looper != null) - { + public void close() { + if (looper != null) { looper.interrupt(); looper = null; } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java b/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java index 7b4b67e2f..3d13c4c90 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java @@ -18,8 +18,6 @@ package com.volmit.iris.util.hunk.bits; -import com.volmit.iris.Iris; -import com.volmit.iris.util.data.Varint; import org.apache.commons.lang3.Validate; import java.io.DataInputStream; @@ -65,8 +63,7 @@ public class DataBits { this(bits, length, (AtomicLongArray) null); } - public DataBits(int bits, int length, DataInputStream din) throws IOException - { + public DataBits(int bits, int length, DataInputStream din) throws IOException { this(bits, length, longs(din)); } @@ -83,8 +80,7 @@ public class DataBits { int var4 = (length + valuesPerLong - 1) / valuesPerLong; if (data != null) { - if (data.length() != var4) - { + if (data.length() != var4) { throw new RuntimeException("NO! Trying to load " + data.length() + " into actual size of " + var4 + " because length: " + length + " (bits: " + bits + ")"); } this.data = data; @@ -93,36 +89,30 @@ public class DataBits { } } - public String toString() - { + public String toString() { return "DBits: " + size + "/" + bits + "[" + data.length() + "]"; } - private static int dataLength(int bits, int length) - { + private static int dataLength(int bits, int length) { return (length + ((char) (64 / bits)) - 1) / ((char) (64 / bits)); } - private static AtomicLongArray longs(DataInputStream din) throws IOException{ + private static AtomicLongArray longs(DataInputStream din) throws IOException { AtomicLongArray a = new AtomicLongArray(din.readInt()); - for(int i = 0; i < a.length(); i++) - { + for (int i = 0; i < a.length(); i++) { a.set(i, din.readLong()); } return a; } - public DataBits setBits(int newBits) - { - if(bits != newBits) - { + public DataBits setBits(int newBits) { + if (bits != newBits) { DataBits newData = new DataBits(newBits, size); AtomicInteger c = new AtomicInteger(0); - for(int i = 0; i < size; i++) - { + for (int i = 0; i < size; i++) { newData.set(i, get(i)); } @@ -183,14 +173,12 @@ public class DataBits { public void getAll(IntConsumer var0) { int var1 = 0; - for(int i = 0; i < data.length(); i++) - { + for (int i = 0; i < data.length(); i++) { long var5 = data.get(i); for (int var7 = 0; var7 < valuesPerLong; var7++) { var0.accept((int) (var5 & mask)); var5 >>= bits; - if (++var1 >= size) - { + if (++var1 >= size) { return; } } @@ -200,8 +188,7 @@ public class DataBits { public void write(DataOutputStream dos) throws IOException { dos.writeInt(data.length()); - for(int i = 0; i < data.length(); i++) - { + for (int i = 0; i < data.length(); i++) { dos.writeLong(data.get(i)); } } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java b/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java index 23ed74184..05e38b497 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java @@ -18,9 +18,6 @@ package com.volmit.iris.util.hunk.bits; -import com.volmit.iris.Iris; -import com.volmit.iris.util.data.Varint; - import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -40,8 +37,7 @@ public class DataContainer { private final int length; private final Writable writer; - public DataContainer(Writable writer, int length, T empty) - { + public DataContainer(Writable writer, int length, T empty) { this.writer = writer; this.length = length; this.bits = new AtomicInteger(INITIAL_BITS); @@ -58,25 +54,22 @@ public class DataContainer { this.bits = new AtomicInteger(palette.get().bits()); } - public String toString(){ - return "DataContainer <" + length + " x " + bits + " bits> -> Palette<"+palette.get().getClass().getSimpleName().replaceAll("\\QPalette\\E", "")+">: " + palette.get().size() + + public String toString() { + return "DataContainer <" + length + " x " + bits + " bits> -> Palette<" + palette.get().getClass().getSimpleName().replaceAll("\\QPalette\\E", "") + ">: " + palette.get().size() + " " + data.get().toString() + " PalBit: " + palette.get().bits(); } - public byte[] write() throws IOException - { + public byte[] write() throws IOException { ByteArrayOutputStream boas = new ByteArrayOutputStream(); write(boas); return boas.toByteArray(); } - public void write(OutputStream out) throws IOException - { + public void write(OutputStream out) throws IOException { writeDos(new DataOutputStream(out)); } - public void writeDos(DataOutputStream dos) throws IOException - { + public void writeDos(DataOutputStream dos) throws IOException { dos.writeInt(length); dos.writeInt(palette.get().size()); palette.get().iterateIO((data, __) -> writer.writeNodeData(dos, data)); @@ -91,38 +84,30 @@ public class DataContainer { return d; } - private Palette newPalette(int bits) - { - if(bits <= LINEAR_BITS_LIMIT) - { + private Palette newPalette(int bits) { + if (bits <= LINEAR_BITS_LIMIT) { return new LinearPalette<>(LINEAR_INITIAL_LENGTH); } return new HashPalette<>(); } - private void checkBits() - { - if(palette.get().size() >= BIT[bits.get()]) - { + private void checkBits() { + if (palette.get().size() >= BIT[bits.get()]) { setBits(bits.get() + 1); } } - public void ensurePaletted(T t) - { - if(palette.get().id(t) == -1) - { + public void ensurePaletted(T t) { + if (palette.get().id(t) == -1) { checkBits(); } } - public void set(int position, T t) - { + public void set(int position, T t) { int id = palette.get().id(t); - if(id == -1) - { + if (id == -1) { checkBits(); id = palette.get().add(t); } @@ -130,24 +115,19 @@ public class DataContainer { data.get().set(position, id); } - public T get(int position) - { - int id = data.get().get(position)+1; + public T get(int position) { + int id = data.get().get(position) + 1; - if(id <= 0) - { + if (id <= 0) { return null; } - return palette.get().get(id-1); + return palette.get().get(id - 1); } - public void setBits(int bits) - { - if(this.bits.get() != bits) - { - if(this.bits.get() <= LINEAR_BITS_LIMIT != bits <= LINEAR_BITS_LIMIT) - { + public void setBits(int bits) { + if (this.bits.get() != bits) { + if (this.bits.get() <= LINEAR_BITS_LIMIT != bits <= LINEAR_BITS_LIMIT) { palette.set(newPalette(bits).from(palette.get())); } @@ -159,25 +139,20 @@ public class DataContainer { private static int[] computeBitLimits() { int[] m = new int[16]; - for(int i = 0; i < m.length; i++) - { + for (int i = 0; i < m.length; i++) { m[i] = (int) Math.pow(2, i); } return m; } - protected static int bits(int size) - { - if(DataContainer.BIT[INITIAL_BITS] >= size) - { + protected static int bits(int size) { + if (DataContainer.BIT[INITIAL_BITS] >= size) { return INITIAL_BITS; } - for(int i = 0; i < DataContainer.BIT.length; i++) - { - if(DataContainer.BIT[i] >= size) - { + for (int i = 0; i < DataContainer.BIT.length; i++) { + if (DataContainer.BIT[i] >= size) { return i; } } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java b/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java index 091de10e9..6bed881a5 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java @@ -18,7 +18,6 @@ package com.volmit.iris.util.hunk.bits; -import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.function.Consumer2; @@ -30,8 +29,7 @@ public class HashPalette implements Palette { private final KMap lookup; private final AtomicInteger size; - public HashPalette() - { + public HashPalette() { this.size = new AtomicInteger(0); this.palette = new LinkedHashMap<>(); this.lookup = new KMap<>(); @@ -39,8 +37,7 @@ public class HashPalette implements Palette { @Override public T get(int id) { - if(id < 0 || id >= size.get()) - { + if (id < 0 || id >= size.get()) { return null; } @@ -52,8 +49,7 @@ public class HashPalette implements Palette { int index = size.getAndIncrement(); palette.put(t, index); - if(t != null) - { + if (t != null) { lookup.put(index, t); } @@ -73,8 +69,7 @@ public class HashPalette implements Palette { @Override public void iterate(Consumer2 c) { - for(T i : palette.keySet()) - { + for (T i : palette.keySet()) { c.accept(i, id(i)); } } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java b/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java index bce74031a..befdead96 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java @@ -28,16 +28,14 @@ public class LinearPalette implements Palette { private final AtomicReference> palette; private final AtomicInteger size; - public LinearPalette(int initialSize) - { + public LinearPalette(int initialSize) { this.size = new AtomicInteger(0); this.palette = new AtomicReference<>(new AtomicReferenceArray<>(initialSize)); } @Override public T get(int id) { - if(id < 0 || id >= size.get()) - { + if (id < 0 || id >= size.get()) { return null; } @@ -53,12 +51,10 @@ public class LinearPalette implements Palette { } private void grow(int newLength) { - if(newLength > palette.get().length()) - { + if (newLength > palette.get().length()) { AtomicReferenceArray a = new AtomicReferenceArray<>(newLength + size.get()); - for(int i = 0; i < palette.get().length(); i++) - { + for (int i = 0; i < palette.get().length(); i++) { a.set(i, palette.get().get(i)); } @@ -68,15 +64,12 @@ public class LinearPalette implements Palette { @Override public int id(T t) { - for(int i = 0; i < size(); i++) - { - if(t == null && palette.get().get(i) == null) - { + for (int i = 0; i < size(); i++) { + if (t == null && palette.get().get(i) == null) { return i; } - if(t != null && t.equals(palette.get().get(i))) - { + if (t != null && t.equals(palette.get().get(i))) { return i; } } @@ -91,8 +84,7 @@ public class LinearPalette implements Palette { @Override public void iterate(Consumer2 c) { - for(int i = 0; i < size(); i++) - { + for (int i = 0; i < size(); i++) { c.accept(palette.get().get(i), i); } } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/Palette.java b/src/main/java/com/volmit/iris/util/hunk/bits/Palette.java index 6c98cb228..d179572ba 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/Palette.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/Palette.java @@ -34,18 +34,16 @@ public interface Palette { int size(); - default int bits() - { + default int bits() { return DataContainer.bits(size()); } void iterate(Consumer2 c); - default void iterateIO(Consumer2IO c) - { - iterate((a,b)-> { + default void iterateIO(Consumer2IO c) { + iterate((a, b) -> { try { - c.accept(a,b); + c.accept(a, b); } catch (IOException e) { e.printStackTrace(); } @@ -53,22 +51,19 @@ public interface Palette { } default Palette from(int size, Writable writable, DataInputStream in) throws IOException { - for(int i = 0; i < size; i++) - { + for (int i = 0; i < size; i++) { add(writable.readNodeData(in)); } return this; } - default Palette from(Palette oldPalette) - { - oldPalette.iterate((k,v) -> add(k)); + default Palette from(Palette oldPalette) { + oldPalette.iterate((k, v) -> add(k)); return this; } - default KList list() - { + default KList list() { KList t = new KList<>(); iterate((tx, __) -> t.add(tx)); return t; diff --git a/src/main/java/com/volmit/iris/util/hunk/storage/MappedHunk.java b/src/main/java/com/volmit/iris/util/hunk/storage/MappedHunk.java index 23b3726e2..4d5d9fba8 100644 --- a/src/main/java/com/volmit/iris/util/hunk/storage/MappedHunk.java +++ b/src/main/java/com/volmit/iris/util/hunk/storage/MappedHunk.java @@ -27,7 +27,6 @@ import lombok.EqualsAndHashCode; import java.io.IOException; import java.util.Map; -import java.util.concurrent.atomic.AtomicBoolean; @SuppressWarnings({"DefaultAnnotationParam", "Lombok"}) @Data diff --git a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteHunk.java b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteHunk.java index e26848a85..1be335f1d 100644 --- a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteHunk.java +++ b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteHunk.java @@ -18,8 +18,6 @@ package com.volmit.iris.util.hunk.storage; -import com.volmit.iris.util.collection.KMap; -import com.volmit.iris.util.data.palette.PalettedContainer; import com.volmit.iris.util.function.Consumer4; import com.volmit.iris.util.function.Consumer4IO; import com.volmit.iris.util.hunk.Hunk; @@ -29,7 +27,6 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.io.IOException; -import java.util.Map; @SuppressWarnings({"DefaultAnnotationParam", "Lombok"}) @Data @@ -38,7 +35,7 @@ public class PaletteHunk extends StorageHunk implements Hunk { private DataContainer data; public PaletteHunk(int w, int h, int d, Writable writer, T e) { - super(w,h,d); + super(w, h, d); data = new DataContainer<>(writer, w * h * d, e); } @@ -57,16 +54,12 @@ public class PaletteHunk extends StorageHunk implements Hunk { @Override public synchronized Hunk iterateSync(Consumer4 c) { - for(int i = 0; i < getWidth(); i++) - { - for(int j = 0; j < getHeight(); j++) - { - for(int k = 0; k < getDepth(); k++) - { - T t = getRaw(i,j,k); - if(t != null) - { - c.accept(i,j,k,t); + for (int i = 0; i < getWidth(); i++) { + for (int j = 0; j < getHeight(); j++) { + for (int k = 0; k < getDepth(); k++) { + T t = getRaw(i, j, k); + if (t != null) { + c.accept(i, j, k, t); } } } @@ -76,16 +69,12 @@ public class PaletteHunk extends StorageHunk implements Hunk { @Override public synchronized Hunk iterateSyncIO(Consumer4IO c) throws IOException { - for(int i = 0; i < getWidth(); i++) - { - for(int j = 0; j < getHeight(); j++) - { - for(int k = 0; k < getDepth(); k++) - { - T t = getRaw(i,j,k); - if(t != null) - { - c.accept(i,j,k,t); + for (int i = 0; i < getWidth(); i++) { + for (int j = 0; j < getHeight(); j++) { + for (int k = 0; k < getDepth(); k++) { + T t = getRaw(i, j, k); + if (t != null) { + c.accept(i, j, k, t); } } } diff --git a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java index 8a2afd5ff..3b58ea338 100644 --- a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java +++ b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java @@ -18,7 +18,6 @@ package com.volmit.iris.util.hunk.storage; -import com.volmit.iris.util.data.palette.PalettedContainer; import com.volmit.iris.util.function.Consumer4; import com.volmit.iris.util.function.Consumer4IO; import com.volmit.iris.util.hunk.Hunk; @@ -26,41 +25,38 @@ import com.volmit.iris.util.hunk.bits.DataContainer; import com.volmit.iris.util.hunk.bits.Writable; import java.io.IOException; -import java.util.Map; import java.util.function.Supplier; public abstract class PaletteOrHunk extends StorageHunk implements Hunk, Writable { private final Hunk hunk; + public PaletteOrHunk(int width, int height, int depth, boolean allow, Supplier> factory, T e) { super(width, height, depth); hunk = (allow) ? new PaletteHunk<>(width, height, depth, this, e) : factory.get(); } - public DataContainer palette() - { - return isPalette() ? ((PaletteHunk)hunk).getData() : null; + public DataContainer palette() { + return isPalette() ? ((PaletteHunk) hunk).getData() : null; } public void setPalette(DataContainer c) { - if(isPalette()) - { - ((PaletteHunk)hunk).setPalette(c); + if (isPalette()) { + ((PaletteHunk) hunk).setPalette(c); } } - public boolean isPalette() - { + public boolean isPalette() { return hunk instanceof PaletteHunk; } @Override public void setRaw(int x, int y, int z, T t) { - hunk.setRaw(x,y,z,t); + hunk.setRaw(x, y, z, t); } @Override public T getRaw(int x, int y, int z) { - return hunk.getRaw(x,y,z); + return hunk.getRaw(x, y, z); } public int getEntryCount() { diff --git a/src/main/java/com/volmit/iris/util/io/IO.java b/src/main/java/com/volmit/iris/util/io/IO.java index 05db560ce..b934bf5d7 100644 --- a/src/main/java/com/volmit/iris/util/io/IO.java +++ b/src/main/java/com/volmit/iris/util/io/IO.java @@ -25,7 +25,6 @@ import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.CharArrayWriter; -import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -166,16 +165,15 @@ public class IO { public static String longsToHex(long[] bytes) { byte[] v = new byte[bytes.length * 8]; - for(int i = 0; i < bytes.length; i++) - { - v[i * 8] = (byte)(bytes[i] >>> 56); - v[(i * 8) + 1] = (byte)(bytes[i] >>> 48); - v[(i * 8) + 2] = (byte)(bytes[i] >>> 40); - v[(i * 8) + 3] = (byte)(bytes[i] >>> 32); - v[(i * 8) + 4] = (byte)(bytes[i] >>> 24); - v[(i * 8) + 5] = (byte)(bytes[i] >>> 16); - v[(i * 8) + 6] = (byte)(bytes[i] >>> 8); - v[(i * 8) + 7] = (byte)(bytes[i] >>> 0); + for (int i = 0; i < bytes.length; i++) { + v[i * 8] = (byte) (bytes[i] >>> 56); + v[(i * 8) + 1] = (byte) (bytes[i] >>> 48); + v[(i * 8) + 2] = (byte) (bytes[i] >>> 40); + v[(i * 8) + 3] = (byte) (bytes[i] >>> 32); + v[(i * 8) + 4] = (byte) (bytes[i] >>> 24); + v[(i * 8) + 5] = (byte) (bytes[i] >>> 16); + v[(i * 8) + 6] = (byte) (bytes[i] >>> 8); + v[(i * 8) + 7] = (byte) (bytes[i] >>> 0); } return bytesToHex(v); diff --git a/src/main/java/com/volmit/iris/util/mantle/Mantle.java b/src/main/java/com/volmit/iris/util/mantle/Mantle.java index 481eaa808..875d6c0ad 100644 --- a/src/main/java/com/volmit/iris/util/mantle/Mantle.java +++ b/src/main/java/com/volmit/iris/util/mantle/Mantle.java @@ -38,7 +38,6 @@ import com.volmit.iris.util.matter.MatterSlice; import com.volmit.iris.util.parallel.BurstExecutor; import com.volmit.iris.util.parallel.HyperLock; import com.volmit.iris.util.parallel.MultiBurst; -import com.volmit.iris.util.scheduling.J; import lombok.Getter; import org.bukkit.Chunk; diff --git a/src/main/java/com/volmit/iris/util/mantle/TectonicPlate.java b/src/main/java/com/volmit/iris/util/mantle/TectonicPlate.java index 403e8818f..e88ffb593 100644 --- a/src/main/java/com/volmit/iris/util/mantle/TectonicPlate.java +++ b/src/main/java/com/volmit/iris/util/mantle/TectonicPlate.java @@ -20,12 +20,9 @@ package com.volmit.iris.util.mantle; import com.volmit.iris.Iris; import com.volmit.iris.engine.data.cache.Cache; -import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.documentation.ChunkCoordinates; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; -import com.volmit.iris.util.matter.Matter; -import com.volmit.iris.util.nbt.mca.Section; import com.volmit.iris.util.scheduling.PrecisionStopwatch; import lombok.Getter; diff --git a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java index ad5d85693..c5994b844 100644 --- a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java +++ b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java @@ -18,13 +18,10 @@ package com.volmit.iris.util.matter; -import com.volmit.iris.Iris; -import com.volmit.iris.core.IrisSettings; import com.volmit.iris.engine.data.cache.Cache; import com.volmit.iris.util.data.Varint; import com.volmit.iris.util.data.palette.Palette; import com.volmit.iris.util.data.palette.PaletteType; -import com.volmit.iris.util.data.palette.PalettedContainer; import com.volmit.iris.util.hunk.Hunk; import com.volmit.iris.util.hunk.bits.DataContainer; import com.volmit.iris.util.hunk.bits.Writable; @@ -38,8 +35,6 @@ import org.bukkit.util.BlockVector; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; public interface MatterSlice extends Hunk, PaletteType, Writable { Class getType(); @@ -164,11 +159,10 @@ public interface MatterSlice extends Hunk, PaletteType, Writable { default void write(DataOutputStream dos) throws IOException { dos.writeUTF(getType().getCanonicalName()); - if((this instanceof PaletteOrHunk f && f.isPalette())) - { - f.palette().writeDos(dos); - return; - } + if ((this instanceof PaletteOrHunk f && f.isPalette())) { + f.palette().writeDos(dos); + return; + } int w = getWidth(); int h = getHeight(); @@ -189,8 +183,7 @@ public interface MatterSlice extends Hunk, PaletteType, Writable { } default void read(DataInputStream din) throws IOException { - if((this instanceof PaletteOrHunk f && f.isPalette())) - { + if ((this instanceof PaletteOrHunk f && f.isPalette())) { f.setPalette(new DataContainer<>(din, this)); return; } diff --git a/src/main/java/com/volmit/iris/util/matter/MatterTest.java b/src/main/java/com/volmit/iris/util/matter/MatterTest.java index 7e539df25..83795b6c4 100644 --- a/src/main/java/com/volmit/iris/util/matter/MatterTest.java +++ b/src/main/java/com/volmit/iris/util/matter/MatterTest.java @@ -18,21 +18,8 @@ package com.volmit.iris.util.matter; -import com.volmit.iris.Iris; -import com.volmit.iris.util.hunk.bits.DataContainer; -import com.volmit.iris.util.hunk.bits.Writable; -import com.volmit.iris.util.io.IO; -import com.volmit.iris.util.math.RNG; - -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.Arrays; - public class MatterTest { - public static void test() - { + public static void test() { } } diff --git a/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java index 1290cec47..5a8a0b01a 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java @@ -24,7 +24,6 @@ import com.volmit.iris.util.matter.Sliced; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.data.BlockData; -import org.bukkit.entity.Player; import java.io.DataInputStream; import java.io.DataOutputStream; diff --git a/src/main/java/com/volmit/iris/util/matter/slices/BooleanMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/BooleanMatter.java index 220c5a937..a9936b806 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/BooleanMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/BooleanMatter.java @@ -20,7 +20,6 @@ package com.volmit.iris.util.matter.slices; import com.volmit.iris.util.data.palette.Palette; import com.volmit.iris.util.matter.Sliced; -import org.bukkit.entity.Player; import java.io.DataInputStream; import java.io.DataOutputStream; diff --git a/src/main/java/com/volmit/iris/util/matter/slices/CavernMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/CavernMatter.java index 51692451e..04de23238 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/CavernMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/CavernMatter.java @@ -21,7 +21,6 @@ package com.volmit.iris.util.matter.slices; import com.volmit.iris.util.data.palette.Palette; import com.volmit.iris.util.matter.MatterCavern; import com.volmit.iris.util.matter.Sliced; -import org.bukkit.entity.Player; import java.io.DataInputStream; import java.io.DataOutputStream; diff --git a/src/main/java/com/volmit/iris/util/matter/slices/EntityMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/EntityMatter.java index 427159937..8a53edda5 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/EntityMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/EntityMatter.java @@ -33,7 +33,6 @@ import com.volmit.iris.util.nbt.tag.CompoundTag; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; import org.bukkit.util.BoundingBox; import java.io.DataInputStream; diff --git a/src/main/java/com/volmit/iris/util/matter/slices/IntMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/IntMatter.java index 6da6a2876..78145821b 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/IntMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/IntMatter.java @@ -21,7 +21,6 @@ package com.volmit.iris.util.matter.slices; import com.volmit.iris.util.data.Varint; import com.volmit.iris.util.data.palette.Palette; import com.volmit.iris.util.matter.Sliced; -import org.bukkit.entity.Player; import java.io.DataInputStream; import java.io.DataOutputStream; diff --git a/src/main/java/com/volmit/iris/util/matter/slices/LongMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/LongMatter.java index a19f1cf7d..2831fcc1e 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/LongMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/LongMatter.java @@ -21,7 +21,6 @@ package com.volmit.iris.util.matter.slices; import com.volmit.iris.util.data.Varint; import com.volmit.iris.util.data.palette.Palette; import com.volmit.iris.util.matter.Sliced; -import org.bukkit.entity.Player; import java.io.DataInputStream; import java.io.DataOutputStream; diff --git a/src/main/java/com/volmit/iris/util/matter/slices/MarkerMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/MarkerMatter.java index 9b680d370..ccd315b70 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/MarkerMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/MarkerMatter.java @@ -22,7 +22,6 @@ import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.data.palette.Palette; import com.volmit.iris.util.matter.MatterMarker; import com.volmit.iris.util.matter.Sliced; -import org.bukkit.entity.Player; import java.io.DataInputStream; import java.io.DataOutputStream; diff --git a/src/main/java/com/volmit/iris/util/matter/slices/NBTMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/NBTMatter.java index 9aee92288..e7274f708 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/NBTMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/NBTMatter.java @@ -20,10 +20,7 @@ package com.volmit.iris.util.matter.slices; import com.volmit.iris.util.data.palette.Palette; import com.volmit.iris.util.nbt.io.NBTUtil; -import com.volmit.iris.util.nbt.tag.CompoundTag; -import com.volmit.iris.util.nbt.tag.IntTag; import com.volmit.iris.util.nbt.tag.Tag; -import org.bukkit.entity.Player; import java.io.DataInputStream; import java.io.DataOutputStream; diff --git a/src/main/java/com/volmit/iris/util/matter/slices/RawMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/RawMatter.java index a31f614cb..465e9044d 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/RawMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/RawMatter.java @@ -19,7 +19,6 @@ package com.volmit.iris.util.matter.slices; import com.volmit.iris.util.collection.KMap; -import com.volmit.iris.util.hunk.bits.Writable; import com.volmit.iris.util.hunk.storage.MappedHunk; import com.volmit.iris.util.hunk.storage.PaletteOrHunk; import com.volmit.iris.util.matter.MatterReader; diff --git a/src/main/java/com/volmit/iris/util/matter/slices/RegistryMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/RegistryMatter.java index 55a1122fd..3745b755e 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/RegistryMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/RegistryMatter.java @@ -21,7 +21,6 @@ package com.volmit.iris.util.matter.slices; import com.volmit.iris.core.loader.IrisRegistrant; import com.volmit.iris.util.context.IrisContext; import com.volmit.iris.util.data.palette.Palette; -import com.volmit.iris.util.matter.MatterTile; import java.io.DataInputStream; import java.io.DataOutputStream; diff --git a/src/main/java/com/volmit/iris/util/matter/slices/UpdateMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/UpdateMatter.java index c24f07fa7..21479b201 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/UpdateMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/UpdateMatter.java @@ -20,7 +20,6 @@ package com.volmit.iris.util.matter.slices; import com.volmit.iris.util.data.palette.GlobalPalette; import com.volmit.iris.util.data.palette.Palette; -import com.volmit.iris.util.matter.MatterTile; import com.volmit.iris.util.matter.MatterUpdate; import com.volmit.iris.util.matter.Sliced; diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/Chunk.java b/src/main/java/com/volmit/iris/util/nbt/mca/Chunk.java index c2a3adc11..29373637c 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/Chunk.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/Chunk.java @@ -255,8 +255,7 @@ public class Chunk { public CompoundTag getBlockStateAt(int blockX, int blockY, int blockZ) { int s = MCAUtil.blockToChunk(blockY); - if(sections.length() <= s) - { + if (sections.length() <= s) { return null; } @@ -282,8 +281,7 @@ public class Chunk { public void setBlockStateAt(int blockX, int blockY, int blockZ, CompoundTag state, boolean cleanup) { int sectionIndex = MCAUtil.blockToChunk(blockY); - if(sections.length() <= sectionIndex) - { + if (sections.length() <= sectionIndex) { return; } diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/MCAFile.java b/src/main/java/com/volmit/iris/util/nbt/mca/MCAFile.java index 47eb5f630..295369c25 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/MCAFile.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/MCAFile.java @@ -18,7 +18,6 @@ package com.volmit.iris.util.nbt.mca; -import com.volmit.iris.core.pregenerator.syndicate.SyndicateServer; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.math.Position2; import com.volmit.iris.util.nbt.tag.CompoundTag; diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/MCALinearPalette.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/MCALinearPalette.java index 836daf3e5..05dbb427e 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/MCALinearPalette.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/MCALinearPalette.java @@ -79,8 +79,7 @@ public class MCALinearPalette implements MCAPalette { } public void read(ListTag var0) { - for (int var1 = 0; var1 < var0.size(); var1++) - { + for (int var1 = 0; var1 < var0.size(); var1++) { this.values[var1] = this.reader.apply((CompoundTag) var0.get(var1)); } this.size = var0.size(); diff --git a/src/main/java/com/volmit/iris/util/parallel/MultiBurst.java b/src/main/java/com/volmit/iris/util/parallel/MultiBurst.java index 4559dc672..a834bd717 100644 --- a/src/main/java/com/volmit/iris/util/parallel/MultiBurst.java +++ b/src/main/java/com/volmit/iris/util/parallel/MultiBurst.java @@ -156,17 +156,12 @@ public class MultiBurst { try { while (!service.awaitTermination(1, TimeUnit.SECONDS)) { Iris.info("Still waiting to shutdown burster..."); - if(p.getMilliseconds() > 7000) - { + if (p.getMilliseconds() > 7000) { Iris.warn("Forcing Shutdown..."); - try - { + try { service.shutdownNow(); - } - - catch(Throwable e) - { + } catch (Throwable e) { } diff --git a/src/main/java/com/volmit/iris/util/scheduling/jobs/Job.java b/src/main/java/com/volmit/iris/util/scheduling/jobs/Job.java index 156328bf8..c2b3dfd10 100644 --- a/src/main/java/com/volmit/iris/util/scheduling/jobs/Job.java +++ b/src/main/java/com/volmit/iris/util/scheduling/jobs/Job.java @@ -72,8 +72,7 @@ public interface Job { }, sender.isPlayer() ? 0 : 20); f.whenComplete((fs, ff) -> { J.car(c); - if(!silentMsg) - { + if (!silentMsg) { sender.sendMessage(C.AQUA + "Completed " + getName() + " in " + Form.duration(p.getMilliseconds(), 1)); } whenComplete.run(); diff --git a/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java b/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java index 48cf0fe6b..60514a0d9 100644 --- a/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java +++ b/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java @@ -24,7 +24,6 @@ import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.IRare; import com.volmit.iris.engine.object.IrisStyledRange; import com.volmit.iris.util.collection.KList; -import com.volmit.iris.util.data.ComplexCache; import com.volmit.iris.util.function.Function2; import com.volmit.iris.util.function.Function3; import com.volmit.iris.util.function.Function4; diff --git a/src/main/java/com/volmit/iris/util/stream/utility/CachedStream2D.java b/src/main/java/com/volmit/iris/util/stream/utility/CachedStream2D.java index 203ecaf52..7f0db1487 100644 --- a/src/main/java/com/volmit/iris/util/stream/utility/CachedStream2D.java +++ b/src/main/java/com/volmit/iris/util/stream/utility/CachedStream2D.java @@ -18,16 +18,11 @@ package com.volmit.iris.util.stream.utility; -import com.github.benmanes.caffeine.cache.Caffeine; -import com.github.benmanes.caffeine.cache.LoadingCache; -import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap; import com.volmit.iris.Iris; -import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.service.PreservationSVC; import com.volmit.iris.engine.data.cache.Cache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.MeteredCache; -import com.volmit.iris.util.data.ComplexCache; import com.volmit.iris.util.data.KCache; import com.volmit.iris.util.stream.BasicStream; import com.volmit.iris.util.stream.ProceduralStream; @@ -57,7 +52,7 @@ public class CachedStream2D extends BasicStream implements ProceduralStrea @Override public T get(double x, double z) { - return cache.get(Cache.key((int)x, (int)z)); + return cache.get(Cache.key((int) x, (int) z)); } @Override From 4a594a8e4f835b67688aee26603e5f4169c00286 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 13:58:18 -0400 Subject: [PATCH 18/24] Fix --- .../iris/core/loader/ResourceLoader.java | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java b/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java index 93592b482..5f646553a 100644 --- a/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java +++ b/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java @@ -40,6 +40,8 @@ import lombok.Data; import java.io.File; import java.util.Locale; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.atomic.AtomicReferenceArray; import java.util.function.Predicate; import java.util.stream.Stream; @@ -51,7 +53,7 @@ public class ResourceLoader implements MeteredCache { protected String folderName; protected String resourceTypeName; protected KCache loadCache; - protected KList folderCache; + protected final AtomicReference> folderCache; protected Class objectClass; protected String cname; protected String[] possibleKeys = null; @@ -61,6 +63,7 @@ public class ResourceLoader implements MeteredCache { public ResourceLoader(File root, IrisData manager, String folderName, String resourceTypeName, Class objectClass) { this.manager = manager; + folderCache = new AtomicReference<>(); sec = new ChronoLatch(5000); loads = new AtomicInteger(); this.objectClass = objectClass; @@ -268,26 +271,20 @@ public class ResourceLoader implements MeteredCache { } public KList getFolders() { - if (folderCache == null) { - folderCache = new KList<>(); + if (folderCache.get() == null) { + folderCache.set(new KList<>()); for (File i : root.listFiles()) { if (i.isDirectory()) { if (i.getName().equals(folderName)) { - folderCache.add(i); + folderCache.get().add(i); break; } } } } - if (folderCache == null) { - synchronized (this) { - return getFolderCache(); - } - } - - return folderCache; + return folderCache.get(); } public KList getFolders(String rc) { @@ -307,7 +304,7 @@ public class ResourceLoader implements MeteredCache { public void clearCache() { possibleKeys = null; loadCache.invalidate(); - folderCache = null; + folderCache.set(null); } public File fileFor(T b) { @@ -333,7 +330,7 @@ public class ResourceLoader implements MeteredCache { } public void clearList() { - folderCache = null; + folderCache.set(null); possibleKeys = null; } From b6d9eb3dcc6e86c7fea6c6f91bf4f16cb1cc63ad Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 14:18:30 -0400 Subject: [PATCH 19/24] f --- src/main/java/com/volmit/iris/Iris.java | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index 70cfe1f44..54f3d6c04 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -67,6 +67,7 @@ import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.generator.ChunkGenerator; +import org.bukkit.plugin.IllegalPluginAccessException; import org.bukkit.plugin.Plugin; import java.io.BufferedInputStream; @@ -298,15 +299,23 @@ public class Iris extends VolmitPlugin implements Listener { @SuppressWarnings("deprecation") public static void later(NastyRunnable object) { - Bukkit.getScheduler().scheduleAsyncDelayedTask(instance, () -> + try { - try { - object.run(); - } catch (Throwable e) { - e.printStackTrace(); - Iris.reportError(e); - } - }, RNG.r.i(100, 1200)); + Bukkit.getScheduler().scheduleAsyncDelayedTask(instance, () -> + { + try { + object.run(); + } catch (Throwable e) { + e.printStackTrace(); + Iris.reportError(e); + } + }, RNG.r.i(100, 1200)); + } + + catch(IllegalPluginAccessException ignored) + { + + } } public static int jobCount() { From a80031c3c5d7ca2e02f6a9cf0bb5a7abd2aa4e36 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 18:25:00 -0400 Subject: [PATCH 20/24] Data fixes for tec plates --- src/main/java/com/volmit/iris/Iris.java | 4 +- .../iris/engine/mantle/MantleWriter.java | 10 +++- .../com/volmit/iris/util/format/Form.java | 36 ++++++++++++ .../volmit/iris/util/hunk/bits/DataBits.java | 1 + .../iris/util/hunk/bits/DataContainer.java | 56 ++++++++++++++----- .../iris/util/hunk/bits/HashPalette.java | 13 ++++- .../iris/util/hunk/bits/LinearPalette.java | 16 +++--- .../volmit/iris/util/hunk/bits/Palette.java | 2 +- .../volmit/iris/util/hunk/bits/TecTest.java | 53 ++++++++++++++++++ .../iris/util/hunk/storage/PaletteHunk.java | 6 +- .../iris/util/hunk/storage/PaletteOrHunk.java | 4 +- .../volmit/iris/util/matter/MatterSlice.java | 1 - .../volmit/iris/util/matter/MatterTest.java | 25 --------- .../iris/util/matter/slices/BlockMatter.java | 2 +- .../util/matter/slices/BooleanMatter.java | 2 +- .../iris/util/matter/slices/CavernMatter.java | 2 +- .../iris/util/matter/slices/EntityMatter.java | 2 +- .../iris/util/matter/slices/IntMatter.java | 2 +- .../iris/util/matter/slices/LongMatter.java | 2 +- .../iris/util/matter/slices/MarkerMatter.java | 2 +- .../iris/util/matter/slices/NBTMatter.java | 2 +- .../iris/util/matter/slices/RawMatter.java | 4 +- .../util/matter/slices/RegistryMatter.java | 2 +- .../iris/util/matter/slices/StringMatter.java | 2 +- .../iris/util/matter/slices/TileMatter.java | 2 +- .../iris/util/matter/slices/UpdateMatter.java | 2 +- 26 files changed, 184 insertions(+), 71 deletions(-) create mode 100644 src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java delete mode 100644 src/main/java/com/volmit/iris/util/matter/MatterTest.java diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index 54f3d6c04..7f3669c9b 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -38,13 +38,13 @@ import com.volmit.iris.util.exceptions.IrisException; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; import com.volmit.iris.util.function.NastyRunnable; +import com.volmit.iris.util.hunk.bits.TecTest; import com.volmit.iris.util.io.FileWatcher; import com.volmit.iris.util.io.IO; import com.volmit.iris.util.io.InstanceState; import com.volmit.iris.util.io.JarScanner; import com.volmit.iris.util.math.M; import com.volmit.iris.util.math.RNG; -import com.volmit.iris.util.matter.MatterTest; import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.IrisService; import com.volmit.iris.util.plugin.Metrics; @@ -454,9 +454,9 @@ public class Iris extends VolmitPlugin implements Listener { J.ar(this::checkConfigHotload, 60); J.sr(this::tickQueue, 0); J.s(this::setupPapi); + J.s(TecTest::go); J.a(ServerConfigurator::configure, 20); splash(); - J.a(MatterTest::test, 20); if (IrisSettings.get().getStudio().isAutoStartDefaultStudio()) { Iris.info("Starting up auto Studio!"); diff --git a/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java b/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java index cfda683b8..9e454b2e4 100644 --- a/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java +++ b/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java @@ -524,7 +524,15 @@ public class MantleWriter implements IObjectPlacer { } public void set(IrisPosition pos, T data) { - setData(pos.getX(), pos.getY(), pos.getZ(), data); + try + { + setData(pos.getX(), pos.getY(), pos.getZ(), data); + } + + catch(Throwable e) + { + Iris.error("No set? " + data.toString() + " for " + pos.toString()); + } } public void set(List positions, T data) { diff --git a/src/main/java/com/volmit/iris/util/format/Form.java b/src/main/java/com/volmit/iris/util/format/Form.java index b4a1fd2f0..cd53a66b3 100644 --- a/src/main/java/com/volmit/iris/util/format/Form.java +++ b/src/main/java/com/volmit/iris/util/format/Form.java @@ -24,9 +24,11 @@ import com.volmit.iris.util.math.RollingSequence; import java.math.BigInteger; import java.text.DecimalFormat; import java.text.NumberFormat; +import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.LinkedHashMap; +import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Map.Entry; @@ -158,6 +160,40 @@ public class Form { return wrap(s, len, newLineSep, soft, " "); } + public static String hardWrap(String s, int len) { + StringBuilder ss = new StringBuilder(); + + for(int i = 0; i < s.length(); i+= len) + { + if(i + len > s.length()) + { + ss.append(s, i, s.length()); + break; + } + + ss.append(s, i, i + len).append("\n"); + } + + return ss.toString(); + } + + public static List hardWrapList(String s, int len) { + List l = new ArrayList<>(); + for(int i = 0; i < s.length(); i+= len) + { + if(i + len > s.length()) + { + l.add(s.substring(i)); + break; + } + + l.add(s.substring(i, i + len)); + } + + return l; + } + + /** * Wrap words * diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java b/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java index 3d13c4c90..8aec54478 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java @@ -18,6 +18,7 @@ package com.volmit.iris.util.hunk.bits; +import com.volmit.iris.Iris; import org.apache.commons.lang3.Validate; import java.io.DataInputStream; diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java b/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java index 05e38b497..f415b63ae 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java @@ -18,6 +18,8 @@ package com.volmit.iris.util.hunk.bits; +import com.volmit.iris.Iris; + import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -25,9 +27,10 @@ import java.io.IOException; import java.io.OutputStream; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.locks.ReentrantLock; public class DataContainer { - protected static final int INITIAL_BITS = 3; + protected static final int INITIAL_BITS = 2; protected static final int LINEAR_BITS_LIMIT = 5; protected static final int LINEAR_INITIAL_LENGTH = (int) Math.pow(2, LINEAR_BITS_LIMIT) + 1; protected static final int[] BIT = computeBitLimits(); @@ -37,13 +40,12 @@ public class DataContainer { private final int length; private final Writable writer; - public DataContainer(Writable writer, int length, T empty) { + public DataContainer(Writable writer, int length) { this.writer = writer; this.length = length; this.bits = new AtomicInteger(INITIAL_BITS); this.data = new AtomicReference<>(new DataBits(INITIAL_BITS, length)); this.palette = new AtomicReference<>(newPalette(INITIAL_BITS)); - this.ensurePaletted(empty); } public DataContainer(DataInputStream din, Writable writer) throws IOException { @@ -54,6 +56,16 @@ public class DataContainer { this.bits = new AtomicInteger(palette.get().bits()); } + public DataBits getData() + { + return data.get(); + } + + public Palette getPalette() + { + return palette.get(); + } + public String toString() { return "DataContainer <" + length + " x " + bits + " bits> -> Palette<" + palette.get().getClass().getSimpleName().replaceAll("\\QPalette\\E", "") + ">: " + palette.get().size() + " " + data.get().toString() + " PalBit: " + palette.get().bits(); @@ -79,7 +91,7 @@ public class DataContainer { private Palette newPalette(DataInputStream din) throws IOException { int paletteSize = din.readInt(); - Palette d = newPalette(bits(paletteSize)); + Palette d = newPalette(bits(paletteSize+1)); d.from(paletteSize, writer, din); return d; } @@ -105,24 +117,36 @@ public class DataContainer { } public void set(int position, T t) { - int id = palette.get().id(t); + synchronized (this) + { + int id = palette.get().id(t); - if (id == -1) { - checkBits(); - id = palette.get().add(t); + if (id == -1) { + expandOne(); + id = palette.get().add(t); + } + + data.get().set(position, id); } + } - data.get().set(position, id); + private void expandOne() { + if (palette.get().size()+1 >= BIT[bits.get()]) { + setBits(bits.get() + 1); + } } public T get(int position) { - int id = data.get().get(position) + 1; + synchronized (this) + { + int id = data.get().get(position) + 1; - if (id <= 0) { - return null; + if (id <= 0) { + return null; + } + + return palette.get().get(id - 1); } - - return palette.get().get(id - 1); } public void setBits(int bits) { @@ -159,4 +183,8 @@ public class DataContainer { return DataContainer.BIT.length - 1; } + + public int size() { + return getData().getSize(); + } } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java b/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java index 6bed881a5..16b16a6e9 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/HashPalette.java @@ -33,6 +33,7 @@ public class HashPalette implements Palette { this.size = new AtomicInteger(0); this.palette = new LinkedHashMap<>(); this.lookup = new KMap<>(); + add(null); } @Override @@ -58,18 +59,28 @@ public class HashPalette implements Palette { @Override public int id(T t) { + if(t == null) + { + return 0; + } + Integer v = palette.get(t); return v != null ? v : -1; } @Override public int size() { - return size.get(); + return size.get() - 1; } @Override public void iterate(Consumer2 c) { for (T i : palette.keySet()) { + if(i == null) + { + continue; + } + c.accept(i, id(i)); } } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java b/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java index befdead96..720f7fbb5 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java @@ -31,6 +31,7 @@ public class LinearPalette implements Palette { public LinearPalette(int initialSize) { this.size = new AtomicInteger(0); this.palette = new AtomicReference<>(new AtomicReferenceArray<>(initialSize)); + palette.get().set(size.getAndIncrement(), null); } @Override @@ -64,12 +65,13 @@ public class LinearPalette implements Palette { @Override public int id(T t) { - for (int i = 0; i < size(); i++) { - if (t == null && palette.get().get(i) == null) { - return i; - } + if(t == null) + { + return 0; + } - if (t != null && t.equals(palette.get().get(i))) { + for (int i = 0; i < size(); i++) { + if (t.equals(palette.get().get(i))) { return i; } } @@ -79,12 +81,12 @@ public class LinearPalette implements Palette { @Override public int size() { - return size.get(); + return size.get()-1; } @Override public void iterate(Consumer2 c) { - for (int i = 0; i < size(); i++) { + for (int i = 1; i < size()+1; i++) { c.accept(palette.get().get(i), i); } } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/Palette.java b/src/main/java/com/volmit/iris/util/hunk/bits/Palette.java index d179572ba..f59b4040e 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/Palette.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/Palette.java @@ -35,7 +35,7 @@ public interface Palette { int size(); default int bits() { - return DataContainer.bits(size()); + return DataContainer.bits(size()+1); } void iterate(Consumer2 c); diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java b/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java new file mode 100644 index 000000000..4b9db1bfd --- /dev/null +++ b/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java @@ -0,0 +1,53 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.util.hunk.bits; + +import com.volmit.iris.Iris; +import com.volmit.iris.engine.data.cache.Cache; +import com.volmit.iris.util.io.IO; +import com.volmit.iris.util.mantle.Mantle; +import com.volmit.iris.util.math.RNG; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; + +public class TecTest { + public static void go() + { + Mantle m = new Mantle(new File("dummy"), 256); + + int size = 255; + int mx = (int) Math.pow(size, 3); + + for(int i = 0; i < mx; i++) + { + int[] p = Cache.to3D(i, size, size); + m.set(p[0], p[1], p[2], RNG.r.s(1)); + } + + m.close(); + + m = new Mantle(new File("dummy"), 256); + m.get(0,0,0, String.class); + } +} diff --git a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteHunk.java b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteHunk.java index 1be335f1d..ba30870e4 100644 --- a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteHunk.java +++ b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteHunk.java @@ -27,6 +27,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.io.IOException; +import java.util.concurrent.locks.ReentrantLock; @SuppressWarnings({"DefaultAnnotationParam", "Lombok"}) @Data @@ -34,16 +35,15 @@ import java.io.IOException; public class PaletteHunk extends StorageHunk implements Hunk { private DataContainer data; - public PaletteHunk(int w, int h, int d, Writable writer, T e) { + public PaletteHunk(int w, int h, int d, Writable writer) { super(w, h, d); - data = new DataContainer<>(writer, w * h * d, e); + data = new DataContainer<>(writer, w * h * d); } public void setPalette(DataContainer c) { data = c; } - public boolean isMapped() { return false; } diff --git a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java index 3b58ea338..548210a7f 100644 --- a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java +++ b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java @@ -30,9 +30,9 @@ import java.util.function.Supplier; public abstract class PaletteOrHunk extends StorageHunk implements Hunk, Writable { private final Hunk hunk; - public PaletteOrHunk(int width, int height, int depth, boolean allow, Supplier> factory, T e) { + public PaletteOrHunk(int width, int height, int depth, boolean allow, Supplier> factory) { super(width, height, depth); - hunk = (allow) ? new PaletteHunk<>(width, height, depth, this, e) : factory.get(); + hunk = (allow) ? new PaletteHunk<>(width, height, depth, this) : factory.get(); } public DataContainer palette() { diff --git a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java index c5994b844..669e35305 100644 --- a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java +++ b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java @@ -19,7 +19,6 @@ package com.volmit.iris.util.matter; import com.volmit.iris.engine.data.cache.Cache; -import com.volmit.iris.util.data.Varint; import com.volmit.iris.util.data.palette.Palette; import com.volmit.iris.util.data.palette.PaletteType; import com.volmit.iris.util.hunk.Hunk; diff --git a/src/main/java/com/volmit/iris/util/matter/MatterTest.java b/src/main/java/com/volmit/iris/util/matter/MatterTest.java deleted file mode 100644 index 83795b6c4..000000000 --- a/src/main/java/com/volmit/iris/util/matter/MatterTest.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Iris is a World Generator for Minecraft Bukkit Servers - * Copyright (c) 2021 Arcane Arts (Volmit Software) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.volmit.iris.util.matter; - -public class MatterTest { - public static void test() { - - } -} diff --git a/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java index 5a8a0b01a..eb25aa8de 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java @@ -43,7 +43,7 @@ public class BlockMatter extends RawMatter { } public BlockMatter(int width, int height, int depth) { - super(width, height, depth, BlockData.class, AIR); + super(width, height, depth, BlockData.class); registerWriter(World.class, ((w, d, x, y, z) -> w.getBlockAt(x, y, z).setBlockData(d))); registerReader(World.class, (w, x, y, z) -> { BlockData d = w.getBlockAt(x, y, z).getBlockData(); diff --git a/src/main/java/com/volmit/iris/util/matter/slices/BooleanMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/BooleanMatter.java index a9936b806..ba7f66657 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/BooleanMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/BooleanMatter.java @@ -37,7 +37,7 @@ public class BooleanMatter extends RawMatter { } public BooleanMatter(int width, int height, int depth) { - super(width, height, depth, Boolean.class, false); + super(width, height, depth, Boolean.class); } @Override diff --git a/src/main/java/com/volmit/iris/util/matter/slices/CavernMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/CavernMatter.java index 04de23238..7d9709363 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/CavernMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/CavernMatter.java @@ -40,7 +40,7 @@ public class CavernMatter extends RawMatter { } public CavernMatter(int width, int height, int depth) { - super(width, height, depth, MatterCavern.class, EMPTY); + super(width, height, depth, MatterCavern.class); } public static MatterCavern get(String customBiome, int liquid) { diff --git a/src/main/java/com/volmit/iris/util/matter/slices/EntityMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/EntityMatter.java index 8a53edda5..8f446ace6 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/EntityMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/EntityMatter.java @@ -54,7 +54,7 @@ public class EntityMatter extends RawMatter { } public EntityMatter(int width, int height, int depth) { - super(width, height, depth, MatterEntityGroup.class, EMPTY); + super(width, height, depth, MatterEntityGroup.class); registerWriter(World.class, ((w, d, x, y, z) -> { for (MatterEntity i : d.getEntities()) { Location realPosition = new Location(w, x + i.getXOff(), y + i.getYOff(), z + i.getZOff()); diff --git a/src/main/java/com/volmit/iris/util/matter/slices/IntMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/IntMatter.java index 78145821b..9eae24461 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/IntMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/IntMatter.java @@ -38,7 +38,7 @@ public class IntMatter extends RawMatter { } public IntMatter(int width, int height, int depth) { - super(width, height, depth, Integer.class, 0); + super(width, height, depth, Integer.class); } @Override diff --git a/src/main/java/com/volmit/iris/util/matter/slices/LongMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/LongMatter.java index 2831fcc1e..5837dde36 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/LongMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/LongMatter.java @@ -38,7 +38,7 @@ public class LongMatter extends RawMatter { } public LongMatter(int width, int height, int depth) { - super(width, height, depth, Long.class, 0L); + super(width, height, depth, Long.class); } @Override diff --git a/src/main/java/com/volmit/iris/util/matter/slices/MarkerMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/MarkerMatter.java index ccd315b70..288458f94 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/MarkerMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/MarkerMatter.java @@ -44,7 +44,7 @@ public class MarkerMatter extends RawMatter { } public MarkerMatter(int width, int height, int depth) { - super(width, height, depth, MatterMarker.class, NONE); + super(width, height, depth, MatterMarker.class); } @Override diff --git a/src/main/java/com/volmit/iris/util/matter/slices/NBTMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/NBTMatter.java index e7274f708..efcca9ec7 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/NBTMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/NBTMatter.java @@ -28,7 +28,7 @@ import java.io.IOException; public class NBTMatter> extends RawMatter { public NBTMatter(int width, int height, int depth, Class c, T e) { - super(width, height, depth, c, e); + super(width, height, depth, c); } @Override diff --git a/src/main/java/com/volmit/iris/util/matter/slices/RawMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/RawMatter.java index 465e9044d..d7f1ccdae 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/RawMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/RawMatter.java @@ -36,8 +36,8 @@ public abstract class RawMatter extends PaletteOrHunk implements MatterSli @Getter private final Class type; - public RawMatter(int width, int height, int depth, Class type, T e) { - super(width, height, depth, false, () -> new MappedHunk<>(width, height, depth), e); + public RawMatter(int width, int height, int depth, Class type) { + super(width, height, depth, true, () -> new MappedHunk<>(width, height, depth)); writers = new KMap<>(); readers = new KMap<>(); this.type = type; diff --git a/src/main/java/com/volmit/iris/util/matter/slices/RegistryMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/RegistryMatter.java index 3745b755e..36c6098d1 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/RegistryMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/RegistryMatter.java @@ -28,7 +28,7 @@ import java.io.IOException; public class RegistryMatter extends RawMatter { public RegistryMatter(int width, int height, int depth, Class c, T e) { - super(width, height, depth, c, e); + super(width, height, depth, c); } @Override diff --git a/src/main/java/com/volmit/iris/util/matter/slices/StringMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/StringMatter.java index e5e5e3387..6af11b595 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/StringMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/StringMatter.java @@ -32,7 +32,7 @@ public class StringMatter extends RawMatter { } public StringMatter(int width, int height, int depth) { - super(width, height, depth, String.class, ""); + super(width, height, depth, String.class); } @Override diff --git a/src/main/java/com/volmit/iris/util/matter/slices/TileMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/TileMatter.java index 44c95d8c4..43b2b44bb 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/TileMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/TileMatter.java @@ -45,7 +45,7 @@ public class TileMatter extends RawMatter { } public TileMatter(int width, int height, int depth) { - super(width, height, depth, MatterTile.class, EMPTY); + super(width, height, depth, MatterTile.class); registerWriter(World.class, ((w, d, x, y, z) -> INMS.get().deserializeTile(d.getTileData(), new Location(w, x, y, z)))); registerReader(World.class, (w, x, y, z) -> { Location l = new Location(w, x, y, z); diff --git a/src/main/java/com/volmit/iris/util/matter/slices/UpdateMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/UpdateMatter.java index 21479b201..374eda80d 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/UpdateMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/UpdateMatter.java @@ -43,7 +43,7 @@ public class UpdateMatter extends RawMatter { } public UpdateMatter(int width, int height, int depth) { - super(width, height, depth, MatterUpdate.class, OFF); + super(width, height, depth, MatterUpdate.class); } @Override From c7a8cb566bfdbf6eed13257e49028fc29f28d5b1 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sat, 25 Sep 2021 18:25:08 -0400 Subject: [PATCH 21/24] fix --- src/main/java/com/volmit/iris/util/matter/MatterSlice.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java index 669e35305..c5994b844 100644 --- a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java +++ b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java @@ -19,6 +19,7 @@ package com.volmit.iris.util.matter; import com.volmit.iris.engine.data.cache.Cache; +import com.volmit.iris.util.data.Varint; import com.volmit.iris.util.data.palette.Palette; import com.volmit.iris.util.data.palette.PaletteType; import com.volmit.iris.util.hunk.Hunk; From f2a548936326ebc2c626adada4f6aa174a96dff8 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sun, 26 Sep 2021 04:42:44 -0400 Subject: [PATCH 22/24] Data bits --- .../volmit/iris/util/hunk/bits/DataBits.java | 13 +++++----- .../iris/util/hunk/bits/DataContainer.java | 20 +++++--------- .../iris/util/hunk/bits/LinearPalette.java | 4 ++- .../volmit/iris/util/hunk/bits/TecTest.java | 26 ------------------- .../iris/util/hunk/storage/PaletteOrHunk.java | 2 +- src/main/java/com/volmit/iris/util/io/IO.java | 5 ++++ .../com/volmit/iris/util/mantle/Mantle.java | 1 + .../volmit/iris/util/matter/MatterSlice.java | 11 +++++++- 8 files changed, 33 insertions(+), 49 deletions(-) diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java b/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java index 8aec54478..3476cac73 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java @@ -19,6 +19,7 @@ package com.volmit.iris.util.hunk.bits; import com.volmit.iris.Iris; +import com.volmit.iris.util.data.Varint; import org.apache.commons.lang3.Validate; import java.io.DataInputStream; @@ -65,7 +66,7 @@ public class DataBits { } public DataBits(int bits, int length, DataInputStream din) throws IOException { - this(bits, length, longs(din)); + this(bits, length, longs(din, dataLength(bits, length))); } public DataBits(int bits, int length, AtomicLongArray data) { @@ -98,11 +99,11 @@ public class DataBits { return (length + ((char) (64 / bits)) - 1) / ((char) (64 / bits)); } - private static AtomicLongArray longs(DataInputStream din) throws IOException { - AtomicLongArray a = new AtomicLongArray(din.readInt()); + private static AtomicLongArray longs(DataInputStream din, int longSize) throws IOException { + AtomicLongArray a = new AtomicLongArray(longSize); for (int i = 0; i < a.length(); i++) { - a.set(i, din.readLong()); + a.set(i, Varint.readUnsignedVarLong(din)); } return a; @@ -187,10 +188,8 @@ public class DataBits { } public void write(DataOutputStream dos) throws IOException { - dos.writeInt(data.length()); - for (int i = 0; i < data.length(); i++) { - dos.writeLong(data.get(i)); + Varint.writeUnsignedVarLong(data.get(i), dos); } } } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java b/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java index f415b63ae..65c7fcbf7 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java @@ -19,6 +19,7 @@ package com.volmit.iris.util.hunk.bits; import com.volmit.iris.Iris; +import com.volmit.iris.util.data.Varint; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; @@ -27,7 +28,6 @@ import java.io.IOException; import java.io.OutputStream; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; -import java.util.concurrent.locks.ReentrantLock; public class DataContainer { protected static final int INITIAL_BITS = 2; @@ -50,7 +50,7 @@ public class DataContainer { public DataContainer(DataInputStream din, Writable writer) throws IOException { this.writer = writer; - this.length = din.readInt(); + this.length = Varint.readUnsignedVarInt(din); this.palette = new AtomicReference<>(newPalette(din)); this.data = new AtomicReference<>(new DataBits(palette.get().bits(), length, din)); this.bits = new AtomicInteger(palette.get().bits()); @@ -82,15 +82,15 @@ public class DataContainer { } public void writeDos(DataOutputStream dos) throws IOException { - dos.writeInt(length); - dos.writeInt(palette.get().size()); + Varint.writeUnsignedVarInt(length, dos); + Varint.writeUnsignedVarInt(palette.get().size(), dos); palette.get().iterateIO((data, __) -> writer.writeNodeData(dos, data)); data.get().write(dos); dos.flush(); } private Palette newPalette(DataInputStream din) throws IOException { - int paletteSize = din.readInt(); + int paletteSize = Varint.readUnsignedVarInt(din); Palette d = newPalette(bits(paletteSize+1)); d.from(paletteSize, writer, din); return d; @@ -104,15 +104,9 @@ public class DataContainer { return new HashPalette<>(); } - private void checkBits() { - if (palette.get().size() >= BIT[bits.get()]) { - setBits(bits.get() + 1); - } - } - public void ensurePaletted(T t) { if (palette.get().id(t) == -1) { - checkBits(); + expandOne(); } } @@ -131,7 +125,7 @@ public class DataContainer { } private void expandOne() { - if (palette.get().size()+1 >= BIT[bits.get()]) { + if (palette.get().size() + 1 >= BIT[bits.get()] - 1) { setBits(bits.get() + 1); } } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java b/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java index 720f7fbb5..891f38e64 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java @@ -18,7 +18,9 @@ package com.volmit.iris.util.hunk.bits; +import com.volmit.iris.Iris; import com.volmit.iris.util.function.Consumer2; +import org.bukkit.block.data.BlockData; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; @@ -70,7 +72,7 @@ public class LinearPalette implements Palette { return 0; } - for (int i = 0; i < size(); i++) { + for (int i = 1; i < size() + 1; i++) { if (t.equals(palette.get().get(i))) { return i; } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java b/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java index 4b9db1bfd..b8dded4a8 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java @@ -18,36 +18,10 @@ package com.volmit.iris.util.hunk.bits; -import com.volmit.iris.Iris; -import com.volmit.iris.engine.data.cache.Cache; -import com.volmit.iris.util.io.IO; -import com.volmit.iris.util.mantle.Mantle; -import com.volmit.iris.util.math.RNG; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.File; -import java.io.IOException; - public class TecTest { public static void go() { - Mantle m = new Mantle(new File("dummy"), 256); - int size = 255; - int mx = (int) Math.pow(size, 3); - for(int i = 0; i < mx; i++) - { - int[] p = Cache.to3D(i, size, size); - m.set(p[0], p[1], p[2], RNG.r.s(1)); - } - - m.close(); - - m = new Mantle(new File("dummy"), 256); - m.get(0,0,0, String.class); } } diff --git a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java index 548210a7f..9843e1b8b 100644 --- a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java +++ b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java @@ -32,7 +32,7 @@ public abstract class PaletteOrHunk extends StorageHunk implements Hunk public PaletteOrHunk(int width, int height, int depth, boolean allow, Supplier> factory) { super(width, height, depth); - hunk = (allow) ? new PaletteHunk<>(width, height, depth, this) : factory.get(); + hunk = (allow && (width * height * depth <= 4096)) ? new PaletteHunk<>(width, height, depth, this) : factory.get(); } public DataContainer palette() { diff --git a/src/main/java/com/volmit/iris/util/io/IO.java b/src/main/java/com/volmit/iris/util/io/IO.java index b934bf5d7..ae909a00c 100644 --- a/src/main/java/com/volmit/iris/util/io/IO.java +++ b/src/main/java/com/volmit/iris/util/io/IO.java @@ -19,6 +19,7 @@ package com.volmit.iris.util.io; import com.volmit.iris.Iris; +import com.volmit.iris.util.format.Form; import java.io.BufferedInputStream; import java.io.BufferedReader; @@ -162,6 +163,10 @@ public class IO { return new String(hexChars).toUpperCase(); } + public static String print(byte[] bytes) { + return Form.memSize(bytes.length, 2) + "[" + bytesToHex(bytes) + "]"; + } + public static String longsToHex(long[] bytes) { byte[] v = new byte[bytes.length * 8]; diff --git a/src/main/java/com/volmit/iris/util/mantle/Mantle.java b/src/main/java/com/volmit/iris/util/mantle/Mantle.java index 875d6c0ad..6c843699a 100644 --- a/src/main/java/com/volmit/iris/util/mantle/Mantle.java +++ b/src/main/java/com/volmit/iris/util/mantle/Mantle.java @@ -487,6 +487,7 @@ public class Mantle { } catch (Throwable e) { Iris.error("Failed to read Tectonic Plate " + file.getAbsolutePath() + " creating a new chunk instead."); Iris.reportError(e); + e.printStackTrace(); region = new TectonicPlate(worldHeight, x, z); loadedRegions.put(k, region); Iris.debug("Created new Tectonic Plate (Due to Load Failure) " + C.DARK_GREEN + x + " " + z); diff --git a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java index c5994b844..08333fd4e 100644 --- a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java +++ b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java @@ -18,6 +18,7 @@ package com.volmit.iris.util.matter; +import com.volmit.iris.Iris; import com.volmit.iris.engine.data.cache.Cache; import com.volmit.iris.util.data.Varint; import com.volmit.iris.util.data.palette.Palette; @@ -184,7 +185,15 @@ public interface MatterSlice extends Hunk, PaletteType, Writable { default void read(DataInputStream din) throws IOException { if ((this instanceof PaletteOrHunk f && f.isPalette())) { - f.setPalette(new DataContainer<>(din, this)); + try { + f.setPalette(new DataContainer<>(din, this)); + } + + catch(Throwable e) + { + Iris.error("Failed to read " + getType() + " Matter! ?? "); + throw new IOException(e); + } return; } From 7becca450a6afa2068b7d8eed4e2b7ceadaa7081 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sun, 26 Sep 2021 11:17:41 -0400 Subject: [PATCH 23/24] Woop works --- src/main/java/com/volmit/iris/Iris.java | 11 +++ .../com/volmit/iris/engine/EnginePanic.java | 54 ++++++++++++ .../java/com/volmit/iris/util/data/DUTF.java | 55 ++++++++++++ .../iris/util/hunk/bits/DataContainer.java | 51 +++++++++++- .../volmit/iris/util/hunk/bits/TecTest.java | 83 +++++++++++++++++++ .../com/volmit/iris/util/mantle/Mantle.java | 2 + .../volmit/iris/util/mantle/MantleChunk.java | 5 +- .../iris/util/mantle/TectonicPlate.java | 3 + .../volmit/iris/util/matter/IrisMatter.java | 5 ++ .../com/volmit/iris/util/matter/Matter.java | 41 +++++---- .../volmit/iris/util/matter/MatterHeader.java | 8 +- .../volmit/iris/util/matter/MatterSlice.java | 11 +-- .../iris/util/matter/slices/BlockMatter.java | 3 +- 13 files changed, 299 insertions(+), 33 deletions(-) create mode 100644 src/main/java/com/volmit/iris/engine/EnginePanic.java create mode 100644 src/main/java/com/volmit/iris/util/data/DUTF.java diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index 7f3669c9b..792940723 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -27,6 +27,7 @@ import com.volmit.iris.core.link.OraxenLink; import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.nms.INMS; import com.volmit.iris.core.service.StudioSVC; +import com.volmit.iris.engine.EnginePanic; import com.volmit.iris.engine.object.IrisCompat; import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.engine.object.IrisWorld; @@ -476,6 +477,16 @@ public class Iris extends VolmitPlugin implements Listener { } } + public static void panic() + { + EnginePanic.panic(); + } + + public static void addPanic(String s, String v) + { + EnginePanic.add(s, v); + } + @SuppressWarnings("unchecked") public void onEnable() { enable(); diff --git a/src/main/java/com/volmit/iris/engine/EnginePanic.java b/src/main/java/com/volmit/iris/engine/EnginePanic.java new file mode 100644 index 000000000..41689f282 --- /dev/null +++ b/src/main/java/com/volmit/iris/engine/EnginePanic.java @@ -0,0 +1,54 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.engine; + +import com.volmit.iris.Iris; +import com.volmit.iris.util.collection.KMap; + +public class EnginePanic { + private static final KMap stuff = new KMap<>(); + private static KMap last = new KMap<>(); + + public static void add(String key, String value) + { + stuff.put(key, value); + } + + public static void saveLast() + { + last = stuff.copy(); + } + + public static void lastPanic() + { + for(String i : last.keySet()) + { + Iris.error("Last Panic " + i + ": " + stuff.get(i)); + } + } + + public static void panic() + { + lastPanic(); + for(String i : stuff.keySet()) + { + Iris.error("Engine Panic " + i + ": " + stuff.get(i)); + } + } +} diff --git a/src/main/java/com/volmit/iris/util/data/DUTF.java b/src/main/java/com/volmit/iris/util/data/DUTF.java new file mode 100644 index 000000000..54ba81a01 --- /dev/null +++ b/src/main/java/com/volmit/iris/util/data/DUTF.java @@ -0,0 +1,55 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.util.data; + +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; + +/** + *

Encodes signed and unsigned values using a common variable-length + * scheme, found for example in + * + * Google's Protocol Buffers. It uses fewer bytes to encode smaller values, + * but will use slightly more bytes to encode large values.

+ *

+ *

Signed values are further encoded using so-called zig-zag encoding + * in order to make them "compatible" with variable-length encoding.

+ */ +public final class DUTF { + + private DUTF() { + } + + public static void write(String s, DataOutputStream dos) throws IOException { + byte[] b = s.getBytes(StandardCharsets.UTF_8); + dos.writeShort(b.length); + dos.write(b); + } + + public static String read(DataInputStream din) throws IOException { + byte[] d = new byte[din.readShort()]; + din.read(d); + return new String(d, StandardCharsets.UTF_8); + } +} \ No newline at end of file diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java b/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java index 65c7fcbf7..ca236c6ed 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java @@ -30,8 +30,8 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; public class DataContainer { - protected static final int INITIAL_BITS = 2; - protected static final int LINEAR_BITS_LIMIT = 5; + protected static final int INITIAL_BITS = 3; + protected static final int LINEAR_BITS_LIMIT = 4; protected static final int LINEAR_INITIAL_LENGTH = (int) Math.pow(2, LINEAR_BITS_LIMIT) + 1; protected static final int[] BIT = computeBitLimits(); private final AtomicReference> palette; @@ -56,6 +56,51 @@ public class DataContainer { this.bits = new AtomicInteger(palette.get().bits()); } + public static String readBitString(DataInputStream din) throws IOException + { + DataContainer c = new DataContainer<>(din, new Writable() { + @Override + public Character readNodeData(DataInputStream din) throws IOException { + return din.readChar(); + } + + @Override + public void writeNodeData(DataOutputStream dos, Character character) throws IOException { + dos.writeChar(character); + } + }); + + StringBuilder sb = new StringBuilder(); + + for(int i = c.size()-1; i >= 0; i--) + { + sb.setCharAt(i, c.get(i)); + } + + return sb.toString(); + } + + public static void writeBitString(String s, DataOutputStream dos) throws IOException { + DataContainer c = new DataContainer<>(new Writable() { + @Override + public Character readNodeData(DataInputStream din) throws IOException { + return din.readChar(); + } + + @Override + public void writeNodeData(DataOutputStream dos, Character character) throws IOException { + dos.writeChar(character); + } + }, s.length()); + + for(int i = 0; i < s.length(); i++) + { + c.set(i, s.charAt(i)); + } + + c.writeDos(dos); + } + public DataBits getData() { return data.get(); @@ -125,7 +170,7 @@ public class DataContainer { } private void expandOne() { - if (palette.get().size() + 1 >= BIT[bits.get()] - 1) { + if (palette.get().size() + 1 >= BIT[bits.get()]) { setBits(bits.get() + 1); } } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java b/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java index b8dded4a8..8b840ccec 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java @@ -18,10 +18,93 @@ package com.volmit.iris.util.hunk.bits; +import com.volmit.iris.Iris; +import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.collection.KSet; +import com.volmit.iris.util.format.Form; +import com.volmit.iris.util.io.IO; +import com.volmit.iris.util.math.RNG; +import com.volmit.iris.util.matter.slices.BlockMatter; +import org.bukkit.Material; +import org.bukkit.block.data.BlockData; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.Set; + public class TecTest { + public static Set randomBlocks(int max) + { + KSet d = new KSet<>(); + + while(d.size() < max) + { + Material m = Material.values()[RNG.r.i(Material.values().length - 1)]; + if(m.isBlock()) + { + d.add(m.createBlockData()); + } + } + + return d; + } + public static void go() { + } + public static boolean test(int size, int pal) + { + try + { + Iris.info("Test? " + size + " " + pal); + KList blocks = new KList<>(randomBlocks(pal)); + Iris.info("Fill " + pal + " -> " + size + " Entries"); + Writable writer = new BlockMatter(); + DataContainer dc = new DataContainer<>(writer, size); + + for(int i = 0; i < dc.size(); i++) + { + dc.set(i, blocks.getRandom()); + } + + Iris.info(dc.toString()); + byte[] dat = dc.write(); + DataContainer dx = new DataContainer<>(new DataInputStream(new ByteArrayInputStream(dat)), writer); + Iris.info(dx.toString()); + byte[] dat2 = dx.write(); + Iris.info("Size: " + Form.memSize(dat.length, 2) + " -> " + Form.memSize(dat2.length, 2)); + + if(Arrays.equals(dat, dat2)) { + Iris.info("MATCH"); + return true; + } + else + { + for(int i = 0; i < dc.size(); i++) + { + if(!dx.get(i).equals(dc.get(i))) + { + Iris.info("FAIL Expected " + dc.get(i).getAsString(true) + " but got " + dx.get(i).getAsString(true)); + return false; + } + } + Iris.info("MATCH but different output?"); + + return true; + } + } + + catch(Throwable e) + { + e.printStackTrace(); + return false; + } } } diff --git a/src/main/java/com/volmit/iris/util/mantle/Mantle.java b/src/main/java/com/volmit/iris/util/mantle/Mantle.java index 6c843699a..7e593927c 100644 --- a/src/main/java/com/volmit/iris/util/mantle/Mantle.java +++ b/src/main/java/com/volmit/iris/util/mantle/Mantle.java @@ -476,6 +476,7 @@ public class Mantle { if (file.exists()) { try { + Iris.addPanic("reading.tectonic-plate", file.getAbsolutePath()); region = TectonicPlate.read(worldHeight, file); if (region.getX() != x || region.getZ() != z) { @@ -488,6 +489,7 @@ public class Mantle { Iris.error("Failed to read Tectonic Plate " + file.getAbsolutePath() + " creating a new chunk instead."); Iris.reportError(e); e.printStackTrace(); + Iris.panic(); region = new TectonicPlate(worldHeight, x, z); loadedRegions.put(k, region); Iris.debug("Created new Tectonic Plate (Due to Load Failure) " + C.DARK_GREEN + x + " " + z); diff --git a/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java b/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java index fc341f687..f7123e7d3 100644 --- a/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java +++ b/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java @@ -18,6 +18,8 @@ package com.volmit.iris.util.mantle; +import com.volmit.iris.Iris; +import com.volmit.iris.engine.EnginePanic; import com.volmit.iris.util.documentation.ChunkCoordinates; import com.volmit.iris.util.function.Consumer4; import com.volmit.iris.util.matter.IrisMatter; @@ -77,8 +79,9 @@ public class MantleChunk { } for (int i = 0; i < s; i++) { + Iris.addPanic("read.section", "Section[" + i + "]"); if (din.readBoolean()) { - sections.set(i, Matter.read(din)); + sections.set(i, Matter.readDin(din)); } } } diff --git a/src/main/java/com/volmit/iris/util/mantle/TectonicPlate.java b/src/main/java/com/volmit/iris/util/mantle/TectonicPlate.java index e88ffb593..d404710a6 100644 --- a/src/main/java/com/volmit/iris/util/mantle/TectonicPlate.java +++ b/src/main/java/com/volmit/iris/util/mantle/TectonicPlate.java @@ -19,6 +19,7 @@ package com.volmit.iris.util.mantle; import com.volmit.iris.Iris; +import com.volmit.iris.engine.EnginePanic; import com.volmit.iris.engine.data.cache.Cache; import com.volmit.iris.util.documentation.ChunkCoordinates; import com.volmit.iris.util.format.C; @@ -74,7 +75,9 @@ public class TectonicPlate { this(worldHeight, din.readInt(), din.readInt()); for (int i = 0; i < chunks.length(); i++) { if (din.readBoolean()) { + Iris.addPanic("read-chunk", "Chunk[" + i + "]"); chunks.set(i, new MantleChunk(sectionHeight, din)); + EnginePanic.saveLast(); } } } diff --git a/src/main/java/com/volmit/iris/util/matter/IrisMatter.java b/src/main/java/com/volmit/iris/util/matter/IrisMatter.java index f8ccd8692..1e4893192 100644 --- a/src/main/java/com/volmit/iris/util/matter/IrisMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/IrisMatter.java @@ -44,6 +44,11 @@ public class IrisMatter extends IrisRegistrant implements Matter { private final KMap, MatterSlice> sliceMap; public IrisMatter(int width, int height, int depth) { + if(width < 1 || height < 1 || depth < 1) + { + throw new RuntimeException("Invalid Matter Size " + width + "x" + height + "x" + depth); + } + this.width = width; this.height = height; this.depth = depth; diff --git a/src/main/java/com/volmit/iris/util/matter/Matter.java b/src/main/java/com/volmit/iris/util/matter/Matter.java index 14a3cec48..1254822cb 100644 --- a/src/main/java/com/volmit/iris/util/matter/Matter.java +++ b/src/main/java/com/volmit/iris/util/matter/Matter.java @@ -18,6 +18,7 @@ package com.volmit.iris.util.matter; +import com.volmit.iris.Iris; import com.volmit.iris.engine.object.IrisObject; import com.volmit.iris.engine.object.IrisPosition; import com.volmit.iris.util.collection.KSet; @@ -95,6 +96,10 @@ public interface Matter { return read(in, (b) -> new IrisMatter(b.getX(), b.getY(), b.getZ())); } + static Matter readDin(DataInputStream in) throws IOException, ClassNotFoundException { + return readDin(in, (b) -> new IrisMatter(b.getX(), b.getY(), b.getZ())); + } + /** * Reads the input stream into a matter object using a matter factory. * Does not close the input stream. Be a man, close it yourself. @@ -105,16 +110,26 @@ public interface Matter { * @throws IOException shit happens yo */ static Matter read(InputStream in, Function matterFactory) throws IOException, ClassNotFoundException { - DataInputStream din = new DataInputStream(in); - Matter matter = matterFactory.apply(new BlockPosition( - Varint.readUnsignedVarInt(din), - Varint.readUnsignedVarInt(din), - Varint.readUnsignedVarInt(din))); - int sliceCount = din.readByte(); - matter.getHeader().read(din); + return readDin(new DataInputStream(in), matterFactory); + } - while (sliceCount-- > 0) { + static Matter readDin(DataInputStream din, Function matterFactory) throws IOException, ClassNotFoundException { + Matter matter = matterFactory.apply(new BlockPosition( + din.readInt(), + din.readInt(), + din.readInt())); + Iris.addPanic("read.matter.size", matter.getWidth() + "x" + matter.getHeight() + "x" + matter.getDepth()); + int sliceCount = din.readByte(); + Iris.addPanic("read.matter.slicecount", sliceCount + ""); + + matter.getHeader().read(din); + Iris.addPanic("read.matter.header", matter.getHeader().toString()); + + for(int i = 0; i < sliceCount; i++) + { + Iris.addPanic("read.matter.slice", i + ""); String cn = din.readUTF(); + Iris.addPanic("read.matter.slice.class", cn); try { Class type = Class.forName(cn); MatterSlice slice = matter.createSlice(type, matter); @@ -336,10 +351,6 @@ public interface Matter { Map, MatterSlice> getSliceMap(); default void write(File f) throws IOException { - write(f, true); - } - - default void write(File f, boolean compression) throws IOException { OutputStream out = new FileOutputStream(f); write(out); out.close(); @@ -381,9 +392,9 @@ public interface Matter { default void writeDos(DataOutputStream dos) throws IOException { trimSlices(); - Varint.writeUnsignedVarInt(getWidth(), dos); - Varint.writeUnsignedVarInt(getHeight(), dos); - Varint.writeUnsignedVarInt(getDepth(), dos); + dos.writeInt(getWidth()); + dos.writeInt(getHeight()); + dos.writeInt(getDepth()); dos.writeByte(getSliceTypes().size()); getHeader().write(dos); diff --git a/src/main/java/com/volmit/iris/util/matter/MatterHeader.java b/src/main/java/com/volmit/iris/util/matter/MatterHeader.java index a00a53d75..d6852eb1b 100644 --- a/src/main/java/com/volmit/iris/util/matter/MatterHeader.java +++ b/src/main/java/com/volmit/iris/util/matter/MatterHeader.java @@ -34,13 +34,13 @@ public class MatterHeader { public void write(DataOutputStream out) throws IOException { out.writeUTF(author); - Varint.writeUnsignedVarLong(createdAt, out); - Varint.writeUnsignedVarInt(version, out); + out.writeLong(createdAt); + out.writeShort(version); } public void read(DataInputStream din) throws IOException { setAuthor(din.readUTF()); - setCreatedAt(Varint.readUnsignedVarLong(din)); - setVersion(Varint.readUnsignedVarInt(din)); + setCreatedAt(din.readLong()); + setVersion(din.readShort()); } } diff --git a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java index 08333fd4e..24c8c5b48 100644 --- a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java +++ b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java @@ -160,6 +160,7 @@ public interface MatterSlice extends Hunk, PaletteType, Writable { default void write(DataOutputStream dos) throws IOException { dos.writeUTF(getType().getCanonicalName()); + if ((this instanceof PaletteOrHunk f && f.isPalette())) { f.palette().writeDos(dos); return; @@ -185,15 +186,7 @@ public interface MatterSlice extends Hunk, PaletteType, Writable { default void read(DataInputStream din) throws IOException { if ((this instanceof PaletteOrHunk f && f.isPalette())) { - try { - f.setPalette(new DataContainer<>(din, this)); - } - - catch(Throwable e) - { - Iris.error("Failed to read " + getType() + " Matter! ?? "); - throw new IOException(e); - } + f.setPalette(new DataContainer<>(din, this)); return; } diff --git a/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java index eb25aa8de..51612897e 100644 --- a/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java +++ b/src/main/java/com/volmit/iris/util/matter/slices/BlockMatter.java @@ -21,6 +21,7 @@ package com.volmit.iris.util.matter.slices; import com.volmit.iris.util.data.B; import com.volmit.iris.util.data.palette.Palette; import com.volmit.iris.util.matter.Sliced; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.data.BlockData; @@ -58,6 +59,6 @@ public class BlockMatter extends RawMatter { @Override public BlockData readNode(DataInputStream din) throws IOException { - return B.get(din.readUTF()); + return Bukkit.createBlockData(din.readUTF()); } } From 734c0a37f7ed0c892105d95ab2a4756767edc6a9 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sun, 26 Sep 2021 12:04:08 -0400 Subject: [PATCH 24/24] V+ --- build.gradle | 2 +- src/main/java/com/volmit/iris/Iris.java | 3 +++ src/main/java/com/volmit/iris/core/IrisSettings.java | 2 +- src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 26bbcfa4f..e79ca270c 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ plugins { } group 'com.volmit.iris' -version '1.9-DangerouslyUnstable' +version '1.9' def apiVersion = '1.17' def name = getRootProject().getName() // Defined in settings.gradle def main = 'com.volmit.iris.Iris' diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index 792940723..1fe01213d 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -18,6 +18,9 @@ package com.volmit.iris; +import com.google.gson.ExclusionStrategy; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.ServerConfigurator; import com.volmit.iris.core.link.IrisPapiExpansion; diff --git a/src/main/java/com/volmit/iris/core/IrisSettings.java b/src/main/java/com/volmit/iris/core/IrisSettings.java index dd8d32eee..68d77cf69 100644 --- a/src/main/java/com/volmit/iris/core/IrisSettings.java +++ b/src/main/java/com/volmit/iris/core/IrisSettings.java @@ -83,7 +83,7 @@ public class IrisSettings { @Data public static class IrisSettingsPerformance { public boolean trimMantleInStudio = false; - public int mantleKeepAliveSeconds = 25; + public int mantleKeepAlive = 60; public int cacheSize = 4_096; public int resourceLoaderCacheSize = 1_024; public int objectLoaderCacheSize = 4_096; diff --git a/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java b/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java index cf87b65f7..bbeb78aa6 100644 --- a/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java +++ b/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java @@ -181,7 +181,7 @@ public interface EngineMantle extends IObjectPlacer { } default void trim() { - getMantle().trim(TimeUnit.SECONDS.toMillis(IrisSettings.get().getPerformance().getMantleKeepAliveSeconds())); + getMantle().trim(TimeUnit.SECONDS.toMillis(IrisSettings.get().getPerformance().getMantleKeepAlive())); } default MultiBurst burst() {