From 4ab7cb738e955b375eb92518146c3d90fc1f462c Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Tue, 3 Aug 2021 17:53:49 -0400 Subject: [PATCH 01/31] Testing some stuff -Made functions to convert integers into natural numbers (cause why not) -Ideas/plans of dynamic/custom region file sizes --- .../progressia/test/TestWorldDiskIO.java | 47 ++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java index 97a0d99..1b93323 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java @@ -26,6 +26,10 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; import java.util.zip.DeflaterOutputStream; import java.util.zip.InflaterInputStream; @@ -42,10 +46,49 @@ import ru.windcorp.progressia.server.Server; public class TestWorldDiskIO { - private static final Path SAVE_DIR = Paths.get("tmp_world"); + private static Path SAVE_DIR = Paths.get("tmp_world"); private static final Logger LOG = LogManager.getLogger("TestWorldDiskIO"); - private static final boolean ENABLE = false; + private static final boolean ENABLE = true; + + private static final int maxSize = 1048576; + private static final int sectorSize = maxSize/256; + + private Map regions = new HashMap(); + + private int natFromInt(int loc) + { + if (loc<0) + return (-loc)<<1 + 1; + return loc<<1; + } + + private int intFromNat(int loc) // Possibly unused + { + if ((loc&1) == 1) + return -loc>>1; + return loc>>1; + } + + private Vec3i getRegionLoc(Vec3i chunkLoc) + { + return new Vec3i(natFromInt(chunkLoc.x),natFromInt(chunkLoc.y),natFromInt(chunkLoc.z)); + } + + public void initRegions() + { + initRegions(null); + } + + public void initRegions(Path worldPath) + { + if (worldPath!=null) + { + SAVE_DIR = worldPath; + } + + regions.put(new Vec3i(0,0,0), new Vec3i(1,1,1)); + } public static void saveChunk(ChunkData chunk, Server server) { if (!ENABLE) From a9ca5f6b1794174ade61850734caae19c8dce85b Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Tue, 3 Aug 2021 19:42:04 -0400 Subject: [PATCH 02/31] Everything Excpeti polishing and options -Added LayerTitle class that is the title menu -Edited the launcher and proxy so it only starts the game when it needs to -Made buttons work with MutableString objects --- .../progressia/ProgressiaLauncher.java | 24 +++++++++++-- .../progressia/client/ClientProxy.java | 19 ++++++---- .../client/graphics/gui/BasicButton.java | 11 ++++-- .../client/graphics/gui/Button.java | 4 +++ .../progressia/test/LayerButtonTest.java | 16 +++++++-- .../windcorp/progressia/test/LayerTitle.java | 35 +++++++++++++++++++ .../resources/assets/languages/en-US.lang | 7 +++- .../resources/assets/languages/ru-RU.lang | 7 +++- 8 files changed, 108 insertions(+), 15 deletions(-) create mode 100644 src/main/java/ru/windcorp/progressia/test/LayerTitle.java diff --git a/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java b/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java index c8935fc..2567d9d 100644 --- a/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java +++ b/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java @@ -18,18 +18,38 @@ package ru.windcorp.progressia; +import ru.windcorp.progressia.client.ClientProxy; +import ru.windcorp.progressia.client.graphics.GUI; +import ru.windcorp.progressia.client.graphics.backend.GraphicsBackend; +import ru.windcorp.progressia.client.graphics.backend.RenderTaskQueue; +import ru.windcorp.progressia.client.graphics.flat.FlatRenderProgram; +import ru.windcorp.progressia.client.graphics.font.GNUUnifontLoader; +import ru.windcorp.progressia.client.graphics.font.Typefaces; +import ru.windcorp.progressia.client.graphics.world.WorldRenderProgram; +import ru.windcorp.progressia.client.localization.Localizer; +import ru.windcorp.progressia.common.resource.ResourceManager; import ru.windcorp.progressia.common.util.crash.CrashReports; import ru.windcorp.progressia.common.util.crash.analyzers.OutOfMemoryAnalyzer; import ru.windcorp.progressia.common.util.crash.providers.*; +import ru.windcorp.progressia.test.LayerTitle; public class ProgressiaLauncher { public static String[] arguments; + private static ClientProxy proxy; - public static void launch(String[] args, Proxy proxy) { + public static void launch(String[] args, ClientProxy inProxy) { arguments = args.clone(); setupCrashReports(); - proxy.initialize(); + + inProxy.initialize(); + proxy = inProxy; + GUI.addTopLayer(new LayerTitle("Title")); + } + + public static void play() + { + proxy.setupServer(); } private static void setupCrashReports() { diff --git a/src/main/java/ru/windcorp/progressia/client/ClientProxy.java b/src/main/java/ru/windcorp/progressia/client/ClientProxy.java index 1d154e7..402c5e8 100644 --- a/src/main/java/ru/windcorp/progressia/client/ClientProxy.java +++ b/src/main/java/ru/windcorp/progressia/client/ClientProxy.java @@ -38,7 +38,9 @@ public class ClientProxy implements Proxy { @Override public void initialize() { + GraphicsBackend.initialize(); + try { RenderTaskQueue.waitAndInvoke(FlatRenderProgram::init); RenderTaskQueue.waitAndInvoke(WorldRenderProgram::init); @@ -47,21 +49,26 @@ public class ClientProxy implements Proxy { .setDefault(GNUUnifontLoader.load(ResourceManager.getResource("assets/unifont-13.0.03.hex.gz"))) ); } catch (InterruptedException e) { - throw CrashReports.report(e, "ClientProxy failed"); + throw CrashReports.report(e, "Menu launch failed"); } - + Localizer.getInstance().setLanguage("en-US"); - + TestContent.registerContent(); Atlases.loadAllAtlases(); AudioSystem.initialize(); - - ServerState.startServer(); - ClientState.connectToLocalServer(); TestMusicPlayer.start(); + + //setupServer(); + } + + public void setupServer() + { + ServerState.startServer(); + ClientState.connectToLocalServer(); } } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/BasicButton.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/BasicButton.java index cd30152..ddaab7b 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/BasicButton.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/BasicButton.java @@ -42,10 +42,10 @@ public abstract class BasicButton extends Component { private boolean isPressed = false; private final Collection> actions = Collections.synchronizedCollection(new ArrayList<>()); - - public BasicButton(String name, String label, Font labelFont) { + + public BasicButton(String name, Label label) { super(name); - this.label = new Label(name + ".Label", labelFont, label); + this.label = label; setLayout(new LayoutAlign(10)); addChild(this.label); @@ -103,6 +103,11 @@ public abstract class BasicButton extends Component { }); } + + public BasicButton(String name, String label, Font labelFont) + { + this(name, new Label(name + ".Label", labelFont, label)); + } public BasicButton(String name, String label) { this(name, label, new Font()); diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Button.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Button.java index bbeb361..c41dedc 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Button.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Button.java @@ -29,6 +29,10 @@ public class Button extends BasicButton { super(name, label, labelFont); } + public Button(String name, Label label) { + super(name, label); + } + public Button(String name, String label) { this(name, label, new Font()); } diff --git a/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java b/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java index e505291..65b1a07 100644 --- a/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java @@ -17,7 +17,10 @@ */ package ru.windcorp.progressia.test; +import ru.windcorp.progressia.client.ClientState; import ru.windcorp.progressia.client.graphics.Colors; +import ru.windcorp.progressia.client.graphics.GUI; +import ru.windcorp.progressia.client.graphics.Layer; import ru.windcorp.progressia.client.graphics.font.Font; import ru.windcorp.progressia.client.graphics.gui.Button; import ru.windcorp.progressia.client.graphics.gui.Checkbox; @@ -25,6 +28,7 @@ import ru.windcorp.progressia.client.graphics.gui.Label; import ru.windcorp.progressia.client.graphics.gui.RadioButton; import ru.windcorp.progressia.client.graphics.gui.RadioButtonGroup; import ru.windcorp.progressia.client.graphics.gui.menu.MenuLayer; +import ru.windcorp.progressia.server.ServerState; public class LayerButtonTest extends MenuLayer { @@ -60,8 +64,16 @@ public class LayerButtonTest extends MenuLayer { getCloseAction().run(); })); - getContent().addChild(new Button("Quit", "Quit").addAction(b -> { - System.exit(0); + getContent().addChild(new Button("Menu", "Menu").addAction(b -> { + //System.exit(0); + for (Layer layer : GUI.getLayers()) + { + GUI.removeLayer(layer); + } + GUI.addTopLayer(new LayerTitle("Title")); + //ClientState.getInstance().; + + //ServerState.getInstance().shutdown("Safe Exit"); })); getContent().takeFocus(); diff --git a/src/main/java/ru/windcorp/progressia/test/LayerTitle.java b/src/main/java/ru/windcorp/progressia/test/LayerTitle.java new file mode 100644 index 0000000..8ef01fd --- /dev/null +++ b/src/main/java/ru/windcorp/progressia/test/LayerTitle.java @@ -0,0 +1,35 @@ +package ru.windcorp.progressia.test; + +import ru.windcorp.progressia.ProgressiaLauncher; +import ru.windcorp.progressia.client.graphics.Colors; +import ru.windcorp.progressia.client.graphics.GUI; +import ru.windcorp.progressia.client.graphics.font.Font; +import ru.windcorp.progressia.client.graphics.gui.Button; +import ru.windcorp.progressia.client.graphics.gui.GUILayer; +import ru.windcorp.progressia.client.graphics.gui.Label; +import ru.windcorp.progressia.client.graphics.gui.layout.LayoutVertical; +import ru.windcorp.progressia.client.localization.MutableString; +import ru.windcorp.progressia.client.localization.MutableStringLocalized; + +public class LayerTitle extends GUILayer { + + public LayerTitle(String name) { + super(name, new LayoutVertical(20,10)); + + MutableString title = new MutableStringLocalized("Layer"+name+".Title"); + Font titleFont = new Font().deriveBold().withColor(Colors.BLACK).withAlign(0.5f); + getRoot().addChild(new Label(name+".Title", titleFont, title)); + + Font buttonFont = titleFont; + MutableString playText = new MutableStringLocalized("Layer"+name+".Play"); + getRoot().addChild(new Button(name+".Play", new Label(name+".Play", buttonFont, playText)).addAction(b -> { + GUI.removeLayer(this); + ProgressiaLauncher.play();})); + + MutableString quitText = new MutableStringLocalized("Layer"+name+".Quit"); + getRoot().addChild(new Button(name+"Quit", new Label(name+".Quit", buttonFont, quitText)).addAction(b -> { + System.exit(0); + })); + } + +} diff --git a/src/main/resources/assets/languages/en-US.lang b/src/main/resources/assets/languages/en-US.lang index 4935e77..6bea171 100644 --- a/src/main/resources/assets/languages/en-US.lang +++ b/src/main/resources/assets/languages/en-US.lang @@ -22,4 +22,9 @@ LayerTestGUI.PlacementModeHint = (Blocks %s Tiles: Ctrl + Mouse Wheel) LayerTestGUI.IsFullscreen = Fullscreen: %5s (F11) LayerTestGUI.IsVSync = VSync: %5s (F12) -LayerButtonTest.Title = Button Test \ No newline at end of file +LayerButtonTest.Title = Button Test + +LayerTitle.Title = Progressia +LayerTitle.Play = Play World +LayerTitle.Options = Options +LayerTitle.Quit = Quit \ No newline at end of file diff --git a/src/main/resources/assets/languages/ru-RU.lang b/src/main/resources/assets/languages/ru-RU.lang index cd10faa..efb1757 100644 --- a/src/main/resources/assets/languages/ru-RU.lang +++ b/src/main/resources/assets/languages/ru-RU.lang @@ -22,4 +22,9 @@ LayerTestGUI.PlacementModeHint = (Блок %s плитки: Ctrl + прокру LayerTestGUI.IsFullscreen = Полный экран: %5s (F11) LayerTestGUI.IsVSync = Верт. синхр.: %5s (F12) -LayerButtonTest.Title = Тест Кнопок \ No newline at end of file +LayerButtonTest.Title = Тест Кнопок + +LayerTitle.Title = Прогрессия +LayerTitle.Play = ??????? +LayerTitle.Options = ???????? +LayerTitle.Quit = ???????? \ No newline at end of file From 94db44e44376e4fe259a2380f38af9cc5931ed91 Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Tue, 3 Aug 2021 22:42:46 -0400 Subject: [PATCH 03/31] Im tired i need sleep -Added listeners for saving and loading chunks -Made loading screens for between title and game(they dont work yet) -Added localized text(some) -Safeish deletion and saving of chunks -It still keeps them in memory I think so this needs work too --- .../progressia/ProgressiaLauncher.java | 8 --- .../progressia/client/ClientState.java | 53 +++++++++++++++++-- .../client/comms/localhost/LocalClient.java | 3 +- .../localhost/LocalServerCommsChannel.java | 2 +- .../progressia/server/ChunkManager.java | 50 +++++++++++++++++ .../progressia/server/PlayerManager.java | 5 ++ .../progressia/test/LayerButtonTest.java | 48 ++++++++++++++--- .../progressia/test/LayerTestText.java | 24 +++++++++ .../windcorp/progressia/test/LayerTitle.java | 1 + .../resources/assets/languages/en-US.lang | 6 ++- .../resources/assets/languages/ru-RU.lang | 6 ++- 11 files changed, 185 insertions(+), 21 deletions(-) create mode 100644 src/main/java/ru/windcorp/progressia/test/LayerTestText.java diff --git a/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java b/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java index 2567d9d..f32936f 100644 --- a/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java +++ b/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java @@ -20,14 +20,6 @@ package ru.windcorp.progressia; import ru.windcorp.progressia.client.ClientProxy; import ru.windcorp.progressia.client.graphics.GUI; -import ru.windcorp.progressia.client.graphics.backend.GraphicsBackend; -import ru.windcorp.progressia.client.graphics.backend.RenderTaskQueue; -import ru.windcorp.progressia.client.graphics.flat.FlatRenderProgram; -import ru.windcorp.progressia.client.graphics.font.GNUUnifontLoader; -import ru.windcorp.progressia.client.graphics.font.Typefaces; -import ru.windcorp.progressia.client.graphics.world.WorldRenderProgram; -import ru.windcorp.progressia.client.localization.Localizer; -import ru.windcorp.progressia.common.resource.ResourceManager; import ru.windcorp.progressia.common.util.crash.CrashReports; import ru.windcorp.progressia.common.util.crash.analyzers.OutOfMemoryAnalyzer; import ru.windcorp.progressia.common.util.crash.providers.*; diff --git a/src/main/java/ru/windcorp/progressia/client/ClientState.java b/src/main/java/ru/windcorp/progressia/client/ClientState.java index 75f0f07..1525045 100644 --- a/src/main/java/ru/windcorp/progressia/client/ClientState.java +++ b/src/main/java/ru/windcorp/progressia/client/ClientState.java @@ -18,18 +18,30 @@ package ru.windcorp.progressia.client; +import java.util.Collection; +import java.util.HashSet; + import ru.windcorp.progressia.client.comms.localhost.LocalServerCommsChannel; import ru.windcorp.progressia.client.graphics.GUI; +import ru.windcorp.progressia.client.graphics.Layer; import ru.windcorp.progressia.client.graphics.world.LayerWorld; +import ru.windcorp.progressia.client.localization.MutableString; +import ru.windcorp.progressia.client.localization.MutableStringLocalized; import ru.windcorp.progressia.common.world.WorldData; import ru.windcorp.progressia.server.ServerState; import ru.windcorp.progressia.test.LayerAbout; +import ru.windcorp.progressia.test.LayerTestText; import ru.windcorp.progressia.test.LayerTestUI; import ru.windcorp.progressia.test.TestContent; public class ClientState { private static Client instance; + + private static Collection layers; + + private static boolean firstLoad; + private static LayerTestText layer; public static Client getInstance() { return instance; @@ -46,6 +58,8 @@ public class ClientState { LocalServerCommsChannel channel = new LocalServerCommsChannel( ServerState.getInstance() ); + + firstLoad = true; Client client = new Client(world, channel); @@ -53,10 +67,43 @@ public class ClientState { setInstance(client); - GUI.addBottomLayer(new LayerWorld(client)); - GUI.addTopLayer(new LayerTestUI()); - GUI.addTopLayer(new LayerAbout()); + ServerState.getInstance().getChunkManager().register(bl -> { + if (!bl && firstLoad) + { + MutableString t = new MutableStringLocalized("LayerText.Load"); + layer = new LayerTestText("Text",() -> {t.update(); return t.get();}); + GUI.addTopLayer(layer); + } + else if (bl && firstLoad) + { + GUI.removeLayer(layer); + + LayerWorld layerWorld = new LayerWorld(client); + LayerTestUI layerUI = new LayerTestUI(); + LayerAbout layerAbout = new LayerAbout(); + GUI.addBottomLayer(layerWorld); + GUI.addTopLayer(layerUI); + GUI.addTopLayer(layerAbout); + layers = new HashSet(); + layers.add(layerWorld); + layers.add(layerUI); + layers.add(layerAbout); + + firstLoad = false; + } + }); + + } + + public static void disconnectFromLocalServer() + { + for (Layer layer : layers) + { + GUI.removeLayer(layer); + } + + ServerState.getInstance().getClientManager(); } private ClientState() { diff --git a/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalClient.java b/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalClient.java index 816fba8..f1fdf96 100644 --- a/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalClient.java +++ b/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalClient.java @@ -53,7 +53,8 @@ public class LocalClient extends ClientPlayer { @Override public void disconnect() { - // Do nothing + setState(State.DISCONNECTING); + serverComms.disconnect(); } } diff --git a/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalServerCommsChannel.java b/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalServerCommsChannel.java index 194a2a1..b631a3c 100644 --- a/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalServerCommsChannel.java +++ b/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalServerCommsChannel.java @@ -54,7 +54,7 @@ public class LocalServerCommsChannel extends ServerCommsChannel { @Override public void disconnect() { - // Do nothing + setState(State.DISCONNECTING); } } diff --git a/src/main/java/ru/windcorp/progressia/server/ChunkManager.java b/src/main/java/ru/windcorp/progressia/server/ChunkManager.java index b0b0777..5042954 100644 --- a/src/main/java/ru/windcorp/progressia/server/ChunkManager.java +++ b/src/main/java/ru/windcorp/progressia/server/ChunkManager.java @@ -18,10 +18,15 @@ package ru.windcorp.progressia.server; +import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.Map; import java.util.WeakHashMap; +import org.apache.logging.log4j.LogManager; + import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.world.ChunkData; import ru.windcorp.progressia.common.world.PacketRevokeChunk; @@ -74,6 +79,12 @@ public class ChunkManager { } } + + @FunctionalInterface + public interface ChunksLoadListener + { + void handle(boolean starting); + } private final Server server; @@ -82,6 +93,8 @@ public class ChunkManager { private final ChunkSet toLoad = ChunkSets.newHashSet(); private final ChunkSet toUnload = ChunkSets.newHashSet(); + private Collection listeners = Collections.synchronizedCollection( new ArrayList<>()); + // TODO replace with a normal Map managed by some sort of PlayerListener, // weak maps are weak private final Map visions = Collections.synchronizedMap(new WeakHashMap<>()); @@ -101,6 +114,16 @@ public class ChunkManager { } } + public void register(ChunksLoadListener cll) + { + listeners.add(cll); + } + + public void unregisterAll() + { + listeners.clear(); + } + private void gatherRequests() { requested.clear(); @@ -126,6 +149,12 @@ public class ChunkManager { } private void processQueues() { + + if (toUnload.size()!=0 || toLoad.size()!=0) + { + LogManager.getLogger().info(String.valueOf(toUnload.size())+" "+String.valueOf( toLoad.size())); + listeners.forEach(l -> l.handle(false)); + } toUnload.forEach(this::unloadChunk); toUnload.clear(); toLoad.forEach(this::loadChunk); @@ -134,6 +163,8 @@ public class ChunkManager { visions.forEach((p, v) -> { v.processQueues(p); }); + listeners.forEach(l -> l.handle(true)); + } private PlayerVision getVision(Player player, boolean createIfMissing) { @@ -174,6 +205,25 @@ public class ChunkManager { TestWorldDiskIO.saveChunk(chunk, getServer()); } + + public void unloadAll() // dont use probably + { + WorldData world = getServer().getWorld().getData(); + + //Collection chunks = world.getChunks(); + Collection chunkPoss = new HashSet(); + + world.forEachChunk(c -> { + chunkPoss.add(c.getPosition()); + }); + + chunkPoss.forEach(v -> { + ChunkData c = world.getChunk(v); + world.removeChunk(c); + + TestWorldDiskIO.saveChunk(c, getServer()); + }); + } public void sendChunk(Player player, Vec3i chunkPos) { ChunkData chunk = server.getWorld().getData().getChunk(chunkPos); diff --git a/src/main/java/ru/windcorp/progressia/server/PlayerManager.java b/src/main/java/ru/windcorp/progressia/server/PlayerManager.java index 38d0f32..b1447bf 100644 --- a/src/main/java/ru/windcorp/progressia/server/PlayerManager.java +++ b/src/main/java/ru/windcorp/progressia/server/PlayerManager.java @@ -72,6 +72,11 @@ public class PlayerManager { return player; } + + public void removePlayer(Player player) + { + players.remove(player); + } public Server getServer() { return server; diff --git a/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java b/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java index 65b1a07..bae1d67 100644 --- a/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java @@ -17,6 +17,8 @@ */ package ru.windcorp.progressia.test; +import java.util.Collection; + import ru.windcorp.progressia.client.ClientState; import ru.windcorp.progressia.client.graphics.Colors; import ru.windcorp.progressia.client.graphics.GUI; @@ -28,9 +30,15 @@ import ru.windcorp.progressia.client.graphics.gui.Label; import ru.windcorp.progressia.client.graphics.gui.RadioButton; import ru.windcorp.progressia.client.graphics.gui.RadioButtonGroup; import ru.windcorp.progressia.client.graphics.gui.menu.MenuLayer; +import ru.windcorp.progressia.client.localization.MutableString; +import ru.windcorp.progressia.client.localization.MutableStringLocalized; +import ru.windcorp.progressia.server.ChunkManager; +import ru.windcorp.progressia.server.Player; import ru.windcorp.progressia.server.ServerState; public class LayerButtonTest extends MenuLayer { + + boolean alive = true; public LayerButtonTest() { super("ButtonTest"); @@ -64,15 +72,43 @@ public class LayerButtonTest extends MenuLayer { getCloseAction().run(); })); - getContent().addChild(new Button("Menu", "Menu").addAction(b -> { + getContent().addChild(new Button("Menu", "Back To Menu").addAction(b -> { //System.exit(0); - for (Layer layer : GUI.getLayers()) - { - GUI.removeLayer(layer); - } - GUI.addTopLayer(new LayerTitle("Title")); + //for (Layer layer : GUI.getLayers()) + //{ + // GUI.removeLayer(layer); + //} + getCloseAction().run(); + //ClientState.getInstance().; + Collection players = ServerState.getInstance().getPlayerManager().getPlayers(); + players.clear(); + + ClientState.disconnectFromLocalServer(); + + MutableString t = new MutableStringLocalized("LayerText.Save"); + LayerTestText layer = new LayerTestText("Text",() -> {t.update(); return t.get();}); + + GUI.addTopLayer(layer); + + ChunkManager cm = ServerState.getInstance().getChunkManager(); + alive = true; + cm.register(bl -> { + if (bl && alive) + { + GUI.removeLayer(layer); + GUI.addTopLayer(new LayerTitle("Title")); + //cm.unregisterAll(); + alive = false; + } + }); + + //ClientState.getInstance(); + ClientState.setInstance(null); + ServerState.setInstance(null); + //ServerState.getInstance().getChunkManager().unloadAll(); + //ServerState.getInstance().shutdown("Safe Exit"); })); diff --git a/src/main/java/ru/windcorp/progressia/test/LayerTestText.java b/src/main/java/ru/windcorp/progressia/test/LayerTestText.java new file mode 100644 index 0000000..3cfef00 --- /dev/null +++ b/src/main/java/ru/windcorp/progressia/test/LayerTestText.java @@ -0,0 +1,24 @@ +package ru.windcorp.progressia.test; + +import java.util.function.Supplier; + +import ru.windcorp.progressia.client.graphics.Colors; +import ru.windcorp.progressia.client.graphics.font.Font; +import ru.windcorp.progressia.client.graphics.gui.GUILayer; +import ru.windcorp.progressia.client.graphics.gui.Label; +import ru.windcorp.progressia.client.graphics.gui.layout.LayoutVertical; + +public class LayerTestText extends GUILayer { + public LayerTestText(String name, Supplier value) { + super(name, new LayoutVertical(20,10)); + + //MutableString title = new MutableStringLocalized("Layer"+name+".Title"); + Font titleFont = new Font().deriveBold().withColor(Colors.BLACK).withAlign(0.5f); + getRoot().addChild(new Label(name+".Text", titleFont, value)); + } + + public LayerTestText(String name, String value) + { + this(name,() -> value); + } +} diff --git a/src/main/java/ru/windcorp/progressia/test/LayerTitle.java b/src/main/java/ru/windcorp/progressia/test/LayerTitle.java index 8ef01fd..c739651 100644 --- a/src/main/java/ru/windcorp/progressia/test/LayerTitle.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerTitle.java @@ -24,6 +24,7 @@ public class LayerTitle extends GUILayer { MutableString playText = new MutableStringLocalized("Layer"+name+".Play"); getRoot().addChild(new Button(name+".Play", new Label(name+".Play", buttonFont, playText)).addAction(b -> { GUI.removeLayer(this); + ProgressiaLauncher.play();})); MutableString quitText = new MutableStringLocalized("Layer"+name+".Quit"); diff --git a/src/main/resources/assets/languages/en-US.lang b/src/main/resources/assets/languages/en-US.lang index 6bea171..f1bb85c 100644 --- a/src/main/resources/assets/languages/en-US.lang +++ b/src/main/resources/assets/languages/en-US.lang @@ -23,8 +23,12 @@ LayerTestGUI.IsFullscreen = Fullscreen: %5s (F11) LayerTestGUI.IsVSync = VSync: %5s (F12) LayerButtonTest.Title = Button Test +LayerButtonTest.Return = Back To Menu LayerTitle.Title = Progressia LayerTitle.Play = Play World LayerTitle.Options = Options -LayerTitle.Quit = Quit \ No newline at end of file +LayerTitle.Quit = Quit + +LayerText.Load = Loading... +LayerText.Save = Saving... \ No newline at end of file diff --git a/src/main/resources/assets/languages/ru-RU.lang b/src/main/resources/assets/languages/ru-RU.lang index efb1757..92cc41b 100644 --- a/src/main/resources/assets/languages/ru-RU.lang +++ b/src/main/resources/assets/languages/ru-RU.lang @@ -23,8 +23,12 @@ LayerTestGUI.IsFullscreen = Полный экран: %5s (F11) LayerTestGUI.IsVSync = Верт. синхр.: %5s (F12) LayerButtonTest.Title = Тест Кнопок +LayerButtonTest.Return = Back To Menu [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ LayerTitle.Title = Прогрессия LayerTitle.Play = ??????? LayerTitle.Options = ???????? -LayerTitle.Quit = ???????? \ No newline at end of file +LayerTitle.Quit = ???????? + +LayerText.Load = Loading... (Change) +LayerText.Save = Saving...(Cahnsf) \ No newline at end of file From 6521cb5749fee75105de0bc4d18be57308275ef6 Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Wed, 4 Aug 2021 12:52:37 -0400 Subject: [PATCH 04/31] Better Listeners -Specific listeners for the start and stop of loading -Better(?) layer deletion after exiting a world -Actual server thread shutdown --- .../progressia/client/ClientState.java | 23 ++++++------- .../progressia/server/ChunkManager.java | 33 ++++++++++++++++++- .../progressia/server/ServerThread.java | 1 + .../progressia/test/LayerButtonTest.java | 13 +++++--- 4 files changed, 52 insertions(+), 18 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/client/ClientState.java b/src/main/java/ru/windcorp/progressia/client/ClientState.java index 1525045..f8a1dfa 100644 --- a/src/main/java/ru/windcorp/progressia/client/ClientState.java +++ b/src/main/java/ru/windcorp/progressia/client/ClientState.java @@ -28,6 +28,8 @@ import ru.windcorp.progressia.client.graphics.world.LayerWorld; import ru.windcorp.progressia.client.localization.MutableString; import ru.windcorp.progressia.client.localization.MutableStringLocalized; import ru.windcorp.progressia.common.world.WorldData; +import ru.windcorp.progressia.server.ChunkManager.ChunksLoadFinishListener; +import ru.windcorp.progressia.server.ChunkManager.ChunksLoadStartListener; import ru.windcorp.progressia.server.ServerState; import ru.windcorp.progressia.test.LayerAbout; import ru.windcorp.progressia.test.LayerTestText; @@ -38,8 +40,6 @@ public class ClientState { private static Client instance; - private static Collection layers; - private static boolean firstLoad; private static LayerTestText layer; @@ -67,14 +67,16 @@ public class ClientState { setInstance(client); - ServerState.getInstance().getChunkManager().register(bl -> { - if (!bl && firstLoad) + ServerState.getInstance().getChunkManager().register((ChunksLoadStartListener)() -> { + if (firstLoad) { MutableString t = new MutableStringLocalized("LayerText.Load"); layer = new LayerTestText("Text",() -> {t.update(); return t.get();}); GUI.addTopLayer(layer); - } - else if (bl && firstLoad) + }}); + + ServerState.getInstance().getChunkManager().register((ChunksLoadFinishListener)() -> { + if (firstLoad) { GUI.removeLayer(layer); @@ -84,11 +86,6 @@ public class ClientState { GUI.addBottomLayer(layerWorld); GUI.addTopLayer(layerUI); GUI.addTopLayer(layerAbout); - - layers = new HashSet(); - layers.add(layerWorld); - layers.add(layerUI); - layers.add(layerAbout); firstLoad = false; } @@ -98,12 +95,12 @@ public class ClientState { public static void disconnectFromLocalServer() { - for (Layer layer : layers) + for (Layer layer : GUI.getLayers()) { GUI.removeLayer(layer); } - ServerState.getInstance().getClientManager(); + //ServerState.getInstance().getClientManager(); } private ClientState() { diff --git a/src/main/java/ru/windcorp/progressia/server/ChunkManager.java b/src/main/java/ru/windcorp/progressia/server/ChunkManager.java index 5042954..badb061 100644 --- a/src/main/java/ru/windcorp/progressia/server/ChunkManager.java +++ b/src/main/java/ru/windcorp/progressia/server/ChunkManager.java @@ -85,6 +85,22 @@ public class ChunkManager { { void handle(boolean starting); } + + @FunctionalInterface + private interface ChunksLoadEventListener + { + void handle(); + } + + public interface ChunksLoadStartListener extends ChunksLoadEventListener + { + + } + + public interface ChunksLoadFinishListener extends ChunksLoadEventListener + { + + } private final Server server; @@ -94,6 +110,8 @@ public class ChunkManager { private final ChunkSet toUnload = ChunkSets.newHashSet(); private Collection listeners = Collections.synchronizedCollection( new ArrayList<>()); + private Collection startListeners = Collections.synchronizedCollection( new ArrayList<>()); + private Collection finishListeners = Collections.synchronizedCollection( new ArrayList<>()); // TODO replace with a normal Map managed by some sort of PlayerListener, // weak maps are weak @@ -119,6 +137,16 @@ public class ChunkManager { listeners.add(cll); } + public void register(ChunksLoadStartListener clsl) + { + startListeners.add(clsl); + } + + public void register(ChunksLoadFinishListener clfl) + { + finishListeners.add(clfl); + } + public void unregisterAll() { listeners.clear(); @@ -153,8 +181,10 @@ public class ChunkManager { if (toUnload.size()!=0 || toLoad.size()!=0) { LogManager.getLogger().info(String.valueOf(toUnload.size())+" "+String.valueOf( toLoad.size())); - listeners.forEach(l -> l.handle(false)); } + listeners.forEach(l -> l.handle(false)); + startListeners.forEach(sl -> sl.handle()); + toUnload.forEach(this::unloadChunk); toUnload.clear(); toLoad.forEach(this::loadChunk); @@ -164,6 +194,7 @@ public class ChunkManager { v.processQueues(p); }); listeners.forEach(l -> l.handle(true)); + finishListeners.forEach(fl -> fl.handle()); } diff --git a/src/main/java/ru/windcorp/progressia/server/ServerThread.java b/src/main/java/ru/windcorp/progressia/server/ServerThread.java index 90f3ce9..5a1333a 100644 --- a/src/main/java/ru/windcorp/progressia/server/ServerThread.java +++ b/src/main/java/ru/windcorp/progressia/server/ServerThread.java @@ -79,6 +79,7 @@ public class ServerThread implements Runnable { public void stop() { try { + executor.shutdown(); executor.awaitTermination(10, TimeUnit.MINUTES); } catch (InterruptedException e) { LogManager.getLogger().warn("Received interrupt in ServerThread.stop(), aborting wait"); diff --git a/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java b/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java index bae1d67..2b36bbd 100644 --- a/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java @@ -33,6 +33,8 @@ import ru.windcorp.progressia.client.graphics.gui.menu.MenuLayer; import ru.windcorp.progressia.client.localization.MutableString; import ru.windcorp.progressia.client.localization.MutableStringLocalized; import ru.windcorp.progressia.server.ChunkManager; +import ru.windcorp.progressia.server.ChunkManager.ChunksLoadFinishListener; +import ru.windcorp.progressia.server.ChunkManager.ChunksLoadListener; import ru.windcorp.progressia.server.Player; import ru.windcorp.progressia.server.ServerState; @@ -94,22 +96,25 @@ public class LayerButtonTest extends MenuLayer { ChunkManager cm = ServerState.getInstance().getChunkManager(); alive = true; - cm.register(bl -> { - if (bl && alive) + cm.register((ChunksLoadFinishListener)() -> { + if (alive) { GUI.removeLayer(layer); GUI.addTopLayer(new LayerTitle("Title")); //cm.unregisterAll(); alive = false; + + ServerState.getInstance().shutdown("Safe Exit"); + + ServerState.setInstance(null); } }); //ClientState.getInstance(); ClientState.setInstance(null); - ServerState.setInstance(null); //ServerState.getInstance().getChunkManager().unloadAll(); - //ServerState.getInstance().shutdown("Safe Exit"); + })); getContent().takeFocus(); From c88dea6030db43b7910a5cf5da91bb2de8d9fcc5 Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Wed, 4 Aug 2021 16:57:21 -0400 Subject: [PATCH 05/31] Fixing Bugs mostly -Cleaning up imports -Better error detection -Actual thread deletion(still needs a bit of work to delete all conected objects) -Starting making format file and inplementing it --- .../progressia/client/ClientState.java | 3 - .../progressia/client/graphics/GUI.java | 4 + .../progressia/server/ServerThread.java | 19 +- .../server/world/ticking/Ticker.java | 2 + .../progressia/test/LayerButtonTest.java | 1 + .../progressia/test/TestWorldDiskIO.java | 321 +++++++++++++----- 6 files changed, 254 insertions(+), 96 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/client/ClientState.java b/src/main/java/ru/windcorp/progressia/client/ClientState.java index f8a1dfa..1092203 100644 --- a/src/main/java/ru/windcorp/progressia/client/ClientState.java +++ b/src/main/java/ru/windcorp/progressia/client/ClientState.java @@ -18,9 +18,6 @@ package ru.windcorp.progressia.client; -import java.util.Collection; -import java.util.HashSet; - import ru.windcorp.progressia.client.comms.localhost.LocalServerCommsChannel; import ru.windcorp.progressia.client.graphics.GUI; import ru.windcorp.progressia.client.graphics.Layer; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/GUI.java b/src/main/java/ru/windcorp/progressia/client/graphics/GUI.java index bb4d85b..56829cf 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/GUI.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/GUI.java @@ -21,6 +21,7 @@ package ru.windcorp.progressia.client.graphics; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; import com.google.common.eventbus.Subscribe; @@ -58,6 +59,7 @@ public class GUI { } public static void addBottomLayer(Layer layer) { + Objects.requireNonNull(layer, "layer"); modify(layers -> { layers.add(layer); layer.onAdded(); @@ -65,6 +67,7 @@ public class GUI { } public static void addTopLayer(Layer layer) { + Objects.requireNonNull(layer, "layer"); modify(layers -> { layers.add(0, layer); layer.onAdded(); @@ -72,6 +75,7 @@ public class GUI { } public static void removeLayer(Layer layer) { + Objects.requireNonNull(layer, "layer"); modify(layers -> { layers.remove(layer); layer.onRemoved(); diff --git a/src/main/java/ru/windcorp/progressia/server/ServerThread.java b/src/main/java/ru/windcorp/progressia/server/ServerThread.java index 5a1333a..d8d15a9 100644 --- a/src/main/java/ru/windcorp/progressia/server/ServerThread.java +++ b/src/main/java/ru/windcorp/progressia/server/ServerThread.java @@ -29,6 +29,8 @@ import ru.windcorp.progressia.server.world.ticking.TickerCoordinator; public class ServerThread implements Runnable { private static final ThreadLocal SERVER_THREADS_MAP = new ThreadLocal<>(); + + private static boolean isShuttingDown; public static Server getCurrentServer() { return SERVER_THREADS_MAP.get(); @@ -63,6 +65,7 @@ public class ServerThread implements Runnable { } public void start() { + isShuttingDown = false; ticker.start(); executor.scheduleAtFixedRate(this, 0, 1000 / 20, TimeUnit.MILLISECONDS); } @@ -70,6 +73,12 @@ public class ServerThread implements Runnable { @Override public void run() { try { + if (isShuttingDown) + { + getTicker().stop(); + executor.shutdown(); + return; + } server.tick(); ticker.runOneTick(); } catch (Throwable e) { @@ -78,14 +87,10 @@ public class ServerThread implements Runnable { } public void stop() { - try { - executor.shutdown(); - executor.awaitTermination(10, TimeUnit.MINUTES); - } catch (InterruptedException e) { - LogManager.getLogger().warn("Received interrupt in ServerThread.stop(), aborting wait"); - } + + isShuttingDown = true; - getTicker().stop(); + //getTicker().stop(); } public Server getServer() { diff --git a/src/main/java/ru/windcorp/progressia/server/world/ticking/Ticker.java b/src/main/java/ru/windcorp/progressia/server/world/ticking/Ticker.java index 5c4b83e..8a102ac 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/ticking/Ticker.java +++ b/src/main/java/ru/windcorp/progressia/server/world/ticking/Ticker.java @@ -115,6 +115,8 @@ class Ticker { } catch (Exception e) { getCoordinator().crash(e, this.name); } + + } private synchronized boolean sleep() { diff --git a/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java b/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java index 2b36bbd..c6e5d00 100644 --- a/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java @@ -104,6 +104,7 @@ public class LayerButtonTest extends MenuLayer { //cm.unregisterAll(); alive = false; + //ServerState.getInstance().; ServerState.getInstance().shutdown("Safe Exit"); ServerState.setInstance(null); diff --git a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java index 1b93323..71e4225 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java @@ -15,21 +15,22 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; +import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.DataOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; +import java.util.Scanner; import java.util.zip.DeflaterOutputStream; import java.util.zip.InflaterInputStream; @@ -47,47 +48,68 @@ import ru.windcorp.progressia.server.Server; public class TestWorldDiskIO { private static Path SAVE_DIR = Paths.get("tmp_world"); + private static String formatFile = "world.format"; private static final Logger LOG = LogManager.getLogger("TestWorldDiskIO"); private static final boolean ENABLE = true; - + private static final int maxSize = 1048576; - private static final int sectorSize = maxSize/256; - - private Map regions = new HashMap(); - - private int natFromInt(int loc) - { - if (loc<0) - return (-loc)<<1 + 1; - return loc<<1; + private static final int sectorSize = maxSize / 256; + + private static final int bestFormat = 2; + + // private Map regions = new HashMap(); + private static Vec3i regionSize; + private static int chunksPerRegion; + + private static int currentFormat = -1; + private static String extension = ".null"; + + private static int natFromInt(int loc) { + if (loc < 0) + return (-loc) << 1 + 1; + return loc << 1; } - - private int intFromNat(int loc) // Possibly unused + + private static int intFromNat(int loc) // Possibly unused { - if ((loc&1) == 1) - return -loc>>1; - return loc>>1; + if ((loc & 1) == 1) + return -loc >> 1; + return loc >> 1; } - - private Vec3i getRegionLoc(Vec3i chunkLoc) - { - return new Vec3i(natFromInt(chunkLoc.x),natFromInt(chunkLoc.y),natFromInt(chunkLoc.z)); + + private static Vec3i getRegionLoc(Vec3i chunkLoc) { + return new Vec3i(natFromInt(chunkLoc.x), natFromInt(chunkLoc.y), natFromInt(chunkLoc.z)); } - - public void initRegions() - { + + public static void initRegions() { initRegions(null); } - - public void initRegions(Path worldPath) - { - if (worldPath!=null) - { + + public static void initRegions(Path worldPath) { + if (worldPath != null) { SAVE_DIR = worldPath; } - - regions.put(new Vec3i(0,0,0), new Vec3i(1,1,1)); + + // regions.put(new Vec3i(0,0,0), new Vec3i(1,1,1)); + } + + private static void setRegionSize(int format) { + switch (format) { + case 0: + case 1: + regionSize = new Vec3i(1); + chunksPerRegion = 1; + currentFormat = format; + extension = ".progressia_chunk"; + break; + case 2: + regionSize = new Vec3i(16); + chunksPerRegion = 16 * 16 * 16; + currentFormat = 2; + extension = ".progressia_region"; + break; + } } public static void saveChunk(ChunkData chunk, Server server) { @@ -95,32 +117,65 @@ public class TestWorldDiskIO { return; try { - LOG.debug( - "Saving {} {} {}", - chunk.getPosition().x, - chunk.getPosition().y, - chunk.getPosition().z - ); - Files.createDirectories(SAVE_DIR); - - Path path = SAVE_DIR.resolve( - String.format( - "chunk_%+d_%+d_%+d.progressia_chunk", + if (currentFormat == 0) { + LOG.debug( + "Saving {} {} {}", chunk.getPosition().x, chunk.getPosition().y, chunk.getPosition().z - ) - ); + ); - try ( - DataOutputStream output = new DataOutputStream( - new DeflaterOutputStream(new BufferedOutputStream(Files.newOutputStream(path))) - ) - ) { - ChunkIO.save(chunk, output, IOContext.SAVE); - writeGenerationHint(chunk, output, server); + Files.createDirectories(SAVE_DIR); + + Path path = SAVE_DIR.resolve( + String.format( + "chunk_%+d_%+d_%+d" + extension, + chunk.getPosition().x, + chunk.getPosition().y, + chunk.getPosition().z + ) + ); + + try ( + DataOutputStream output = new DataOutputStream( + new DeflaterOutputStream(new BufferedOutputStream(Files.newOutputStream(path))) + ) + ) { + ChunkIO.save(chunk, output, IOContext.SAVE); + writeGenerationHint(chunk, output, server); + } + } else if (currentFormat == 1) { + LOG.debug( + "Saving {} {} {}", + chunk.getPosition().x, + chunk.getPosition().y, + chunk.getPosition().z + ); + + Files.createDirectories(SAVE_DIR); + + Vec3i saveCoords = getRegionLoc(chunk.getPosition()); + + Path path = SAVE_DIR.resolve( + String.format( + "chunk_%+d_%+d_%+d" + extension, + saveCoords.x, + saveCoords.y, + saveCoords.z + ) + ); + + try ( + DataOutputStream output = new DataOutputStream( + new DeflaterOutputStream(new BufferedOutputStream(Files.newOutputStream(path))) + ) + ) { + ChunkIO.save(chunk, output, IOContext.SAVE); + writeGenerationHint(chunk, output, server); + } } + // else if (currentFormat) } catch (IOException e) { e.printStackTrace(); } @@ -135,47 +190,141 @@ public class TestWorldDiskIO { if (!ENABLE) return null; - Path path = SAVE_DIR.resolve( - String.format( - "chunk_%+d_%+d_%+d.progressia_chunk", - chunkPos.x, - chunkPos.y, - chunkPos.z - ) - ); + if (currentFormat == -1) { + Path formatPath = SAVE_DIR.resolve(formatFile); + File format = formatPath.toFile(); - if (!Files.exists(path)) { - LOG.debug( - "Not found {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z - ); + if (format.exists()) { + String data = null; + try { + Scanner reader = new Scanner(format); - return null; + data = reader.next(); + + reader.close(); + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + byte[] formatBytes = data.getBytes(); + int formatNum = formatBytes[0] * 256 * 256 * 256 + formatBytes[1] * 256 * 256 + formatBytes[2] * 256 + + formatBytes[3]; + + setRegionSize(formatNum); + } else { + setRegionSize(bestFormat); + + BufferedWriter bw; + try { + bw = new BufferedWriter(new FileWriter(format)); + + bw.write( + new char[] { + bestFormat / (256 * 256 * 256), + (bestFormat % 256) / (256 * 256), + (bestFormat % (256 * 256)) / (256), + bestFormat % (256 * 256 * 256) } + ); + + bw.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } } - try { - ChunkData result = load(path, chunkPos, world, server); + if (currentFormat == 0) { - LOG.debug( - "Loaded {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z + Path path = SAVE_DIR.resolve( + String.format( + "chunk_%+d_%+d_%+d" + extension, + chunkPos.x, + chunkPos.y, + chunkPos.z + ) ); - return result; - } catch (Exception e) { - e.printStackTrace(); - LOG.debug( - "Could not load {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z + if (!Files.exists(path)) { + LOG.debug( + "Not found {} {} {}", + chunkPos.x, + chunkPos.y, + chunkPos.z + ); + + return null; + } + + try { + ChunkData result = load(path, chunkPos, world, server); + + LOG.debug( + "Loaded {} {} {}", + chunkPos.x, + chunkPos.y, + chunkPos.z + ); + + return result; + } catch (Exception e) { + e.printStackTrace(); + LOG.debug( + "Could not load {} {} {}", + chunkPos.x, + chunkPos.y, + chunkPos.z + ); + return null; + } + } else if (currentFormat == 1) { + Vec3i saveCoords = getRegionLoc(chunkPos); + + Path path = SAVE_DIR.resolve( + String.format( + "chunk_%+d_%+d_%+d" + extension, + saveCoords.x, + saveCoords.y, + saveCoords.z + ) ); - return null; + + if (!Files.exists(path)) { + LOG.debug( + "Not found {} {} {}", + chunkPos.x, + chunkPos.y, + chunkPos.z + ); + + return null; + } + + try { + ChunkData result = load(path, chunkPos, world, server); + + LOG.debug( + "Loaded {} {} {}", + chunkPos.x, + chunkPos.y, + chunkPos.z + ); + + return result; + } catch (Exception e) { + e.printStackTrace(); + LOG.debug( + "Could not load {} {} {}", + chunkPos.x, + chunkPos.y, + chunkPos.z + ); + return null; + } } + return null; } private static ChunkData load(Path path, Vec3i chunkPos, WorldData world, Server server) From 0c66f1751e9e05e02b452b69b54dcf81f13e3f94 Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Wed, 4 Aug 2021 19:17:49 -0400 Subject: [PATCH 06/31] Made outline of region file -Improved loading screen loading(so it doesnt crash) -Implemented region file related things, but it doesnt quite work -Uses file header to try to look up location of data -Writes the data at the end of the file(I need info to how much it writes) --- .../progressia/client/ClientState.java | 6 +- .../progressia/test/TestWorldDiskIO.java | 187 ++++++++++++++++-- src/main/resources/log4j2.xml | 1 + 3 files changed, 173 insertions(+), 21 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/client/ClientState.java b/src/main/java/ru/windcorp/progressia/client/ClientState.java index 1092203..2ae791c 100644 --- a/src/main/java/ru/windcorp/progressia/client/ClientState.java +++ b/src/main/java/ru/windcorp/progressia/client/ClientState.java @@ -64,11 +64,13 @@ public class ClientState { setInstance(client); + MutableString t = new MutableStringLocalized("LayerText.Load"); + layer = new LayerTestText("Text",() -> {t.update(); return t.get();}); + ServerState.getInstance().getChunkManager().register((ChunksLoadStartListener)() -> { if (firstLoad) { - MutableString t = new MutableStringLocalized("LayerText.Load"); - layer = new LayerTestText("Text",() -> {t.update(); return t.get();}); + GUI.addTopLayer(layer); }}); diff --git a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java index 71e4225..e8b53e9 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java @@ -27,6 +27,8 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; +import java.io.RandomAccessFile; +import java.nio.channels.Channels; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -53,14 +55,15 @@ public class TestWorldDiskIO { private static final boolean ENABLE = true; - private static final int maxSize = 1048576; - private static final int sectorSize = maxSize / 256; + private static int maxSize = 1048576; + private static int sectorSize = maxSize / 256; - private static final int bestFormat = 2; + private static final int bestFormat = 65536; // private Map regions = new HashMap(); private static Vec3i regionSize; private static int chunksPerRegion; + private static int offsetBytes; private static int currentFormat = -1; private static String extension = ".null"; @@ -71,15 +74,25 @@ public class TestWorldDiskIO { return loc << 1; } - private static int intFromNat(int loc) // Possibly unused + /*private static int intFromNat(int loc) // Possibly unused { if ((loc & 1) == 1) return -loc >> 1; return loc >> 1; - } + }*/ - private static Vec3i getRegionLoc(Vec3i chunkLoc) { - return new Vec3i(natFromInt(chunkLoc.x), natFromInt(chunkLoc.y), natFromInt(chunkLoc.z)); + private static Vec3i getRegion(Vec3i chunkLoc) { + return new Vec3i(natFromInt(chunkLoc.x/regionSize.x), natFromInt(chunkLoc.y/regionSize.y), natFromInt(chunkLoc.z/regionSize.z)); + } + + private static int mod(int a, int m) + { + return ((a%m)+m)%m; + } + + private static Vec3i getRegionLoc(Vec3i chunkLoc) + { + return new Vec3i(mod(chunkLoc.x,regionSize.x),mod(chunkLoc.y,regionSize.y),mod(chunkLoc.z,regionSize.z)); } public static void initRegions() { @@ -103,10 +116,11 @@ public class TestWorldDiskIO { currentFormat = format; extension = ".progressia_chunk"; break; - case 2: + case 65536: regionSize = new Vec3i(16); chunksPerRegion = 16 * 16 * 16; - currentFormat = 2; + currentFormat = 65536; + offsetBytes = 4; extension = ".progressia_region"; break; } @@ -155,11 +169,11 @@ public class TestWorldDiskIO { Files.createDirectories(SAVE_DIR); - Vec3i saveCoords = getRegionLoc(chunk.getPosition()); + Vec3i saveCoords = getRegion(chunk.getPosition()); Path path = SAVE_DIR.resolve( String.format( - "chunk_%+d_%+d_%+d" + extension, + "chunk_%d_%d_%d" + extension, saveCoords.x, saveCoords.y, saveCoords.z @@ -175,6 +189,59 @@ public class TestWorldDiskIO { writeGenerationHint(chunk, output, server); } } + else if (currentFormat == 65536) + { + LOG.debug( + "Saving {} {} {}", + chunk.getPosition().x, + chunk.getPosition().y, + chunk.getPosition().z + ); + + Files.createDirectories(SAVE_DIR); + + Vec3i saveCoords = getRegion(chunk.getPosition()); + + Path path = SAVE_DIR.resolve( + String.format( + "%d_%d_%d" + extension, + saveCoords.x, + saveCoords.y, + saveCoords.z + ) + ); + + try ( + RandomAccessFile output = new RandomAccessFile(path.toFile(), "rw") + ) { + //LOG.debug(output.read()); + if (output.read()<0) + { + output.writeChars("\0".repeat((offsetBytes+1)*chunksPerRegion)); + } + + Vec3i pos = getRegionLoc(chunk.getPosition()); + int shortOffset = (offsetBytes+1)*(pos.z+regionSize.z*(pos.y + regionSize.y*pos.x)); + int fullOffset = (offsetBytes+1)*(chunksPerRegion); + output.seek(shortOffset); + int offset = output.readInt(); + int sectorLength = output.read(); + if (sectorLength == 0) + { + offset = (int) (output.length()-fullOffset)/sectorSize; + output.seek(shortOffset); + output.writeInt(offset); + output.write(200); + } + output.seek(fullOffset+sectorSize*offset); + //output.mark(sectorSize*sectorLength); + + DataOutputStream trueOutput = new DataOutputStream(Channels.newOutputStream(output.getChannel())); + + ChunkIO.save(chunk, trueOutput, IOContext.SAVE); + writeGenerationHint(chunk, trueOutput, server); + } + } // else if (currentFormat) } catch (IOException e) { e.printStackTrace(); @@ -214,18 +281,29 @@ public class TestWorldDiskIO { setRegionSize(formatNum); } else { setRegionSize(bestFormat); + + LOG.debug("Making new world with format {}", bestFormat); BufferedWriter bw; try { bw = new BufferedWriter(new FileWriter(format)); + + int bfClone = bestFormat; + + for (int i=0;i<4;i++) + { + bw.write(bfClone>>24); + LOG.debug(bfClone>>24); + bfClone = bfClone << 8; + } - bw.write( + /*bw.write( new char[] { - bestFormat / (256 * 256 * 256), - (bestFormat % 256) / (256 * 256), - (bestFormat % (256 * 256)) / (256), - bestFormat % (256 * 256 * 256) } - ); + (char) bestFormat / (256 * 256 * 256), + (char) (bestFormat % 256) / (256 * 256), + (char) (bestFormat % (256 * 256)) / (256), + (char) (bestFormat % (256 * 256 * 256)) } + );*/ bw.close(); } catch (IOException e) { @@ -280,11 +358,11 @@ public class TestWorldDiskIO { return null; } } else if (currentFormat == 1) { - Vec3i saveCoords = getRegionLoc(chunkPos); + Vec3i saveCoords = getRegion(chunkPos); Path path = SAVE_DIR.resolve( String.format( - "chunk_%+d_%+d_%+d" + extension, + "chunk_%d_%d_%d" + extension, saveCoords.x, saveCoords.y, saveCoords.z @@ -312,6 +390,50 @@ public class TestWorldDiskIO { chunkPos.z ); + return result; + } catch (Exception e) { + e.printStackTrace(); + LOG.debug( + "Could not load {} {} {}", + chunkPos.x, + chunkPos.y, + chunkPos.z + ); + return null; + } + } else if (currentFormat == 65536) { + Vec3i saveCoords = getRegion(chunkPos); + + Path path = SAVE_DIR.resolve( + String.format( + "%d_%d_%d" + extension, + saveCoords.x, + saveCoords.y, + saveCoords.z + ) + ); + + if (!Files.exists(path)) { + LOG.debug( + "Not found {} {} {}", + chunkPos.x, + chunkPos.y, + chunkPos.z + ); + + return null; + } + + try { + ChunkData result = loadRegion(path, chunkPos, world, server); + + LOG.debug( + "Loaded {} {} {}", + chunkPos.x, + chunkPos.y, + chunkPos.z + ); + return result; } catch (Exception e) { e.printStackTrace(); @@ -340,6 +462,33 @@ public class TestWorldDiskIO { return chunk; } } + + private static ChunkData loadRegion(Path path, Vec3i chunkPos, WorldData world, Server server) throws IOException, DecodingException + { + try ( + DataInputStream input = new DataInputStream( + new InflaterInputStream(new BufferedInputStream(Files.newInputStream(path))) + ) + ) { + Vec3i pos = getRegionLoc(chunkPos); + int shortOffset = (offsetBytes+1)*(pos.z+regionSize.z*(pos.y + regionSize.y*pos.x)); + int fullOffset = (offsetBytes+1)*(chunksPerRegion); + input.skipNBytes(shortOffset); + int offset = 0; + for (int i=0;i --> + From 254faca0a50eca608218ee176000e0ce2a8f6fea Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Thu, 5 Aug 2021 12:29:29 -0400 Subject: [PATCH 07/31] Better deletion -Makes new TestPlayerControls instance each time you enter a world -Some dynamic sizing of chunk data within region files. --- .../progressia/client/ClientProxy.java | 1 + .../progressia/test/LayerButtonTest.java | 2 ++ .../progressia/test/TestPlayerControls.java | 7 ++++++- .../progressia/test/TestWorldDiskIO.java | 19 +++++++++++++++++-- 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/client/ClientProxy.java b/src/main/java/ru/windcorp/progressia/client/ClientProxy.java index 402c5e8..cd75d42 100644 --- a/src/main/java/ru/windcorp/progressia/client/ClientProxy.java +++ b/src/main/java/ru/windcorp/progressia/client/ClientProxy.java @@ -33,6 +33,7 @@ import ru.windcorp.progressia.common.util.crash.CrashReports; import ru.windcorp.progressia.server.ServerState; import ru.windcorp.progressia.test.TestContent; import ru.windcorp.progressia.test.TestMusicPlayer; +import ru.windcorp.progressia.test.TestPlayerControls; public class ClientProxy implements Proxy { diff --git a/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java b/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java index c6e5d00..6f829da 100644 --- a/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java @@ -108,6 +108,8 @@ public class LayerButtonTest extends MenuLayer { ServerState.getInstance().shutdown("Safe Exit"); ServerState.setInstance(null); + + TestPlayerControls.resetInstance(); } }); diff --git a/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java b/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java index 80e2146..960a97e 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java +++ b/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java @@ -44,7 +44,7 @@ import ru.windcorp.progressia.server.ServerState; public class TestPlayerControls { - private static final TestPlayerControls INSTANCE = new TestPlayerControls(); + private static TestPlayerControls INSTANCE = new TestPlayerControls(); public static TestPlayerControls getInstance() { return INSTANCE; @@ -90,6 +90,11 @@ public class TestPlayerControls { private LayerTestGUI debugLayer = null; private Runnable updateCallback = null; + + public static void resetInstance() + { + INSTANCE = new TestPlayerControls(); + } public void applyPlayerControls() { if (ClientState.getInstance() == null || !ClientState.getInstance().isReady()) { diff --git a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java index e8b53e9..897ee83 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java @@ -39,6 +39,8 @@ import java.util.zip.InflaterInputStream; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import com.google.common.io.CountingOutputStream; + import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.state.IOContext; import ru.windcorp.progressia.common.world.ChunkData; @@ -231,15 +233,28 @@ public class TestWorldDiskIO { offset = (int) (output.length()-fullOffset)/sectorSize; output.seek(shortOffset); output.writeInt(offset); - output.write(200); + //output.write(200); } output.seek(fullOffset+sectorSize*offset); + + int bytestoWrite = output.readInt(); //output.mark(sectorSize*sectorLength); - DataOutputStream trueOutput = new DataOutputStream(Channels.newOutputStream(output.getChannel())); + DataOutputStream trueOutput = new DataOutputStream(Channels.newOutputStream(output.getChannel())); + CountingOutputStream countOutput = new CountingOutputStream(trueOutput); + //trueOutput. ChunkIO.save(chunk, trueOutput, IOContext.SAVE); writeGenerationHint(chunk, trueOutput, server); + + while (countOutput.getCount()%sectorSize != 0) { + countOutput.write(0); + } + + output.seek(shortOffset+offsetBytes); + output.write((int) countOutput.getCount()/sectorSize); + + countOutput.close(); } } // else if (currentFormat) From 8bc23acb61c706dad83ed5e8672bbbfa01a9ba67 Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Thu, 5 Aug 2021 13:39:42 -0400 Subject: [PATCH 08/31] idk changes so I can show OLEGSHA -changed number of index bytes from 4 to 3 -exposed some variables for help with debugger --- .../progressia/test/TestWorldDiskIO.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java index 897ee83..e22bc45 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java @@ -122,11 +122,16 @@ public class TestWorldDiskIO { regionSize = new Vec3i(16); chunksPerRegion = 16 * 16 * 16; currentFormat = 65536; - offsetBytes = 4; + offsetBytes = 3; extension = ".progressia_region"; break; } } + + private static void expand(int sectors) + { + + } public static void saveChunk(ChunkData chunk, Server server) { if (!ENABLE) @@ -219,6 +224,7 @@ public class TestWorldDiskIO { //LOG.debug(output.read()); if (output.read()<0) { + LOG.info("Making header"); output.writeChars("\0".repeat((offsetBytes+1)*chunksPerRegion)); } @@ -227,17 +233,19 @@ public class TestWorldDiskIO { int fullOffset = (offsetBytes+1)*(chunksPerRegion); output.seek(shortOffset); int offset = output.readInt(); - int sectorLength = output.read(); + int sectorLength = offset&255; + offset = offset >> 8; if (sectorLength == 0) { - offset = (int) (output.length()-fullOffset)/sectorSize; + int outputLen = (int) output.length(); + offset = (int) (outputLen-fullOffset)/sectorSize; output.seek(shortOffset); - output.writeInt(offset); + output.writeInt(offset<<8); //output.write(200); } output.seek(fullOffset+sectorSize*offset); - int bytestoWrite = output.readInt(); + //int bytestoWrite = output.readInt(); //output.mark(sectorSize*sectorLength); DataOutputStream trueOutput = new DataOutputStream(Channels.newOutputStream(output.getChannel())); @@ -252,6 +260,7 @@ public class TestWorldDiskIO { } output.seek(shortOffset+offsetBytes); + LOG.info(countOutput.getCount()); output.write((int) countOutput.getCount()/sectorSize); countOutput.close(); From 8167c40f6463c40be4860049f763459d5653a58b Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Thu, 5 Aug 2021 14:12:37 -0400 Subject: [PATCH 09/31] IDK these errors are weird -Changed the loading to fit the byte changes --- .../progressia/test/TestWorldDiskIO.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java index e22bc45..842e7c1 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java @@ -249,21 +249,21 @@ public class TestWorldDiskIO { //output.mark(sectorSize*sectorLength); DataOutputStream trueOutput = new DataOutputStream(Channels.newOutputStream(output.getChannel())); - CountingOutputStream countOutput = new CountingOutputStream(trueOutput); + //CountingOutputStream countOutput = new CountingOutputStream(trueOutput); //trueOutput. ChunkIO.save(chunk, trueOutput, IOContext.SAVE); writeGenerationHint(chunk, trueOutput, server); - while (countOutput.getCount()%sectorSize != 0) { - countOutput.write(0); + while (trueOutput.size()%sectorSize != 0) { + trueOutput.write(0); } output.seek(shortOffset+offsetBytes); - LOG.info(countOutput.getCount()); - output.write((int) countOutput.getCount()/sectorSize); + LOG.info(trueOutput.size()); + output.write((int) trueOutput.size()/sectorSize); - countOutput.close(); + trueOutput.close(); } } // else if (currentFormat) @@ -494,17 +494,19 @@ public class TestWorldDiskIO { new InflaterInputStream(new BufferedInputStream(Files.newInputStream(path))) ) ) { + LOG.info(path.toString()); Vec3i pos = getRegionLoc(chunkPos); int shortOffset = (offsetBytes+1)*(pos.z+regionSize.z*(pos.y + regionSize.y*pos.x)); int fullOffset = (offsetBytes+1)*(chunksPerRegion); input.skipNBytes(shortOffset); - int offset = 0; - for (int i=0;i Date: Fri, 6 Aug 2021 12:56:21 -0400 Subject: [PATCH 10/31] Trying to get it to work -Uses many streams to keep track of things -Fixed some bad things, still are a ton. --- .../progressia/test/TestWorldDiskIO.java | 53 +++++++++++-------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java index 842e7c1..8bed37a 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java @@ -238,30 +238,41 @@ public class TestWorldDiskIO { if (sectorLength == 0) { int outputLen = (int) output.length(); - offset = (int) (outputLen-fullOffset)/sectorSize; + offset = (int) (outputLen-fullOffset)/sectorSize+1; output.seek(shortOffset); output.writeInt(offset<<8); + output.seek(outputLen); + while (output.length()> 8; input.skipNBytes(fullOffset-shortOffset-offsetBytes-1); input.skipNBytes(sectorSize*offset); input.mark(sectorSize*sectorLength); - ChunkData chunk = ChunkIO.load(world, chunkPos, input, IOContext.SAVE); - readGenerationHint(chunk, input, server); + DataInputStream trueInput = new DataInputStream( + new InflaterInputStream(input)); + ChunkData chunk = ChunkIO.load(world, chunkPos, trueInput, IOContext.SAVE); + readGenerationHint(chunk, trueInput, server); return chunk; } } From 9c26418354e95db8f93bf47c598c4ef269b7b14e Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Wed, 18 Aug 2021 13:15:30 -0400 Subject: [PATCH 11/31] Well, it works now ig -Better file lengthening -Made temp files -Exchanged temp files for ByteArrayIn/OutputBuffers -Fixed loadRegion to actually read sector sizes --- .../progressia/test/TestWorldDiskIO.java | 55 ++++++++++++++----- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java index 8bed37a..cbb294b 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java @@ -21,6 +21,8 @@ package ru.windcorp.progressia.test; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedWriter; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; @@ -52,7 +54,7 @@ import ru.windcorp.progressia.server.Server; public class TestWorldDiskIO { private static Path SAVE_DIR = Paths.get("tmp_world"); - private static String formatFile = "world.format"; + private static final String formatFile = "world.format"; private static final Logger LOG = LogManager.getLogger("TestWorldDiskIO"); private static final boolean ENABLE = true; @@ -218,6 +220,12 @@ public class TestWorldDiskIO { ) ); + /*if (!dosave) + { + return; + } + dosave = false;*/ + try ( RandomAccessFile output = new RandomAccessFile(path.toFile(), "rw") ) { @@ -242,27 +250,30 @@ public class TestWorldDiskIO { output.seek(shortOffset); output.writeInt(offset<<8); output.seek(outputLen); - while (output.length()> 8; + int sectorLength = input.read(); input.skipNBytes(fullOffset-shortOffset-offsetBytes-1); input.skipNBytes(sectorSize*offset); - input.mark(sectorSize*sectorLength); + + LOG.info("Read {} sectors", sectorLength); + + byte tempData[] = input.readNBytes(sectorSize*sectorLength); + DataInputStream trueInput = new DataInputStream( - new InflaterInputStream(input)); + new InflaterInputStream(new BufferedInputStream(new ByteArrayInputStream(tempData)))); ChunkData chunk = ChunkIO.load(world, chunkPos, trueInput, IOContext.SAVE); readGenerationHint(chunk, trueInput, server); + trueInput.close(); return chunk; } } From b7dcbb0f3019dbad848e12dcfc5209973aec91b1 Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Wed, 18 Aug 2021 13:21:54 -0400 Subject: [PATCH 12/31] Fixing stuff -Got rid of some annoying logging -Format --- .../java/ru/windcorp/jputil/ArrayUtil.java | 2 +- .../java/ru/windcorp/jputil/CSVWriter.java | 2 +- .../ru/windcorp/jputil/PrimitiveUtil.java | 2 +- .../java/ru/windcorp/jputil/SyncStreams.java | 2 +- .../ru/windcorp/jputil/SyntaxException.java | 2 +- .../jputil/chars/CharArrayIterator.java | 2 +- .../windcorp/jputil/chars/CharConsumer.java | 2 +- .../windcorp/jputil/chars/CharConsumers.java | 2 +- .../windcorp/jputil/chars/CharPredicate.java | 2 +- .../windcorp/jputil/chars/CharSupplier.java | 2 +- .../jputil/chars/EscapeException.java | 2 +- .../ru/windcorp/jputil/chars/Escaper.java | 2 +- .../jputil/chars/FancyCharacterIterator.java | 2 +- .../jputil/chars/IndentedStringBuilder.java | 2 +- .../ru/windcorp/jputil/chars/StringUtil.java | 2 +- .../chars/UncheckedEscapeException.java | 2 +- .../ru/windcorp/jputil/chars/WordReader.java | 2 +- .../chars/reader/AbstractCharReader.java | 2 +- .../jputil/chars/reader/ArrayCharReader.java | 2 +- .../chars/reader/BufferedCharReader.java | 2 +- .../jputil/chars/reader/CharReader.java | 2 +- .../jputil/chars/reader/CharReaders.java | 2 +- .../jputil/chars/reader/ReaderCharReader.java | 2 +- .../jputil/chars/reader/StringCharReader.java | 2 +- .../jputil/functions/FloatSupplier.java | 2 +- .../jputil/functions/ThrowingBiConsumer.java | 2 +- .../jputil/functions/ThrowingConsumer.java | 2 +- .../jputil/functions/ThrowingFunction.java | 2 +- .../jputil/functions/ThrowingRunnable.java | 2 +- .../jputil/functions/ThrowingSupplier.java | 2 +- .../jputil/iterators/ArrayIterator.java | 2 +- .../jputil/iterators/FunctionIterator.java | 2 +- .../jputil/iterators/PeekingIterator.java | 2 +- .../jputil/iterators/RangeIterator.java | 2 +- .../windcorp/jputil/iterators/Reiterator.java | 2 +- .../selectors/AbstractSelectorOperator.java | 2 +- .../selectors/NamedParameterizedSelector.java | 2 +- .../jputil/selectors/NamedSelector.java | 2 +- .../jputil/selectors/OperatorAnd.java | 2 +- .../jputil/selectors/OperatorExclude.java | 2 +- .../jputil/selectors/OperatorNot.java | 2 +- .../windcorp/jputil/selectors/OperatorOr.java | 2 +- .../jputil/selectors/OperatorXor.java | 2 +- .../jputil/selectors/PredicateWrapper.java | 2 +- .../windcorp/jputil/selectors/Selector.java | 2 +- .../jputil/selectors/SelectorOperator.java | 2 +- .../jputil/selectors/SelectorSystem.java | 2 +- .../ru/windcorp/progressia/Progressia.java | 2 +- .../progressia/ProgressiaLauncher.java | 9 +- .../java/ru/windcorp/progressia/Proxy.java | 2 +- .../ru/windcorp/progressia/client/Client.java | 2 +- .../progressia/client/ClientProxy.java | 19 +- .../progressia/client/ClientState.java | 48 ++-- .../client/ProgressiaClientMain.java | 2 +- .../progressia/client/audio/AudioFormat.java | 2 +- .../progressia/client/audio/AudioManager.java | 2 +- .../client/audio/AudioRegistry.java | 4 +- .../progressia/client/audio/AudioSystem.java | 2 +- .../progressia/client/audio/Music.java | 10 +- .../progressia/client/audio/Sound.java | 14 +- .../client/audio/backend/AudioReader.java | 2 +- .../client/audio/backend/Listener.java | 2 +- .../client/audio/backend/SoundType.java | 4 +- .../client/audio/backend/Speaker.java | 2 +- .../comms/DefaultClientCommsListener.java | 2 +- .../client/comms/ServerCommsChannel.java | 2 +- .../client/comms/controls/ControlTrigger.java | 2 +- .../controls/ControlTriggerInputBased.java | 2 +- .../comms/controls/ControlTriggerLambda.java | 2 +- .../controls/ControlTriggerLocalLambda.java | 2 +- .../controls/ControlTriggerRegistry.java | 2 +- .../comms/controls/ControlTriggers.java | 8 +- .../comms/controls/InputBasedControls.java | 2 +- .../client/comms/localhost/LocalClient.java | 2 +- .../localhost/LocalServerCommsChannel.java | 2 +- .../progressia/client/graphics/Colors.java | 4 +- .../progressia/client/graphics/GUI.java | 16 +- .../progressia/client/graphics/Layer.java | 16 +- .../client/graphics/backend/FaceCulling.java | 2 +- .../graphics/backend/GraphicsBackend.java | 18 +- .../graphics/backend/GraphicsInterface.java | 6 +- .../client/graphics/backend/InputHandler.java | 2 +- .../client/graphics/backend/InputTracker.java | 2 +- .../graphics/backend/LWJGLInitializer.java | 4 +- .../graphics/backend/OpenGLObjectTracker.java | 2 +- .../graphics/backend/RenderTaskQueue.java | 2 +- .../client/graphics/backend/RenderThread.java | 2 +- .../client/graphics/backend/Usage.java | 2 +- .../graphics/backend/VertexBufferObject.java | 2 +- .../backend/shaders/CombinedShader.java | 2 +- .../graphics/backend/shaders/Program.java | 2 +- .../graphics/backend/shaders/Shader.java | 2 +- .../backend/shaders/attributes/Attribute.java | 2 +- .../attributes/AttributeVertexArray.java | 2 +- .../backend/shaders/uniforms/Uniform.java | 2 +- .../shaders/uniforms/Uniform1Float.java | 2 +- .../backend/shaders/uniforms/Uniform1Int.java | 2 +- .../shaders/uniforms/Uniform2Float.java | 2 +- .../backend/shaders/uniforms/Uniform2Int.java | 2 +- .../shaders/uniforms/Uniform2Matrix.java | 2 +- .../shaders/uniforms/Uniform3Float.java | 2 +- .../backend/shaders/uniforms/Uniform3Int.java | 2 +- .../shaders/uniforms/Uniform3Matrix.java | 2 +- .../shaders/uniforms/Uniform4Float.java | 2 +- .../backend/shaders/uniforms/Uniform4Int.java | 2 +- .../shaders/uniforms/Uniform4Matrix.java | 2 +- .../graphics/flat/AssembledFlatLayer.java | 2 +- .../flat/AssembledFlatRenderHelper.java | 2 +- .../flat/DefaultFlatRenderHelper.java | 2 +- .../client/graphics/flat/FlatGraphics.java | 2 +- .../graphics/flat/FlatRenderHelper.java | 2 +- .../graphics/flat/FlatRenderProgram.java | 2 +- .../progressia/client/graphics/flat/Mask.java | 2 +- .../client/graphics/flat/MaskStack.java | 2 +- .../client/graphics/flat/RenderTarget.java | 4 +- .../client/graphics/flat/TransformedMask.java | 2 +- .../progressia/client/graphics/font/Font.java | 2 +- .../client/graphics/font/GNUUnifont.java | 2 +- .../graphics/font/GNUUnifontLoader.java | 2 +- .../client/graphics/font/SpriteTypeface.java | 2 +- .../client/graphics/font/Typeface.java | 2 +- .../client/graphics/font/Typefaces.java | 2 +- .../client/graphics/gui/BasicButton.java | 37 ++- .../client/graphics/gui/Button.java | 18 +- .../client/graphics/gui/Checkbox.java | 44 ++-- .../client/graphics/gui/Component.java | 14 +- .../client/graphics/gui/DynamicLabel.java | 2 +- .../client/graphics/gui/GUILayer.java | 2 +- .../progressia/client/graphics/gui/Group.java | 2 +- .../progressia/client/graphics/gui/Label.java | 4 +- .../client/graphics/gui/Layout.java | 2 +- .../progressia/client/graphics/gui/Panel.java | 14 +- .../client/graphics/gui/RadioButton.java | 79 +++--- .../client/graphics/gui/RadioButtonGroup.java | 45 ++-- .../graphics/gui/event/ButtonEvent.java | 10 +- .../graphics/gui/event/ChildAddedEvent.java | 2 +- .../client/graphics/gui/event/ChildEvent.java | 2 +- .../graphics/gui/event/ChildRemovedEvent.java | 2 +- .../graphics/gui/event/ComponentEvent.java | 2 +- .../graphics/gui/event/EnableEvent.java | 2 +- .../client/graphics/gui/event/FocusEvent.java | 2 +- .../graphics/gui/event/HierarchyEvent.java | 2 +- .../client/graphics/gui/event/HoverEvent.java | 2 +- .../gui/event/ParentChangedEvent.java | 2 +- .../graphics/gui/layout/LayoutAlign.java | 2 +- .../gui/layout/LayoutBorderHorizontal.java | 2 +- .../gui/layout/LayoutBorderVertical.java | 2 +- .../graphics/gui/layout/LayoutFill.java | 4 +- .../graphics/gui/layout/LayoutGrid.java | 8 +- .../graphics/gui/layout/LayoutHorizontal.java | 2 +- .../graphics/gui/layout/LayoutVertical.java | 2 +- .../client/graphics/gui/menu/MenuLayer.java | 36 +-- .../client/graphics/input/CursorEvent.java | 2 +- .../graphics/input/CursorMoveEvent.java | 2 +- .../graphics/input/FrameResizeEvent.java | 2 +- .../client/graphics/input/InputEvent.java | 2 +- .../client/graphics/input/KeyEvent.java | 2 +- .../client/graphics/input/KeyMatcher.java | 2 +- .../client/graphics/input/Keys.java | 2 +- .../client/graphics/input/WheelEvent.java | 2 +- .../graphics/input/WheelScrollEvent.java | 2 +- .../client/graphics/input/bus/Input.java | 2 +- .../client/graphics/input/bus/InputBus.java | 2 +- .../graphics/input/bus/InputListener.java | 2 +- .../graphics/model/BlockFaceVectors.java | 2 +- .../client/graphics/model/DynamicModel.java | 2 +- .../client/graphics/model/EmptyModel.java | 2 +- .../client/graphics/model/Face.java | 2 +- .../client/graphics/model/FaceGroup.java | 2 +- .../client/graphics/model/Faces.java | 2 +- .../client/graphics/model/LambdaModel.java | 2 +- .../client/graphics/model/Model.java | 2 +- .../client/graphics/model/Renderable.java | 2 +- .../client/graphics/model/Shape.java | 2 +- .../graphics/model/ShapeRenderHelper.java | 2 +- .../graphics/model/ShapeRenderProgram.java | 2 +- .../client/graphics/model/Shapes.java | 2 +- .../client/graphics/model/StaticModel.java | 4 +- .../client/graphics/texture/Atlases.java | 2 +- .../graphics/texture/ComplexTexture.java | 2 +- .../graphics/texture/SimpleTexture.java | 2 +- .../graphics/texture/SimpleTextures.java | 2 +- .../client/graphics/texture/Sprite.java | 2 +- .../client/graphics/texture/Texture.java | 2 +- .../client/graphics/texture/TextureData.java | 2 +- .../graphics/texture/TextureDataEditor.java | 2 +- .../graphics/texture/TextureLoader.java | 2 +- .../graphics/texture/TexturePrimitive.java | 2 +- .../graphics/texture/TextureSettings.java | 2 +- .../client/graphics/texture/TextureUtil.java | 2 +- .../client/graphics/world/Camera.java | 2 +- .../client/graphics/world/EntityAnchor.java | 2 +- .../client/graphics/world/LayerWorld.java | 4 +- .../client/graphics/world/LocalPlayer.java | 2 +- .../client/graphics/world/Selection.java | 2 +- .../graphics/world/WorldRenderHelper.java | 2 +- .../graphics/world/WorldRenderProgram.java | 2 +- .../client/localization/LocaleListener.java | 2 +- .../client/localization/Localizer.java | 2 +- .../client/localization/MutableString.java | 2 +- .../localization/MutableStringConcat.java | 2 +- .../localization/MutableStringFormatter.java | 2 +- .../localization/MutableStringFunc.java | 2 +- .../localization/MutableStringLocalized.java | 2 +- .../localization/MutableStringParented.java | 2 +- .../client/localization/Parser.java | 2 +- .../progressia/client/world/ChunkRender.java | 2 +- .../client/world/ChunkRenderModel.java | 45 ++-- .../client/world/ChunkUpdateListener.java | 18 +- .../progressia/client/world/WorldRender.java | 2 +- .../client/world/block/BlockRender.java | 2 +- .../client/world/block/BlockRenderNone.java | 2 +- .../world/block/BlockRenderOpaqueCube.java | 2 +- .../world/block/BlockRenderRegistry.java | 2 +- .../world/block/BlockRenderTexturedCube.java | 30 ++- .../block/BlockRenderTransparentCube.java | 2 +- .../cro/ChunkRenderOptimizerRegistry.java | 6 +- .../client/world/entity/EntityRender.java | 2 +- .../world/entity/EntityRenderRegistry.java | 2 +- .../client/world/entity/EntityRenderable.java | 2 +- .../client/world/entity/HumanoidModel.java | 2 +- .../client/world/entity/NPedModel.java | 2 +- .../client/world/entity/QuadripedModel.java | 2 +- .../client/world/tile/TileRender.java | 2 +- .../client/world/tile/TileRenderGrass.java | 2 +- .../client/world/tile/TileRenderNone.java | 4 +- .../world/tile/TileRenderOpaqueSurface.java | 2 +- .../client/world/tile/TileRenderRegistry.java | 2 +- .../client/world/tile/TileRenderStack.java | 2 +- .../client/world/tile/TileRenderSurface.java | 22 +- .../tile/TileRenderTransparentSurface.java | 2 +- .../ru/windcorp/progressia/common/Units.java | 2 +- .../progressia/common/collision/AABB.java | 2 +- .../progressia/common/collision/AABBoid.java | 2 +- .../common/collision/Collideable.java | 2 +- .../common/collision/CollisionModel.java | 2 +- .../collision/CollisionPathComputer.java | 2 +- .../collision/CompoundCollisionModel.java | 2 +- .../collision/TransformedCollisionModel.java | 2 +- .../common/collision/TranslatedAABB.java | 2 +- .../progressia/common/collision/Wall.java | 2 +- .../collision/WorldCollisionHelper.java | 2 +- .../collision/colliders/AABBoidCollider.java | 2 +- .../AnythingWithCompoundCollider.java | 2 +- .../common/collision/colliders/Collider.java | 2 +- .../progressia/common/comms/CommsChannel.java | 2 +- .../common/comms/CommsListener.java | 2 +- .../common/comms/controls/ControlData.java | 2 +- .../comms/controls/ControlDataRegistry.java | 2 +- .../common/comms/controls/PacketControl.java | 2 +- .../common/comms/packets/Packet.java | 2 +- .../common/hacks/GuavaEventBusHijacker.java | 2 +- .../progressia/common/resource/Resource.java | 6 +- .../common/resource/ResourceManager.java | 6 +- .../common/resource/ResourceReader.java | 2 +- .../state/AbstractStatefulObjectLayout.java | 2 +- .../common/state/HashMapStateStorage.java | 2 +- .../progressia/common/state/IOContext.java | 2 +- .../state/InspectingStatefulObjectLayout.java | 2 +- .../common/state/IntStateField.java | 2 +- .../common/state/OptimizedStateStorage.java | 2 +- .../state/OptimizedStatefulObjectLayout.java | 2 +- .../common/state/PrimitiveCounters.java | 2 +- .../progressia/common/state/StateChanger.java | 2 +- .../progressia/common/state/StateField.java | 2 +- .../common/state/StateFieldBuilder.java | 2 +- .../progressia/common/state/StateStorage.java | 2 +- .../common/state/StatefulObject.java | 2 +- .../common/state/StatefulObjectLayout.java | 2 +- .../common/state/StatefulObjectRegistry.java | 2 +- .../progressia/common/util/BinUtil.java | 2 +- .../common/util/ByteBufferInputStream.java | 2 +- .../common/util/ByteBufferOutputStream.java | 2 +- .../common/util/CoordinatePacker.java | 2 +- .../progressia/common/util/DataBuffer.java | 2 +- .../progressia/common/util/FloatMathUtil.java | 2 +- .../common/util/LowOverheadCache.java | 2 +- .../progressia/common/util/Matrices.java | 2 +- .../progressia/common/util/MultiLOC.java | 2 +- .../progressia/common/util/Named.java | 2 +- .../common/util/SizeLimitedList.java | 2 +- .../progressia/common/util/StashingStack.java | 2 +- .../progressia/common/util/TaskQueue.java | 2 +- .../progressia/common/util/VectorUtil.java | 2 +- .../progressia/common/util/Vectors.java | 2 +- .../common/util/crash/Analyzer.java | 2 +- .../common/util/crash/ContextProvider.java | 2 +- .../common/util/crash/CrashReports.java | 2 +- .../common/util/crash/ReportingEventBus.java | 2 +- .../crash/analyzers/OutOfMemoryAnalyzer.java | 2 +- .../crash/providers/ArgsContextProvider.java | 2 +- .../providers/JavaVersionContextProvider.java | 2 +- .../providers/LanguageContextProvider.java | 2 +- .../crash/providers/OSContextProvider.java | 2 +- .../providers/OpenALContextProvider.java | 2 +- .../crash/providers/RAMContextProvider.java | 2 +- .../common/util/dynstr/DoubleFlusher.java | 2 +- .../common/util/dynstr/DynamicString.java | 2 +- .../common/util/dynstr/DynamicStrings.java | 2 +- .../common/util/dynstr/FloatFlusher.java | 2 +- .../common/util/dynstr/IntFlusher.java | 2 +- .../util/namespaces/IllegalIdException.java | 2 +- .../common/util/namespaces/Namespaced.java | 2 +- .../namespaces/NamespacedFactoryRegistry.java | 2 +- .../NamespacedInstanceRegistry.java | 2 +- .../util/namespaces/NamespacedUtil.java | 2 +- .../progressia/common/world/BlockRay.java | 2 +- .../progressia/common/world/ChunkData.java | 2 +- .../common/world/ChunkDataListener.java | 2 +- .../common/world/ChunkDataListeners.java | 2 +- .../progressia/common/world/Coordinates.java | 4 +- .../common/world/DecodingException.java | 2 +- .../world/IllegalCoordinatesException.java | 2 +- .../common/world/PacketAffectChunk.java | 2 +- .../common/world/PacketAffectWorld.java | 2 +- .../common/world/PacketRevokeChunk.java | 2 +- .../common/world/PacketSendChunk.java | 2 +- .../common/world/PacketSetLocalPlayer.java | 2 +- .../progressia/common/world/PlayerData.java | 2 +- .../progressia/common/world/WorldData.java | 2 +- .../common/world/WorldDataListener.java | 2 +- .../common/world/block/BlockData.java | 2 +- .../common/world/block/BlockDataRegistry.java | 2 +- .../common/world/block/BlockFace.java | 2 +- .../common/world/block/BlockRelation.java | 4 +- .../common/world/block/PacketAffectBlock.java | 2 +- .../common/world/block/PacketSetBlock.java | 2 +- .../common/world/entity/EntityData.java | 2 +- .../world/entity/EntityDataRegistry.java | 2 +- .../world/entity/PacketAffectEntity.java | 2 +- .../world/entity/PacketChangeEntity.java | 2 +- .../world/entity/PacketRevokeEntity.java | 2 +- .../common/world/entity/PacketSendEntity.java | 2 +- .../common/world/generic/ChunkMap.java | 2 +- .../common/world/generic/ChunkSet.java | 2 +- .../common/world/generic/ChunkSets.java | 2 +- .../common/world/generic/GenericBlock.java | 2 +- .../common/world/generic/GenericChunk.java | 53 +++-- .../common/world/generic/GenericEntity.java | 2 +- .../common/world/generic/GenericTile.java | 2 +- .../world/generic/GenericTileStack.java | 2 +- .../common/world/generic/GenericWorld.java | 2 +- .../world/generic/LongBasedChunkMap.java | 2 +- .../world/generic/LongBasedChunkSet.java | 2 +- .../common/world/io/ChunkCodec.java | 2 +- .../progressia/common/world/io/ChunkIO.java | 2 +- .../common/world/tile/PacketAddTile.java | 2 +- .../common/world/tile/PacketAffectTile.java | 2 +- .../common/world/tile/PacketRemoveTile.java | 2 +- .../common/world/tile/TileData.java | 2 +- .../common/world/tile/TileDataRegistry.java | 2 +- .../common/world/tile/TileDataStack.java | 2 +- .../common/world/tile/TileReference.java | 2 +- .../world/tile/TileStackIsFullException.java | 2 +- .../progressia/server/ChunkLoader.java | 2 +- .../progressia/server/ChunkManager.java | 78 +++--- .../progressia/server/EntityManager.java | 2 +- .../ru/windcorp/progressia/server/Player.java | 2 +- .../progressia/server/PlayerManager.java | 7 +- .../progressia/server/ServerState.java | 2 +- .../progressia/server/ServerThread.java | 11 +- .../progressia/server/TickingSettings.java | 2 +- .../progressia/server/comms/Client.java | 2 +- .../progressia/server/comms/ClientChat.java | 2 +- .../server/comms/ClientManager.java | 2 +- .../progressia/server/comms/ClientPlayer.java | 2 +- .../comms/DefaultServerCommsListener.java | 2 +- .../server/comms/controls/ControlLogic.java | 2 +- .../comms/controls/ControlLogicRegistry.java | 2 +- .../progressia/server/world/ChunkLogic.java | 2 +- .../server/world/ChunkTickContext.java | 2 +- .../server/world/TickAndUpdateUtil.java | 2 +- .../progressia/server/world/TickContext.java | 2 +- .../server/world/TickContextMutable.java | 2 +- .../server/world/UpdateTriggerer.java | 2 +- .../progressia/server/world/WorldLogic.java | 2 +- .../server/world/block/BlockLogic.java | 2 +- .../world/block/BlockLogicRegistry.java | 2 +- .../server/world/block/BlockTickContext.java | 2 +- .../server/world/block/TickableBlock.java | 2 +- .../server/world/block/UpdateableBlock.java | 2 +- .../server/world/entity/EntityLogic.java | 2 +- .../world/entity/EntityLogicRegistry.java | 2 +- .../generation/AbstractWorldGenerator.java | 2 +- .../world/generation/WorldGenerator.java | 2 +- .../server/world/tasks/AddTile.java | 2 +- .../world/tasks/BlockTriggeredUpdate.java | 2 +- .../server/world/tasks/CachedBlockChange.java | 2 +- .../server/world/tasks/CachedChange.java | 2 +- .../server/world/tasks/CachedChunkChange.java | 2 +- .../server/world/tasks/CachedEvaluation.java | 2 +- .../server/world/tasks/CachedTileChange.java | 2 +- .../server/world/tasks/CachedWorldChange.java | 2 +- .../server/world/tasks/ChangeEntity.java | 2 +- .../server/world/tasks/RemoveTile.java | 2 +- .../server/world/tasks/SetBlock.java | 2 +- .../server/world/tasks/StateChange.java | 2 +- .../server/world/tasks/TickChunk.java | 2 +- .../server/world/tasks/TickEntitiesTask.java | 2 +- .../world/tasks/TileTriggeredUpdate.java | 2 +- .../server/world/tasks/WorldAccessor.java | 2 +- .../server/world/ticking/Change.java | 2 +- .../world/ticking/DevilInvasionException.java | 2 +- .../server/world/ticking/Evaluation.java | 2 +- .../server/world/ticking/Ticker.java | 5 +- .../world/ticking/TickerCoordinator.java | 8 +- .../server/world/ticking/TickerTask.java | 2 +- .../server/world/ticking/TickingPolicy.java | 2 +- .../server/world/tile/HangingTileLogic.java | 2 +- .../server/world/tile/TSTickContext.java | 2 +- .../server/world/tile/TickableTile.java | 2 +- .../server/world/tile/TileLogic.java | 2 +- .../server/world/tile/TileLogicRegistry.java | 2 +- .../server/world/tile/TileLogicStack.java | 2 +- .../server/world/tile/TileTickContext.java | 2 +- .../server/world/tile/UpdateableTile.java | 2 +- .../test/CollisionModelRenderer.java | 2 +- .../test/ControlBreakBlockData.java | 2 +- .../test/ControlPlaceBlockData.java | 2 +- .../progressia/test/ControlPlaceTileData.java | 2 +- .../windcorp/progressia/test/LayerAbout.java | 2 +- .../progressia/test/LayerButtonTest.java | 73 +++--- .../progressia/test/LayerTestGUI.java | 2 +- .../progressia/test/LayerTestText.java | 16 +- .../windcorp/progressia/test/LayerTestUI.java | 2 +- .../windcorp/progressia/test/LayerTitle.java | 25 +- .../progressia/test/TestBlockLogicAir.java | 2 +- .../progressia/test/TestBlockLogicGlass.java | 2 +- .../progressia/test/TestChunkCodec.java | 2 +- .../windcorp/progressia/test/TestContent.java | 4 +- .../progressia/test/TestEntityDataStatie.java | 2 +- .../test/TestEntityLogicStatie.java | 2 +- .../test/TestEntityRenderHuman.java | 2 +- .../test/TestEntityRenderJavapony.java | 2 +- .../test/TestEntityRenderStatie.java | 2 +- .../progressia/test/TestMusicPlayer.java | 55 ++--- .../progressia/test/TestPlayerControls.java | 9 +- .../progressia/test/TestTileLogicGrass.java | 2 +- .../progressia/test/TestWorldDiskIO.java | 225 +++++++++--------- .../test/gen/TestTerrainGenerator.java | 2 +- .../test/gen/TestWorldGenerator.java | 2 +- 441 files changed, 1011 insertions(+), 986 deletions(-) diff --git a/src/main/java/ru/windcorp/jputil/ArrayUtil.java b/src/main/java/ru/windcorp/jputil/ArrayUtil.java index 4c57314..65a9c15 100644 --- a/src/main/java/ru/windcorp/jputil/ArrayUtil.java +++ b/src/main/java/ru/windcorp/jputil/ArrayUtil.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil; import java.lang.reflect.Array; diff --git a/src/main/java/ru/windcorp/jputil/CSVWriter.java b/src/main/java/ru/windcorp/jputil/CSVWriter.java index 57ddec0..b74d88c 100644 --- a/src/main/java/ru/windcorp/jputil/CSVWriter.java +++ b/src/main/java/ru/windcorp/jputil/CSVWriter.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil; import java.io.OutputStream; diff --git a/src/main/java/ru/windcorp/jputil/PrimitiveUtil.java b/src/main/java/ru/windcorp/jputil/PrimitiveUtil.java index 7579413..4c475f5 100644 --- a/src/main/java/ru/windcorp/jputil/PrimitiveUtil.java +++ b/src/main/java/ru/windcorp/jputil/PrimitiveUtil.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil; import java.util.HashMap; diff --git a/src/main/java/ru/windcorp/jputil/SyncStreams.java b/src/main/java/ru/windcorp/jputil/SyncStreams.java index 9b2bc3a..f26ce1f 100644 --- a/src/main/java/ru/windcorp/jputil/SyncStreams.java +++ b/src/main/java/ru/windcorp/jputil/SyncStreams.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil; import java.util.function.*; diff --git a/src/main/java/ru/windcorp/jputil/SyntaxException.java b/src/main/java/ru/windcorp/jputil/SyntaxException.java index 02cc3c4..8fdb710 100644 --- a/src/main/java/ru/windcorp/jputil/SyntaxException.java +++ b/src/main/java/ru/windcorp/jputil/SyntaxException.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil; public class SyntaxException extends Exception { diff --git a/src/main/java/ru/windcorp/jputil/chars/CharArrayIterator.java b/src/main/java/ru/windcorp/jputil/chars/CharArrayIterator.java index be0940d..7af29de 100644 --- a/src/main/java/ru/windcorp/jputil/chars/CharArrayIterator.java +++ b/src/main/java/ru/windcorp/jputil/chars/CharArrayIterator.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars; import java.text.CharacterIterator; diff --git a/src/main/java/ru/windcorp/jputil/chars/CharConsumer.java b/src/main/java/ru/windcorp/jputil/chars/CharConsumer.java index 7b68bb1..55448b0 100644 --- a/src/main/java/ru/windcorp/jputil/chars/CharConsumer.java +++ b/src/main/java/ru/windcorp/jputil/chars/CharConsumer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars; import java.util.function.IntConsumer; diff --git a/src/main/java/ru/windcorp/jputil/chars/CharConsumers.java b/src/main/java/ru/windcorp/jputil/chars/CharConsumers.java index 1ac7973..12a518d 100644 --- a/src/main/java/ru/windcorp/jputil/chars/CharConsumers.java +++ b/src/main/java/ru/windcorp/jputil/chars/CharConsumers.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars; import java.util.Objects; diff --git a/src/main/java/ru/windcorp/jputil/chars/CharPredicate.java b/src/main/java/ru/windcorp/jputil/chars/CharPredicate.java index 03ded02..c02beed 100644 --- a/src/main/java/ru/windcorp/jputil/chars/CharPredicate.java +++ b/src/main/java/ru/windcorp/jputil/chars/CharPredicate.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars; import java.util.Arrays; diff --git a/src/main/java/ru/windcorp/jputil/chars/CharSupplier.java b/src/main/java/ru/windcorp/jputil/chars/CharSupplier.java index 0743d79..2a9749b 100644 --- a/src/main/java/ru/windcorp/jputil/chars/CharSupplier.java +++ b/src/main/java/ru/windcorp/jputil/chars/CharSupplier.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars; import java.util.function.IntSupplier; diff --git a/src/main/java/ru/windcorp/jputil/chars/EscapeException.java b/src/main/java/ru/windcorp/jputil/chars/EscapeException.java index 935f72f..544c50f 100644 --- a/src/main/java/ru/windcorp/jputil/chars/EscapeException.java +++ b/src/main/java/ru/windcorp/jputil/chars/EscapeException.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars; public class EscapeException extends Exception { diff --git a/src/main/java/ru/windcorp/jputil/chars/Escaper.java b/src/main/java/ru/windcorp/jputil/chars/Escaper.java index f19f6c7..1a65521 100644 --- a/src/main/java/ru/windcorp/jputil/chars/Escaper.java +++ b/src/main/java/ru/windcorp/jputil/chars/Escaper.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars; import java.text.CharacterIterator; diff --git a/src/main/java/ru/windcorp/jputil/chars/FancyCharacterIterator.java b/src/main/java/ru/windcorp/jputil/chars/FancyCharacterIterator.java index 183b672..1453f69 100644 --- a/src/main/java/ru/windcorp/jputil/chars/FancyCharacterIterator.java +++ b/src/main/java/ru/windcorp/jputil/chars/FancyCharacterIterator.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars; import java.text.CharacterIterator; diff --git a/src/main/java/ru/windcorp/jputil/chars/IndentedStringBuilder.java b/src/main/java/ru/windcorp/jputil/chars/IndentedStringBuilder.java index 92ba836..21afc6f 100644 --- a/src/main/java/ru/windcorp/jputil/chars/IndentedStringBuilder.java +++ b/src/main/java/ru/windcorp/jputil/chars/IndentedStringBuilder.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars; public class IndentedStringBuilder { diff --git a/src/main/java/ru/windcorp/jputil/chars/StringUtil.java b/src/main/java/ru/windcorp/jputil/chars/StringUtil.java index f08018a..92a6e27 100644 --- a/src/main/java/ru/windcorp/jputil/chars/StringUtil.java +++ b/src/main/java/ru/windcorp/jputil/chars/StringUtil.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars; import java.io.IOException; diff --git a/src/main/java/ru/windcorp/jputil/chars/UncheckedEscapeException.java b/src/main/java/ru/windcorp/jputil/chars/UncheckedEscapeException.java index 33717ee..66b7002 100644 --- a/src/main/java/ru/windcorp/jputil/chars/UncheckedEscapeException.java +++ b/src/main/java/ru/windcorp/jputil/chars/UncheckedEscapeException.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars; public class UncheckedEscapeException extends RuntimeException { diff --git a/src/main/java/ru/windcorp/jputil/chars/WordReader.java b/src/main/java/ru/windcorp/jputil/chars/WordReader.java index 22d6969..04dc5b6 100644 --- a/src/main/java/ru/windcorp/jputil/chars/WordReader.java +++ b/src/main/java/ru/windcorp/jputil/chars/WordReader.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars; import java.io.IOException; diff --git a/src/main/java/ru/windcorp/jputil/chars/reader/AbstractCharReader.java b/src/main/java/ru/windcorp/jputil/chars/reader/AbstractCharReader.java index d31e092..79aa679 100644 --- a/src/main/java/ru/windcorp/jputil/chars/reader/AbstractCharReader.java +++ b/src/main/java/ru/windcorp/jputil/chars/reader/AbstractCharReader.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars.reader; /** diff --git a/src/main/java/ru/windcorp/jputil/chars/reader/ArrayCharReader.java b/src/main/java/ru/windcorp/jputil/chars/reader/ArrayCharReader.java index f12f590..09f5e6c 100644 --- a/src/main/java/ru/windcorp/jputil/chars/reader/ArrayCharReader.java +++ b/src/main/java/ru/windcorp/jputil/chars/reader/ArrayCharReader.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars.reader; import java.util.Objects; diff --git a/src/main/java/ru/windcorp/jputil/chars/reader/BufferedCharReader.java b/src/main/java/ru/windcorp/jputil/chars/reader/BufferedCharReader.java index 83ae6b2..919a7c0 100644 --- a/src/main/java/ru/windcorp/jputil/chars/reader/BufferedCharReader.java +++ b/src/main/java/ru/windcorp/jputil/chars/reader/BufferedCharReader.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars.reader; /** diff --git a/src/main/java/ru/windcorp/jputil/chars/reader/CharReader.java b/src/main/java/ru/windcorp/jputil/chars/reader/CharReader.java index 147daf3..5623598 100644 --- a/src/main/java/ru/windcorp/jputil/chars/reader/CharReader.java +++ b/src/main/java/ru/windcorp/jputil/chars/reader/CharReader.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars.reader; import java.io.IOException; diff --git a/src/main/java/ru/windcorp/jputil/chars/reader/CharReaders.java b/src/main/java/ru/windcorp/jputil/chars/reader/CharReaders.java index a181dbf..d6978a0 100644 --- a/src/main/java/ru/windcorp/jputil/chars/reader/CharReaders.java +++ b/src/main/java/ru/windcorp/jputil/chars/reader/CharReaders.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars.reader; import java.io.InputStream; diff --git a/src/main/java/ru/windcorp/jputil/chars/reader/ReaderCharReader.java b/src/main/java/ru/windcorp/jputil/chars/reader/ReaderCharReader.java index 51a88db..fec35b2 100644 --- a/src/main/java/ru/windcorp/jputil/chars/reader/ReaderCharReader.java +++ b/src/main/java/ru/windcorp/jputil/chars/reader/ReaderCharReader.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars.reader; import java.io.IOException; diff --git a/src/main/java/ru/windcorp/jputil/chars/reader/StringCharReader.java b/src/main/java/ru/windcorp/jputil/chars/reader/StringCharReader.java index 5836d15..58ec176 100644 --- a/src/main/java/ru/windcorp/jputil/chars/reader/StringCharReader.java +++ b/src/main/java/ru/windcorp/jputil/chars/reader/StringCharReader.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.chars.reader; import java.util.Objects; diff --git a/src/main/java/ru/windcorp/jputil/functions/FloatSupplier.java b/src/main/java/ru/windcorp/jputil/functions/FloatSupplier.java index a157032..774e36b 100644 --- a/src/main/java/ru/windcorp/jputil/functions/FloatSupplier.java +++ b/src/main/java/ru/windcorp/jputil/functions/FloatSupplier.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.functions; @FunctionalInterface diff --git a/src/main/java/ru/windcorp/jputil/functions/ThrowingBiConsumer.java b/src/main/java/ru/windcorp/jputil/functions/ThrowingBiConsumer.java index be7cb8f..bb5da27 100644 --- a/src/main/java/ru/windcorp/jputil/functions/ThrowingBiConsumer.java +++ b/src/main/java/ru/windcorp/jputil/functions/ThrowingBiConsumer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.functions; import java.util.function.BiConsumer; diff --git a/src/main/java/ru/windcorp/jputil/functions/ThrowingConsumer.java b/src/main/java/ru/windcorp/jputil/functions/ThrowingConsumer.java index 14449ca..e404710 100644 --- a/src/main/java/ru/windcorp/jputil/functions/ThrowingConsumer.java +++ b/src/main/java/ru/windcorp/jputil/functions/ThrowingConsumer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.functions; import java.util.function.BiConsumer; diff --git a/src/main/java/ru/windcorp/jputil/functions/ThrowingFunction.java b/src/main/java/ru/windcorp/jputil/functions/ThrowingFunction.java index afdd078..8d283a8 100644 --- a/src/main/java/ru/windcorp/jputil/functions/ThrowingFunction.java +++ b/src/main/java/ru/windcorp/jputil/functions/ThrowingFunction.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.functions; import java.util.function.BiConsumer; diff --git a/src/main/java/ru/windcorp/jputil/functions/ThrowingRunnable.java b/src/main/java/ru/windcorp/jputil/functions/ThrowingRunnable.java index f27429b..8c2a989 100644 --- a/src/main/java/ru/windcorp/jputil/functions/ThrowingRunnable.java +++ b/src/main/java/ru/windcorp/jputil/functions/ThrowingRunnable.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.functions; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/jputil/functions/ThrowingSupplier.java b/src/main/java/ru/windcorp/jputil/functions/ThrowingSupplier.java index 84ad690..6583789 100644 --- a/src/main/java/ru/windcorp/jputil/functions/ThrowingSupplier.java +++ b/src/main/java/ru/windcorp/jputil/functions/ThrowingSupplier.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.functions; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/jputil/iterators/ArrayIterator.java b/src/main/java/ru/windcorp/jputil/iterators/ArrayIterator.java index 0b8fab2..aec4324 100644 --- a/src/main/java/ru/windcorp/jputil/iterators/ArrayIterator.java +++ b/src/main/java/ru/windcorp/jputil/iterators/ArrayIterator.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.iterators; import java.util.Iterator; diff --git a/src/main/java/ru/windcorp/jputil/iterators/FunctionIterator.java b/src/main/java/ru/windcorp/jputil/iterators/FunctionIterator.java index abc5b44..e32d250 100644 --- a/src/main/java/ru/windcorp/jputil/iterators/FunctionIterator.java +++ b/src/main/java/ru/windcorp/jputil/iterators/FunctionIterator.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.iterators; import java.util.Iterator; diff --git a/src/main/java/ru/windcorp/jputil/iterators/PeekingIterator.java b/src/main/java/ru/windcorp/jputil/iterators/PeekingIterator.java index 67f3da9..754e1ae 100644 --- a/src/main/java/ru/windcorp/jputil/iterators/PeekingIterator.java +++ b/src/main/java/ru/windcorp/jputil/iterators/PeekingIterator.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.iterators; import java.util.Iterator; diff --git a/src/main/java/ru/windcorp/jputil/iterators/RangeIterator.java b/src/main/java/ru/windcorp/jputil/iterators/RangeIterator.java index 7da8ada..13ad18c 100644 --- a/src/main/java/ru/windcorp/jputil/iterators/RangeIterator.java +++ b/src/main/java/ru/windcorp/jputil/iterators/RangeIterator.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.iterators; import java.util.Iterator; diff --git a/src/main/java/ru/windcorp/jputil/iterators/Reiterator.java b/src/main/java/ru/windcorp/jputil/iterators/Reiterator.java index 7969bc1..85d9122 100644 --- a/src/main/java/ru/windcorp/jputil/iterators/Reiterator.java +++ b/src/main/java/ru/windcorp/jputil/iterators/Reiterator.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.iterators; import java.util.ArrayList; diff --git a/src/main/java/ru/windcorp/jputil/selectors/AbstractSelectorOperator.java b/src/main/java/ru/windcorp/jputil/selectors/AbstractSelectorOperator.java index 481e558..3448929 100644 --- a/src/main/java/ru/windcorp/jputil/selectors/AbstractSelectorOperator.java +++ b/src/main/java/ru/windcorp/jputil/selectors/AbstractSelectorOperator.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.selectors; public abstract class AbstractSelectorOperator implements SelectorOperator { diff --git a/src/main/java/ru/windcorp/jputil/selectors/NamedParameterizedSelector.java b/src/main/java/ru/windcorp/jputil/selectors/NamedParameterizedSelector.java index e0676fd..d0a7692 100644 --- a/src/main/java/ru/windcorp/jputil/selectors/NamedParameterizedSelector.java +++ b/src/main/java/ru/windcorp/jputil/selectors/NamedParameterizedSelector.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.selectors; import ru.windcorp.jputil.SyntaxException; diff --git a/src/main/java/ru/windcorp/jputil/selectors/NamedSelector.java b/src/main/java/ru/windcorp/jputil/selectors/NamedSelector.java index 196be14..7765505 100644 --- a/src/main/java/ru/windcorp/jputil/selectors/NamedSelector.java +++ b/src/main/java/ru/windcorp/jputil/selectors/NamedSelector.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.selectors; import ru.windcorp.jputil.SyntaxException; diff --git a/src/main/java/ru/windcorp/jputil/selectors/OperatorAnd.java b/src/main/java/ru/windcorp/jputil/selectors/OperatorAnd.java index 603c6d4..4b68bb6 100644 --- a/src/main/java/ru/windcorp/jputil/selectors/OperatorAnd.java +++ b/src/main/java/ru/windcorp/jputil/selectors/OperatorAnd.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.selectors; import java.util.Deque; diff --git a/src/main/java/ru/windcorp/jputil/selectors/OperatorExclude.java b/src/main/java/ru/windcorp/jputil/selectors/OperatorExclude.java index a805a2f..810f15f 100644 --- a/src/main/java/ru/windcorp/jputil/selectors/OperatorExclude.java +++ b/src/main/java/ru/windcorp/jputil/selectors/OperatorExclude.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.selectors; import java.util.Deque; diff --git a/src/main/java/ru/windcorp/jputil/selectors/OperatorNot.java b/src/main/java/ru/windcorp/jputil/selectors/OperatorNot.java index 2bf0300..b12f5dc 100644 --- a/src/main/java/ru/windcorp/jputil/selectors/OperatorNot.java +++ b/src/main/java/ru/windcorp/jputil/selectors/OperatorNot.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.selectors; import java.util.Deque; diff --git a/src/main/java/ru/windcorp/jputil/selectors/OperatorOr.java b/src/main/java/ru/windcorp/jputil/selectors/OperatorOr.java index 367e6c3..2388105 100644 --- a/src/main/java/ru/windcorp/jputil/selectors/OperatorOr.java +++ b/src/main/java/ru/windcorp/jputil/selectors/OperatorOr.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.selectors; import java.util.Deque; diff --git a/src/main/java/ru/windcorp/jputil/selectors/OperatorXor.java b/src/main/java/ru/windcorp/jputil/selectors/OperatorXor.java index 467e6a0..9b8a719 100644 --- a/src/main/java/ru/windcorp/jputil/selectors/OperatorXor.java +++ b/src/main/java/ru/windcorp/jputil/selectors/OperatorXor.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.selectors; import java.util.Deque; diff --git a/src/main/java/ru/windcorp/jputil/selectors/PredicateWrapper.java b/src/main/java/ru/windcorp/jputil/selectors/PredicateWrapper.java index 278df45..f43760a 100644 --- a/src/main/java/ru/windcorp/jputil/selectors/PredicateWrapper.java +++ b/src/main/java/ru/windcorp/jputil/selectors/PredicateWrapper.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.selectors; import java.util.function.Predicate; diff --git a/src/main/java/ru/windcorp/jputil/selectors/Selector.java b/src/main/java/ru/windcorp/jputil/selectors/Selector.java index eec8b06..450e717 100644 --- a/src/main/java/ru/windcorp/jputil/selectors/Selector.java +++ b/src/main/java/ru/windcorp/jputil/selectors/Selector.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.selectors; import java.util.function.Predicate; diff --git a/src/main/java/ru/windcorp/jputil/selectors/SelectorOperator.java b/src/main/java/ru/windcorp/jputil/selectors/SelectorOperator.java index 665d231..20b46b3 100644 --- a/src/main/java/ru/windcorp/jputil/selectors/SelectorOperator.java +++ b/src/main/java/ru/windcorp/jputil/selectors/SelectorOperator.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.selectors; import java.util.Deque; diff --git a/src/main/java/ru/windcorp/jputil/selectors/SelectorSystem.java b/src/main/java/ru/windcorp/jputil/selectors/SelectorSystem.java index 0361795..fe626f0 100644 --- a/src/main/java/ru/windcorp/jputil/selectors/SelectorSystem.java +++ b/src/main/java/ru/windcorp/jputil/selectors/SelectorSystem.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.jputil.selectors; import java.util.ArrayList; diff --git a/src/main/java/ru/windcorp/progressia/Progressia.java b/src/main/java/ru/windcorp/progressia/Progressia.java index db899ea..fd3529f 100644 --- a/src/main/java/ru/windcorp/progressia/Progressia.java +++ b/src/main/java/ru/windcorp/progressia/Progressia.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia; public class Progressia { diff --git a/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java b/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java index f32936f..630f9c6 100644 --- a/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java +++ b/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia; import ru.windcorp.progressia.client.ClientProxy; @@ -33,14 +33,13 @@ public class ProgressiaLauncher { public static void launch(String[] args, ClientProxy inProxy) { arguments = args.clone(); setupCrashReports(); - + inProxy.initialize(); proxy = inProxy; GUI.addTopLayer(new LayerTitle("Title")); } - - public static void play() - { + + public static void play() { proxy.setupServer(); } diff --git a/src/main/java/ru/windcorp/progressia/Proxy.java b/src/main/java/ru/windcorp/progressia/Proxy.java index a1af080..8b5542e 100644 --- a/src/main/java/ru/windcorp/progressia/Proxy.java +++ b/src/main/java/ru/windcorp/progressia/Proxy.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia; public interface Proxy { diff --git a/src/main/java/ru/windcorp/progressia/client/Client.java b/src/main/java/ru/windcorp/progressia/client/Client.java index d8800c7..543d3a6 100644 --- a/src/main/java/ru/windcorp/progressia/client/Client.java +++ b/src/main/java/ru/windcorp/progressia/client/Client.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client; import ru.windcorp.progressia.client.comms.DefaultClientCommsListener; diff --git a/src/main/java/ru/windcorp/progressia/client/ClientProxy.java b/src/main/java/ru/windcorp/progressia/client/ClientProxy.java index cd75d42..ab0b476 100644 --- a/src/main/java/ru/windcorp/progressia/client/ClientProxy.java +++ b/src/main/java/ru/windcorp/progressia/client/ClientProxy.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client; import ru.windcorp.progressia.Proxy; @@ -41,7 +41,7 @@ public class ClientProxy implements Proxy { public void initialize() { GraphicsBackend.initialize(); - + try { RenderTaskQueue.waitAndInvoke(FlatRenderProgram::init); RenderTaskQueue.waitAndInvoke(WorldRenderProgram::init); @@ -52,22 +52,21 @@ public class ClientProxy implements Proxy { } catch (InterruptedException e) { throw CrashReports.report(e, "Menu launch failed"); } - + Localizer.getInstance().setLanguage("en-US"); - + TestContent.registerContent(); Atlases.loadAllAtlases(); AudioSystem.initialize(); - + TestMusicPlayer.start(); - - //setupServer(); + + // setupServer(); } - - public void setupServer() - { + + public void setupServer() { ServerState.startServer(); ClientState.connectToLocalServer(); } diff --git a/src/main/java/ru/windcorp/progressia/client/ClientState.java b/src/main/java/ru/windcorp/progressia/client/ClientState.java index 2ae791c..c09a3d3 100644 --- a/src/main/java/ru/windcorp/progressia/client/ClientState.java +++ b/src/main/java/ru/windcorp/progressia/client/ClientState.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client; import ru.windcorp.progressia.client.comms.localhost.LocalServerCommsChannel; @@ -36,7 +36,7 @@ import ru.windcorp.progressia.test.TestContent; public class ClientState { private static Client instance; - + private static boolean firstLoad; private static LayerTestText layer; @@ -55,7 +55,7 @@ public class ClientState { LocalServerCommsChannel channel = new LocalServerCommsChannel( ServerState.getInstance() ); - + firstLoad = true; Client client = new Client(world, channel); @@ -65,41 +65,41 @@ public class ClientState { setInstance(client); MutableString t = new MutableStringLocalized("LayerText.Load"); - layer = new LayerTestText("Text",() -> {t.update(); return t.get();}); - - ServerState.getInstance().getChunkManager().register((ChunksLoadStartListener)() -> { - if (firstLoad) - { - + layer = new LayerTestText("Text", () -> { + t.update(); + return t.get(); + }); + + ServerState.getInstance().getChunkManager().register((ChunksLoadStartListener) () -> { + if (firstLoad) { + GUI.addTopLayer(layer); - }}); - - ServerState.getInstance().getChunkManager().register((ChunksLoadFinishListener)() -> { - if (firstLoad) - { + } + }); + + ServerState.getInstance().getChunkManager().register((ChunksLoadFinishListener) () -> { + if (firstLoad) { GUI.removeLayer(layer); - + LayerWorld layerWorld = new LayerWorld(client); LayerTestUI layerUI = new LayerTestUI(); LayerAbout layerAbout = new LayerAbout(); GUI.addBottomLayer(layerWorld); GUI.addTopLayer(layerUI); GUI.addTopLayer(layerAbout); - + firstLoad = false; } }); - + } - - public static void disconnectFromLocalServer() - { - for (Layer layer : GUI.getLayers()) - { + + public static void disconnectFromLocalServer() { + for (Layer layer : GUI.getLayers()) { GUI.removeLayer(layer); } - - //ServerState.getInstance().getClientManager(); + + // ServerState.getInstance().getClientManager(); } private ClientState() { diff --git a/src/main/java/ru/windcorp/progressia/client/ProgressiaClientMain.java b/src/main/java/ru/windcorp/progressia/client/ProgressiaClientMain.java index bb0482d..d578c85 100644 --- a/src/main/java/ru/windcorp/progressia/client/ProgressiaClientMain.java +++ b/src/main/java/ru/windcorp/progressia/client/ProgressiaClientMain.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client; import ru.windcorp.progressia.ProgressiaLauncher; diff --git a/src/main/java/ru/windcorp/progressia/client/audio/AudioFormat.java b/src/main/java/ru/windcorp/progressia/client/audio/AudioFormat.java index 848e66c..cade47d 100644 --- a/src/main/java/ru/windcorp/progressia/client/audio/AudioFormat.java +++ b/src/main/java/ru/windcorp/progressia/client/audio/AudioFormat.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.audio; public enum AudioFormat { diff --git a/src/main/java/ru/windcorp/progressia/client/audio/AudioManager.java b/src/main/java/ru/windcorp/progressia/client/audio/AudioManager.java index 49f2312..59be50b 100644 --- a/src/main/java/ru/windcorp/progressia/client/audio/AudioManager.java +++ b/src/main/java/ru/windcorp/progressia/client/audio/AudioManager.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.audio; import org.lwjgl.openal.*; diff --git a/src/main/java/ru/windcorp/progressia/client/audio/AudioRegistry.java b/src/main/java/ru/windcorp/progressia/client/audio/AudioRegistry.java index 3199622..2f1da30 100644 --- a/src/main/java/ru/windcorp/progressia/client/audio/AudioRegistry.java +++ b/src/main/java/ru/windcorp/progressia/client/audio/AudioRegistry.java @@ -21,9 +21,9 @@ import ru.windcorp.progressia.client.audio.backend.SoundType; import ru.windcorp.progressia.common.util.namespaces.NamespacedInstanceRegistry; public class AudioRegistry extends NamespacedInstanceRegistry { - + private static final AudioRegistry INSTANCE = new AudioRegistry(); - + /** * @return the instance */ diff --git a/src/main/java/ru/windcorp/progressia/client/audio/AudioSystem.java b/src/main/java/ru/windcorp/progressia/client/audio/AudioSystem.java index 24cc2de..a39b574 100644 --- a/src/main/java/ru/windcorp/progressia/client/audio/AudioSystem.java +++ b/src/main/java/ru/windcorp/progressia/client/audio/AudioSystem.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.audio; import ru.windcorp.progressia.common.resource.ResourceManager; diff --git a/src/main/java/ru/windcorp/progressia/client/audio/Music.java b/src/main/java/ru/windcorp/progressia/client/audio/Music.java index 031b58e..34e0943 100644 --- a/src/main/java/ru/windcorp/progressia/client/audio/Music.java +++ b/src/main/java/ru/windcorp/progressia/client/audio/Music.java @@ -15,18 +15,16 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.audio; import glm.vec._3.Vec3; import ru.windcorp.progressia.client.audio.backend.SoundType; import ru.windcorp.progressia.client.audio.backend.Speaker; -public class Music +public class Music extends Sound { - - - + public Music(SoundType soundType, int timeLength, float pitch, float gain) { super(soundType, timeLength, new Vec3(), new Vec3(), pitch, gain); } @@ -47,7 +45,7 @@ public class Music protected Speaker initSpeaker() { return AudioManager.initMusicSpeaker(soundType); } - + @Override public void setPosition(Vec3 position) { throw new UnsupportedOperationException(); diff --git a/src/main/java/ru/windcorp/progressia/client/audio/Sound.java b/src/main/java/ru/windcorp/progressia/client/audio/Sound.java index 77f0c9e..247aa48 100644 --- a/src/main/java/ru/windcorp/progressia/client/audio/Sound.java +++ b/src/main/java/ru/windcorp/progressia/client/audio/Sound.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.audio; import glm.vec._3.Vec3; @@ -29,9 +29,9 @@ public class Sound { protected float pitch = 1.0f; protected float gain = 1.0f; protected int timeLength = 0; - + protected SoundType soundType; - + public Sound(SoundType soundType) { this.soundType = soundType; } @@ -39,7 +39,7 @@ public class Sound { public Sound(String id) { this(AudioRegistry.getInstance().get(id)); } - + public Sound( String id, int timeLength, @@ -54,7 +54,7 @@ public class Sound { this.pitch = pitch; this.gain = gain; } - + public Sound( SoundType soundType, int timeLength, @@ -69,7 +69,7 @@ public class Sound { this.pitch = pitch; this.gain = gain; } - + protected Speaker initSpeaker() { return AudioManager.initSpeaker(soundType); } @@ -119,7 +119,7 @@ public class Sound { public float getPitch() { return pitch; } - + public double getDuration() { return soundType.getDuration(); } diff --git a/src/main/java/ru/windcorp/progressia/client/audio/backend/AudioReader.java b/src/main/java/ru/windcorp/progressia/client/audio/backend/AudioReader.java index 9fa48e0..c05d008 100644 --- a/src/main/java/ru/windcorp/progressia/client/audio/backend/AudioReader.java +++ b/src/main/java/ru/windcorp/progressia/client/audio/backend/AudioReader.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.audio.backend; import org.lwjgl.BufferUtils; diff --git a/src/main/java/ru/windcorp/progressia/client/audio/backend/Listener.java b/src/main/java/ru/windcorp/progressia/client/audio/backend/Listener.java index 8f6fe35..6a9dd84 100644 --- a/src/main/java/ru/windcorp/progressia/client/audio/backend/Listener.java +++ b/src/main/java/ru/windcorp/progressia/client/audio/backend/Listener.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.audio.backend; import glm.vec._3.Vec3; diff --git a/src/main/java/ru/windcorp/progressia/client/audio/backend/SoundType.java b/src/main/java/ru/windcorp/progressia/client/audio/backend/SoundType.java index cdb1954..59f7cf9 100644 --- a/src/main/java/ru/windcorp/progressia/client/audio/backend/SoundType.java +++ b/src/main/java/ru/windcorp/progressia/client/audio/backend/SoundType.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.audio.backend; import ru.windcorp.progressia.common.util.namespaces.Namespaced; @@ -56,7 +56,7 @@ public class SoundType extends Namespaced { public void initSpeaker(Speaker speaker) { speaker.setAudioData(audioBuffer); } - + public double getDuration() { return duration; } diff --git a/src/main/java/ru/windcorp/progressia/client/audio/backend/Speaker.java b/src/main/java/ru/windcorp/progressia/client/audio/backend/Speaker.java index c649a6a..def1e09 100644 --- a/src/main/java/ru/windcorp/progressia/client/audio/backend/Speaker.java +++ b/src/main/java/ru/windcorp/progressia/client/audio/backend/Speaker.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.audio.backend; import glm.vec._3.Vec3; diff --git a/src/main/java/ru/windcorp/progressia/client/comms/DefaultClientCommsListener.java b/src/main/java/ru/windcorp/progressia/client/comms/DefaultClientCommsListener.java index dad05fd..0413550 100644 --- a/src/main/java/ru/windcorp/progressia/client/comms/DefaultClientCommsListener.java +++ b/src/main/java/ru/windcorp/progressia/client/comms/DefaultClientCommsListener.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.comms; import java.io.IOException; diff --git a/src/main/java/ru/windcorp/progressia/client/comms/ServerCommsChannel.java b/src/main/java/ru/windcorp/progressia/client/comms/ServerCommsChannel.java index 3a0a1b1..6bf9a8e 100644 --- a/src/main/java/ru/windcorp/progressia/client/comms/ServerCommsChannel.java +++ b/src/main/java/ru/windcorp/progressia/client/comms/ServerCommsChannel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.comms; import ru.windcorp.progressia.common.comms.CommsChannel; diff --git a/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTrigger.java b/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTrigger.java index 88e9fa3..0f0e091 100644 --- a/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTrigger.java +++ b/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTrigger.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.comms.controls; import ru.windcorp.progressia.common.util.namespaces.Namespaced; diff --git a/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerInputBased.java b/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerInputBased.java index b2f8de4..f1985b3 100644 --- a/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerInputBased.java +++ b/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerInputBased.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.comms.controls; import ru.windcorp.progressia.client.graphics.input.InputEvent; diff --git a/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerLambda.java b/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerLambda.java index 22004b8..03d7130 100644 --- a/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerLambda.java +++ b/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerLambda.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.comms.controls; import java.util.function.BiConsumer; diff --git a/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerLocalLambda.java b/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerLocalLambda.java index b2ae739..483eabd 100644 --- a/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerLocalLambda.java +++ b/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerLocalLambda.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.comms.controls; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerRegistry.java b/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerRegistry.java index a2ec71e..5a3f4a9 100644 --- a/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerRegistry.java +++ b/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggerRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.comms.controls; import ru.windcorp.progressia.common.util.namespaces.NamespacedInstanceRegistry; diff --git a/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggers.java b/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggers.java index 2c0d61d..0de7c29 100644 --- a/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggers.java +++ b/src/main/java/ru/windcorp/progressia/client/comms/controls/ControlTriggers.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.comms.controls; import java.util.function.BiConsumer; @@ -142,7 +142,7 @@ public class ControlTriggers { predicates ); } - + // // /// @@ -156,7 +156,7 @@ public class ControlTriggers { // // // - + public static ControlTriggerInputBased localOf( String id, Consumer action, @@ -239,7 +239,7 @@ public class ControlTriggers { ) { return (inputEvent, control) -> dataWriter.accept(inputType.cast(inputEvent), control); } - + private static Consumer createCheckedAction( Class inputType, Consumer action diff --git a/src/main/java/ru/windcorp/progressia/client/comms/controls/InputBasedControls.java b/src/main/java/ru/windcorp/progressia/client/comms/controls/InputBasedControls.java index 28b9e1b..36ba5a0 100644 --- a/src/main/java/ru/windcorp/progressia/client/comms/controls/InputBasedControls.java +++ b/src/main/java/ru/windcorp/progressia/client/comms/controls/InputBasedControls.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.comms.controls; import ru.windcorp.progressia.client.Client; diff --git a/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalClient.java b/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalClient.java index f1fdf96..54903ab 100644 --- a/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalClient.java +++ b/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalClient.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.comms.localhost; import java.io.IOException; diff --git a/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalServerCommsChannel.java b/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalServerCommsChannel.java index b631a3c..463112b 100644 --- a/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalServerCommsChannel.java +++ b/src/main/java/ru/windcorp/progressia/client/comms/localhost/LocalServerCommsChannel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.comms.localhost; import ru.windcorp.progressia.client.comms.ServerCommsChannel; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/Colors.java b/src/main/java/ru/windcorp/progressia/client/graphics/Colors.java index b37a6a8..60d0cba 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/Colors.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/Colors.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics; import glm.vec._4.Vec4; @@ -35,7 +35,7 @@ public class Colors { DEBUG_CYAN = toVector(0xFF00FFFF), DEBUG_MAGENTA = toVector(0xFFFF00FF), DEBUG_YELLOW = toVector(0xFFFFFF00), - + LIGHT_GRAY = toVector(0xFFCBCBD0), BLUE = toVector(0xFF37A2E6), HOVER_BLUE = toVector(0xFFC3E4F7), diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/GUI.java b/src/main/java/ru/windcorp/progressia/client/graphics/GUI.java index 56829cf..59b89da 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/GUI.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/GUI.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics; import java.util.ArrayList; @@ -92,33 +92,33 @@ public class GUI { public static void render() { synchronized (LAYERS) { - + if (!MODIFICATION_QUEUE.isEmpty()) { MODIFICATION_QUEUE.forEach(action -> action.affect(LAYERS)); MODIFICATION_QUEUE.clear(); - + boolean isMouseCurrentlyCaptured = GraphicsInterface.isMouseCaptured(); Layer.CursorPolicy policy = Layer.CursorPolicy.REQUIRE; - + for (Layer layer : LAYERS) { Layer.CursorPolicy currentPolicy = layer.getCursorPolicy(); - + if (currentPolicy != Layer.CursorPolicy.INDIFFERENT) { policy = currentPolicy; break; } } - + boolean shouldCaptureMouse = (policy == Layer.CursorPolicy.FORBID); if (shouldCaptureMouse != isMouseCurrentlyCaptured) { GraphicsInterface.setMouseCaptured(shouldCaptureMouse); } } - + for (int i = LAYERS.size() - 1; i >= 0; --i) { LAYERS.get(i).render(); } - + } } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/Layer.java b/src/main/java/ru/windcorp/progressia/client/graphics/Layer.java index dfa72d5..490ec04 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/Layer.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/Layer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics; import java.util.concurrent.atomic.AtomicBoolean; @@ -30,7 +30,7 @@ public abstract class Layer { private boolean hasInitialized = false; private final AtomicBoolean isValid = new AtomicBoolean(false); - + /** * Represents various requests that a {@link Layer} can make regarding the * presence of a visible cursor. The value of the highest layer that is not @@ -53,13 +53,13 @@ public abstract class Layer { */ FORBID } - + private CursorPolicy cursorPolicy = CursorPolicy.INDIFFERENT; public Layer(String name) { this.name = name; } - + public String getName() { return name; } @@ -68,11 +68,11 @@ public abstract class Layer { public String toString() { return "Layer " + name; } - + public CursorPolicy getCursorPolicy() { return cursorPolicy; } - + public void setCursorPolicy(CursorPolicy cursorPolicy) { this.cursorPolicy = cursorPolicy; } @@ -115,11 +115,11 @@ public abstract class Layer { protected int getHeight() { return GraphicsInterface.getFrameHeight(); } - + protected void onAdded() { // Do nothing } - + protected void onRemoved() { // Do nothing } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/FaceCulling.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/FaceCulling.java index 61645f4..bdab268 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/FaceCulling.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/FaceCulling.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend; import java.util.ArrayDeque; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsBackend.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsBackend.java index 1635c7a..2723562 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsBackend.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsBackend.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend; import glm.vec._2.i.Vec2i; @@ -61,7 +61,7 @@ public class GraphicsBackend { static void setOpenGLInitialized(boolean isOpenGLInitialized) { GraphicsBackend.isOpenGLInitialized = isOpenGLInitialized; } - + public static void initialize() { startRenderThread(); } @@ -166,7 +166,8 @@ public class GraphicsBackend { 0, vidmode.width(), vidmode.height(), - 0); + 0 + ); isFullscreen = true; } @@ -179,7 +180,8 @@ public class GraphicsBackend { (vidmode.height() - getFrameHeight()) / 2, getFrameWidth(), getFrameHeight(), - 0); + 0 + ); isFullscreen = false; } @@ -192,18 +194,18 @@ public class GraphicsBackend { GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor()); return vidmode.refreshRate(); } - + public static boolean isMouseCaptured() { return glfwGetInputMode(windowHandle, GLFW_CURSOR) == GLFW_CURSOR_DISABLED; } - + public static void setMouseCaptured(boolean capture) { int mode = capture ? GLFW_CURSOR_DISABLED : GLFW_CURSOR_NORMAL; glfwSetInputMode(windowHandle, GLFW_CURSOR, mode); - + if (!capture) { glfwSetCursorPos(windowHandle, FRAME_SIZE.x / 2.0, FRAME_SIZE.y / 2.0); } } - + } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsInterface.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsInterface.java index ffd0b49..0a7a453 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsInterface.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/GraphicsInterface.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend; import glm.vec._2.i.Vec2i; @@ -81,11 +81,11 @@ public class GraphicsInterface { } GraphicsBackend.setVSyncEnabled(GraphicsBackend.isVSyncEnabled()); } - + public static boolean isMouseCaptured() { return GraphicsBackend.isMouseCaptured(); } - + public static void setMouseCaptured(boolean capture) { GraphicsBackend.setMouseCaptured(capture); } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/InputHandler.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/InputHandler.java index 34d936c..201ed4f 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/InputHandler.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/InputHandler.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend; import org.lwjgl.glfw.GLFW; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/InputTracker.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/InputTracker.java index 29dec99..ffd786b 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/InputTracker.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/InputTracker.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend; import glm.vec._2.d.Vec2d; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/LWJGLInitializer.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/LWJGLInitializer.java index 9239150..55d5fbd 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/LWJGLInitializer.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/LWJGLInitializer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend; import static org.lwjgl.opengl.GL11.*; @@ -66,7 +66,7 @@ class LWJGLInitializer { GraphicsBackend.setWindowHandle(handle); glfwMakeContextCurrent(handle); - glfwSwapInterval(0); // TODO: remove after config system is added + glfwSwapInterval(0); // TODO: remove after config system is added } private static void positionWindow() { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/OpenGLObjectTracker.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/OpenGLObjectTracker.java index c467d45..292eb62 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/OpenGLObjectTracker.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/OpenGLObjectTracker.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend; import java.lang.ref.PhantomReference; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/RenderTaskQueue.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/RenderTaskQueue.java index 0a1d722..93498ed 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/RenderTaskQueue.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/RenderTaskQueue.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend; import ru.windcorp.jputil.functions.ThrowingRunnable; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/RenderThread.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/RenderThread.java index 47d4306..d92385e 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/RenderThread.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/RenderThread.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend; import static org.lwjgl.glfw.GLFW.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/Usage.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/Usage.java index 8a526c1..1297ec7 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/Usage.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/Usage.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend; import static org.lwjgl.opengl.GL15.GL_DYNAMIC_DRAW; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/VertexBufferObject.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/VertexBufferObject.java index 7fe23f7..ef85ce3 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/VertexBufferObject.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/VertexBufferObject.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend; import static org.lwjgl.opengl.GL20.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/CombinedShader.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/CombinedShader.java index 63fb4c9..7735e4c 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/CombinedShader.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/CombinedShader.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders; import ru.windcorp.progressia.common.resource.Resource; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/Program.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/Program.java index 98d512e..b980c21 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/Program.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/Program.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders; import static org.lwjgl.opengl.GL11.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/Shader.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/Shader.java index 714fd1a..9ada432 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/Shader.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/Shader.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders; import static org.lwjgl.opengl.GL11.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/attributes/Attribute.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/attributes/Attribute.java index d56210a..028a0b3 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/attributes/Attribute.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/attributes/Attribute.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders.attributes; import ru.windcorp.progressia.client.graphics.backend.shaders.Program; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/attributes/AttributeVertexArray.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/attributes/AttributeVertexArray.java index 2ca192d..00fe302 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/attributes/AttributeVertexArray.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/attributes/AttributeVertexArray.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders.attributes; import static org.lwjgl.opengl.GL11.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform.java index 8de5f1c..aa09d49 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders.uniforms; import ru.windcorp.progressia.client.graphics.backend.shaders.Program; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform1Float.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform1Float.java index 6e2a62b..b41e313 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform1Float.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform1Float.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders.uniforms; import static org.lwjgl.opengl.GL20.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform1Int.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform1Int.java index 79d14a0..6389583 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform1Int.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform1Int.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders.uniforms; import static org.lwjgl.opengl.GL20.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform2Float.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform2Float.java index 166f47b..1c609c2 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform2Float.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform2Float.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders.uniforms; import static org.lwjgl.opengl.GL20.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform2Int.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform2Int.java index d8dde9b..679de9d 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform2Int.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform2Int.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders.uniforms; import static org.lwjgl.opengl.GL20.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform2Matrix.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform2Matrix.java index 6bbc3a9..b45c598 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform2Matrix.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform2Matrix.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders.uniforms; import static org.lwjgl.opengl.GL20.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform3Float.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform3Float.java index 21ea95b..d381a14 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform3Float.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform3Float.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders.uniforms; import static org.lwjgl.opengl.GL20.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform3Int.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform3Int.java index 1eb4690..283c459 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform3Int.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform3Int.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders.uniforms; import static org.lwjgl.opengl.GL20.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform3Matrix.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform3Matrix.java index 255fe2a..f2a0c12 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform3Matrix.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform3Matrix.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders.uniforms; import static org.lwjgl.opengl.GL20.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform4Float.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform4Float.java index daaab36..5aea97f 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform4Float.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform4Float.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders.uniforms; import static org.lwjgl.opengl.GL20.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform4Int.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform4Int.java index 6c2e760..31db411 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform4Int.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform4Int.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders.uniforms; import static org.lwjgl.opengl.GL20.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform4Matrix.java b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform4Matrix.java index e8281bd..e83cea5 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform4Matrix.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/backend/shaders/uniforms/Uniform4Matrix.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.backend.shaders.uniforms; import static org.lwjgl.opengl.GL20.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/flat/AssembledFlatLayer.java b/src/main/java/ru/windcorp/progressia/client/graphics/flat/AssembledFlatLayer.java index 83f9d6f..7bf8161 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/flat/AssembledFlatLayer.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/flat/AssembledFlatLayer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.flat; import ru.windcorp.progressia.client.graphics.Layer; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/flat/AssembledFlatRenderHelper.java b/src/main/java/ru/windcorp/progressia/client/graphics/flat/AssembledFlatRenderHelper.java index 5696ac2..789a378 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/flat/AssembledFlatRenderHelper.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/flat/AssembledFlatRenderHelper.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.flat; import java.nio.FloatBuffer; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/flat/DefaultFlatRenderHelper.java b/src/main/java/ru/windcorp/progressia/client/graphics/flat/DefaultFlatRenderHelper.java index 4ec676a..5550c24 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/flat/DefaultFlatRenderHelper.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/flat/DefaultFlatRenderHelper.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.flat; import java.nio.FloatBuffer; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/flat/FlatGraphics.java b/src/main/java/ru/windcorp/progressia/client/graphics/flat/FlatGraphics.java index 2b615ec..e7723e6 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/flat/FlatGraphics.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/flat/FlatGraphics.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.flat; public class FlatGraphics { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/flat/FlatRenderHelper.java b/src/main/java/ru/windcorp/progressia/client/graphics/flat/FlatRenderHelper.java index 704c579..ab52567 100755 --- a/src/main/java/ru/windcorp/progressia/client/graphics/flat/FlatRenderHelper.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/flat/FlatRenderHelper.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.flat; import java.nio.FloatBuffer; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/flat/FlatRenderProgram.java b/src/main/java/ru/windcorp/progressia/client/graphics/flat/FlatRenderProgram.java index 774e6f3..c0361e4 100755 --- a/src/main/java/ru/windcorp/progressia/client/graphics/flat/FlatRenderProgram.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/flat/FlatRenderProgram.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.flat; import java.nio.FloatBuffer; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/flat/Mask.java b/src/main/java/ru/windcorp/progressia/client/graphics/flat/Mask.java index e13400a..d781c0b 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/flat/Mask.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/flat/Mask.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.flat; public class Mask { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/flat/MaskStack.java b/src/main/java/ru/windcorp/progressia/client/graphics/flat/MaskStack.java index f114058..767e6d8 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/flat/MaskStack.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/flat/MaskStack.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.flat; import java.nio.FloatBuffer; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/flat/RenderTarget.java b/src/main/java/ru/windcorp/progressia/client/graphics/flat/RenderTarget.java index 658b02d..e07afe6 100755 --- a/src/main/java/ru/windcorp/progressia/client/graphics/flat/RenderTarget.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/flat/RenderTarget.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.flat; import java.util.ArrayList; @@ -189,7 +189,7 @@ public class RenderTarget { public void addCustomRenderer(Renderable renderable) { assembleCurrentClipFromFaces(); - + float depth = this.depth--; Mat4 transform = new Mat4().translate(0, 0, depth).mul(getTransform()); assembled.add(new Clip(maskStack, transform, renderable)); diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/flat/TransformedMask.java b/src/main/java/ru/windcorp/progressia/client/graphics/flat/TransformedMask.java index 5328cc8..db3d9c3 100755 --- a/src/main/java/ru/windcorp/progressia/client/graphics/flat/TransformedMask.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/flat/TransformedMask.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.flat; import java.nio.FloatBuffer; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/font/Font.java b/src/main/java/ru/windcorp/progressia/client/graphics/font/Font.java index 591ff83..2863493 100755 --- a/src/main/java/ru/windcorp/progressia/client/graphics/font/Font.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/font/Font.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.font; import java.util.function.Supplier; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/font/GNUUnifont.java b/src/main/java/ru/windcorp/progressia/client/graphics/font/GNUUnifont.java index f28975d..6b687b2 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/font/GNUUnifont.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/font/GNUUnifont.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.font; import gnu.trove.map.TCharObjectMap; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/font/GNUUnifontLoader.java b/src/main/java/ru/windcorp/progressia/client/graphics/font/GNUUnifontLoader.java index 9ead1db..74cb7c3 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/font/GNUUnifontLoader.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/font/GNUUnifontLoader.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.font; import java.io.BufferedReader; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/font/SpriteTypeface.java b/src/main/java/ru/windcorp/progressia/client/graphics/font/SpriteTypeface.java index 7920799..d2e61d7 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/font/SpriteTypeface.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/font/SpriteTypeface.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.font; import java.util.ArrayList; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/font/Typeface.java b/src/main/java/ru/windcorp/progressia/client/graphics/font/Typeface.java index 3be5ebb..3297fc0 100755 --- a/src/main/java/ru/windcorp/progressia/client/graphics/font/Typeface.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/font/Typeface.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.font; import java.util.function.Supplier; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/font/Typefaces.java b/src/main/java/ru/windcorp/progressia/client/graphics/font/Typefaces.java index ed9c7c4..813087d 100755 --- a/src/main/java/ru/windcorp/progressia/client/graphics/font/Typefaces.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/font/Typefaces.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.font; public class Typefaces { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/BasicButton.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/BasicButton.java index ddaab7b..14c0e36 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/BasicButton.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/BasicButton.java @@ -37,12 +37,12 @@ import ru.windcorp.progressia.client.graphics.gui.layout.LayoutAlign; import ru.windcorp.progressia.client.graphics.input.KeyEvent; public abstract class BasicButton extends Component { - + private final Label label; private boolean isPressed = false; private final Collection> actions = Collections.synchronizedCollection(new ArrayList<>()); - + public BasicButton(String name, Label label) { super(name); this.label = label; @@ -59,8 +59,8 @@ public abstract class BasicButton extends Component { return false; } else if ( e.isLeftMouseButton() || - e.getKey() == GLFW.GLFW_KEY_SPACE || - e.getKey() == GLFW.GLFW_KEY_ENTER + e.getKey() == GLFW.GLFW_KEY_SPACE || + e.getKey() == GLFW.GLFW_KEY_ENTER ) { setPressed(e.isPress()); return true; @@ -68,9 +68,9 @@ public abstract class BasicButton extends Component { return false; } }); - + addListener(new Object() { - + // Release when losing focus @Subscribe public void onFocusChange(FocusEvent e) { @@ -78,7 +78,7 @@ public abstract class BasicButton extends Component { setPressed(false); } } - + // Release when hover ends @Subscribe public void onHoverEnded(HoverEvent e) { @@ -86,7 +86,7 @@ public abstract class BasicButton extends Component { setPressed(false); } } - + // Release when disabled @Subscribe public void onDisabled(EnableEvent e) { @@ -94,18 +94,17 @@ public abstract class BasicButton extends Component { setPressed(false); } } - + // Trigger virtualClick when button is released @Subscribe public void onRelease(ButtonEvent.Release e) { virtualClick(); } - + }); } - - public BasicButton(String name, String label, Font labelFont) - { + + public BasicButton(String name, String label, Font labelFont) { this(name, new Label(name + ".Label", labelFont, label)); } @@ -116,7 +115,7 @@ public abstract class BasicButton extends Component { public boolean isPressed() { return isPressed; } - + public void click() { setPressed(true); setPressed(false); @@ -125,7 +124,7 @@ public abstract class BasicButton extends Component { public void setPressed(boolean isPressed) { if (this.isPressed != isPressed) { this.isPressed = isPressed; - + if (isPressed) { takeFocus(); } @@ -133,16 +132,16 @@ public abstract class BasicButton extends Component { dispatchEvent(ButtonEvent.create(this, this.isPressed)); } } - + public BasicButton addAction(Consumer action) { this.actions.add(Objects.requireNonNull(action, "action")); return this; } - + public boolean removeAction(Consumer action) { return this.actions.remove(action); } - + public void virtualClick() { this.actions.forEach(action -> { action.accept(this); @@ -152,5 +151,5 @@ public abstract class BasicButton extends Component { public Label getLabel() { return label; } - + } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Button.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Button.java index c41dedc..5d42241 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Button.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Button.java @@ -28,11 +28,11 @@ public class Button extends BasicButton { public Button(String name, String label, Font labelFont) { super(name, label, labelFont); } - + public Button(String name, Label label) { super(name, label); } - + public Button(String name, String label) { this(name, label, new Font()); } @@ -40,7 +40,7 @@ public class Button extends BasicButton { @Override protected void assembleSelf(RenderTarget target) { // Border - + Vec4 borderColor; if (isPressed() || isHovered() || isFocused()) { borderColor = Colors.BLUE; @@ -48,9 +48,9 @@ public class Button extends BasicButton { borderColor = Colors.LIGHT_GRAY; } target.fill(getX(), getY(), getWidth(), getHeight(), borderColor); - + // Inside area - + if (isPressed()) { // Do nothing } else { @@ -62,20 +62,20 @@ public class Button extends BasicButton { } target.fill(getX() + 2, getY() + 2, getWidth() - 4, getHeight() - 4, backgroundColor); } - + // Change label font color - + if (isPressed()) { getLabel().setFont(getLabel().getFont().withColor(Colors.WHITE)); } else { getLabel().setFont(getLabel().getFont().withColor(Colors.BLACK)); } } - + @Override protected void postAssembleSelf(RenderTarget target) { // Apply disable tint - + if (!isEnabled()) { target.fill(getX(), getY(), getWidth(), getHeight(), Colors.toVector(0x88FFFFFF)); } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Checkbox.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Checkbox.java index 5f9d0df..990ed43 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Checkbox.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Checkbox.java @@ -27,24 +27,24 @@ import ru.windcorp.progressia.client.graphics.gui.layout.LayoutAlign; import ru.windcorp.progressia.client.graphics.gui.layout.LayoutHorizontal; public class Checkbox extends BasicButton { - + private class Tick extends Component { public Tick() { super(Checkbox.this.getName() + ".Tick"); - + setPreferredSize(new Vec2i(Typefaces.getDefault().getLineHeight() * 3 / 2)); } - + @Override protected void assembleSelf(RenderTarget target) { - + int size = getPreferredSize().x; int x = getX(); int y = getY() + (getHeight() - size) / 2; - + // Border - + Vec4 borderColor; if (Checkbox.this.isPressed() || Checkbox.this.isHovered() || Checkbox.this.isFocused()) { borderColor = Colors.BLUE; @@ -52,9 +52,9 @@ public class Checkbox extends BasicButton { borderColor = Colors.LIGHT_GRAY; } target.fill(x, y, size, size, borderColor); - + // Inside area - + if (Checkbox.this.isPressed()) { // Do nothing } else { @@ -66,9 +66,9 @@ public class Checkbox extends BasicButton { } target.fill(x + 2, y + 2, size - 4, size - 4, backgroundColor); } - + // "Tick" - + if (Checkbox.this.isChecked()) { target.fill(x + 4, y + 4, size - 8, size - 8, Colors.BLUE); } @@ -81,10 +81,10 @@ public class Checkbox extends BasicButton { public Checkbox(String name, String label, Font labelFont, boolean check) { super(name, label, labelFont); this.checked = check; - + assert getChildren().size() == 1 : "Checkbox expects that BasicButton contains exactly one child"; Component basicChild = getChild(0); - + Group group = new Group(getName() + ".LabelAndTick", new LayoutHorizontal(0, 10)); removeChild(basicChild); setLayout(new LayoutAlign(0, 0.5f, 10)); @@ -92,18 +92,18 @@ public class Checkbox extends BasicButton { group.addChild(new Tick()); group.addChild(basicChild); addChild(group); - + addAction(b -> switchState()); } - + public Checkbox(String name, String label, Font labelFont) { this(name, label, labelFont, false); } - + public Checkbox(String name, String label, boolean check) { this(name, label, new Font(), check); } - + public Checkbox(String name, String label) { this(name, label, false); } @@ -111,14 +111,14 @@ public class Checkbox extends BasicButton { public void switchState() { setChecked(!isChecked()); } - + /** * @return the checked */ public boolean isChecked() { return checked; } - + /** * @param checked the checked to set */ @@ -129,21 +129,21 @@ public class Checkbox extends BasicButton { @Override protected void assembleSelf(RenderTarget target) { // Change label font color - + if (isPressed()) { getLabel().setFont(getLabel().getFont().withColor(Colors.BLUE)); } else { getLabel().setFont(getLabel().getFont().withColor(Colors.BLACK)); } } - + @Override protected void postAssembleSelf(RenderTarget target) { // Apply disable tint - + if (!isEnabled()) { target.fill(getX(), getY(), getWidth(), getHeight(), Colors.toVector(0x88FFFFFF)); } } - + } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Component.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Component.java index bb6f24d..ad4b5ba 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Component.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Component.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui; import java.util.Collections; @@ -66,7 +66,7 @@ public class Component extends Named { private Object layoutHint = null; private Layout layout = null; - + private boolean isEnabled = true; private boolean isFocusable = false; @@ -303,7 +303,7 @@ public class Component extends Named { public boolean isFocusable() { return isFocusable; } - + /** * Checks whether this component can become focused at this moment. *

@@ -460,11 +460,11 @@ public class Component extends Named { return null; } - + public boolean isEnabled() { return isEnabled; } - + /** * Enables or disables this component. An {@link EnableEvent} is dispatched * if the state changes. @@ -478,7 +478,7 @@ public class Component extends Named { if (isFocused() && isEnabled()) { focusNext(); } - + if (isEnabled()) { setHovered(false); } @@ -715,7 +715,7 @@ public class Component extends Named { protected void assembleChildren(RenderTarget target) { getChildren().forEach(child -> child.assemble(target)); } - + /* * Automatic Reassembly */ diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/DynamicLabel.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/DynamicLabel.java index bddad7b..ff62027 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/DynamicLabel.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/DynamicLabel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui; import glm.mat._4.Mat4; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/GUILayer.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/GUILayer.java index 2e0981c..9a4c648 100755 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/GUILayer.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/GUILayer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui; import ru.windcorp.progressia.client.graphics.flat.AssembledFlatLayer; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Group.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Group.java index d8a8b23..b6606fa 100755 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Group.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Group.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui; public class Group extends Component { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Label.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Label.java index 4450f33..044b5d3 100755 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Label.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Label.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui; import glm.mat._4.Mat4; @@ -82,7 +82,7 @@ public class Label extends Component { public Font getFont() { return font; } - + public void setFont(Font font) { this.font = font; requestReassembly(); diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Layout.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Layout.java index 8d5d84f..4d08ed4 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Layout.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Layout.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui; import glm.vec._2.i.Vec2i; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Panel.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Panel.java index 90357ef..a3f9feb 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Panel.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Panel.java @@ -30,43 +30,43 @@ public class Panel extends Group { public Panel(String name, Layout layout, Vec4 fill, Vec4 border) { super(name, layout); - + this.fill = Objects.requireNonNull(fill, "fill"); this.border = border; } - + public Panel(String name, Layout layout) { this(name, layout, Colors.WHITE, Colors.LIGHT_GRAY); } - + /** * @return the fill */ public Vec4 getFill() { return fill; } - + /** * @param fill the fill to set */ public void setFill(Vec4 fill) { this.fill = Objects.requireNonNull(fill, "fill"); } - + /** * @return the border */ public Vec4 getBorder() { return border; } - + /** * @param border the border to set */ public void setBorder(Vec4 border) { this.border = border; } - + @Override protected void assembleSelf(RenderTarget target) { if (border == null) { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/RadioButton.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/RadioButton.java index 471efb6..1ee7f66 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/RadioButton.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/RadioButton.java @@ -30,30 +30,30 @@ import ru.windcorp.progressia.client.graphics.gui.layout.LayoutHorizontal; import ru.windcorp.progressia.client.graphics.input.KeyEvent; public class RadioButton extends BasicButton { - + private class Tick extends Component { public Tick() { super(RadioButton.this.getName() + ".Tick"); - + setPreferredSize(new Vec2i(Typefaces.getDefault().getLineHeight() * 3 / 2)); } - + private void cross(RenderTarget target, int x, int y, int size, Vec4 color) { target.fill(x + 4, y, size - 8, size, color); target.fill(x + 2, y + 2, size - 4, size - 4, color); target.fill(x, y + 4, size, size - 8, color); } - + @Override protected void assembleSelf(RenderTarget target) { - + int size = getPreferredSize().x; int x = getX(); int y = getY() + (getHeight() - size) / 2; - + // Border - + Vec4 borderColor; if (RadioButton.this.isPressed() || RadioButton.this.isHovered() || RadioButton.this.isFocused()) { borderColor = Colors.BLUE; @@ -61,9 +61,9 @@ public class RadioButton extends BasicButton { borderColor = Colors.LIGHT_GRAY; } cross(target, x, y, size, borderColor); - + // Inside area - + if (RadioButton.this.isPressed()) { // Do nothing } else { @@ -75,9 +75,9 @@ public class RadioButton extends BasicButton { } cross(target, x + 2, y + 2, size - 4, backgroundColor); } - + // "Tick" - + if (RadioButton.this.isChecked()) { cross(target, x + 4, y + 4, size - 8, Colors.BLUE); } @@ -86,16 +86,16 @@ public class RadioButton extends BasicButton { } private boolean checked; - + private RadioButtonGroup group = null; public RadioButton(String name, String label, Font labelFont, boolean check) { super(name, label, labelFont); this.checked = check; - + assert getChildren().size() == 1 : "RadioButton expects that BasicButton contains exactly one child"; Component basicChild = getChild(0); - + Group group = new Group(getName() + ".LabelAndTick", new LayoutHorizontal(0, 10)); removeChild(basicChild); setLayout(new LayoutAlign(0, 0.5f, 10)); @@ -103,16 +103,17 @@ public class RadioButton extends BasicButton { group.addChild(new Tick()); group.addChild(basicChild); addChild(group); - + addListener(KeyEvent.class, e -> { - if (e.isRelease()) return false; - + if (e.isRelease()) + return false; + if (e.getKey() == GLFW.GLFW_KEY_LEFT || e.getKey() == GLFW.GLFW_KEY_UP) { if (this.group != null) { this.group.selectPrevious(); this.group.getSelected().takeFocus(); } - + return true; } else if (e.getKey() == GLFW.GLFW_KEY_RIGHT || e.getKey() == GLFW.GLFW_KEY_DOWN) { if (this.group != null) { @@ -121,85 +122,87 @@ public class RadioButton extends BasicButton { } return true; } - + return false; }); - + addAction(b -> setChecked(true)); } - + public RadioButton(String name, String label, Font labelFont) { this(name, label, labelFont, false); } - + public RadioButton(String name, String label, boolean check) { this(name, label, new Font(), check); } - + public RadioButton(String name, String label) { this(name, label, false); } - + /** * @param group the group to set */ public RadioButton setGroup(RadioButtonGroup group) { - + if (this.group != null) { group.selectNext(); removeAction(group.listener); group.buttons.remove(this); - group.getSelected(); // Clear reference if this was the only button in the group + group.getSelected(); // Clear reference if this was the only button + // in the group } - + this.group = group; - + if (this.group != null) { group.buttons.add(this); addAction(group.listener); } - + setChecked(false); - + return this; } - + /** * @return the checked */ public boolean isChecked() { return checked; } - + /** * @param checked the checked to set */ public void setChecked(boolean checked) { this.checked = checked; - + if (group != null) { - group.listener.accept(this); // Failsafe for manual invocations of setChecked() + group.listener.accept(this); // Failsafe for manual invocations of + // setChecked() } } @Override protected void assembleSelf(RenderTarget target) { // Change label font color - + if (isPressed()) { getLabel().setFont(getLabel().getFont().withColor(Colors.BLUE)); } else { getLabel().setFont(getLabel().getFont().withColor(Colors.BLACK)); } } - + @Override protected void postAssembleSelf(RenderTarget target) { // Apply disable tint - + if (!isEnabled()) { target.fill(getX(), getY(), getWidth(), getHeight(), Colors.toVector(0x88FFFFFF)); } } - + } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/RadioButtonGroup.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/RadioButtonGroup.java index 3887018..a8d94dc 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/RadioButtonGroup.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/RadioButtonGroup.java @@ -26,92 +26,93 @@ import java.util.function.Consumer; public class RadioButtonGroup { - private final Collection> actions = Collections.synchronizedCollection(new ArrayList<>()); + private final Collection> actions = Collections + .synchronizedCollection(new ArrayList<>()); final List buttons = Collections.synchronizedList(new ArrayList<>()); - + private RadioButton selected = null; - + Consumer listener = b -> { if (b instanceof RadioButton && ((RadioButton) b).isChecked() && buttons.contains(b)) { select((RadioButton) b); } }; - + public RadioButtonGroup addAction(Consumer action) { this.actions.add(Objects.requireNonNull(action, "action")); return this; } - + public boolean removeAction(Consumer action) { return this.actions.remove(action); } - + public List getButtons() { return Collections.unmodifiableList(buttons); } - + public synchronized RadioButton getSelected() { if (!buttons.contains(selected)) { selected = null; } return selected; } - + public synchronized void select(RadioButton button) { if (button != null && !buttons.contains(button)) { throw new IllegalArgumentException("Button " + button + " is not in the group"); } - + getSelected(); // Clear if invalid - + if (selected == button) { return; // Terminate listener-setter recursion } - + if (selected != null) { selected.setChecked(false); } - + selected = button; - + if (selected != null) { selected.setChecked(true); } - + actions.forEach(action -> action.accept(this)); } - + public void selectNext() { selectNeighbour(+1); } - + public void selectPrevious() { selectNeighbour(-1); } - + private synchronized void selectNeighbour(int direction) { if (getSelected() == null) { if (buttons.isEmpty()) { throw new IllegalStateException("Cannot select neighbour button: group empty"); } - + select(buttons.get(0)); } else { RadioButton button; int index = buttons.indexOf(selected); - + do { index += direction; - + if (index >= buttons.size()) { index = 0; } else if (index < 0) { index = buttons.size() - 1; } - + button = buttons.get(index); } while (button != getSelected() && !button.isEnabled()); - + select(button); } } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ButtonEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ButtonEvent.java index 071f06e..28c0cc3 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ButtonEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ButtonEvent.java @@ -21,26 +21,26 @@ package ru.windcorp.progressia.client.graphics.gui.event; import ru.windcorp.progressia.client.graphics.gui.BasicButton; public class ButtonEvent extends ComponentEvent { - + public static class Press extends ButtonEvent { public Press(BasicButton button) { super(button, true); } } - + public static class Release extends ButtonEvent { public Release(BasicButton button) { super(button, false); } } - + private final boolean isPress; protected ButtonEvent(BasicButton button, boolean isPress) { super(button); this.isPress = isPress; } - + public static ButtonEvent create(BasicButton button, boolean isPress) { if (isPress) { return new Press(button); @@ -56,5 +56,5 @@ public class ButtonEvent extends ComponentEvent { public boolean isRelease() { return !isPress; } - + } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ChildAddedEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ChildAddedEvent.java index f1611fe..9bbf93a 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ChildAddedEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ChildAddedEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.event; import ru.windcorp.progressia.client.graphics.gui.Component; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ChildEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ChildEvent.java index a27cf79..0d63e38 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ChildEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ChildEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.event; import ru.windcorp.progressia.client.graphics.gui.Component; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ChildRemovedEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ChildRemovedEvent.java index 897d787..ec2e46c 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ChildRemovedEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ChildRemovedEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.event; import ru.windcorp.progressia.client.graphics.gui.Component; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ComponentEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ComponentEvent.java index b1d1175..dbf6e1c 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ComponentEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ComponentEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.event; import ru.windcorp.progressia.client.graphics.gui.Component; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/EnableEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/EnableEvent.java index f56df2c..d8e5b5b 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/EnableEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/EnableEvent.java @@ -7,5 +7,5 @@ public class EnableEvent extends ComponentEvent { public EnableEvent(Component component) { super(component); } - + } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/FocusEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/FocusEvent.java index ff859f3..fe476c2 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/FocusEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/FocusEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.event; import ru.windcorp.progressia.client.graphics.gui.Component; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/HierarchyEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/HierarchyEvent.java index d3a4984..5195c7e 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/HierarchyEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/HierarchyEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.event; import ru.windcorp.progressia.client.graphics.gui.Component; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/HoverEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/HoverEvent.java index b1d63ad..1e788f9 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/HoverEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/HoverEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.event; import ru.windcorp.progressia.client.graphics.gui.Component; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ParentChangedEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ParentChangedEvent.java index a7d9d40..ca5556a 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ParentChangedEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/event/ParentChangedEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.event; import ru.windcorp.progressia.client.graphics.gui.Component; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutAlign.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutAlign.java index d521914..2fdf55d 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutAlign.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutAlign.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.layout; import static java.lang.Math.max; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutBorderHorizontal.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutBorderHorizontal.java index 3e271de..2be127e 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutBorderHorizontal.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutBorderHorizontal.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.layout; import static java.lang.Math.max; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutBorderVertical.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutBorderVertical.java index 0efcaa4..4584362 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutBorderVertical.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutBorderVertical.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.layout; import static java.lang.Math.max; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutFill.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutFill.java index c65fc4a..c0c448a 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutFill.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutFill.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.layout; import static java.lang.Math.max; @@ -27,7 +27,7 @@ import ru.windcorp.progressia.client.graphics.gui.Layout; public class LayoutFill implements Layout { private final int margin; - + public LayoutFill(int margin) { this.margin = margin; } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutGrid.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutGrid.java index a164378..02a519f 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutGrid.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutGrid.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.layout; import java.util.Arrays; @@ -97,15 +97,15 @@ public class LayoutGrid implements Layout { void setBounds(int column, int row, Component child, Component parent) { if (!isSummed) throw new IllegalStateException("Not summed yet"); - + int width, height; - + if (column == columns.length - 1) { width = parent.getWidth() - margin - columns[column]; } else { width = columns[column + 1] - columns[column] - gap; } - + if (row == rows.length - 1) { height = parent.getHeight() - margin - rows[row]; } else { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutHorizontal.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutHorizontal.java index 85c37fa..fc940c3 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutHorizontal.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutHorizontal.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.layout; import static java.lang.Math.max; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutVertical.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutVertical.java index 6e48d69..25c87ae 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutVertical.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/layout/LayoutVertical.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.gui.layout; import static java.lang.Math.max; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/menu/MenuLayer.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/menu/MenuLayer.java index 4fa155c..7d6fff1 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/menu/MenuLayer.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/menu/MenuLayer.java @@ -41,47 +41,47 @@ public class MenuLayer extends GUILayer { private final Component content; private final Component background; - + private final Runnable closeAction = () -> { GUI.removeLayer(this); }; - + public MenuLayer(String name, Component content) { super(name, new LayoutFill(0)); - + setCursorPolicy(CursorPolicy.REQUIRE); - + this.background = new Panel(name + ".Background", new LayoutAlign(10), Colors.toVector(0x66000000), null); this.content = content; - + background.addChild(content); getRoot().addChild(background); } - + public MenuLayer(String name, Layout contentLayout) { this(name, new Panel(name + ".Content", contentLayout)); } - + public MenuLayer(String name) { this(name, new LayoutVertical(20, 10)); } - + public Component getContent() { return content; } - + public Component getBackground() { return background; } - + protected void addTitle() { String translationKey = "Layer" + getName() + ".Title"; MutableString titleText = new MutableStringLocalized(translationKey); Font titleFont = new Font().deriveBold().withColor(Colors.BLACK).withAlign(0.5f); - + Label label = new Label(getName() + ".Title", titleFont, titleText); getContent().addChild(label); - + Panel panel = new Panel(getName() + ".Title.Underscore", null, Colors.BLUE, null); panel.setLayout(new LayoutFill() { @Override @@ -91,17 +91,17 @@ public class MenuLayer extends GUILayer { }); getContent().addChild(panel); } - + protected Runnable getCloseAction() { return closeAction; } - + @Override protected void handleInput(Input input) { - + if (!input.isConsumed()) { InputEvent event = input.getEvent(); - + if (event instanceof KeyEvent) { KeyEvent keyEvent = (KeyEvent) event; if (keyEvent.isPress() && keyEvent.getKey() == GLFW.GLFW_KEY_ESCAPE) { @@ -109,9 +109,9 @@ public class MenuLayer extends GUILayer { } } } - + super.handleInput(input); input.consume(); } - + } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/input/CursorEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/input/CursorEvent.java index 43dd965..8bc480b 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/input/CursorEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/input/CursorEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.input; import glm.vec._2.d.Vec2d; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/input/CursorMoveEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/input/CursorMoveEvent.java index c87fc62..d23af54 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/input/CursorMoveEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/input/CursorMoveEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.input; import glm.vec._2.Vec2; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/input/FrameResizeEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/input/FrameResizeEvent.java index 5589158..70c9870 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/input/FrameResizeEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/input/FrameResizeEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.input; import glm.vec._2.i.Vec2i; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/input/InputEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/input/InputEvent.java index b0c2483..dc8a187 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/input/InputEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/input/InputEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.input; public abstract class InputEvent { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/input/KeyEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/input/KeyEvent.java index 291b89e..8df55be 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/input/KeyEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/input/KeyEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.input; import org.lwjgl.glfw.GLFW; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/input/KeyMatcher.java b/src/main/java/ru/windcorp/progressia/client/graphics/input/KeyMatcher.java index 6fedcd6..6073a7b 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/input/KeyMatcher.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/input/KeyMatcher.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.input; import java.util.function.Predicate; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/input/Keys.java b/src/main/java/ru/windcorp/progressia/client/graphics/input/Keys.java index 3904f59..aa8940c 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/input/Keys.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/input/Keys.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.input; import java.lang.reflect.Field; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/input/WheelEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/input/WheelEvent.java index 24938c3..80c5282 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/input/WheelEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/input/WheelEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.input; public abstract class WheelEvent extends InputEvent { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/input/WheelScrollEvent.java b/src/main/java/ru/windcorp/progressia/client/graphics/input/WheelScrollEvent.java index 968ff64..0ba2d2b 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/input/WheelScrollEvent.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/input/WheelScrollEvent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.input; import glm.vec._2.d.Vec2d; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/input/bus/Input.java b/src/main/java/ru/windcorp/progressia/client/graphics/input/bus/Input.java index 1aad6bb..46da738 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/input/bus/Input.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/input/bus/Input.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.input.bus; import ru.windcorp.progressia.client.graphics.input.InputEvent; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/input/bus/InputBus.java b/src/main/java/ru/windcorp/progressia/client/graphics/input/bus/InputBus.java index a22a243..233540a 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/input/bus/InputBus.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/input/bus/InputBus.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.input.bus; import java.util.ArrayList; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/input/bus/InputListener.java b/src/main/java/ru/windcorp/progressia/client/graphics/input/bus/InputListener.java index 0d68b5e..f6e3811 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/input/bus/InputListener.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/input/bus/InputListener.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.input.bus; import ru.windcorp.progressia.client.graphics.input.InputEvent; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/BlockFaceVectors.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/BlockFaceVectors.java index 3b929c0..9b3abf9 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/BlockFaceVectors.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/BlockFaceVectors.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.model; import static ru.windcorp.progressia.common.world.block.BlockFace.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/DynamicModel.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/DynamicModel.java index 9460bd7..fb0e47d 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/DynamicModel.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/DynamicModel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.model; import java.util.ArrayList; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/EmptyModel.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/EmptyModel.java index f9cff67..f3e40a0 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/EmptyModel.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/EmptyModel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.model; import glm.mat._4.Mat4; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/Face.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/Face.java index 79da464..6b21711 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/Face.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/Face.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.model; import java.nio.ByteBuffer; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/FaceGroup.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/FaceGroup.java index ee91544..9df04df 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/FaceGroup.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/FaceGroup.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.model; import ru.windcorp.progressia.client.graphics.texture.Texture; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/Faces.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/Faces.java index d1e9c07..f685644 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/Faces.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/Faces.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.model; import java.nio.ShortBuffer; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/LambdaModel.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/LambdaModel.java index 0ae31bf..3f0d97d 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/LambdaModel.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/LambdaModel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.model; import java.util.ArrayList; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/Model.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/Model.java index 47cd88b..5e59007 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/Model.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/Model.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.model; import glm.mat._4.Mat4; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/Renderable.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/Renderable.java index 6063685..b379b75 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/Renderable.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/Renderable.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.model; public interface Renderable { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/Shape.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/Shape.java index 145b149..3a29c74 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/Shape.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/Shape.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.model; import java.nio.ByteBuffer; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/ShapeRenderHelper.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/ShapeRenderHelper.java index 67578f6..b950d06 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/ShapeRenderHelper.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/ShapeRenderHelper.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.model; import glm.mat._4.Mat4; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/ShapeRenderProgram.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/ShapeRenderProgram.java index e27bc77..d2f0e3a 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/ShapeRenderProgram.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/ShapeRenderProgram.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.model; import java.nio.ByteBuffer; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/Shapes.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/Shapes.java index 7ddd5d6..e1b2838 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/Shapes.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/Shapes.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.model; import java.util.Map; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/StaticModel.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/StaticModel.java index 4c489d3..32b7a8c 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/StaticModel.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/StaticModel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.model; import java.util.ArrayList; @@ -78,7 +78,7 @@ public class StaticModel extends Model { private Mat4[] getTransforms() { return transforms.toArray(new Mat4[transforms.size()]); } - + public StaticModel build() { return new StaticModel(getParts(), getTransforms()); } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/texture/Atlases.java b/src/main/java/ru/windcorp/progressia/client/graphics/texture/Atlases.java index 94ed270..26a171d 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/texture/Atlases.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/texture/Atlases.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.texture; import java.io.IOException; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/texture/ComplexTexture.java b/src/main/java/ru/windcorp/progressia/client/graphics/texture/ComplexTexture.java index a4f2881..9800508 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/texture/ComplexTexture.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/texture/ComplexTexture.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.texture; import java.util.Map; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/texture/SimpleTexture.java b/src/main/java/ru/windcorp/progressia/client/graphics/texture/SimpleTexture.java index d772faa..f631f54 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/texture/SimpleTexture.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/texture/SimpleTexture.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.texture; public class SimpleTexture extends Texture { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/texture/SimpleTextures.java b/src/main/java/ru/windcorp/progressia/client/graphics/texture/SimpleTextures.java index 12db086..f98b92d 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/texture/SimpleTextures.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/texture/SimpleTextures.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.texture; import java.io.IOException; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/texture/Sprite.java b/src/main/java/ru/windcorp/progressia/client/graphics/texture/Sprite.java index fc13896..9655295 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/texture/Sprite.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/texture/Sprite.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.texture; import java.util.Objects; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/texture/Texture.java b/src/main/java/ru/windcorp/progressia/client/graphics/texture/Texture.java index a4d89bf..3041679 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/texture/Texture.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/texture/Texture.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.texture; public abstract class Texture { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureData.java b/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureData.java index 0453984..cc04c45 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureData.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureData.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.texture; import static org.lwjgl.opengl.GL11.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureDataEditor.java b/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureDataEditor.java index 7079f59..8a7f5c3 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureDataEditor.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureDataEditor.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.texture; import static ru.windcorp.progressia.client.graphics.texture.TextureUtil.BYTES_PER_PIXEL; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureLoader.java b/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureLoader.java index 18f2326..6b2ffdf 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureLoader.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureLoader.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.texture; import java.awt.Graphics2D; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/texture/TexturePrimitive.java b/src/main/java/ru/windcorp/progressia/client/graphics/texture/TexturePrimitive.java index a1895bb..62c981b 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/texture/TexturePrimitive.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/texture/TexturePrimitive.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.texture; import static org.lwjgl.opengl.GL11.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureSettings.java b/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureSettings.java index 3dd43a4..0b75742 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureSettings.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureSettings.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.texture; public class TextureSettings { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureUtil.java b/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureUtil.java index ea0fdee..adc5b9d 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureUtil.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/texture/TextureUtil.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.texture; import java.awt.Color; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/world/Camera.java b/src/main/java/ru/windcorp/progressia/client/graphics/world/Camera.java index 46b551c..58c84c1 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/world/Camera.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/world/Camera.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.world; import static java.lang.Math.*; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/world/EntityAnchor.java b/src/main/java/ru/windcorp/progressia/client/graphics/world/EntityAnchor.java index d11ea92..b927133 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/world/EntityAnchor.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/world/EntityAnchor.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.world; import java.util.Collection; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/world/LayerWorld.java b/src/main/java/ru/windcorp/progressia/client/graphics/world/LayerWorld.java index 50709ac..72c9a2b 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/world/LayerWorld.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/world/LayerWorld.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.world; import java.util.ArrayList; @@ -57,7 +57,7 @@ public class LayerWorld extends Layer { super("World"); this.client = client; this.inputBasedControls = new InputBasedControls(client); - + setCursorPolicy(CursorPolicy.FORBID); } diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/world/LocalPlayer.java b/src/main/java/ru/windcorp/progressia/client/graphics/world/LocalPlayer.java index 620185b..7a4443a 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/world/LocalPlayer.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/world/LocalPlayer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.world; import ru.windcorp.progressia.client.Client; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/world/Selection.java b/src/main/java/ru/windcorp/progressia/client/graphics/world/Selection.java index cd4ba29..3d997ee 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/world/Selection.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/world/Selection.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.world; import glm.vec._2.Vec2; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/world/WorldRenderHelper.java b/src/main/java/ru/windcorp/progressia/client/graphics/world/WorldRenderHelper.java index de17238..b735876 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/world/WorldRenderHelper.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/world/WorldRenderHelper.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.world; import glm.mat._4.Mat4; diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/world/WorldRenderProgram.java b/src/main/java/ru/windcorp/progressia/client/graphics/world/WorldRenderProgram.java index 5e55297..75a6372 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/world/WorldRenderProgram.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/world/WorldRenderProgram.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.graphics.world; import java.nio.ByteBuffer; diff --git a/src/main/java/ru/windcorp/progressia/client/localization/LocaleListener.java b/src/main/java/ru/windcorp/progressia/client/localization/LocaleListener.java index b7c1f54..8e06d9f 100644 --- a/src/main/java/ru/windcorp/progressia/client/localization/LocaleListener.java +++ b/src/main/java/ru/windcorp/progressia/client/localization/LocaleListener.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.localization; @FunctionalInterface diff --git a/src/main/java/ru/windcorp/progressia/client/localization/Localizer.java b/src/main/java/ru/windcorp/progressia/client/localization/Localizer.java index b61d000..70ad714 100644 --- a/src/main/java/ru/windcorp/progressia/client/localization/Localizer.java +++ b/src/main/java/ru/windcorp/progressia/client/localization/Localizer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.localization; import java.lang.ref.WeakReference; diff --git a/src/main/java/ru/windcorp/progressia/client/localization/MutableString.java b/src/main/java/ru/windcorp/progressia/client/localization/MutableString.java index a96d804..702aafa 100644 --- a/src/main/java/ru/windcorp/progressia/client/localization/MutableString.java +++ b/src/main/java/ru/windcorp/progressia/client/localization/MutableString.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.localization; import java.lang.ref.WeakReference; diff --git a/src/main/java/ru/windcorp/progressia/client/localization/MutableStringConcat.java b/src/main/java/ru/windcorp/progressia/client/localization/MutableStringConcat.java index f31fbca..e16533e 100644 --- a/src/main/java/ru/windcorp/progressia/client/localization/MutableStringConcat.java +++ b/src/main/java/ru/windcorp/progressia/client/localization/MutableStringConcat.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.localization; public class MutableStringConcat extends MutableString { diff --git a/src/main/java/ru/windcorp/progressia/client/localization/MutableStringFormatter.java b/src/main/java/ru/windcorp/progressia/client/localization/MutableStringFormatter.java index fddba06..07fad9d 100644 --- a/src/main/java/ru/windcorp/progressia/client/localization/MutableStringFormatter.java +++ b/src/main/java/ru/windcorp/progressia/client/localization/MutableStringFormatter.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.localization; import java.util.IllegalFormatException; diff --git a/src/main/java/ru/windcorp/progressia/client/localization/MutableStringFunc.java b/src/main/java/ru/windcorp/progressia/client/localization/MutableStringFunc.java index d945618..82ae330 100644 --- a/src/main/java/ru/windcorp/progressia/client/localization/MutableStringFunc.java +++ b/src/main/java/ru/windcorp/progressia/client/localization/MutableStringFunc.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.localization; import java.util.function.Function; diff --git a/src/main/java/ru/windcorp/progressia/client/localization/MutableStringLocalized.java b/src/main/java/ru/windcorp/progressia/client/localization/MutableStringLocalized.java index 583d9e5..32a6d68 100644 --- a/src/main/java/ru/windcorp/progressia/client/localization/MutableStringLocalized.java +++ b/src/main/java/ru/windcorp/progressia/client/localization/MutableStringLocalized.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.localization; public class MutableStringLocalized extends MutableString { diff --git a/src/main/java/ru/windcorp/progressia/client/localization/MutableStringParented.java b/src/main/java/ru/windcorp/progressia/client/localization/MutableStringParented.java index d7b0fae..fd6c8fd 100644 --- a/src/main/java/ru/windcorp/progressia/client/localization/MutableStringParented.java +++ b/src/main/java/ru/windcorp/progressia/client/localization/MutableStringParented.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.localization; public abstract class MutableStringParented extends MutableString { diff --git a/src/main/java/ru/windcorp/progressia/client/localization/Parser.java b/src/main/java/ru/windcorp/progressia/client/localization/Parser.java index 7d587dc..d39e574 100644 --- a/src/main/java/ru/windcorp/progressia/client/localization/Parser.java +++ b/src/main/java/ru/windcorp/progressia/client/localization/Parser.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.localization; import ru.windcorp.jputil.chars.EscapeException; diff --git a/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java b/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java index 21f6098..b4e4316 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java +++ b/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world; import java.util.Collections; diff --git a/src/main/java/ru/windcorp/progressia/client/world/ChunkRenderModel.java b/src/main/java/ru/windcorp/progressia/client/world/ChunkRenderModel.java index 9653abe..ffd3b77 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/ChunkRenderModel.java +++ b/src/main/java/ru/windcorp/progressia/client/world/ChunkRenderModel.java @@ -39,9 +39,9 @@ import ru.windcorp.progressia.common.world.ChunkData; import ru.windcorp.progressia.common.world.block.BlockFace; public class ChunkRenderModel implements Renderable { - + private final ChunkRender chunk; - + private final Collection optimizers = new ArrayList<>(); private Model model = null; @@ -51,8 +51,9 @@ public class ChunkRenderModel implements Renderable { @Override public void render(ShapeRenderHelper renderer) { - if (model == null) return; - + if (model == null) + return; + renderer.pushTransform().translate( chunk.getX() * ChunkData.BLOCKS_PER_CHUNK, chunk.getY() * ChunkData.BLOCKS_PER_CHUNK, @@ -63,32 +64,32 @@ public class ChunkRenderModel implements Renderable { renderer.popTransform(); } - + public void update() { setupCROs(); - + StaticModel.Builder sink = StaticModel.builder(); - + optimizers.forEach(ChunkRenderOptimizer::startRender); - + chunk.forEachBiC(blockInChunk -> { processBlockAndTiles(blockInChunk, sink); }); - + for (ChunkRenderOptimizer optimizer : optimizers) { Renderable renderable = optimizer.endRender(); if (renderable != null) { sink.addPart(renderable); } } - + this.model = sink.build(); this.optimizers.clear(); } private void setupCROs() { Set ids = ChunkRenderOptimizerRegistry.getInstance().keySet(); - + for (String id : ids) { ChunkRenderOptimizer optimizer = ChunkRenderOptimizerRegistry.getInstance().create(id); optimizer.setup(chunk); @@ -98,7 +99,7 @@ public class ChunkRenderModel implements Renderable { private void processBlockAndTiles(Vec3i blockInChunk, Builder sink) { processBlock(blockInChunk, sink); - + for (BlockFace face : BlockFace.getFaces()) { processTileStack(blockInChunk, face, sink); } @@ -106,18 +107,18 @@ public class ChunkRenderModel implements Renderable { private void processBlock(Vec3i blockInChunk, Builder sink) { BlockRender block = chunk.getBlock(blockInChunk); - + if (block instanceof BlockRenderNone) { return; } - + if (block.needsOwnRenderable()) { sink.addPart( - block.createRenderable(chunk.getData(), blockInChunk), + block.createRenderable(chunk.getData(), blockInChunk), new Mat4().identity().translate(blockInChunk.x, blockInChunk.y, blockInChunk.z) ); } - + processBlockWithCROs(block, blockInChunk); } @@ -129,26 +130,26 @@ public class ChunkRenderModel implements Renderable { private void processTileStack(Vec3i blockInChunk, BlockFace face, Builder sink) { TileRenderStack trs = chunk.getTilesOrNull(blockInChunk, face); - + if (trs == null || trs.isEmpty()) { return; } - + trs.forEach(tile -> processTile(tile, blockInChunk, face, sink)); } - private void processTile(TileRender tile, Vec3i blockInChunk, BlockFace face, Builder sink) { + private void processTile(TileRender tile, Vec3i blockInChunk, BlockFace face, Builder sink) { if (tile instanceof TileRenderNone) { return; } - + if (tile.needsOwnRenderable()) { sink.addPart( - tile.createRenderable(chunk.getData(), blockInChunk, face), + tile.createRenderable(chunk.getData(), blockInChunk, face), new Mat4().identity().translate(blockInChunk.x, blockInChunk.y, blockInChunk.z) ); } - + processTileWithCROs(tile, blockInChunk, face); } diff --git a/src/main/java/ru/windcorp/progressia/client/world/ChunkUpdateListener.java b/src/main/java/ru/windcorp/progressia/client/world/ChunkUpdateListener.java index c348498..ee606af 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/ChunkUpdateListener.java +++ b/src/main/java/ru/windcorp/progressia/client/world/ChunkUpdateListener.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world; import glm.vec._3.i.Vec3i; @@ -39,7 +39,7 @@ class ChunkUpdateListener implements ChunkDataListener { public void onChunkChanged(ChunkData chunk) { world.getChunk(chunk).markForUpdate(); } - + @Override public void onChunkLoaded(ChunkData chunk) { Vec3i cursor = new Vec3i(); @@ -49,12 +49,12 @@ class ChunkUpdateListener implements ChunkDataListener { world.markChunkForUpdate(cursor); } } - + @Override public void onChunkBlockChanged(ChunkData chunk, Vec3i blockInChunk, BlockData previous, BlockData current) { onLocationChanged(chunk, blockInChunk); } - + @Override public void onChunkTilesChanged( ChunkData chunk, @@ -68,18 +68,18 @@ class ChunkUpdateListener implements ChunkDataListener { private void onLocationChanged(ChunkData chunk, Vec3i blockInChunk) { Vec3i chunkPos = Vectors.grab3i().set(chunk.getX(), chunk.getY(), chunk.getZ()); - + checkCoordinate(blockInChunk, chunkPos, VectorUtil.Axis.X); checkCoordinate(blockInChunk, chunkPos, VectorUtil.Axis.Y); checkCoordinate(blockInChunk, chunkPos, VectorUtil.Axis.Z); - + Vectors.release(chunkPos); } private void checkCoordinate(Vec3i blockInChunk, Vec3i chunkPos, VectorUtil.Axis axis) { int block = VectorUtil.get(blockInChunk, axis); int diff = 0; - + if (block == 0) { diff = -1; } else if (block == ChunkData.BLOCKS_PER_CHUNK - 1) { @@ -87,12 +87,12 @@ class ChunkUpdateListener implements ChunkDataListener { } else { return; } - + int previousChunkPos = VectorUtil.get(chunkPos, axis); VectorUtil.set(chunkPos, axis, previousChunkPos + diff); world.markChunkForUpdate(chunkPos); - + VectorUtil.set(chunkPos, axis, previousChunkPos); } diff --git a/src/main/java/ru/windcorp/progressia/client/world/WorldRender.java b/src/main/java/ru/windcorp/progressia/client/world/WorldRender.java index 8be08c2..a83ee32 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/WorldRender.java +++ b/src/main/java/ru/windcorp/progressia/client/world/WorldRender.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world; import java.util.Collection; diff --git a/src/main/java/ru/windcorp/progressia/client/world/block/BlockRender.java b/src/main/java/ru/windcorp/progressia/client/world/block/BlockRender.java index d350fa8..6c3f939 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/block/BlockRender.java +++ b/src/main/java/ru/windcorp/progressia/client/world/block/BlockRender.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.block; import ru.windcorp.progressia.client.graphics.model.ShapeRenderHelper; diff --git a/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderNone.java b/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderNone.java index 84a2c4b..3f422f2 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderNone.java +++ b/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderNone.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.block; import glm.vec._3.i.Vec3i; diff --git a/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderOpaqueCube.java b/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderOpaqueCube.java index e4d8723..e753667 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderOpaqueCube.java +++ b/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderOpaqueCube.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.block; import ru.windcorp.progressia.client.graphics.texture.Texture; diff --git a/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderRegistry.java b/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderRegistry.java index 29bac40..5724d27 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderRegistry.java +++ b/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.block; import ru.windcorp.progressia.client.graphics.texture.Atlases; diff --git a/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderTexturedCube.java b/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderTexturedCube.java index 1042a46..d410a52 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderTexturedCube.java +++ b/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderTexturedCube.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.block; import static ru.windcorp.progressia.common.world.block.BlockFace.*; @@ -68,23 +68,27 @@ public abstract class BlockRenderTexturedCube public Texture getTexture(BlockFace blockFace) { return textures.get(blockFace); } - + public Vec4 getColorMultiplier(BlockFace blockFace) { return Colors.WHITE; } @Override public final void getFaces( - ChunkData chunk, Vec3i blockInChunk, BlockFace blockFace, + ChunkData chunk, + Vec3i blockInChunk, + BlockFace blockFace, boolean inner, Consumer output, Vec3 offset ) { output.accept(createFace(chunk, blockInChunk, blockFace, inner, offset)); } - + private Face createFace( - ChunkData chunk, Vec3i blockInChunk, BlockFace blockFace, + ChunkData chunk, + Vec3i blockInChunk, + BlockFace blockFace, boolean inner, Vec3 offset ) { @@ -101,19 +105,25 @@ public abstract class BlockRenderTexturedCube @Override public Renderable createRenderable(ChunkData chunk, Vec3i blockInChunk) { boolean opaque = isBlockOpaque(); - + Face[] faces = new Face[BLOCK_FACE_COUNT + (opaque ? BLOCK_FACE_COUNT : 0)]; - + for (int i = 0; i < BLOCK_FACE_COUNT; ++i) { faces[i] = createFace(chunk, blockInChunk, BlockFace.getFaces().get(i), false, Vectors.ZERO_3); } - + if (!opaque) { for (int i = 0; i < BLOCK_FACE_COUNT; ++i) { - faces[i + BLOCK_FACE_COUNT] = createFace(chunk, blockInChunk, BlockFace.getFaces().get(i), true, Vectors.ZERO_3); + faces[i + BLOCK_FACE_COUNT] = createFace( + chunk, + blockInChunk, + BlockFace.getFaces().get(i), + true, + Vectors.ZERO_3 + ); } } - + return new Shape(Usage.STATIC, WorldRenderProgram.getDefault(), faces); } diff --git a/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderTransparentCube.java b/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderTransparentCube.java index 7f3df03..02b8b45 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderTransparentCube.java +++ b/src/main/java/ru/windcorp/progressia/client/world/block/BlockRenderTransparentCube.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.block; import ru.windcorp.progressia.client.graphics.texture.Texture; diff --git a/src/main/java/ru/windcorp/progressia/client/world/cro/ChunkRenderOptimizerRegistry.java b/src/main/java/ru/windcorp/progressia/client/world/cro/ChunkRenderOptimizerRegistry.java index 7e4dc87..7676b4f 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/cro/ChunkRenderOptimizerRegistry.java +++ b/src/main/java/ru/windcorp/progressia/client/world/cro/ChunkRenderOptimizerRegistry.java @@ -15,15 +15,15 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.cro; import ru.windcorp.progressia.common.util.namespaces.NamespacedFactoryRegistry; public class ChunkRenderOptimizerRegistry extends NamespacedFactoryRegistry { - + private static final ChunkRenderOptimizerRegistry INSTANCE = new ChunkRenderOptimizerRegistry(); - + /** * @return the instance */ diff --git a/src/main/java/ru/windcorp/progressia/client/world/entity/EntityRender.java b/src/main/java/ru/windcorp/progressia/client/world/entity/EntityRender.java index 13a2b24..8243c9d 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/entity/EntityRender.java +++ b/src/main/java/ru/windcorp/progressia/client/world/entity/EntityRender.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.entity; import ru.windcorp.progressia.common.util.namespaces.Namespaced; diff --git a/src/main/java/ru/windcorp/progressia/client/world/entity/EntityRenderRegistry.java b/src/main/java/ru/windcorp/progressia/client/world/entity/EntityRenderRegistry.java index 60b7bf6..1ffdda5 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/entity/EntityRenderRegistry.java +++ b/src/main/java/ru/windcorp/progressia/client/world/entity/EntityRenderRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.entity; import java.io.IOException; diff --git a/src/main/java/ru/windcorp/progressia/client/world/entity/EntityRenderable.java b/src/main/java/ru/windcorp/progressia/client/world/entity/EntityRenderable.java index eecaa16..361f7cd 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/entity/EntityRenderable.java +++ b/src/main/java/ru/windcorp/progressia/client/world/entity/EntityRenderable.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.entity; import glm.vec._3.Vec3; diff --git a/src/main/java/ru/windcorp/progressia/client/world/entity/HumanoidModel.java b/src/main/java/ru/windcorp/progressia/client/world/entity/HumanoidModel.java index 1609bfc..96704f3 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/entity/HumanoidModel.java +++ b/src/main/java/ru/windcorp/progressia/client/world/entity/HumanoidModel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.entity; import static java.lang.Math.*; diff --git a/src/main/java/ru/windcorp/progressia/client/world/entity/NPedModel.java b/src/main/java/ru/windcorp/progressia/client/world/entity/NPedModel.java index ead6565..05986e5 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/entity/NPedModel.java +++ b/src/main/java/ru/windcorp/progressia/client/world/entity/NPedModel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.entity; import static java.lang.Math.atan2; diff --git a/src/main/java/ru/windcorp/progressia/client/world/entity/QuadripedModel.java b/src/main/java/ru/windcorp/progressia/client/world/entity/QuadripedModel.java index 8755b08..b586744 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/entity/QuadripedModel.java +++ b/src/main/java/ru/windcorp/progressia/client/world/entity/QuadripedModel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.entity; import static java.lang.Math.*; diff --git a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRender.java b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRender.java index 4f82d86..6b6163b 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRender.java +++ b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRender.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.tile; import ru.windcorp.progressia.client.graphics.model.ShapeRenderHelper; diff --git a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderGrass.java b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderGrass.java index c73647b..762fcf4 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderGrass.java +++ b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderGrass.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.tile; import ru.windcorp.progressia.client.graphics.texture.Texture; diff --git a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderNone.java b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderNone.java index 8e2a6e4..56ea3cb 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderNone.java +++ b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderNone.java @@ -28,12 +28,12 @@ public class TileRenderNone extends TileRender { public TileRenderNone(String id) { super(id); } - + @Override public Renderable createRenderable(ChunkData chunk, Vec3i blockInChunk, BlockFace face) { return EmptyModel.getInstance(); } - + @Override public boolean needsOwnRenderable() { return false; diff --git a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderOpaqueSurface.java b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderOpaqueSurface.java index e4990e8..bcc9df5 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderOpaqueSurface.java +++ b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderOpaqueSurface.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.tile; import ru.windcorp.progressia.client.graphics.texture.Texture; diff --git a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderRegistry.java b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderRegistry.java index b240933..499db0e 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderRegistry.java +++ b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.tile; import ru.windcorp.progressia.client.graphics.texture.Atlases; diff --git a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderStack.java b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderStack.java index 6bb8fb0..10b0757 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderStack.java +++ b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderStack.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.tile; import ru.windcorp.progressia.client.world.ChunkRender; diff --git a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderSurface.java b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderSurface.java index eebcb07..417bdbe 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderSurface.java +++ b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderSurface.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.tile; import java.util.function.Consumer; @@ -44,7 +44,7 @@ public abstract class TileRenderSurface extends TileRender implements TileOptimi super(id); this.texture = texture; } - + public TileRenderSurface(String id) { this(id, null); } @@ -52,23 +52,27 @@ public abstract class TileRenderSurface extends TileRender implements TileOptimi public Texture getTexture(BlockFace blockFace) { return texture; } - + public Vec4 getColorMultiplier(BlockFace blockFace) { return Colors.WHITE; } - + @Override public final void getFaces( - ChunkData chunk, Vec3i blockInChunk, BlockFace blockFace, + ChunkData chunk, + Vec3i blockInChunk, + BlockFace blockFace, boolean inner, Consumer output, Vec3 offset ) { output.accept(createFace(chunk, blockInChunk, blockFace, inner, offset)); } - + private Face createFace( - ChunkData chunk, Vec3i blockInChunk, BlockFace blockFace, + ChunkData chunk, + Vec3i blockInChunk, + BlockFace blockFace, boolean inner, Vec3 offset ) { @@ -87,9 +91,9 @@ public abstract class TileRenderSurface extends TileRender implements TileOptimi return new Shape( Usage.STATIC, WorldRenderProgram.getDefault(), - + createFace(chunk, blockInChunk, blockFace, false, Vectors.ZERO_3), - createFace(chunk, blockInChunk, blockFace, true, Vectors.ZERO_3) + createFace(chunk, blockInChunk, blockFace, true, Vectors.ZERO_3) ); } diff --git a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderTransparentSurface.java b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderTransparentSurface.java index b35986e..af512a9 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderTransparentSurface.java +++ b/src/main/java/ru/windcorp/progressia/client/world/tile/TileRenderTransparentSurface.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.client.world.tile; import ru.windcorp.progressia.client.graphics.texture.Texture; diff --git a/src/main/java/ru/windcorp/progressia/common/Units.java b/src/main/java/ru/windcorp/progressia/common/Units.java index 842e378..979cc2d 100644 --- a/src/main/java/ru/windcorp/progressia/common/Units.java +++ b/src/main/java/ru/windcorp/progressia/common/Units.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common; import java.lang.annotation.ElementType; diff --git a/src/main/java/ru/windcorp/progressia/common/collision/AABB.java b/src/main/java/ru/windcorp/progressia/common/collision/AABB.java index fd8ffe9..3ecb58f 100644 --- a/src/main/java/ru/windcorp/progressia/common/collision/AABB.java +++ b/src/main/java/ru/windcorp/progressia/common/collision/AABB.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.collision; import glm.vec._3.Vec3; diff --git a/src/main/java/ru/windcorp/progressia/common/collision/AABBoid.java b/src/main/java/ru/windcorp/progressia/common/collision/AABBoid.java index ab2cd80..04312f1 100644 --- a/src/main/java/ru/windcorp/progressia/common/collision/AABBoid.java +++ b/src/main/java/ru/windcorp/progressia/common/collision/AABBoid.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.collision; import glm.vec._3.Vec3; diff --git a/src/main/java/ru/windcorp/progressia/common/collision/Collideable.java b/src/main/java/ru/windcorp/progressia/common/collision/Collideable.java index 8db7805..d96a472 100644 --- a/src/main/java/ru/windcorp/progressia/common/collision/Collideable.java +++ b/src/main/java/ru/windcorp/progressia/common/collision/Collideable.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.collision; import glm.vec._3.Vec3; diff --git a/src/main/java/ru/windcorp/progressia/common/collision/CollisionModel.java b/src/main/java/ru/windcorp/progressia/common/collision/CollisionModel.java index 9ade6af..209063a 100644 --- a/src/main/java/ru/windcorp/progressia/common/collision/CollisionModel.java +++ b/src/main/java/ru/windcorp/progressia/common/collision/CollisionModel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.collision; import glm.vec._3.Vec3; diff --git a/src/main/java/ru/windcorp/progressia/common/collision/CollisionPathComputer.java b/src/main/java/ru/windcorp/progressia/common/collision/CollisionPathComputer.java index 4826bce..2f9598b 100644 --- a/src/main/java/ru/windcorp/progressia/common/collision/CollisionPathComputer.java +++ b/src/main/java/ru/windcorp/progressia/common/collision/CollisionPathComputer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.collision; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/common/collision/CompoundCollisionModel.java b/src/main/java/ru/windcorp/progressia/common/collision/CompoundCollisionModel.java index 6f5ec24..a91dfdf 100644 --- a/src/main/java/ru/windcorp/progressia/common/collision/CompoundCollisionModel.java +++ b/src/main/java/ru/windcorp/progressia/common/collision/CompoundCollisionModel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.collision; import java.util.Collection; diff --git a/src/main/java/ru/windcorp/progressia/common/collision/TransformedCollisionModel.java b/src/main/java/ru/windcorp/progressia/common/collision/TransformedCollisionModel.java index 96bfbee..9622423 100644 --- a/src/main/java/ru/windcorp/progressia/common/collision/TransformedCollisionModel.java +++ b/src/main/java/ru/windcorp/progressia/common/collision/TransformedCollisionModel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.collision; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/common/collision/TranslatedAABB.java b/src/main/java/ru/windcorp/progressia/common/collision/TranslatedAABB.java index 4c33ad2..fd94cfc 100644 --- a/src/main/java/ru/windcorp/progressia/common/collision/TranslatedAABB.java +++ b/src/main/java/ru/windcorp/progressia/common/collision/TranslatedAABB.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.collision; import glm.vec._3.Vec3; diff --git a/src/main/java/ru/windcorp/progressia/common/collision/Wall.java b/src/main/java/ru/windcorp/progressia/common/collision/Wall.java index 91ca006..91e9f72 100644 --- a/src/main/java/ru/windcorp/progressia/common/collision/Wall.java +++ b/src/main/java/ru/windcorp/progressia/common/collision/Wall.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.collision; import glm.vec._3.Vec3; diff --git a/src/main/java/ru/windcorp/progressia/common/collision/WorldCollisionHelper.java b/src/main/java/ru/windcorp/progressia/common/collision/WorldCollisionHelper.java index 69d2d4a..5280994 100644 --- a/src/main/java/ru/windcorp/progressia/common/collision/WorldCollisionHelper.java +++ b/src/main/java/ru/windcorp/progressia/common/collision/WorldCollisionHelper.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.collision; import java.util.ArrayList; diff --git a/src/main/java/ru/windcorp/progressia/common/collision/colliders/AABBoidCollider.java b/src/main/java/ru/windcorp/progressia/common/collision/colliders/AABBoidCollider.java index 5fab3d8..0750e79 100644 --- a/src/main/java/ru/windcorp/progressia/common/collision/colliders/AABBoidCollider.java +++ b/src/main/java/ru/windcorp/progressia/common/collision/colliders/AABBoidCollider.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.collision.colliders; import glm.mat._3.Mat3; diff --git a/src/main/java/ru/windcorp/progressia/common/collision/colliders/AnythingWithCompoundCollider.java b/src/main/java/ru/windcorp/progressia/common/collision/colliders/AnythingWithCompoundCollider.java index 559de13..2680098 100644 --- a/src/main/java/ru/windcorp/progressia/common/collision/colliders/AnythingWithCompoundCollider.java +++ b/src/main/java/ru/windcorp/progressia/common/collision/colliders/AnythingWithCompoundCollider.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.collision.colliders; import ru.windcorp.progressia.common.collision.Collideable; diff --git a/src/main/java/ru/windcorp/progressia/common/collision/colliders/Collider.java b/src/main/java/ru/windcorp/progressia/common/collision/colliders/Collider.java index 56bc8ad..fe47a8e 100644 --- a/src/main/java/ru/windcorp/progressia/common/collision/colliders/Collider.java +++ b/src/main/java/ru/windcorp/progressia/common/collision/colliders/Collider.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.collision.colliders; import java.util.Collection; diff --git a/src/main/java/ru/windcorp/progressia/common/comms/CommsChannel.java b/src/main/java/ru/windcorp/progressia/common/comms/CommsChannel.java index 288b5dd..45c6d0a 100644 --- a/src/main/java/ru/windcorp/progressia/common/comms/CommsChannel.java +++ b/src/main/java/ru/windcorp/progressia/common/comms/CommsChannel.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.comms; import java.io.IOException; diff --git a/src/main/java/ru/windcorp/progressia/common/comms/CommsListener.java b/src/main/java/ru/windcorp/progressia/common/comms/CommsListener.java index 7445e93..e133cf8 100644 --- a/src/main/java/ru/windcorp/progressia/common/comms/CommsListener.java +++ b/src/main/java/ru/windcorp/progressia/common/comms/CommsListener.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.comms; import java.io.IOException; diff --git a/src/main/java/ru/windcorp/progressia/common/comms/controls/ControlData.java b/src/main/java/ru/windcorp/progressia/common/comms/controls/ControlData.java index 46e4e94..d90505b 100644 --- a/src/main/java/ru/windcorp/progressia/common/comms/controls/ControlData.java +++ b/src/main/java/ru/windcorp/progressia/common/comms/controls/ControlData.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.comms.controls; import ru.windcorp.progressia.common.util.namespaces.Namespaced; diff --git a/src/main/java/ru/windcorp/progressia/common/comms/controls/ControlDataRegistry.java b/src/main/java/ru/windcorp/progressia/common/comms/controls/ControlDataRegistry.java index cd884e8..59a8529 100644 --- a/src/main/java/ru/windcorp/progressia/common/comms/controls/ControlDataRegistry.java +++ b/src/main/java/ru/windcorp/progressia/common/comms/controls/ControlDataRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.comms.controls; import ru.windcorp.progressia.common.util.namespaces.NamespacedFactoryRegistry; diff --git a/src/main/java/ru/windcorp/progressia/common/comms/controls/PacketControl.java b/src/main/java/ru/windcorp/progressia/common/comms/controls/PacketControl.java index d5abd39..2d352bb 100644 --- a/src/main/java/ru/windcorp/progressia/common/comms/controls/PacketControl.java +++ b/src/main/java/ru/windcorp/progressia/common/comms/controls/PacketControl.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.comms.controls; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/comms/packets/Packet.java b/src/main/java/ru/windcorp/progressia/common/comms/packets/Packet.java index 5421028..8669eb3 100644 --- a/src/main/java/ru/windcorp/progressia/common/comms/packets/Packet.java +++ b/src/main/java/ru/windcorp/progressia/common/comms/packets/Packet.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.comms.packets; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/hacks/GuavaEventBusHijacker.java b/src/main/java/ru/windcorp/progressia/common/hacks/GuavaEventBusHijacker.java index 6bc7901..ece4dc0 100644 --- a/src/main/java/ru/windcorp/progressia/common/hacks/GuavaEventBusHijacker.java +++ b/src/main/java/ru/windcorp/progressia/common/hacks/GuavaEventBusHijacker.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.hacks; import java.lang.reflect.Constructor; diff --git a/src/main/java/ru/windcorp/progressia/common/resource/Resource.java b/src/main/java/ru/windcorp/progressia/common/resource/Resource.java index 6cd4d32..41cf621 100644 --- a/src/main/java/ru/windcorp/progressia/common/resource/Resource.java +++ b/src/main/java/ru/windcorp/progressia/common/resource/Resource.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.resource; import java.io.IOException; @@ -34,7 +34,7 @@ import ru.windcorp.progressia.common.util.Named; import ru.windcorp.progressia.common.util.crash.CrashReports; public class Resource extends Named { - + private final ResourceReader resourceReader; public Resource(String name, ResourceReader resourceReader) { @@ -45,7 +45,7 @@ public class Resource extends Named { public InputStream getInputStream() { return getResourceReader().read(getName()); } - + public ResourceReader getResourceReader() { return resourceReader; } diff --git a/src/main/java/ru/windcorp/progressia/common/resource/ResourceManager.java b/src/main/java/ru/windcorp/progressia/common/resource/ResourceManager.java index 33db64d..fcfc43f 100644 --- a/src/main/java/ru/windcorp/progressia/common/resource/ResourceManager.java +++ b/src/main/java/ru/windcorp/progressia/common/resource/ResourceManager.java @@ -15,18 +15,18 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.resource; public class ResourceManager { - + private static final ResourceReader CLASSPATH_READER = new ClasspathResourceReader(); private static final ResourceReader FILESYSTEM_READER = new FilesystemResourceReader(); public static Resource getResource(String name) { return new Resource(name, CLASSPATH_READER); } - + public static Resource getFileResource(String name) { return new Resource(name, FILESYSTEM_READER); } diff --git a/src/main/java/ru/windcorp/progressia/common/resource/ResourceReader.java b/src/main/java/ru/windcorp/progressia/common/resource/ResourceReader.java index 1f95f2c..49c221c 100644 --- a/src/main/java/ru/windcorp/progressia/common/resource/ResourceReader.java +++ b/src/main/java/ru/windcorp/progressia/common/resource/ResourceReader.java @@ -20,7 +20,7 @@ package ru.windcorp.progressia.common.resource; import java.io.InputStream; public interface ResourceReader { - + InputStream read(String name); } diff --git a/src/main/java/ru/windcorp/progressia/common/state/AbstractStatefulObjectLayout.java b/src/main/java/ru/windcorp/progressia/common/state/AbstractStatefulObjectLayout.java index b2feb80..99a0340 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/AbstractStatefulObjectLayout.java +++ b/src/main/java/ru/windcorp/progressia/common/state/AbstractStatefulObjectLayout.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/state/HashMapStateStorage.java b/src/main/java/ru/windcorp/progressia/common/state/HashMapStateStorage.java index 52d446f..56ee25d 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/HashMapStateStorage.java +++ b/src/main/java/ru/windcorp/progressia/common/state/HashMapStateStorage.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; import gnu.trove.map.TIntIntMap; diff --git a/src/main/java/ru/windcorp/progressia/common/state/IOContext.java b/src/main/java/ru/windcorp/progressia/common/state/IOContext.java index b18f875..75d61fc 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/IOContext.java +++ b/src/main/java/ru/windcorp/progressia/common/state/IOContext.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; public enum IOContext { diff --git a/src/main/java/ru/windcorp/progressia/common/state/InspectingStatefulObjectLayout.java b/src/main/java/ru/windcorp/progressia/common/state/InspectingStatefulObjectLayout.java index 8b0a9fe..d8ec92e 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/InspectingStatefulObjectLayout.java +++ b/src/main/java/ru/windcorp/progressia/common/state/InspectingStatefulObjectLayout.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; import java.util.ArrayList; diff --git a/src/main/java/ru/windcorp/progressia/common/state/IntStateField.java b/src/main/java/ru/windcorp/progressia/common/state/IntStateField.java index abf8573..054740e 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/IntStateField.java +++ b/src/main/java/ru/windcorp/progressia/common/state/IntStateField.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/state/OptimizedStateStorage.java b/src/main/java/ru/windcorp/progressia/common/state/OptimizedStateStorage.java index 478fbac..fbedec7 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/OptimizedStateStorage.java +++ b/src/main/java/ru/windcorp/progressia/common/state/OptimizedStateStorage.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; public class OptimizedStateStorage extends StateStorage { diff --git a/src/main/java/ru/windcorp/progressia/common/state/OptimizedStatefulObjectLayout.java b/src/main/java/ru/windcorp/progressia/common/state/OptimizedStatefulObjectLayout.java index 1158ab0..0f0a173 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/OptimizedStatefulObjectLayout.java +++ b/src/main/java/ru/windcorp/progressia/common/state/OptimizedStatefulObjectLayout.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; import java.util.List; diff --git a/src/main/java/ru/windcorp/progressia/common/state/PrimitiveCounters.java b/src/main/java/ru/windcorp/progressia/common/state/PrimitiveCounters.java index d3e2dbb..243d62a 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/PrimitiveCounters.java +++ b/src/main/java/ru/windcorp/progressia/common/state/PrimitiveCounters.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; class PrimitiveCounters { diff --git a/src/main/java/ru/windcorp/progressia/common/state/StateChanger.java b/src/main/java/ru/windcorp/progressia/common/state/StateChanger.java index cc8cd5a..a93e64e 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/StateChanger.java +++ b/src/main/java/ru/windcorp/progressia/common/state/StateChanger.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; public interface StateChanger { diff --git a/src/main/java/ru/windcorp/progressia/common/state/StateField.java b/src/main/java/ru/windcorp/progressia/common/state/StateField.java index ca88c4f..ef56c0f 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/StateField.java +++ b/src/main/java/ru/windcorp/progressia/common/state/StateField.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/state/StateFieldBuilder.java b/src/main/java/ru/windcorp/progressia/common/state/StateFieldBuilder.java index 97c7176..935129a 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/StateFieldBuilder.java +++ b/src/main/java/ru/windcorp/progressia/common/state/StateFieldBuilder.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; public interface StateFieldBuilder { diff --git a/src/main/java/ru/windcorp/progressia/common/state/StateStorage.java b/src/main/java/ru/windcorp/progressia/common/state/StateStorage.java index 2f999f0..647ae00 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/StateStorage.java +++ b/src/main/java/ru/windcorp/progressia/common/state/StateStorage.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; public abstract class StateStorage { diff --git a/src/main/java/ru/windcorp/progressia/common/state/StatefulObject.java b/src/main/java/ru/windcorp/progressia/common/state/StatefulObject.java index 39f5b58..5a9ee27 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/StatefulObject.java +++ b/src/main/java/ru/windcorp/progressia/common/state/StatefulObject.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/state/StatefulObjectLayout.java b/src/main/java/ru/windcorp/progressia/common/state/StatefulObjectLayout.java index 4490cdf..60b95bf 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/StatefulObjectLayout.java +++ b/src/main/java/ru/windcorp/progressia/common/state/StatefulObjectLayout.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/state/StatefulObjectRegistry.java b/src/main/java/ru/windcorp/progressia/common/state/StatefulObjectRegistry.java index aa082a6..7811ec4 100644 --- a/src/main/java/ru/windcorp/progressia/common/state/StatefulObjectRegistry.java +++ b/src/main/java/ru/windcorp/progressia/common/state/StatefulObjectRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.state; import java.util.Collections; diff --git a/src/main/java/ru/windcorp/progressia/common/util/BinUtil.java b/src/main/java/ru/windcorp/progressia/common/util/BinUtil.java index ffc8a43..042d2a1 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/BinUtil.java +++ b/src/main/java/ru/windcorp/progressia/common/util/BinUtil.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; public class BinUtil { diff --git a/src/main/java/ru/windcorp/progressia/common/util/ByteBufferInputStream.java b/src/main/java/ru/windcorp/progressia/common/util/ByteBufferInputStream.java index 6b317a7..f3380a9 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/ByteBufferInputStream.java +++ b/src/main/java/ru/windcorp/progressia/common/util/ByteBufferInputStream.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; import java.io.InputStream; diff --git a/src/main/java/ru/windcorp/progressia/common/util/ByteBufferOutputStream.java b/src/main/java/ru/windcorp/progressia/common/util/ByteBufferOutputStream.java index 8931c75..152a17f 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/ByteBufferOutputStream.java +++ b/src/main/java/ru/windcorp/progressia/common/util/ByteBufferOutputStream.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; import java.io.IOException; diff --git a/src/main/java/ru/windcorp/progressia/common/util/CoordinatePacker.java b/src/main/java/ru/windcorp/progressia/common/util/CoordinatePacker.java index 0ef2413..8a98dd3 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/CoordinatePacker.java +++ b/src/main/java/ru/windcorp/progressia/common/util/CoordinatePacker.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; import glm.vec._2.i.Vec2i; diff --git a/src/main/java/ru/windcorp/progressia/common/util/DataBuffer.java b/src/main/java/ru/windcorp/progressia/common/util/DataBuffer.java index 23522c1..f018fc6 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/DataBuffer.java +++ b/src/main/java/ru/windcorp/progressia/common/util/DataBuffer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/util/FloatMathUtil.java b/src/main/java/ru/windcorp/progressia/common/util/FloatMathUtil.java index 43487c0..a1008de 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/FloatMathUtil.java +++ b/src/main/java/ru/windcorp/progressia/common/util/FloatMathUtil.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; public class FloatMathUtil { diff --git a/src/main/java/ru/windcorp/progressia/common/util/LowOverheadCache.java b/src/main/java/ru/windcorp/progressia/common/util/LowOverheadCache.java index c5b2952..9d668e9 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/LowOverheadCache.java +++ b/src/main/java/ru/windcorp/progressia/common/util/LowOverheadCache.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; import java.util.ArrayList; diff --git a/src/main/java/ru/windcorp/progressia/common/util/Matrices.java b/src/main/java/ru/windcorp/progressia/common/util/Matrices.java index 8804272..6534d5b 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/Matrices.java +++ b/src/main/java/ru/windcorp/progressia/common/util/Matrices.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; import glm.mat._3.Mat3; diff --git a/src/main/java/ru/windcorp/progressia/common/util/MultiLOC.java b/src/main/java/ru/windcorp/progressia/common/util/MultiLOC.java index 295244d..3d417ac 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/MultiLOC.java +++ b/src/main/java/ru/windcorp/progressia/common/util/MultiLOC.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; import java.util.HashMap; diff --git a/src/main/java/ru/windcorp/progressia/common/util/Named.java b/src/main/java/ru/windcorp/progressia/common/util/Named.java index d9fc97a..8722ad4 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/Named.java +++ b/src/main/java/ru/windcorp/progressia/common/util/Named.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; import java.util.Objects; diff --git a/src/main/java/ru/windcorp/progressia/common/util/SizeLimitedList.java b/src/main/java/ru/windcorp/progressia/common/util/SizeLimitedList.java index 2010ccb..050fd94 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/SizeLimitedList.java +++ b/src/main/java/ru/windcorp/progressia/common/util/SizeLimitedList.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; import java.util.Collection; diff --git a/src/main/java/ru/windcorp/progressia/common/util/StashingStack.java b/src/main/java/ru/windcorp/progressia/common/util/StashingStack.java index 394c79d..9f7f8e7 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/StashingStack.java +++ b/src/main/java/ru/windcorp/progressia/common/util/StashingStack.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; import java.util.Arrays; diff --git a/src/main/java/ru/windcorp/progressia/common/util/TaskQueue.java b/src/main/java/ru/windcorp/progressia/common/util/TaskQueue.java index a081356..325619d 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/TaskQueue.java +++ b/src/main/java/ru/windcorp/progressia/common/util/TaskQueue.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; import java.util.Collection; diff --git a/src/main/java/ru/windcorp/progressia/common/util/VectorUtil.java b/src/main/java/ru/windcorp/progressia/common/util/VectorUtil.java index 00ede3e..dfb9f1e 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/VectorUtil.java +++ b/src/main/java/ru/windcorp/progressia/common/util/VectorUtil.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/common/util/Vectors.java b/src/main/java/ru/windcorp/progressia/common/util/Vectors.java index 7d99ea5..fb0a20a 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/Vectors.java +++ b/src/main/java/ru/windcorp/progressia/common/util/Vectors.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util; import glm.vec._2.Vec2; diff --git a/src/main/java/ru/windcorp/progressia/common/util/crash/Analyzer.java b/src/main/java/ru/windcorp/progressia/common/util/crash/Analyzer.java index 3289c3d..715aa66 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/crash/Analyzer.java +++ b/src/main/java/ru/windcorp/progressia/common/util/crash/Analyzer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.crash; /** diff --git a/src/main/java/ru/windcorp/progressia/common/util/crash/ContextProvider.java b/src/main/java/ru/windcorp/progressia/common/util/crash/ContextProvider.java index 5b62663..92d94ac 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/crash/ContextProvider.java +++ b/src/main/java/ru/windcorp/progressia/common/util/crash/ContextProvider.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.crash; import java.util.Map; diff --git a/src/main/java/ru/windcorp/progressia/common/util/crash/CrashReports.java b/src/main/java/ru/windcorp/progressia/common/util/crash/CrashReports.java index ab0ec3e..8c80681 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/crash/CrashReports.java +++ b/src/main/java/ru/windcorp/progressia/common/util/crash/CrashReports.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.crash; import org.apache.logging.log4j.LogManager; diff --git a/src/main/java/ru/windcorp/progressia/common/util/crash/ReportingEventBus.java b/src/main/java/ru/windcorp/progressia/common/util/crash/ReportingEventBus.java index 141efa9..d7e5315 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/crash/ReportingEventBus.java +++ b/src/main/java/ru/windcorp/progressia/common/util/crash/ReportingEventBus.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.crash; import com.google.common.eventbus.EventBus; diff --git a/src/main/java/ru/windcorp/progressia/common/util/crash/analyzers/OutOfMemoryAnalyzer.java b/src/main/java/ru/windcorp/progressia/common/util/crash/analyzers/OutOfMemoryAnalyzer.java index c07152f..647e9b3 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/crash/analyzers/OutOfMemoryAnalyzer.java +++ b/src/main/java/ru/windcorp/progressia/common/util/crash/analyzers/OutOfMemoryAnalyzer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.crash.analyzers; import ru.windcorp.progressia.common.util.crash.Analyzer; diff --git a/src/main/java/ru/windcorp/progressia/common/util/crash/providers/ArgsContextProvider.java b/src/main/java/ru/windcorp/progressia/common/util/crash/providers/ArgsContextProvider.java index 6c16902..55786c5 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/crash/providers/ArgsContextProvider.java +++ b/src/main/java/ru/windcorp/progressia/common/util/crash/providers/ArgsContextProvider.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.crash.providers; import ru.windcorp.progressia.ProgressiaLauncher; diff --git a/src/main/java/ru/windcorp/progressia/common/util/crash/providers/JavaVersionContextProvider.java b/src/main/java/ru/windcorp/progressia/common/util/crash/providers/JavaVersionContextProvider.java index b8f4358..184a916 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/crash/providers/JavaVersionContextProvider.java +++ b/src/main/java/ru/windcorp/progressia/common/util/crash/providers/JavaVersionContextProvider.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.crash.providers; import ru.windcorp.progressia.common.util.crash.ContextProvider; diff --git a/src/main/java/ru/windcorp/progressia/common/util/crash/providers/LanguageContextProvider.java b/src/main/java/ru/windcorp/progressia/common/util/crash/providers/LanguageContextProvider.java index ca9d387..8de2668 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/crash/providers/LanguageContextProvider.java +++ b/src/main/java/ru/windcorp/progressia/common/util/crash/providers/LanguageContextProvider.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.crash.providers; import ru.windcorp.progressia.client.localization.Localizer; diff --git a/src/main/java/ru/windcorp/progressia/common/util/crash/providers/OSContextProvider.java b/src/main/java/ru/windcorp/progressia/common/util/crash/providers/OSContextProvider.java index 7fd4610..56752fd 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/crash/providers/OSContextProvider.java +++ b/src/main/java/ru/windcorp/progressia/common/util/crash/providers/OSContextProvider.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.crash.providers; import ru.windcorp.progressia.common.util.crash.ContextProvider; diff --git a/src/main/java/ru/windcorp/progressia/common/util/crash/providers/OpenALContextProvider.java b/src/main/java/ru/windcorp/progressia/common/util/crash/providers/OpenALContextProvider.java index ad31bba..77626b3 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/crash/providers/OpenALContextProvider.java +++ b/src/main/java/ru/windcorp/progressia/common/util/crash/providers/OpenALContextProvider.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.crash.providers; import ru.windcorp.progressia.client.audio.AudioManager; diff --git a/src/main/java/ru/windcorp/progressia/common/util/crash/providers/RAMContextProvider.java b/src/main/java/ru/windcorp/progressia/common/util/crash/providers/RAMContextProvider.java index 9c60921..2d91e5f 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/crash/providers/RAMContextProvider.java +++ b/src/main/java/ru/windcorp/progressia/common/util/crash/providers/RAMContextProvider.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.crash.providers; import ru.windcorp.progressia.common.util.crash.ContextProvider; diff --git a/src/main/java/ru/windcorp/progressia/common/util/dynstr/DoubleFlusher.java b/src/main/java/ru/windcorp/progressia/common/util/dynstr/DoubleFlusher.java index 6068669..ab21b4b 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/dynstr/DoubleFlusher.java +++ b/src/main/java/ru/windcorp/progressia/common/util/dynstr/DoubleFlusher.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.dynstr; import gnu.trove.list.TCharList; diff --git a/src/main/java/ru/windcorp/progressia/common/util/dynstr/DynamicString.java b/src/main/java/ru/windcorp/progressia/common/util/dynstr/DynamicString.java index 8376a3d..2266943 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/dynstr/DynamicString.java +++ b/src/main/java/ru/windcorp/progressia/common/util/dynstr/DynamicString.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.dynstr; import java.util.function.Supplier; diff --git a/src/main/java/ru/windcorp/progressia/common/util/dynstr/DynamicStrings.java b/src/main/java/ru/windcorp/progressia/common/util/dynstr/DynamicStrings.java index 030cd9d..0b5745e 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/dynstr/DynamicStrings.java +++ b/src/main/java/ru/windcorp/progressia/common/util/dynstr/DynamicStrings.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.dynstr; import java.util.ArrayList; diff --git a/src/main/java/ru/windcorp/progressia/common/util/dynstr/FloatFlusher.java b/src/main/java/ru/windcorp/progressia/common/util/dynstr/FloatFlusher.java index 0b245ee..26a727e 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/dynstr/FloatFlusher.java +++ b/src/main/java/ru/windcorp/progressia/common/util/dynstr/FloatFlusher.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.dynstr; import gnu.trove.list.TCharList; diff --git a/src/main/java/ru/windcorp/progressia/common/util/dynstr/IntFlusher.java b/src/main/java/ru/windcorp/progressia/common/util/dynstr/IntFlusher.java index 9924f81..64f98a7 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/dynstr/IntFlusher.java +++ b/src/main/java/ru/windcorp/progressia/common/util/dynstr/IntFlusher.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.dynstr; import gnu.trove.list.TCharList; diff --git a/src/main/java/ru/windcorp/progressia/common/util/namespaces/IllegalIdException.java b/src/main/java/ru/windcorp/progressia/common/util/namespaces/IllegalIdException.java index d896bac..cb5da76 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/namespaces/IllegalIdException.java +++ b/src/main/java/ru/windcorp/progressia/common/util/namespaces/IllegalIdException.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.namespaces; public class IllegalIdException extends RuntimeException { diff --git a/src/main/java/ru/windcorp/progressia/common/util/namespaces/Namespaced.java b/src/main/java/ru/windcorp/progressia/common/util/namespaces/Namespaced.java index 2d87007..557804b 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/namespaces/Namespaced.java +++ b/src/main/java/ru/windcorp/progressia/common/util/namespaces/Namespaced.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.namespaces; public abstract class Namespaced { diff --git a/src/main/java/ru/windcorp/progressia/common/util/namespaces/NamespacedFactoryRegistry.java b/src/main/java/ru/windcorp/progressia/common/util/namespaces/NamespacedFactoryRegistry.java index 2a94593..e4a4303 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/namespaces/NamespacedFactoryRegistry.java +++ b/src/main/java/ru/windcorp/progressia/common/util/namespaces/NamespacedFactoryRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.namespaces; import java.util.Collection; diff --git a/src/main/java/ru/windcorp/progressia/common/util/namespaces/NamespacedInstanceRegistry.java b/src/main/java/ru/windcorp/progressia/common/util/namespaces/NamespacedInstanceRegistry.java index ce1f3cf..7b3f01d 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/namespaces/NamespacedInstanceRegistry.java +++ b/src/main/java/ru/windcorp/progressia/common/util/namespaces/NamespacedInstanceRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.namespaces; import java.util.Collection; diff --git a/src/main/java/ru/windcorp/progressia/common/util/namespaces/NamespacedUtil.java b/src/main/java/ru/windcorp/progressia/common/util/namespaces/NamespacedUtil.java index b969b8e..ecff557 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/namespaces/NamespacedUtil.java +++ b/src/main/java/ru/windcorp/progressia/common/util/namespaces/NamespacedUtil.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.util.namespaces; import java.util.Objects; diff --git a/src/main/java/ru/windcorp/progressia/common/world/BlockRay.java b/src/main/java/ru/windcorp/progressia/common/world/BlockRay.java index 4d5f1f9..0cfc0be 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/BlockRay.java +++ b/src/main/java/ru/windcorp/progressia/common/world/BlockRay.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; import glm.vec._3.Vec3; diff --git a/src/main/java/ru/windcorp/progressia/common/world/ChunkData.java b/src/main/java/ru/windcorp/progressia/common/world/ChunkData.java index 252429c..b6a2c42 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/ChunkData.java +++ b/src/main/java/ru/windcorp/progressia/common/world/ChunkData.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; import static ru.windcorp.progressia.common.world.block.BlockFace.*; diff --git a/src/main/java/ru/windcorp/progressia/common/world/ChunkDataListener.java b/src/main/java/ru/windcorp/progressia/common/world/ChunkDataListener.java index 72008c4..17abda8 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/ChunkDataListener.java +++ b/src/main/java/ru/windcorp/progressia/common/world/ChunkDataListener.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; import glm.vec._3.i.Vec3i; diff --git a/src/main/java/ru/windcorp/progressia/common/world/ChunkDataListeners.java b/src/main/java/ru/windcorp/progressia/common/world/ChunkDataListeners.java index b39437c..fdae0ab 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/ChunkDataListeners.java +++ b/src/main/java/ru/windcorp/progressia/common/world/ChunkDataListeners.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/common/world/Coordinates.java b/src/main/java/ru/windcorp/progressia/common/world/Coordinates.java index 55f2076..ea1de1a 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/Coordinates.java +++ b/src/main/java/ru/windcorp/progressia/common/world/Coordinates.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; import static ru.windcorp.progressia.common.world.ChunkData.BLOCKS_PER_CHUNK; @@ -158,7 +158,7 @@ public class Coordinates { return output; } - + public static boolean isOnChunkBorder(int blockInChunk) { return blockInChunk == 0 || blockInChunk == BLOCKS_PER_CHUNK - 1; } diff --git a/src/main/java/ru/windcorp/progressia/common/world/DecodingException.java b/src/main/java/ru/windcorp/progressia/common/world/DecodingException.java index 532d22f..410bfad 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/DecodingException.java +++ b/src/main/java/ru/windcorp/progressia/common/world/DecodingException.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; /** diff --git a/src/main/java/ru/windcorp/progressia/common/world/IllegalCoordinatesException.java b/src/main/java/ru/windcorp/progressia/common/world/IllegalCoordinatesException.java index 69240cf..5fa2d9d 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/IllegalCoordinatesException.java +++ b/src/main/java/ru/windcorp/progressia/common/world/IllegalCoordinatesException.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; public class IllegalCoordinatesException extends RuntimeException { diff --git a/src/main/java/ru/windcorp/progressia/common/world/PacketAffectChunk.java b/src/main/java/ru/windcorp/progressia/common/world/PacketAffectChunk.java index 95e6eab..fdd4ce3 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/PacketAffectChunk.java +++ b/src/main/java/ru/windcorp/progressia/common/world/PacketAffectChunk.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; import glm.vec._3.i.Vec3i; diff --git a/src/main/java/ru/windcorp/progressia/common/world/PacketAffectWorld.java b/src/main/java/ru/windcorp/progressia/common/world/PacketAffectWorld.java index 8433b9b..1432f1c 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/PacketAffectWorld.java +++ b/src/main/java/ru/windcorp/progressia/common/world/PacketAffectWorld.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; import ru.windcorp.progressia.common.comms.packets.Packet; diff --git a/src/main/java/ru/windcorp/progressia/common/world/PacketRevokeChunk.java b/src/main/java/ru/windcorp/progressia/common/world/PacketRevokeChunk.java index c65b045..c1ab7e3 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/PacketRevokeChunk.java +++ b/src/main/java/ru/windcorp/progressia/common/world/PacketRevokeChunk.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/world/PacketSendChunk.java b/src/main/java/ru/windcorp/progressia/common/world/PacketSendChunk.java index ca079ff..12a78c8 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/PacketSendChunk.java +++ b/src/main/java/ru/windcorp/progressia/common/world/PacketSendChunk.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/world/PacketSetLocalPlayer.java b/src/main/java/ru/windcorp/progressia/common/world/PacketSetLocalPlayer.java index f835614..625a4c5 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/PacketSetLocalPlayer.java +++ b/src/main/java/ru/windcorp/progressia/common/world/PacketSetLocalPlayer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/world/PlayerData.java b/src/main/java/ru/windcorp/progressia/common/world/PlayerData.java index 2123e3f..ecd512b 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/PlayerData.java +++ b/src/main/java/ru/windcorp/progressia/common/world/PlayerData.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; import ru.windcorp.progressia.common.world.entity.EntityData; diff --git a/src/main/java/ru/windcorp/progressia/common/world/WorldData.java b/src/main/java/ru/windcorp/progressia/common/world/WorldData.java index 85c6188..6201df9 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/WorldData.java +++ b/src/main/java/ru/windcorp/progressia/common/world/WorldData.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; import java.util.ArrayList; diff --git a/src/main/java/ru/windcorp/progressia/common/world/WorldDataListener.java b/src/main/java/ru/windcorp/progressia/common/world/WorldDataListener.java index 9211efd..9b81d12 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/WorldDataListener.java +++ b/src/main/java/ru/windcorp/progressia/common/world/WorldDataListener.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/common/world/block/BlockData.java b/src/main/java/ru/windcorp/progressia/common/world/block/BlockData.java index e94f838..2c9d352 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/block/BlockData.java +++ b/src/main/java/ru/windcorp/progressia/common/world/block/BlockData.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.block; import ru.windcorp.progressia.common.collision.AABB; diff --git a/src/main/java/ru/windcorp/progressia/common/world/block/BlockDataRegistry.java b/src/main/java/ru/windcorp/progressia/common/world/block/BlockDataRegistry.java index ac1934c..68b7412 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/block/BlockDataRegistry.java +++ b/src/main/java/ru/windcorp/progressia/common/world/block/BlockDataRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.block; import ru.windcorp.progressia.common.util.namespaces.NamespacedInstanceRegistry; diff --git a/src/main/java/ru/windcorp/progressia/common/world/block/BlockFace.java b/src/main/java/ru/windcorp/progressia/common/world/block/BlockFace.java index 9023500..92210ea 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/block/BlockFace.java +++ b/src/main/java/ru/windcorp/progressia/common/world/block/BlockFace.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.block; import com.google.common.collect.ImmutableList; diff --git a/src/main/java/ru/windcorp/progressia/common/world/block/BlockRelation.java b/src/main/java/ru/windcorp/progressia/common/world/block/BlockRelation.java index 659a5fa..46ff044 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/block/BlockRelation.java +++ b/src/main/java/ru/windcorp/progressia/common/world/block/BlockRelation.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.block; import static java.lang.Math.abs; @@ -43,7 +43,7 @@ public class BlockRelation { public Vec3i getVector() { return vector; } - + public Vec3 getFloatVector() { return floatVector; } diff --git a/src/main/java/ru/windcorp/progressia/common/world/block/PacketAffectBlock.java b/src/main/java/ru/windcorp/progressia/common/world/block/PacketAffectBlock.java index 2c1c8a2..5a4a3ac 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/block/PacketAffectBlock.java +++ b/src/main/java/ru/windcorp/progressia/common/world/block/PacketAffectBlock.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.block; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/world/block/PacketSetBlock.java b/src/main/java/ru/windcorp/progressia/common/world/block/PacketSetBlock.java index 55d0eb2..a29fa2e 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/block/PacketSetBlock.java +++ b/src/main/java/ru/windcorp/progressia/common/world/block/PacketSetBlock.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.block; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/world/entity/EntityData.java b/src/main/java/ru/windcorp/progressia/common/world/entity/EntityData.java index 7b3325c..2ed2263 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/entity/EntityData.java +++ b/src/main/java/ru/windcorp/progressia/common/world/entity/EntityData.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.entity; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/world/entity/EntityDataRegistry.java b/src/main/java/ru/windcorp/progressia/common/world/entity/EntityDataRegistry.java index 26f219d..34271ae 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/entity/EntityDataRegistry.java +++ b/src/main/java/ru/windcorp/progressia/common/world/entity/EntityDataRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.entity; import ru.windcorp.progressia.common.state.StatefulObjectRegistry; diff --git a/src/main/java/ru/windcorp/progressia/common/world/entity/PacketAffectEntity.java b/src/main/java/ru/windcorp/progressia/common/world/entity/PacketAffectEntity.java index f3bf792..aefd64e 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/entity/PacketAffectEntity.java +++ b/src/main/java/ru/windcorp/progressia/common/world/entity/PacketAffectEntity.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.entity; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/world/entity/PacketChangeEntity.java b/src/main/java/ru/windcorp/progressia/common/world/entity/PacketChangeEntity.java index d09b0f3..515f1f0 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/entity/PacketChangeEntity.java +++ b/src/main/java/ru/windcorp/progressia/common/world/entity/PacketChangeEntity.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.entity; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/world/entity/PacketRevokeEntity.java b/src/main/java/ru/windcorp/progressia/common/world/entity/PacketRevokeEntity.java index 06dfc12..98b1d88 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/entity/PacketRevokeEntity.java +++ b/src/main/java/ru/windcorp/progressia/common/world/entity/PacketRevokeEntity.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.entity; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/world/entity/PacketSendEntity.java b/src/main/java/ru/windcorp/progressia/common/world/entity/PacketSendEntity.java index 6604d4a..93d724c 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/entity/PacketSendEntity.java +++ b/src/main/java/ru/windcorp/progressia/common/world/entity/PacketSendEntity.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.entity; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/world/generic/ChunkMap.java b/src/main/java/ru/windcorp/progressia/common/world/generic/ChunkMap.java index 6c35781..7176386 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/generic/ChunkMap.java +++ b/src/main/java/ru/windcorp/progressia/common/world/generic/ChunkMap.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.generic; import java.util.Collection; diff --git a/src/main/java/ru/windcorp/progressia/common/world/generic/ChunkSet.java b/src/main/java/ru/windcorp/progressia/common/world/generic/ChunkSet.java index 73c2267..c6e4fd3 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/generic/ChunkSet.java +++ b/src/main/java/ru/windcorp/progressia/common/world/generic/ChunkSet.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.generic; import java.util.Collection; diff --git a/src/main/java/ru/windcorp/progressia/common/world/generic/ChunkSets.java b/src/main/java/ru/windcorp/progressia/common/world/generic/ChunkSets.java index 93413e4..aa03957 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/generic/ChunkSets.java +++ b/src/main/java/ru/windcorp/progressia/common/world/generic/ChunkSets.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.generic; import java.util.Iterator; diff --git a/src/main/java/ru/windcorp/progressia/common/world/generic/GenericBlock.java b/src/main/java/ru/windcorp/progressia/common/world/generic/GenericBlock.java index d669b07..1d2c252 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/generic/GenericBlock.java +++ b/src/main/java/ru/windcorp/progressia/common/world/generic/GenericBlock.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.generic; public interface GenericBlock { diff --git a/src/main/java/ru/windcorp/progressia/common/world/generic/GenericChunk.java b/src/main/java/ru/windcorp/progressia/common/world/generic/GenericChunk.java index 656304f..511c9aa 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/generic/GenericChunk.java +++ b/src/main/java/ru/windcorp/progressia/common/world/generic/GenericChunk.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.generic; import java.util.function.Consumer; @@ -91,17 +91,20 @@ public interface GenericChunk, B exten Vectors.release(v); return result; } - + default boolean isSurfaceBiC(Vec3i blockInChunk) { int hits = 0; - - if (Coordinates.isOnChunkBorder(blockInChunk.x)) hits++; - if (Coordinates.isOnChunkBorder(blockInChunk.y)) hits++; - if (Coordinates.isOnChunkBorder(blockInChunk.z)) hits++; - + + if (Coordinates.isOnChunkBorder(blockInChunk.x)) + hits++; + if (Coordinates.isOnChunkBorder(blockInChunk.y)) + hits++; + if (Coordinates.isOnChunkBorder(blockInChunk.z)) + hits++; + return hits >= 1; } - + default boolean isSurfaceBiW(Vec3i blockInWorld) { Vec3i v = Vectors.grab3i(); @@ -113,17 +116,20 @@ public interface GenericChunk, B exten Vectors.release(v); return result; } - + default boolean isEdgeBiC(Vec3i blockInChunk) { int hits = 0; - - if (Coordinates.isOnChunkBorder(blockInChunk.x)) hits++; - if (Coordinates.isOnChunkBorder(blockInChunk.y)) hits++; - if (Coordinates.isOnChunkBorder(blockInChunk.z)) hits++; - + + if (Coordinates.isOnChunkBorder(blockInChunk.x)) + hits++; + if (Coordinates.isOnChunkBorder(blockInChunk.y)) + hits++; + if (Coordinates.isOnChunkBorder(blockInChunk.z)) + hits++; + return hits >= 2; } - + default boolean isEdgeBiW(Vec3i blockInWorld) { Vec3i v = Vectors.grab3i(); @@ -135,17 +141,20 @@ public interface GenericChunk, B exten Vectors.release(v); return result; } - + default boolean isVertexBiC(Vec3i blockInChunk) { int hits = 0; - - if (Coordinates.isOnChunkBorder(blockInChunk.x)) hits++; - if (Coordinates.isOnChunkBorder(blockInChunk.y)) hits++; - if (Coordinates.isOnChunkBorder(blockInChunk.z)) hits++; - + + if (Coordinates.isOnChunkBorder(blockInChunk.x)) + hits++; + if (Coordinates.isOnChunkBorder(blockInChunk.y)) + hits++; + if (Coordinates.isOnChunkBorder(blockInChunk.z)) + hits++; + return hits == 3; } - + default boolean isVertexBiW(Vec3i blockInWorld) { Vec3i v = Vectors.grab3i(); diff --git a/src/main/java/ru/windcorp/progressia/common/world/generic/GenericEntity.java b/src/main/java/ru/windcorp/progressia/common/world/generic/GenericEntity.java index c15bd39..ee802b9 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/generic/GenericEntity.java +++ b/src/main/java/ru/windcorp/progressia/common/world/generic/GenericEntity.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.generic; import glm.vec._3.Vec3; diff --git a/src/main/java/ru/windcorp/progressia/common/world/generic/GenericTile.java b/src/main/java/ru/windcorp/progressia/common/world/generic/GenericTile.java index e35aec2..73bf63b 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/generic/GenericTile.java +++ b/src/main/java/ru/windcorp/progressia/common/world/generic/GenericTile.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.generic; public interface GenericTile { diff --git a/src/main/java/ru/windcorp/progressia/common/world/generic/GenericTileStack.java b/src/main/java/ru/windcorp/progressia/common/world/generic/GenericTileStack.java index 31a5158..11eb5e4 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/generic/GenericTileStack.java +++ b/src/main/java/ru/windcorp/progressia/common/world/generic/GenericTileStack.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.generic; import java.util.AbstractList; diff --git a/src/main/java/ru/windcorp/progressia/common/world/generic/GenericWorld.java b/src/main/java/ru/windcorp/progressia/common/world/generic/GenericWorld.java index 943067e..e1b71fa 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/generic/GenericWorld.java +++ b/src/main/java/ru/windcorp/progressia/common/world/generic/GenericWorld.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.generic; import java.util.Collection; diff --git a/src/main/java/ru/windcorp/progressia/common/world/generic/LongBasedChunkMap.java b/src/main/java/ru/windcorp/progressia/common/world/generic/LongBasedChunkMap.java index 2fbc912..855f0d7 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/generic/LongBasedChunkMap.java +++ b/src/main/java/ru/windcorp/progressia/common/world/generic/LongBasedChunkMap.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.generic; import java.util.Collection; diff --git a/src/main/java/ru/windcorp/progressia/common/world/generic/LongBasedChunkSet.java b/src/main/java/ru/windcorp/progressia/common/world/generic/LongBasedChunkSet.java index cd5a755..f5112c8 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/generic/LongBasedChunkSet.java +++ b/src/main/java/ru/windcorp/progressia/common/world/generic/LongBasedChunkSet.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.generic; import java.util.Iterator; diff --git a/src/main/java/ru/windcorp/progressia/common/world/io/ChunkCodec.java b/src/main/java/ru/windcorp/progressia/common/world/io/ChunkCodec.java index 7c2a35c..d3bdb2b 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/io/ChunkCodec.java +++ b/src/main/java/ru/windcorp/progressia/common/world/io/ChunkCodec.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.io; import java.io.DataInputStream; diff --git a/src/main/java/ru/windcorp/progressia/common/world/io/ChunkIO.java b/src/main/java/ru/windcorp/progressia/common/world/io/ChunkIO.java index 025738f..1dec1b7 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/io/ChunkIO.java +++ b/src/main/java/ru/windcorp/progressia/common/world/io/ChunkIO.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.io; import java.io.DataInputStream; diff --git a/src/main/java/ru/windcorp/progressia/common/world/tile/PacketAddTile.java b/src/main/java/ru/windcorp/progressia/common/world/tile/PacketAddTile.java index 650b4a7..bfc47c2 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/tile/PacketAddTile.java +++ b/src/main/java/ru/windcorp/progressia/common/world/tile/PacketAddTile.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.tile; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/world/tile/PacketAffectTile.java b/src/main/java/ru/windcorp/progressia/common/world/tile/PacketAffectTile.java index b12012c..07d9105 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/tile/PacketAffectTile.java +++ b/src/main/java/ru/windcorp/progressia/common/world/tile/PacketAffectTile.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.tile; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/world/tile/PacketRemoveTile.java b/src/main/java/ru/windcorp/progressia/common/world/tile/PacketRemoveTile.java index 9a8ef6c..d05c0c4 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/tile/PacketRemoveTile.java +++ b/src/main/java/ru/windcorp/progressia/common/world/tile/PacketRemoveTile.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.tile; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/common/world/tile/TileData.java b/src/main/java/ru/windcorp/progressia/common/world/tile/TileData.java index d314445..b8f42aa 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/tile/TileData.java +++ b/src/main/java/ru/windcorp/progressia/common/world/tile/TileData.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.tile; import ru.windcorp.progressia.common.util.namespaces.Namespaced; diff --git a/src/main/java/ru/windcorp/progressia/common/world/tile/TileDataRegistry.java b/src/main/java/ru/windcorp/progressia/common/world/tile/TileDataRegistry.java index 110baea..5508ded 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/tile/TileDataRegistry.java +++ b/src/main/java/ru/windcorp/progressia/common/world/tile/TileDataRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.tile; import ru.windcorp.progressia.common.util.namespaces.NamespacedInstanceRegistry; diff --git a/src/main/java/ru/windcorp/progressia/common/world/tile/TileDataStack.java b/src/main/java/ru/windcorp/progressia/common/world/tile/TileDataStack.java index 80f0ba4..78530a0 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/tile/TileDataStack.java +++ b/src/main/java/ru/windcorp/progressia/common/world/tile/TileDataStack.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.tile; import ru.windcorp.progressia.common.world.ChunkData; diff --git a/src/main/java/ru/windcorp/progressia/common/world/tile/TileReference.java b/src/main/java/ru/windcorp/progressia/common/world/tile/TileReference.java index 75fde58..b8d593f 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/tile/TileReference.java +++ b/src/main/java/ru/windcorp/progressia/common/world/tile/TileReference.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.tile; public interface TileReference { diff --git a/src/main/java/ru/windcorp/progressia/common/world/tile/TileStackIsFullException.java b/src/main/java/ru/windcorp/progressia/common/world/tile/TileStackIsFullException.java index c9f6240..8f01d7f 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/tile/TileStackIsFullException.java +++ b/src/main/java/ru/windcorp/progressia/common/world/tile/TileStackIsFullException.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.common.world.tile; public class TileStackIsFullException extends RuntimeException { diff --git a/src/main/java/ru/windcorp/progressia/server/ChunkLoader.java b/src/main/java/ru/windcorp/progressia/server/ChunkLoader.java index d708fe2..f2391a2 100644 --- a/src/main/java/ru/windcorp/progressia/server/ChunkLoader.java +++ b/src/main/java/ru/windcorp/progressia/server/ChunkLoader.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/ChunkManager.java b/src/main/java/ru/windcorp/progressia/server/ChunkManager.java index badb061..2e1623d 100644 --- a/src/main/java/ru/windcorp/progressia/server/ChunkManager.java +++ b/src/main/java/ru/windcorp/progressia/server/ChunkManager.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server; import java.util.ArrayList; @@ -79,27 +79,23 @@ public class ChunkManager { } } - + @FunctionalInterface - public interface ChunksLoadListener - { + public interface ChunksLoadListener { void handle(boolean starting); } - + @FunctionalInterface - private interface ChunksLoadEventListener - { + private interface ChunksLoadEventListener { void handle(); } - - public interface ChunksLoadStartListener extends ChunksLoadEventListener - { - + + public interface ChunksLoadStartListener extends ChunksLoadEventListener { + } - - public interface ChunksLoadFinishListener extends ChunksLoadEventListener - { - + + public interface ChunksLoadFinishListener extends ChunksLoadEventListener { + } private final Server server; @@ -109,10 +105,11 @@ public class ChunkManager { private final ChunkSet toLoad = ChunkSets.newHashSet(); private final ChunkSet toUnload = ChunkSets.newHashSet(); - private Collection listeners = Collections.synchronizedCollection( new ArrayList<>()); - private Collection startListeners = Collections.synchronizedCollection( new ArrayList<>()); - private Collection finishListeners = Collections.synchronizedCollection( new ArrayList<>()); - + private Collection listeners = Collections.synchronizedCollection(new ArrayList<>()); + private Collection startListeners = Collections.synchronizedCollection(new ArrayList<>()); + private Collection finishListeners = Collections + .synchronizedCollection(new ArrayList<>()); + // TODO replace with a normal Map managed by some sort of PlayerListener, // weak maps are weak private final Map visions = Collections.synchronizedMap(new WeakHashMap<>()); @@ -132,26 +129,22 @@ public class ChunkManager { } } - public void register(ChunksLoadListener cll) - { + public void register(ChunksLoadListener cll) { listeners.add(cll); } - - public void register(ChunksLoadStartListener clsl) - { + + public void register(ChunksLoadStartListener clsl) { startListeners.add(clsl); } - - public void register(ChunksLoadFinishListener clfl) - { + + public void register(ChunksLoadFinishListener clfl) { finishListeners.add(clfl); } - - public void unregisterAll() - { + + public void unregisterAll() { listeners.clear(); } - + private void gatherRequests() { requested.clear(); @@ -177,14 +170,13 @@ public class ChunkManager { } private void processQueues() { - - if (toUnload.size()!=0 || toLoad.size()!=0) - { - LogManager.getLogger().info(String.valueOf(toUnload.size())+" "+String.valueOf( toLoad.size())); + + if (toUnload.size() != 0 || toLoad.size() != 0) { + LogManager.getLogger().info(String.valueOf(toUnload.size()) + " " + String.valueOf(toLoad.size())); } listeners.forEach(l -> l.handle(false)); startListeners.forEach(sl -> sl.handle()); - + toUnload.forEach(this::unloadChunk); toUnload.clear(); toLoad.forEach(this::loadChunk); @@ -195,7 +187,7 @@ public class ChunkManager { }); listeners.forEach(l -> l.handle(true)); finishListeners.forEach(fl -> fl.handle()); - + } private PlayerVision getVision(Player player, boolean createIfMissing) { @@ -236,22 +228,22 @@ public class ChunkManager { TestWorldDiskIO.saveChunk(chunk, getServer()); } - + public void unloadAll() // dont use probably { WorldData world = getServer().getWorld().getData(); - - //Collection chunks = world.getChunks(); + + // Collection chunks = world.getChunks(); Collection chunkPoss = new HashSet(); - + world.forEachChunk(c -> { chunkPoss.add(c.getPosition()); }); - + chunkPoss.forEach(v -> { ChunkData c = world.getChunk(v); world.removeChunk(c); - + TestWorldDiskIO.saveChunk(c, getServer()); }); } diff --git a/src/main/java/ru/windcorp/progressia/server/EntityManager.java b/src/main/java/ru/windcorp/progressia/server/EntityManager.java index d904c83..3e2079a 100644 --- a/src/main/java/ru/windcorp/progressia/server/EntityManager.java +++ b/src/main/java/ru/windcorp/progressia/server/EntityManager.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server; import java.util.Collections; diff --git a/src/main/java/ru/windcorp/progressia/server/Player.java b/src/main/java/ru/windcorp/progressia/server/Player.java index ea373a8..9b29918 100644 --- a/src/main/java/ru/windcorp/progressia/server/Player.java +++ b/src/main/java/ru/windcorp/progressia/server/Player.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/PlayerManager.java b/src/main/java/ru/windcorp/progressia/server/PlayerManager.java index b1447bf..fac1119 100644 --- a/src/main/java/ru/windcorp/progressia/server/PlayerManager.java +++ b/src/main/java/ru/windcorp/progressia/server/PlayerManager.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server; import java.util.ArrayList; @@ -72,9 +72,8 @@ public class PlayerManager { return player; } - - public void removePlayer(Player player) - { + + public void removePlayer(Player player) { players.remove(player); } diff --git a/src/main/java/ru/windcorp/progressia/server/ServerState.java b/src/main/java/ru/windcorp/progressia/server/ServerState.java index 774f17d..d252e0c 100644 --- a/src/main/java/ru/windcorp/progressia/server/ServerState.java +++ b/src/main/java/ru/windcorp/progressia/server/ServerState.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server; import ru.windcorp.progressia.common.world.WorldData; diff --git a/src/main/java/ru/windcorp/progressia/server/ServerThread.java b/src/main/java/ru/windcorp/progressia/server/ServerThread.java index d8d15a9..7420c2b 100644 --- a/src/main/java/ru/windcorp/progressia/server/ServerThread.java +++ b/src/main/java/ru/windcorp/progressia/server/ServerThread.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server; import java.util.concurrent.Executors; @@ -29,7 +29,7 @@ import ru.windcorp.progressia.server.world.ticking.TickerCoordinator; public class ServerThread implements Runnable { private static final ThreadLocal SERVER_THREADS_MAP = new ThreadLocal<>(); - + private static boolean isShuttingDown; public static Server getCurrentServer() { @@ -73,8 +73,7 @@ public class ServerThread implements Runnable { @Override public void run() { try { - if (isShuttingDown) - { + if (isShuttingDown) { getTicker().stop(); executor.shutdown(); return; @@ -87,10 +86,10 @@ public class ServerThread implements Runnable { } public void stop() { - + isShuttingDown = true; - //getTicker().stop(); + // getTicker().stop(); } public Server getServer() { diff --git a/src/main/java/ru/windcorp/progressia/server/TickingSettings.java b/src/main/java/ru/windcorp/progressia/server/TickingSettings.java index 743da10..8cb77d6 100644 --- a/src/main/java/ru/windcorp/progressia/server/TickingSettings.java +++ b/src/main/java/ru/windcorp/progressia/server/TickingSettings.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server; import ru.windcorp.progressia.common.Units; diff --git a/src/main/java/ru/windcorp/progressia/server/comms/Client.java b/src/main/java/ru/windcorp/progressia/server/comms/Client.java index f439e27..fdc1e98 100644 --- a/src/main/java/ru/windcorp/progressia/server/comms/Client.java +++ b/src/main/java/ru/windcorp/progressia/server/comms/Client.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.comms; import ru.windcorp.progressia.common.comms.CommsChannel; diff --git a/src/main/java/ru/windcorp/progressia/server/comms/ClientChat.java b/src/main/java/ru/windcorp/progressia/server/comms/ClientChat.java index 35b9ca2..3d46634 100644 --- a/src/main/java/ru/windcorp/progressia/server/comms/ClientChat.java +++ b/src/main/java/ru/windcorp/progressia/server/comms/ClientChat.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.comms; public abstract class ClientChat extends Client { diff --git a/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java b/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java index cb4b80b..e223443 100644 --- a/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java +++ b/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.comms; import java.util.Collection; diff --git a/src/main/java/ru/windcorp/progressia/server/comms/ClientPlayer.java b/src/main/java/ru/windcorp/progressia/server/comms/ClientPlayer.java index c455b8e..d414524 100644 --- a/src/main/java/ru/windcorp/progressia/server/comms/ClientPlayer.java +++ b/src/main/java/ru/windcorp/progressia/server/comms/ClientPlayer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.comms; import glm.vec._3.i.Vec3i; diff --git a/src/main/java/ru/windcorp/progressia/server/comms/DefaultServerCommsListener.java b/src/main/java/ru/windcorp/progressia/server/comms/DefaultServerCommsListener.java index d570e01..a405f78 100644 --- a/src/main/java/ru/windcorp/progressia/server/comms/DefaultServerCommsListener.java +++ b/src/main/java/ru/windcorp/progressia/server/comms/DefaultServerCommsListener.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.comms; import java.io.IOException; diff --git a/src/main/java/ru/windcorp/progressia/server/comms/controls/ControlLogic.java b/src/main/java/ru/windcorp/progressia/server/comms/controls/ControlLogic.java index 31e97a2..f9bfb3b 100644 --- a/src/main/java/ru/windcorp/progressia/server/comms/controls/ControlLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/comms/controls/ControlLogic.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.comms.controls; import ru.windcorp.progressia.common.comms.controls.PacketControl; diff --git a/src/main/java/ru/windcorp/progressia/server/comms/controls/ControlLogicRegistry.java b/src/main/java/ru/windcorp/progressia/server/comms/controls/ControlLogicRegistry.java index 18ece0a..92112e3 100644 --- a/src/main/java/ru/windcorp/progressia/server/comms/controls/ControlLogicRegistry.java +++ b/src/main/java/ru/windcorp/progressia/server/comms/controls/ControlLogicRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.comms.controls; import ru.windcorp.progressia.common.util.namespaces.NamespacedInstanceRegistry; diff --git a/src/main/java/ru/windcorp/progressia/server/world/ChunkLogic.java b/src/main/java/ru/windcorp/progressia/server/world/ChunkLogic.java index 37685d2..acea221 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/ChunkLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/ChunkLogic.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world; import java.util.ArrayList; diff --git a/src/main/java/ru/windcorp/progressia/server/world/ChunkTickContext.java b/src/main/java/ru/windcorp/progressia/server/world/ChunkTickContext.java index 5eed263..c197706 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/ChunkTickContext.java +++ b/src/main/java/ru/windcorp/progressia/server/world/ChunkTickContext.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/world/TickAndUpdateUtil.java b/src/main/java/ru/windcorp/progressia/server/world/TickAndUpdateUtil.java index 22d106e..acf9d1f 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/TickAndUpdateUtil.java +++ b/src/main/java/ru/windcorp/progressia/server/world/TickAndUpdateUtil.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world; import glm.vec._3.i.Vec3i; diff --git a/src/main/java/ru/windcorp/progressia/server/world/TickContext.java b/src/main/java/ru/windcorp/progressia/server/world/TickContext.java index 50dda55..0997c65 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/TickContext.java +++ b/src/main/java/ru/windcorp/progressia/server/world/TickContext.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world; import java.util.Random; diff --git a/src/main/java/ru/windcorp/progressia/server/world/TickContextMutable.java b/src/main/java/ru/windcorp/progressia/server/world/TickContextMutable.java index 68185d9..81f5c49 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/TickContextMutable.java +++ b/src/main/java/ru/windcorp/progressia/server/world/TickContextMutable.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world; import java.util.Objects; diff --git a/src/main/java/ru/windcorp/progressia/server/world/UpdateTriggerer.java b/src/main/java/ru/windcorp/progressia/server/world/UpdateTriggerer.java index 511170e..07acf55 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/UpdateTriggerer.java +++ b/src/main/java/ru/windcorp/progressia/server/world/UpdateTriggerer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world; import glm.vec._3.i.Vec3i; diff --git a/src/main/java/ru/windcorp/progressia/server/world/WorldLogic.java b/src/main/java/ru/windcorp/progressia/server/world/WorldLogic.java index 93a1028..abd10e4 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/WorldLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/WorldLogic.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world; import java.util.Collection; diff --git a/src/main/java/ru/windcorp/progressia/server/world/block/BlockLogic.java b/src/main/java/ru/windcorp/progressia/server/world/block/BlockLogic.java index 794259f..fcf141d 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/block/BlockLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/block/BlockLogic.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.block; import ru.windcorp.progressia.common.util.namespaces.Namespaced; diff --git a/src/main/java/ru/windcorp/progressia/server/world/block/BlockLogicRegistry.java b/src/main/java/ru/windcorp/progressia/server/world/block/BlockLogicRegistry.java index df18ff7..b50b02f 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/block/BlockLogicRegistry.java +++ b/src/main/java/ru/windcorp/progressia/server/world/block/BlockLogicRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.block; import ru.windcorp.progressia.common.util.namespaces.NamespacedInstanceRegistry; diff --git a/src/main/java/ru/windcorp/progressia/server/world/block/BlockTickContext.java b/src/main/java/ru/windcorp/progressia/server/world/block/BlockTickContext.java index a305b9a..d10f10c 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/block/BlockTickContext.java +++ b/src/main/java/ru/windcorp/progressia/server/world/block/BlockTickContext.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.block; import java.util.Objects; diff --git a/src/main/java/ru/windcorp/progressia/server/world/block/TickableBlock.java b/src/main/java/ru/windcorp/progressia/server/world/block/TickableBlock.java index 56ba938..62b830f 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/block/TickableBlock.java +++ b/src/main/java/ru/windcorp/progressia/server/world/block/TickableBlock.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.block; import ru.windcorp.progressia.server.world.ticking.TickingPolicy; diff --git a/src/main/java/ru/windcorp/progressia/server/world/block/UpdateableBlock.java b/src/main/java/ru/windcorp/progressia/server/world/block/UpdateableBlock.java index 1497c92..d9b931f 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/block/UpdateableBlock.java +++ b/src/main/java/ru/windcorp/progressia/server/world/block/UpdateableBlock.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.block; import org.apache.logging.log4j.LogManager; diff --git a/src/main/java/ru/windcorp/progressia/server/world/entity/EntityLogic.java b/src/main/java/ru/windcorp/progressia/server/world/entity/EntityLogic.java index 7725612..0f33517 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/entity/EntityLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/entity/EntityLogic.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.entity; import ru.windcorp.progressia.common.util.namespaces.Namespaced; diff --git a/src/main/java/ru/windcorp/progressia/server/world/entity/EntityLogicRegistry.java b/src/main/java/ru/windcorp/progressia/server/world/entity/EntityLogicRegistry.java index d8b05d4..a3ecd20 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/entity/EntityLogicRegistry.java +++ b/src/main/java/ru/windcorp/progressia/server/world/entity/EntityLogicRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.entity; import ru.windcorp.progressia.common.util.namespaces.NamespacedInstanceRegistry; diff --git a/src/main/java/ru/windcorp/progressia/server/world/generation/AbstractWorldGenerator.java b/src/main/java/ru/windcorp/progressia/server/world/generation/AbstractWorldGenerator.java index ffb5c06..2753a8f 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/generation/AbstractWorldGenerator.java +++ b/src/main/java/ru/windcorp/progressia/server/world/generation/AbstractWorldGenerator.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.generation; import java.io.DataInputStream; diff --git a/src/main/java/ru/windcorp/progressia/server/world/generation/WorldGenerator.java b/src/main/java/ru/windcorp/progressia/server/world/generation/WorldGenerator.java index afed281..41a7885 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/generation/WorldGenerator.java +++ b/src/main/java/ru/windcorp/progressia/server/world/generation/WorldGenerator.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.generation; import java.io.DataInputStream; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/AddTile.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/AddTile.java index 6e9ea47..238a42f 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/AddTile.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/AddTile.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/BlockTriggeredUpdate.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/BlockTriggeredUpdate.java index 331a5c4..6d8d408 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/BlockTriggeredUpdate.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/BlockTriggeredUpdate.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedBlockChange.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedBlockChange.java index b005285..62cedac 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedBlockChange.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedBlockChange.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedChange.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedChange.java index e1eb5ca..d5db70a 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedChange.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedChange.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedChunkChange.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedChunkChange.java index d98c001..ef4a8cf 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedChunkChange.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedChunkChange.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedEvaluation.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedEvaluation.java index da865b4..5fe1320 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedEvaluation.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedEvaluation.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedTileChange.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedTileChange.java index 1b6cde2..3197def 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedTileChange.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedTileChange.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import java.util.Objects; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedWorldChange.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedWorldChange.java index 711bd5d..c01e83a 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedWorldChange.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/CachedWorldChange.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/ChangeEntity.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/ChangeEntity.java index 08f1212..a7a7072 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/ChangeEntity.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/ChangeEntity.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/RemoveTile.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/RemoveTile.java index 42dea30..0f811b1 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/RemoveTile.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/RemoveTile.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/SetBlock.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/SetBlock.java index 330333b..e4cc4fb 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/SetBlock.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/SetBlock.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/StateChange.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/StateChange.java index 93d5f08..4aa8c7c 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/StateChange.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/StateChange.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; @FunctionalInterface diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/TickChunk.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/TickChunk.java index c0895e1..92e0ff6 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/TickChunk.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/TickChunk.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import java.util.ArrayList; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/TickEntitiesTask.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/TickEntitiesTask.java index 1e76b23..8376c8d 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/TickEntitiesTask.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/TickEntitiesTask.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import glm.vec._3.i.Vec3i; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/TileTriggeredUpdate.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/TileTriggeredUpdate.java index 76fc414..80b91bd 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/TileTriggeredUpdate.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/TileTriggeredUpdate.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tasks/WorldAccessor.java b/src/main/java/ru/windcorp/progressia/server/world/tasks/WorldAccessor.java index 2c83ccd..2069484 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tasks/WorldAccessor.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tasks/WorldAccessor.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tasks; import java.util.function.Consumer; diff --git a/src/main/java/ru/windcorp/progressia/server/world/ticking/Change.java b/src/main/java/ru/windcorp/progressia/server/world/ticking/Change.java index b0fc7f2..4340327 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/ticking/Change.java +++ b/src/main/java/ru/windcorp/progressia/server/world/ticking/Change.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.ticking; import ru.windcorp.progressia.server.Server; diff --git a/src/main/java/ru/windcorp/progressia/server/world/ticking/DevilInvasionException.java b/src/main/java/ru/windcorp/progressia/server/world/ticking/DevilInvasionException.java index 50ff69c..fd146bc 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/ticking/DevilInvasionException.java +++ b/src/main/java/ru/windcorp/progressia/server/world/ticking/DevilInvasionException.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.ticking; public class DevilInvasionException extends RuntimeException { diff --git a/src/main/java/ru/windcorp/progressia/server/world/ticking/Evaluation.java b/src/main/java/ru/windcorp/progressia/server/world/ticking/Evaluation.java index f4f3922..a198361 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/ticking/Evaluation.java +++ b/src/main/java/ru/windcorp/progressia/server/world/ticking/Evaluation.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.ticking; import ru.windcorp.progressia.server.Server; diff --git a/src/main/java/ru/windcorp/progressia/server/world/ticking/Ticker.java b/src/main/java/ru/windcorp/progressia/server/world/ticking/Ticker.java index 8a102ac..d830d0e 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/ticking/Ticker.java +++ b/src/main/java/ru/windcorp/progressia/server/world/ticking/Ticker.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.ticking; import java.util.ArrayList; @@ -115,8 +115,7 @@ class Ticker { } catch (Exception e) { getCoordinator().crash(e, this.name); } - - + } private synchronized boolean sleep() { diff --git a/src/main/java/ru/windcorp/progressia/server/world/ticking/TickerCoordinator.java b/src/main/java/ru/windcorp/progressia/server/world/ticking/TickerCoordinator.java index 7d58d6d..57e742f 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/ticking/TickerCoordinator.java +++ b/src/main/java/ru/windcorp/progressia/server/world/ticking/TickerCoordinator.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.ticking; import java.util.ArrayList; @@ -152,7 +152,7 @@ public class TickerCoordinator { public double getTPS() { return 1 / tickLength; } - + public long getUptimeTicks() { return ticks; } @@ -168,7 +168,7 @@ public class TickerCoordinator { tickStart = System.currentTimeMillis(); } - + private void onTickEnd() { ticks++; } @@ -191,7 +191,7 @@ public class TickerCoordinator { logger.debug("Pass complete"); passes++; } - + onTickEnd(); logger.debug("Tick complete; run {} passes", passes); diff --git a/src/main/java/ru/windcorp/progressia/server/world/ticking/TickerTask.java b/src/main/java/ru/windcorp/progressia/server/world/ticking/TickerTask.java index 4a075c0..fe25d8a 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/ticking/TickerTask.java +++ b/src/main/java/ru/windcorp/progressia/server/world/ticking/TickerTask.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.ticking; import glm.vec._3.i.Vec3i; diff --git a/src/main/java/ru/windcorp/progressia/server/world/ticking/TickingPolicy.java b/src/main/java/ru/windcorp/progressia/server/world/ticking/TickingPolicy.java index a5836fe..e391ca4 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/ticking/TickingPolicy.java +++ b/src/main/java/ru/windcorp/progressia/server/world/ticking/TickingPolicy.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.ticking; import ru.windcorp.progressia.server.world.block.TickableBlock; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tile/HangingTileLogic.java b/src/main/java/ru/windcorp/progressia/server/world/tile/HangingTileLogic.java index 745f289..fdd3a53 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tile/HangingTileLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tile/HangingTileLogic.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tile; import ru.windcorp.progressia.server.world.block.BlockLogic; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tile/TSTickContext.java b/src/main/java/ru/windcorp/progressia/server/world/tile/TSTickContext.java index 399f7b8..7121187 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tile/TSTickContext.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tile/TSTickContext.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tile; import java.util.Objects; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tile/TickableTile.java b/src/main/java/ru/windcorp/progressia/server/world/tile/TickableTile.java index 4def3b0..50a4b15 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tile/TickableTile.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tile/TickableTile.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tile; import ru.windcorp.progressia.server.world.ticking.TickingPolicy; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tile/TileLogic.java b/src/main/java/ru/windcorp/progressia/server/world/tile/TileLogic.java index 4a97ead..c623999 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tile/TileLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tile/TileLogic.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tile; import ru.windcorp.progressia.common.util.namespaces.Namespaced; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tile/TileLogicRegistry.java b/src/main/java/ru/windcorp/progressia/server/world/tile/TileLogicRegistry.java index d8bceaf..cc0fca6 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tile/TileLogicRegistry.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tile/TileLogicRegistry.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tile; import ru.windcorp.progressia.common.util.namespaces.NamespacedInstanceRegistry; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tile/TileLogicStack.java b/src/main/java/ru/windcorp/progressia/server/world/tile/TileLogicStack.java index 5e91963..99d23d5 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tile/TileLogicStack.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tile/TileLogicStack.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tile; import ru.windcorp.progressia.common.world.generic.GenericTileStack; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tile/TileTickContext.java b/src/main/java/ru/windcorp/progressia/server/world/tile/TileTickContext.java index 45f41ec..69dc77d 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tile/TileTickContext.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tile/TileTickContext.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tile; import ru.windcorp.progressia.common.world.tile.TileData; diff --git a/src/main/java/ru/windcorp/progressia/server/world/tile/UpdateableTile.java b/src/main/java/ru/windcorp/progressia/server/world/tile/UpdateableTile.java index bf114fa..0a5aca5 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/tile/UpdateableTile.java +++ b/src/main/java/ru/windcorp/progressia/server/world/tile/UpdateableTile.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server.world.tile; public interface UpdateableTile { diff --git a/src/main/java/ru/windcorp/progressia/test/CollisionModelRenderer.java b/src/main/java/ru/windcorp/progressia/test/CollisionModelRenderer.java index 4c7ca68..7328cef 100644 --- a/src/main/java/ru/windcorp/progressia/test/CollisionModelRenderer.java +++ b/src/main/java/ru/windcorp/progressia/test/CollisionModelRenderer.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import glm.mat._4.Mat4; diff --git a/src/main/java/ru/windcorp/progressia/test/ControlBreakBlockData.java b/src/main/java/ru/windcorp/progressia/test/ControlBreakBlockData.java index a9df57a..d7e8a36 100644 --- a/src/main/java/ru/windcorp/progressia/test/ControlBreakBlockData.java +++ b/src/main/java/ru/windcorp/progressia/test/ControlBreakBlockData.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import glm.vec._3.i.Vec3i; diff --git a/src/main/java/ru/windcorp/progressia/test/ControlPlaceBlockData.java b/src/main/java/ru/windcorp/progressia/test/ControlPlaceBlockData.java index f3e45e2..f83a0cc 100644 --- a/src/main/java/ru/windcorp/progressia/test/ControlPlaceBlockData.java +++ b/src/main/java/ru/windcorp/progressia/test/ControlPlaceBlockData.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import glm.vec._3.i.Vec3i; diff --git a/src/main/java/ru/windcorp/progressia/test/ControlPlaceTileData.java b/src/main/java/ru/windcorp/progressia/test/ControlPlaceTileData.java index 5a37b6f..5835d7b 100644 --- a/src/main/java/ru/windcorp/progressia/test/ControlPlaceTileData.java +++ b/src/main/java/ru/windcorp/progressia/test/ControlPlaceTileData.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import glm.vec._3.i.Vec3i; diff --git a/src/main/java/ru/windcorp/progressia/test/LayerAbout.java b/src/main/java/ru/windcorp/progressia/test/LayerAbout.java index 7b45fd4..b0b89bb 100644 --- a/src/main/java/ru/windcorp/progressia/test/LayerAbout.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerAbout.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import ru.windcorp.progressia.client.graphics.Colors; diff --git a/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java b/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java index 6f829da..d715cea 100644 --- a/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java @@ -39,87 +39,88 @@ import ru.windcorp.progressia.server.Player; import ru.windcorp.progressia.server.ServerState; public class LayerButtonTest extends MenuLayer { - + boolean alive = true; public LayerButtonTest() { super("ButtonTest"); - + addTitle(); - + Button blockableButton; getContent().addChild((blockableButton = new Button("BlockableButton", "Blockable")).addAction(b -> { System.out.println("Button Blockable!"); })); blockableButton.setEnabled(false); - + getContent().addChild(new Checkbox("EnableButton", "Enable").addAction(b -> { blockableButton.setEnabled(((Checkbox) b).isChecked()); })); - + RadioButtonGroup group = new RadioButtonGroup().addAction(g -> { System.out.println("RBG! " + g.getSelected().getLabel().getCurrentText()); }); - + getContent().addChild(new RadioButton("RB1", "Moon").setGroup(group)); getContent().addChild(new RadioButton("RB2", "Type").setGroup(group)); getContent().addChild(new RadioButton("RB3", "Ice").setGroup(group)); getContent().addChild(new RadioButton("RB4", "Cream").setGroup(group)); - + getContent().getChild(getContent().getChildren().size() - 1).setEnabled(false); - + getContent().addChild(new Label("Hint", new Font().withColor(Colors.LIGHT_GRAY), "This is a MenuLayer")); - + getContent().addChild(new Button("Continue", "Continue").addAction(b -> { getCloseAction().run(); })); - + getContent().addChild(new Button("Menu", "Back To Menu").addAction(b -> { - //System.exit(0); - //for (Layer layer : GUI.getLayers()) - //{ - // GUI.removeLayer(layer); - //} + // System.exit(0); + // for (Layer layer : GUI.getLayers()) + // { + // GUI.removeLayer(layer); + // } getCloseAction().run(); - - //ClientState.getInstance().; - + + // ClientState.getInstance().; + Collection players = ServerState.getInstance().getPlayerManager().getPlayers(); players.clear(); - + ClientState.disconnectFromLocalServer(); - + MutableString t = new MutableStringLocalized("LayerText.Save"); - LayerTestText layer = new LayerTestText("Text",() -> {t.update(); return t.get();}); - + LayerTestText layer = new LayerTestText("Text", () -> { + t.update(); + return t.get(); + }); + GUI.addTopLayer(layer); - + ChunkManager cm = ServerState.getInstance().getChunkManager(); alive = true; - cm.register((ChunksLoadFinishListener)() -> { - if (alive) - { + cm.register((ChunksLoadFinishListener) () -> { + if (alive) { GUI.removeLayer(layer); GUI.addTopLayer(new LayerTitle("Title")); - //cm.unregisterAll(); + // cm.unregisterAll(); alive = false; - - //ServerState.getInstance().; + + // ServerState.getInstance().; ServerState.getInstance().shutdown("Safe Exit"); ServerState.setInstance(null); - + TestPlayerControls.resetInstance(); } }); - - //ClientState.getInstance(); + + // ClientState.getInstance(); ClientState.setInstance(null); - //ServerState.getInstance().getChunkManager().unloadAll(); - - + // ServerState.getInstance().getChunkManager().unloadAll(); + })); - + getContent().takeFocus(); } diff --git a/src/main/java/ru/windcorp/progressia/test/LayerTestGUI.java b/src/main/java/ru/windcorp/progressia/test/LayerTestGUI.java index fb69ca3..e5b95fa 100755 --- a/src/main/java/ru/windcorp/progressia/test/LayerTestGUI.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerTestGUI.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import glm.vec._3.Vec3; diff --git a/src/main/java/ru/windcorp/progressia/test/LayerTestText.java b/src/main/java/ru/windcorp/progressia/test/LayerTestText.java index 3cfef00..fef1b23 100644 --- a/src/main/java/ru/windcorp/progressia/test/LayerTestText.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerTestText.java @@ -10,15 +10,15 @@ import ru.windcorp.progressia.client.graphics.gui.layout.LayoutVertical; public class LayerTestText extends GUILayer { public LayerTestText(String name, Supplier value) { - super(name, new LayoutVertical(20,10)); - - //MutableString title = new MutableStringLocalized("Layer"+name+".Title"); + super(name, new LayoutVertical(20, 10)); + + // MutableString title = new + // MutableStringLocalized("Layer"+name+".Title"); Font titleFont = new Font().deriveBold().withColor(Colors.BLACK).withAlign(0.5f); - getRoot().addChild(new Label(name+".Text", titleFont, value)); + getRoot().addChild(new Label(name + ".Text", titleFont, value)); } - - public LayerTestText(String name, String value) - { - this(name,() -> value); + + public LayerTestText(String name, String value) { + this(name, () -> value); } } diff --git a/src/main/java/ru/windcorp/progressia/test/LayerTestUI.java b/src/main/java/ru/windcorp/progressia/test/LayerTestUI.java index c93a055..08d527e 100755 --- a/src/main/java/ru/windcorp/progressia/test/LayerTestUI.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerTestUI.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import org.lwjgl.glfw.GLFW; diff --git a/src/main/java/ru/windcorp/progressia/test/LayerTitle.java b/src/main/java/ru/windcorp/progressia/test/LayerTitle.java index c739651..d2ba139 100644 --- a/src/main/java/ru/windcorp/progressia/test/LayerTitle.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerTitle.java @@ -14,21 +14,22 @@ import ru.windcorp.progressia.client.localization.MutableStringLocalized; public class LayerTitle extends GUILayer { public LayerTitle(String name) { - super(name, new LayoutVertical(20,10)); - - MutableString title = new MutableStringLocalized("Layer"+name+".Title"); + super(name, new LayoutVertical(20, 10)); + + MutableString title = new MutableStringLocalized("Layer" + name + ".Title"); Font titleFont = new Font().deriveBold().withColor(Colors.BLACK).withAlign(0.5f); - getRoot().addChild(new Label(name+".Title", titleFont, title)); - + getRoot().addChild(new Label(name + ".Title", titleFont, title)); + Font buttonFont = titleFont; - MutableString playText = new MutableStringLocalized("Layer"+name+".Play"); - getRoot().addChild(new Button(name+".Play", new Label(name+".Play", buttonFont, playText)).addAction(b -> { + MutableString playText = new MutableStringLocalized("Layer" + name + ".Play"); + getRoot().addChild(new Button(name + ".Play", new Label(name + ".Play", buttonFont, playText)).addAction(b -> { GUI.removeLayer(this); - - ProgressiaLauncher.play();})); - - MutableString quitText = new MutableStringLocalized("Layer"+name+".Quit"); - getRoot().addChild(new Button(name+"Quit", new Label(name+".Quit", buttonFont, quitText)).addAction(b -> { + + ProgressiaLauncher.play(); + })); + + MutableString quitText = new MutableStringLocalized("Layer" + name + ".Quit"); + getRoot().addChild(new Button(name + "Quit", new Label(name + ".Quit", buttonFont, quitText)).addAction(b -> { System.exit(0); })); } diff --git a/src/main/java/ru/windcorp/progressia/test/TestBlockLogicAir.java b/src/main/java/ru/windcorp/progressia/test/TestBlockLogicAir.java index e378dbf..e9877e9 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestBlockLogicAir.java +++ b/src/main/java/ru/windcorp/progressia/test/TestBlockLogicAir.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import ru.windcorp.progressia.common.world.block.BlockFace; diff --git a/src/main/java/ru/windcorp/progressia/test/TestBlockLogicGlass.java b/src/main/java/ru/windcorp/progressia/test/TestBlockLogicGlass.java index eca9e5c..e58cc3d 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestBlockLogicGlass.java +++ b/src/main/java/ru/windcorp/progressia/test/TestBlockLogicGlass.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import ru.windcorp.progressia.common.world.block.BlockFace; diff --git a/src/main/java/ru/windcorp/progressia/test/TestChunkCodec.java b/src/main/java/ru/windcorp/progressia/test/TestChunkCodec.java index a4f891b..a39f53f 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestChunkCodec.java +++ b/src/main/java/ru/windcorp/progressia/test/TestChunkCodec.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import java.io.DataInput; diff --git a/src/main/java/ru/windcorp/progressia/test/TestContent.java b/src/main/java/ru/windcorp/progressia/test/TestContent.java index dad5496..003f5a3 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestContent.java +++ b/src/main/java/ru/windcorp/progressia/test/TestContent.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import static ru.windcorp.progressia.client.world.block.BlockRenderRegistry.getBlockTexture; @@ -287,7 +287,7 @@ public class TestContent { ) ); logic.register(ControlLogic.of("Test:PlaceTile", TestContent::onTilePlaceReceived)); - + triggers.register( ControlTriggers.localOf( "Test:StartNextMusic", diff --git a/src/main/java/ru/windcorp/progressia/test/TestEntityDataStatie.java b/src/main/java/ru/windcorp/progressia/test/TestEntityDataStatie.java index 94f5043..6bbee70 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestEntityDataStatie.java +++ b/src/main/java/ru/windcorp/progressia/test/TestEntityDataStatie.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import ru.windcorp.progressia.common.collision.AABB; diff --git a/src/main/java/ru/windcorp/progressia/test/TestEntityLogicStatie.java b/src/main/java/ru/windcorp/progressia/test/TestEntityLogicStatie.java index 5fa66fb..f27abfe 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestEntityLogicStatie.java +++ b/src/main/java/ru/windcorp/progressia/test/TestEntityLogicStatie.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import ru.windcorp.progressia.common.world.entity.EntityData; diff --git a/src/main/java/ru/windcorp/progressia/test/TestEntityRenderHuman.java b/src/main/java/ru/windcorp/progressia/test/TestEntityRenderHuman.java index 388d89c..3357f82 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestEntityRenderHuman.java +++ b/src/main/java/ru/windcorp/progressia/test/TestEntityRenderHuman.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import static java.lang.Math.toRadians; diff --git a/src/main/java/ru/windcorp/progressia/test/TestEntityRenderJavapony.java b/src/main/java/ru/windcorp/progressia/test/TestEntityRenderJavapony.java index aefa1c6..1e567d6 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestEntityRenderJavapony.java +++ b/src/main/java/ru/windcorp/progressia/test/TestEntityRenderJavapony.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import java.util.ArrayList; diff --git a/src/main/java/ru/windcorp/progressia/test/TestEntityRenderStatie.java b/src/main/java/ru/windcorp/progressia/test/TestEntityRenderStatie.java index 47990fd..12fd113 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestEntityRenderStatie.java +++ b/src/main/java/ru/windcorp/progressia/test/TestEntityRenderStatie.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import ru.windcorp.progressia.client.graphics.model.Renderable; diff --git a/src/main/java/ru/windcorp/progressia/test/TestMusicPlayer.java b/src/main/java/ru/windcorp/progressia/test/TestMusicPlayer.java index 1674d5b..ac221d8 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestMusicPlayer.java +++ b/src/main/java/ru/windcorp/progressia/test/TestMusicPlayer.java @@ -38,41 +38,41 @@ import ru.windcorp.progressia.common.resource.ResourceManager; import ru.windcorp.progressia.common.util.crash.CrashReports; public class TestMusicPlayer implements Runnable { - + private static final int MIN_SILENCE = 15 * 1000; // 15 seconds private static final int MAX_SILENCE = 60 * 1000; // one minute - + private static TestMusicPlayer instance = null; - + private final List compositions = new ArrayList<>(); - + private final Random random = new Random(); private long nextStart; private Sound lastStarted = null; - + public TestMusicPlayer() { this.nextStart = System.currentTimeMillis(); - + instance = this; } - + public static void start() { Thread thread = new Thread(new TestMusicPlayer(), "Music Thread"); thread.setDaemon(true); thread.start(); } - + @Override public void run() { loadCompositions(); - + if (compositions.isEmpty()) { LogManager.getLogger().warn("No music found"); return; } - + while (true) { - + try { synchronized (this) { while (true) { @@ -88,39 +88,39 @@ public class TestMusicPlayer implements Runnable { LogManager.getLogger().warn("Received interrupt in music thread, terminating thread..."); return; } - + startNextComposition(); - + } } private void loadCompositions() { try { - + Path directory = Paths.get("music"); - + if (!Files.isDirectory(directory)) { Files.createDirectories(directory); } - + Iterator it = Files.walk(directory).filter(Files::isRegularFile).iterator(); int i = 0; - + while (it.hasNext()) { String file = it.next().toString(); if (!file.endsWith(".ogg") && !file.endsWith(".oga")) { LogManager.getLogger().warn("Skipping " + file + ": not .ogg nor .oga"); } - + String id = "Progressia:Music" + (i++); - + AudioManager.loadSound(ResourceManager.getFileResource(file.toString()), id, AudioFormat.STEREO); SoundType composition = AudioRegistry.getInstance().get(id); compositions.add(composition); - + LogManager.getLogger().info("Loaded " + file); } - + } catch (IOException e) { throw CrashReports.report(e, "Could not load music"); } @@ -129,20 +129,21 @@ public class TestMusicPlayer implements Runnable { private synchronized void startNextComposition() { int index = random.nextInt(compositions.size()); SoundType composition = compositions.get(index); - + long now = System.currentTimeMillis(); long durationInMs = (long) (composition.getDuration() * 1000); long silence = random.nextInt(MAX_SILENCE - MIN_SILENCE) + MIN_SILENCE; - + nextStart = now + durationInMs + silence; - + lastStarted = new Music(composition); lastStarted.play(false); } - + public static void startNextNow() { - if (instance == null) return; - + if (instance == null) + return; + synchronized (instance) { instance.nextStart = System.currentTimeMillis(); instance.notifyAll(); diff --git a/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java b/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java index 960a97e..f2d557e 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java +++ b/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import glm.Glm; @@ -90,9 +90,8 @@ public class TestPlayerControls { private LayerTestGUI debugLayer = null; private Runnable updateCallback = null; - - public static void resetInstance() - { + + public static void resetInstance() { INSTANCE = new TestPlayerControls(); } @@ -188,7 +187,7 @@ public class TestPlayerControls { case GLFW.GLFW_KEY_ESCAPE: if (!event.isPress()) return false; - + handleEscape(); break; diff --git a/src/main/java/ru/windcorp/progressia/test/TestTileLogicGrass.java b/src/main/java/ru/windcorp/progressia/test/TestTileLogicGrass.java index 06afc77..e6514ca 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestTileLogicGrass.java +++ b/src/main/java/ru/windcorp/progressia/test/TestTileLogicGrass.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test; import ru.windcorp.progressia.common.world.block.BlockFace; diff --git a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java index cbb294b..355b7dc 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java @@ -78,25 +78,29 @@ public class TestWorldDiskIO { return loc << 1; } - /*private static int intFromNat(int loc) // Possibly unused - { - if ((loc & 1) == 1) - return -loc >> 1; - return loc >> 1; - }*/ + /* + * private static int intFromNat(int loc) // Possibly unused + * { + * if ((loc & 1) == 1) + * return -loc >> 1; + * return loc >> 1; + * } + */ private static Vec3i getRegion(Vec3i chunkLoc) { - return new Vec3i(natFromInt(chunkLoc.x/regionSize.x), natFromInt(chunkLoc.y/regionSize.y), natFromInt(chunkLoc.z/regionSize.z)); + return new Vec3i( + natFromInt(chunkLoc.x / regionSize.x), + natFromInt(chunkLoc.y / regionSize.y), + natFromInt(chunkLoc.z / regionSize.z) + ); } - - private static int mod(int a, int m) - { - return ((a%m)+m)%m; + + private static int mod(int a, int m) { + return ((a % m) + m) % m; } - - private static Vec3i getRegionLoc(Vec3i chunkLoc) - { - return new Vec3i(mod(chunkLoc.x,regionSize.x),mod(chunkLoc.y,regionSize.y),mod(chunkLoc.z,regionSize.z)); + + private static Vec3i getRegionLoc(Vec3i chunkLoc) { + return new Vec3i(mod(chunkLoc.x, regionSize.x), mod(chunkLoc.y, regionSize.y), mod(chunkLoc.z, regionSize.z)); } public static void initRegions() { @@ -129,10 +133,9 @@ public class TestWorldDiskIO { break; } } - - private static void expand(int sectors) - { - + + private static void expand(int sectors) { + } public static void saveChunk(ChunkData chunk, Server server) { @@ -197,20 +200,18 @@ public class TestWorldDiskIO { ChunkIO.save(chunk, output, IOContext.SAVE); writeGenerationHint(chunk, output, server); } - } - else if (currentFormat == 65536) - { + } else if (currentFormat == 65536) { LOG.debug( "Saving {} {} {}", chunk.getPosition().x, chunk.getPosition().y, chunk.getPosition().z ); - + Files.createDirectories(SAVE_DIR); - + Vec3i saveCoords = getRegion(chunk.getPosition()); - + Path path = SAVE_DIR.resolve( String.format( "%d_%d_%d" + extension, @@ -219,49 +220,53 @@ public class TestWorldDiskIO { saveCoords.z ) ); - - /*if (!dosave) - { - return; - } - dosave = false;*/ - + + /* + * if (!dosave) + * { + * return; + * } + * dosave = false; + */ + try ( RandomAccessFile output = new RandomAccessFile(path.toFile(), "rw") ) { - //LOG.debug(output.read()); - if (output.read()<0) - { + // LOG.debug(output.read()); + if (output.read() < 0) { LOG.info("Making header"); - output.writeChars("\0".repeat((offsetBytes+1)*chunksPerRegion)); + output.writeChars("\0".repeat((offsetBytes + 1) * chunksPerRegion)); } - + Vec3i pos = getRegionLoc(chunk.getPosition()); - int shortOffset = (offsetBytes+1)*(pos.z+regionSize.z*(pos.y + regionSize.y*pos.x)); - int fullOffset = (offsetBytes+1)*(chunksPerRegion); + int shortOffset = (offsetBytes + 1) * (pos.z + regionSize.z * (pos.y + regionSize.y * pos.x)); + int fullOffset = (offsetBytes + 1) * (chunksPerRegion); output.seek(shortOffset); int offset = output.readInt(); - int sectorLength = offset&255; + int sectorLength = offset & 255; offset = offset >> 8; - if (sectorLength == 0) - { + if (sectorLength == 0) { int outputLen = (int) output.length(); - offset = (int) (outputLen-fullOffset)/sectorSize+1; + offset = (int) (outputLen - fullOffset) / sectorSize + 1; output.seek(shortOffset); - output.writeInt(offset<<8); + output.writeInt(offset << 8); output.seek(outputLen); - /*while (output.length()>24); - LOG.debug(bfClone>>24); + + for (int i = 0; i < 4; i++) { + bw.write(bfClone >> 24); + LOG.debug(bfClone >> 24); bfClone = bfClone << 8; } - /*bw.write( - new char[] { - (char) bestFormat / (256 * 256 * 256), - (char) (bestFormat % 256) / (256 * 256), - (char) (bestFormat % (256 * 256)) / (256), - (char) (bestFormat % (256 * 256 * 256)) } - );*/ + /* + * bw.write( + * new char[] { + * (char) bestFormat / (256 * 256 * 256), + * (char) (bestFormat % 256) / (256 * 256), + * (char) (bestFormat % (256 * 256)) / (256), + * (char) (bestFormat % (256 * 256 * 256)) } + * ); + */ bw.close(); } catch (IOException e) { @@ -470,7 +478,7 @@ public class TestWorldDiskIO { saveCoords.z ) ); - + if (!Files.exists(path)) { LOG.debug( "Not found {} {} {}", @@ -520,33 +528,34 @@ public class TestWorldDiskIO { return chunk; } } - - private static ChunkData loadRegion(Path path, Vec3i chunkPos, WorldData world, Server server) throws IOException, DecodingException - { + + private static ChunkData loadRegion(Path path, Vec3i chunkPos, WorldData world, Server server) + throws IOException, + DecodingException { try ( BufferedInputStream input = new BufferedInputStream(Files.newInputStream(path)) ) { - LOG.info(path.toString()); + // LOG.info(path.toString()); Vec3i pos = getRegionLoc(chunkPos); - int shortOffset = (offsetBytes+1)*(pos.z+regionSize.z*(pos.y + regionSize.y*pos.x)); - int fullOffset = (offsetBytes+1)*(chunksPerRegion); + int shortOffset = (offsetBytes + 1) * (pos.z + regionSize.z * (pos.y + regionSize.y * pos.x)); + int fullOffset = (offsetBytes + 1) * (chunksPerRegion); input.skipNBytes(shortOffset); int offset = 0; - for (int i=0;i. */ - + package ru.windcorp.progressia.test.gen; import kdotjpg.opensimplex2.areagen.OpenSimplex2S; diff --git a/src/main/java/ru/windcorp/progressia/test/gen/TestWorldGenerator.java b/src/main/java/ru/windcorp/progressia/test/gen/TestWorldGenerator.java index 1b35ffc..22eedc9 100644 --- a/src/main/java/ru/windcorp/progressia/test/gen/TestWorldGenerator.java +++ b/src/main/java/ru/windcorp/progressia/test/gen/TestWorldGenerator.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.test.gen; import java.io.DataInputStream; From e4ced6507eb65ba37f0e1023b6176f52b4a94dce Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Wed, 18 Aug 2021 18:50:48 -0400 Subject: [PATCH 13/31] Hash Things -Removed unused imports -Using HashMap to keep track of RandomAccessFile instances -Using those instances to do stuff -Made new HashableVec3i class that allows for hashing of 3d vectors. --- .../progressia/client/ClientProxy.java | 1 - .../progressia/common/util/HashableVec3i.java | 26 ++++++++++ .../progressia/server/ServerThread.java | 1 + .../progressia/test/LayerButtonTest.java | 2 - .../progressia/test/TestWorldDiskIO.java | 48 +++++++++++-------- 5 files changed, 55 insertions(+), 23 deletions(-) create mode 100644 src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java diff --git a/src/main/java/ru/windcorp/progressia/client/ClientProxy.java b/src/main/java/ru/windcorp/progressia/client/ClientProxy.java index ab0b476..65bd1c0 100644 --- a/src/main/java/ru/windcorp/progressia/client/ClientProxy.java +++ b/src/main/java/ru/windcorp/progressia/client/ClientProxy.java @@ -33,7 +33,6 @@ import ru.windcorp.progressia.common.util.crash.CrashReports; import ru.windcorp.progressia.server.ServerState; import ru.windcorp.progressia.test.TestContent; import ru.windcorp.progressia.test.TestMusicPlayer; -import ru.windcorp.progressia.test.TestPlayerControls; public class ClientProxy implements Proxy { diff --git a/src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java b/src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java new file mode 100644 index 0000000..e513b52 --- /dev/null +++ b/src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java @@ -0,0 +1,26 @@ +package ru.windcorp.progressia.common.util; + +import glm.vec._3.i.Vec3i; + +public class HashableVec3i { + + public Vec3i value; + + public HashableVec3i(Vec3i inValue) + { + value = inValue; + } + + @Override + public int hashCode() // Uses first 3 primes greater than 2**30 + { + return 1073741827 * value.x + 1073741831 * value.y + 1073741833 * value.z; + } + + @Override + public boolean equals(Object comparee) + { + return hashCode() == comparee.hashCode(); + } + +} diff --git a/src/main/java/ru/windcorp/progressia/server/ServerThread.java b/src/main/java/ru/windcorp/progressia/server/ServerThread.java index 7420c2b..aa0ff67 100644 --- a/src/main/java/ru/windcorp/progressia/server/ServerThread.java +++ b/src/main/java/ru/windcorp/progressia/server/ServerThread.java @@ -26,6 +26,7 @@ import org.apache.logging.log4j.LogManager; import ru.windcorp.progressia.common.util.crash.CrashReports; import ru.windcorp.progressia.server.world.ticking.TickerCoordinator; +@SuppressWarnings("unused") public class ServerThread implements Runnable { private static final ThreadLocal SERVER_THREADS_MAP = new ThreadLocal<>(); diff --git a/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java b/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java index d715cea..2b86ee0 100644 --- a/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerButtonTest.java @@ -22,7 +22,6 @@ import java.util.Collection; import ru.windcorp.progressia.client.ClientState; import ru.windcorp.progressia.client.graphics.Colors; import ru.windcorp.progressia.client.graphics.GUI; -import ru.windcorp.progressia.client.graphics.Layer; import ru.windcorp.progressia.client.graphics.font.Font; import ru.windcorp.progressia.client.graphics.gui.Button; import ru.windcorp.progressia.client.graphics.gui.Checkbox; @@ -34,7 +33,6 @@ import ru.windcorp.progressia.client.localization.MutableString; import ru.windcorp.progressia.client.localization.MutableStringLocalized; import ru.windcorp.progressia.server.ChunkManager; import ru.windcorp.progressia.server.ChunkManager.ChunksLoadFinishListener; -import ru.windcorp.progressia.server.ChunkManager.ChunksLoadListener; import ru.windcorp.progressia.server.Player; import ru.windcorp.progressia.server.ServerState; diff --git a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java index 355b7dc..7122c25 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java @@ -34,6 +34,7 @@ import java.nio.channels.Channels; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.HashMap; import java.util.Scanner; import java.util.zip.DeflaterOutputStream; import java.util.zip.InflaterInputStream; @@ -41,10 +42,9 @@ import java.util.zip.InflaterInputStream; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import com.google.common.io.CountingOutputStream; - import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.state.IOContext; +import ru.windcorp.progressia.common.util.HashableVec3i; import ru.windcorp.progressia.common.world.ChunkData; import ru.windcorp.progressia.common.world.DecodingException; import ru.windcorp.progressia.common.world.WorldData; @@ -56,7 +56,8 @@ public class TestWorldDiskIO { private static Path SAVE_DIR = Paths.get("tmp_world"); private static final String formatFile = "world.format"; private static final Logger LOG = LogManager.getLogger("TestWorldDiskIO"); - + + private static HashMap randomAccessMap; private static final boolean ENABLE = true; private static int maxSize = 1048576; @@ -116,6 +117,7 @@ public class TestWorldDiskIO { } private static void setRegionSize(int format) { + randomAccessMap = new HashMap(); switch (format) { case 0: case 1: @@ -134,9 +136,9 @@ public class TestWorldDiskIO { } } - private static void expand(int sectors) { + /*private static void expand(int sectors) { - } + }*/ public static void saveChunk(ChunkData chunk, Server server) { if (!ENABLE) @@ -229,9 +231,13 @@ public class TestWorldDiskIO { * dosave = false; */ - try ( - RandomAccessFile output = new RandomAccessFile(path.toFile(), "rw") - ) { + + RandomAccessFile output = randomAccessMap.get(new HashableVec3i(saveCoords)); + if (output == null) + { + output = new RandomAccessFile(path.toFile(), "rw"); + randomAccessMap.put(new HashableVec3i(saveCoords), output); + } // LOG.debug(output.read()); if (output.read() < 0) { LOG.info("Making header"); @@ -303,9 +309,6 @@ public class TestWorldDiskIO { // LOG.info("Used {} sectors",(int) // tempData.length/sectorSize + 1); - output.close(); - - } } // else if (currentFormat) } catch (IOException e) { @@ -532,35 +535,40 @@ public class TestWorldDiskIO { private static ChunkData loadRegion(Path path, Vec3i chunkPos, WorldData world, Server server) throws IOException, DecodingException { - try ( - BufferedInputStream input = new BufferedInputStream(Files.newInputStream(path)) - ) { + Vec3i streamCoords = getRegion(chunkPos); + + RandomAccessFile input = randomAccessMap.get(new HashableVec3i(streamCoords)); + if (input == null) + { + input = new RandomAccessFile(path.toFile(), "rw"); + randomAccessMap.put(new HashableVec3i(streamCoords), input); + } + // LOG.info(path.toString()); Vec3i pos = getRegionLoc(chunkPos); + int shortOffset = (offsetBytes + 1) * (pos.z + regionSize.z * (pos.y + regionSize.y * pos.x)); int fullOffset = (offsetBytes + 1) * (chunksPerRegion); - input.skipNBytes(shortOffset); + input.seek(shortOffset); int offset = 0; for (int i = 0; i < offsetBytes; i++) { offset *= 256; offset += input.read(); } int sectorLength = input.read(); - input.skipNBytes(fullOffset - shortOffset - offsetBytes - 1); - input.skipNBytes(sectorSize * offset); + input.seek(fullOffset + sectorSize * offset); // LOG.info("Read {} sectors", sectorLength); - byte tempData[] = input.readNBytes(sectorSize * sectorLength); + byte tempData[] = new byte[sectorSize * sectorLength]; + input.read(tempData); DataInputStream trueInput = new DataInputStream( new InflaterInputStream(new BufferedInputStream(new ByteArrayInputStream(tempData))) ); ChunkData chunk = ChunkIO.load(world, chunkPos, trueInput, IOContext.SAVE); readGenerationHint(chunk, trueInput, server); - trueInput.close(); return chunk; - } } private static void readGenerationHint(ChunkData chunk, DataInputStream input, Server server) From fae09edb16d9acd4231eb30e7b6c69105852412c Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Thu, 19 Aug 2021 10:47:16 -0400 Subject: [PATCH 14/31] Fixes n Speed n Stuff -Better comparison for HashableVec3i -Changed RandomAccessFile to MappedByteBuffer -natFromInt now works properly -better region selection -Changes to make different strategies work --- .../progressia/common/util/HashableVec3i.java | 11 +- .../progressia/test/TestWorldDiskIO.java | 169 +++++++++++++----- 2 files changed, 138 insertions(+), 42 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java b/src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java index e513b52..b94f79d 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java +++ b/src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java @@ -20,7 +20,16 @@ public class HashableVec3i { @Override public boolean equals(Object comparee) { - return hashCode() == comparee.hashCode(); + if (comparee == null) + { + return false; + } + if (comparee.getClass() != HashableVec3i.class) + { + return false; + } + HashableVec3i compareeCast = (HashableVec3i) comparee; + return compareeCast.value == value; } } diff --git a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java index 7122c25..6859028 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java @@ -25,12 +25,15 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; +import java.io.EOFException; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; -import java.nio.channels.Channels; +import java.nio.ByteBuffer; +import java.nio.MappedByteBuffer; +import java.nio.channels.FileChannel; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -57,7 +60,7 @@ public class TestWorldDiskIO { private static final String formatFile = "world.format"; private static final Logger LOG = LogManager.getLogger("TestWorldDiskIO"); - private static HashMap randomAccessMap; + private static HashMap mappedByteMap; private static final boolean ENABLE = true; private static int maxSize = 1048576; @@ -75,8 +78,8 @@ public class TestWorldDiskIO { private static int natFromInt(int loc) { if (loc < 0) - return (-loc) << 1 + 1; - return loc << 1; + return -2*loc - 1; + return 2*loc; } /* @@ -89,10 +92,40 @@ public class TestWorldDiskIO { */ private static Vec3i getRegion(Vec3i chunkLoc) { + int x = chunkLoc.x; + if (x<0) + { + x /= regionSize.x; + x--; + } + else + { + x /= regionSize.x; + } + int y = chunkLoc.y; + if (y<0) + { + y /= regionSize.y; + y--; + } + else + { + y /= regionSize.y; + } + int z = chunkLoc.z; + if (z<0) + { + z /= regionSize.z; + z--; + } + else + { + z /= regionSize.z; + } return new Vec3i( - natFromInt(chunkLoc.x / regionSize.x), - natFromInt(chunkLoc.y / regionSize.y), - natFromInt(chunkLoc.z / regionSize.z) + natFromInt(x), + natFromInt(y), + natFromInt(z) ); } @@ -115,9 +148,19 @@ public class TestWorldDiskIO { // regions.put(new Vec3i(0,0,0), new Vec3i(1,1,1)); } + + public static int getAvailableSector(MappedByteBuffer mbb) + { + int sectorsUsed = 0; + for (int i=offsetBytes; i<(offsetBytes+1)*chunksPerRegion; i+= (offsetBytes+1)) + { + sectorsUsed += mbb.get(i); + } + return sectorsUsed; + } private static void setRegionSize(int format) { - randomAccessMap = new HashMap(); + mappedByteMap = new HashMap(); switch (format) { case 0: case 1: @@ -232,38 +275,54 @@ public class TestWorldDiskIO { */ - RandomAccessFile output = randomAccessMap.get(new HashableVec3i(saveCoords)); + MappedByteBuffer output = mappedByteMap.get(new HashableVec3i(saveCoords)); + LOG.info("saveCoords {},{},{}", saveCoords.x, saveCoords.y, saveCoords.z); if (output == null) { - output = new RandomAccessFile(path.toFile(), "rw"); - randomAccessMap.put(new HashableVec3i(saveCoords), output); + output = makeNew(path, new HashableVec3i(saveCoords)); } // LOG.debug(output.read()); - if (output.read() < 0) { + if (output.get() < 0) { LOG.info("Making header"); - output.writeChars("\0".repeat((offsetBytes + 1) * chunksPerRegion)); + ByteBuffer headerBytes = ByteBuffer.allocate((offsetBytes + 1) * chunksPerRegion); + for (int i=0;i<(offsetBytes + 1) * chunksPerRegion;i++) + { + headerBytes.put(i, (byte) 0); + } + output.put(headerBytes); } Vec3i pos = getRegionLoc(chunk.getPosition()); int shortOffset = (offsetBytes + 1) * (pos.z + regionSize.z * (pos.y + regionSize.y * pos.x)); int fullOffset = (offsetBytes + 1) * (chunksPerRegion); - output.seek(shortOffset); - int offset = output.readInt(); - int sectorLength = offset & 255; - offset = offset >> 8; + output.position(shortOffset); + int offset = 0; + for (int i = 0; i < offsetBytes; i++) { + offset *= 256; + offset += output.get(); + } + ByteBuffer readOffset = ByteBuffer.allocate(offsetBytes); + int sectorLength = output.get(); if (sectorLength == 0) { - int outputLen = (int) output.length(); - offset = (int) (outputLen - fullOffset) / sectorSize + 1; - output.seek(shortOffset); - output.writeInt(offset << 8); - output.seek(outputLen); - /* - * while (output.length() Date: Wed, 25 Aug 2021 16:15:38 -0400 Subject: [PATCH 15/31] -Better HashableVec3i compare -Added RandomFileMapped class -Made it a wrapper for RandomAccessFile and contains maps of locations and lengths -Added confirmHeaderHealth method to made sure the file isnt corrupted -Changed everything from MappedByteBuffers to RandomFileMappeds. --- .../progressia/common/util/HashableVec3i.java | 2 +- .../progressia/test/TestWorldDiskIO.java | 307 +++++++++++------- 2 files changed, 198 insertions(+), 111 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java b/src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java index b94f79d..f003555 100644 --- a/src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java +++ b/src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java @@ -29,7 +29,7 @@ public class HashableVec3i { return false; } HashableVec3i compareeCast = (HashableVec3i) comparee; - return compareeCast.value == value; + return compareeCast.value.x == value.x && compareeCast.value.y == value.y && compareeCast.value.z == value.z ; } } diff --git a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java index b79a90e..e52c94c 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java @@ -31,14 +31,13 @@ import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; -import java.nio.ByteBuffer; -import java.nio.MappedByteBuffer; -import java.nio.channels.FileChannel; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; +import java.util.HashSet; import java.util.Scanner; +import java.util.Set; import java.util.zip.DeflaterOutputStream; import java.util.zip.InflaterInputStream; @@ -55,12 +54,78 @@ import ru.windcorp.progressia.common.world.io.ChunkIO; import ru.windcorp.progressia.server.Server; public class TestWorldDiskIO { + + private static final boolean resetCorrupted = true; + + public static class RandomFileMapped { + public RandomAccessFile file; + public HashMap offsets; + public HashMap lengths; + + public RandomFileMapped(RandomAccessFile inFile) + { + boolean check = false; + offsets = new HashMap<>(); + lengths = new HashMap<>(); + try { + check = confirmHeaderHealth(inFile, offsets, lengths); + } catch (IOException e) { + e.printStackTrace(); + } + if (!check) + { + LOG.debug("Uh the file broke"); + if (resetCorrupted) { + byte headerBytes[] = new byte[4 * chunksPerRegion]; + for (int i = 0; i < 4 * chunksPerRegion; i++) { + headerBytes[i] = (byte) 0; + } + try { + inFile.write(headerBytes); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + + file = inFile; + } + + public int getOffset(Vec3i chunkLoc) + { + return offsets.get(new HashableVec3i(chunkLoc)); + } + + public boolean hasOffset(Vec3i pos) { + return offsets.containsKey(new HashableVec3i(pos)); + } + + public void putOffset(Vec3i pos, int offset) + { + offsets.put(new HashableVec3i(pos), offset); + } + + public int getLength(Vec3i chunkLoc) + { + return lengths.get(new HashableVec3i(chunkLoc)); + } + + public boolean hasLength(Vec3i pos) { + return lengths.containsKey(new HashableVec3i(pos)); + } + + public void putLength(Vec3i pos, int length) + { + lengths.put(new HashableVec3i(pos), length); + } + } private static Path SAVE_DIR = Paths.get("tmp_world"); private static final String formatFile = "world.format"; private static final Logger LOG = LogManager.getLogger("TestWorldDiskIO"); - private static HashMap mappedByteMap; + private static HashMap inOutMap; private static final boolean ENABLE = true; private static int maxSize = 1048576; @@ -71,7 +136,6 @@ public class TestWorldDiskIO { // private Map regions = new HashMap(); private static Vec3i regionSize; private static int chunksPerRegion; - private static int offsetBytes; private static int currentFormat = -1; private static String extension = ".null"; @@ -149,18 +213,19 @@ public class TestWorldDiskIO { // regions.put(new Vec3i(0,0,0), new Vec3i(1,1,1)); } - public static int getAvailableSector(MappedByteBuffer mbb) + /*public static int getAvailableSector(MappedByteBuffer mbb) { int sectorsUsed = 0; for (int i=offsetBytes; i<(offsetBytes+1)*chunksPerRegion; i+= (offsetBytes+1)) { + sectorsUsed += mbb.get(i); } return sectorsUsed; - } + }*/ private static void setRegionSize(int format) { - mappedByteMap = new HashMap(); + inOutMap = new HashMap(); switch (format) { case 0: case 1: @@ -173,15 +238,49 @@ public class TestWorldDiskIO { regionSize = new Vec3i(16); chunksPerRegion = 16 * 16 * 16; currentFormat = 65536; - offsetBytes = 3; extension = ".progressia_region"; break; } } - /*private static void expand(int sectors) { - - }*/ + public static boolean confirmHeaderHealth(RandomAccessFile input, HashMap offsets, HashMap length) throws IOException + { + Set used = new HashSet(); + input.seek(0); + if (input.length() < 4*chunksPerRegion) + { + return false; + } + for (int i=0;i<4*chunksPerRegion;i+=4) + { + int offset = 0; + for (int ii = 0; ii < 3; ii++) { + offset *= 256; + offset += input.read(); + } + int sectorLength = input.read(); + if (sectorLength==0) + { + continue; + } + int headerPos = i/4; + int x = headerPos/regionSize.y/regionSize.z; + int y = (headerPos/regionSize.z)%regionSize.y; + int z = headerPos%regionSize.z; + HashableVec3i key = new HashableVec3i(new Vec3i(x,y,z)); + offsets.put(key , offset); + length.put(key, sectorLength); + for (int ii=0;ii>= 8; + } + output.write(readOffset); + + output.setLength(fullOffset + offset * sectorSize); + } + outputMap.putOffset(pos, offset); } - // int bytestoWrite = output.readInt(); - // output.mark(sectorSize*sectorLength); - - // BufferedOutputStream counter = new - // BufferedOutputStream(Files.newOutputStream( - // SAVE_DIR.resolve(tempFile))); ByteArrayOutputStream tempDataStream = new ByteArrayOutputStream(); DataOutputStream trueOutput = new DataOutputStream( new DeflaterOutputStream( new BufferedOutputStream(tempDataStream) ) ); - // CountingOutputStream countOutput = new - // CountingOutputStream(trueOutput); - - // LOG.info("Before: {}",output.); - // trueOutput.writeBytes("uh try this"); - // counter. ChunkIO.save(chunk, trueOutput, IOContext.SAVE); writeGenerationHint(chunk, trueOutput, server); - - /* - * while (counter.getCount()%sectorSize != 0) { - * counter.write(0); - * } - */ - - // LOG.info("Wrote {} bytes to - // {},{},{}",trueOutput.size(),chunk.getPosition().x,chunk.getPosition().y,chunk.getPosition().z); - + trueOutput.close(); byte tempData[] = tempDataStream.toByteArray(); - output.position( fullOffset + sectorSize * offset); - output.put(ByteBuffer.wrap( tempData)); + output.seek( fullOffset + sectorSize * offset); + output.write(tempData); - output.position(shortOffset + offsetBytes); - output.put(ByteBuffer.wrap( new byte[] {(byte) (tempData.length / sectorSize + 1)})); + output.seek(shortOffset + 3); + output.write(tempData.length / sectorSize + 1); + outputMap.putLength(pos, tempData.length / sectorSize + 1); // LOG.info("Used {} sectors",(int) // tempData.length/sectorSize + 1); @@ -375,15 +437,16 @@ public class TestWorldDiskIO { } } - private static MappedByteBuffer makeNew(Path path, Object hashObj) { + private static RandomFileMapped makeNew(Path path, Object hashObj) { try { RandomAccessFile raf = new RandomAccessFile(path.toFile(), "rw"); - FileChannel fc = raf.getChannel(); - MappedByteBuffer output = fc.map(FileChannel.MapMode.READ_WRITE, 0, maxSize*chunksPerRegion); - output.limit(maxSize*chunksPerRegion); - mappedByteMap.put((HashableVec3i) hashObj, output); - return output; + //FileChannel fc = raf.getChannel(); + //MappedByteBuffer output = fc.map(FileChannel.MapMode.READ_WRITE, 0, maxSize*chunksPerRegion); + //output.limit(maxSize*chunksPerRegion); + RandomFileMapped rfm = new RandomFileMapped(raf); + inOutMap.put((HashableVec3i) hashObj, rfm); + return rfm; } catch (IOException e) { @@ -611,37 +674,61 @@ public class TestWorldDiskIO { private static DefaultChunkData loadRegion(Path path, Vec3i chunkPos, DefaultWorldData world, Server server) throws IOException, DecodingException { + int offset = 0; + int sectorLength = 0; + Vec3i pos; + RandomFileMapped inputMap; + int fullOffset = 4 * (chunksPerRegion); try { Vec3i streamCoords = getRegion(chunkPos); - MappedByteBuffer input = mappedByteMap.get(new HashableVec3i(streamCoords)); - LOG.info("streamCoords {},{},{}", streamCoords.x,streamCoords.y,streamCoords.z); - if (input == null) + inputMap = inOutMap.get(new HashableVec3i(streamCoords)); + //LOG.info("streamCoords {},{},{}", streamCoords.x,streamCoords.y,streamCoords.z); + if (inputMap == null) { //input = new RandomAccessFile(path.toFile(), "rw"); //input = Files.newByteChannel(path); - input = makeNew(path, new HashableVec3i(streamCoords)); + inputMap = makeNew(path, new HashableVec3i(streamCoords)); } + + RandomAccessFile input = inputMap.file; + + + pos = getRegionLoc(chunkPos); + + if (inputMap.hasOffset(pos)) + { + offset = inputMap.getOffset(pos); + sectorLength = inputMap.getLength(pos); + //LOG.info("{},{}", offset, sectorLength); + } + else + { // LOG.info(path.toString()); - Vec3i pos = getRegionLoc(chunkPos); - int shortOffset = (offsetBytes + 1) * (pos.z + regionSize.z * (pos.y + regionSize.y * pos.x)); - int fullOffset = (offsetBytes + 1) * (chunksPerRegion); - input.position(shortOffset); - int offset = 0; - for (int i = 0; i < offsetBytes; i++) { + int shortOffset = 4 * (pos.z + regionSize.z * (pos.y + regionSize.y * pos.x)); + + input.seek(shortOffset); + for (int i = 0; i < 3; i++) { offset *= 256; - offset += input.get(); + offset += input.read(); } - int sectorLength = input.get(); - input.position(fullOffset + sectorSize * offset); + sectorLength = input.read(); + if (sectorLength == 0) + { + return null; + } + inputMap.putOffset(pos, offset); + inputMap.putLength(pos, sectorLength); + } + input.seek(fullOffset + sectorSize * offset); // LOG.info("Read {} sectors", sectorLength); byte tempData[] = new byte[sectorSize * sectorLength]; - input.get(tempData); + input.read(tempData); DataInputStream trueInput = new DataInputStream( new InflaterInputStream(new BufferedInputStream(new ByteArrayInputStream(tempData))) @@ -652,7 +739,7 @@ public class TestWorldDiskIO { } catch (EOFException e) { - LOG.warn("Reached end of file"); + LOG.warn("Reached end of file, offset was {}, sectors was {}", offset, sectorLength); e.printStackTrace(); } return null; From 98250cd524d2bce8b982117baf298591cb28bc7c Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Fri, 27 Aug 2021 16:59:05 -0400 Subject: [PATCH 16/31] Some changes for efficiency(not yet) -Tried to use threads/executors in ChunkRequestDaemon, it just hangs. -Added isEmpty and isOpaque attributes to DefaultChunkData (should this just be in ChunkData?) -Added compute and getter functions to access(for everything after loading) -Doesn't render empty chunks(not yet used) -Using format 65537 allows the empty and opaqueness to be saved. They do not do anything yet and there is no way to set them yet -Added loadRegionX and ".progressia_chunkx" file -removed formats 0 and 1, which use individual chunk files. --- .../progressia/client/world/ChunkRender.java | 4 +- .../common/world/DefaultChunkData.java | 45 +- .../management/load/ChunkRequestDaemon.java | 13 +- .../planet/PlanetFeatureGenerator.java | 3 + .../progressia/test/TestWorldDiskIO.java | 391 ++++++++++-------- 5 files changed, 283 insertions(+), 173 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java b/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java index 41aa933..2d432ab 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java +++ b/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java @@ -102,7 +102,9 @@ public class ChunkRender } public synchronized void render(ShapeRenderHelper renderer) { - model.render(renderer); + if (!data.isEmpty) { + model.render(renderer); + } } public synchronized void update() { diff --git a/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java b/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java index e11509b..967fe4e 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java +++ b/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java @@ -25,8 +25,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.Objects; - import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.world.block.BlockData; @@ -45,6 +45,11 @@ public class DefaultChunkData implements ChunkData { public static final int BLOCKS_PER_CHUNK = Coordinates.CHUNK_SIZE; public static final int CHUNK_RADIUS = BLOCKS_PER_CHUNK / 2; + + public boolean isEmpty = false; + public boolean isOpaque = false; + + public static HashSet transparent; private final Vec3i position = new Vec3i(); private final DefaultWorldData world; @@ -199,6 +204,44 @@ public class DefaultChunkData implements ChunkData { public void setGenerationHint(Object generationHint) { this.generationHint = generationHint; } + + public void computeOpaque() + { + for (int xyz=0;xyz buffer = new ArrayList<>(); private static class ChunkUnloadRequest { @@ -113,16 +116,16 @@ public class ChunkRequestDaemon { } private void processLoadQueues() { - toRequestUnload.forEach(this::scheduleUnload); + toRequestUnload.forEach((pos) -> executor.submit(() -> scheduleUnload(pos))); toRequestUnload.clear(); - toLoad.forEach(getChunkManager()::loadOrGenerateChunk); + toLoad.forEach((pos) -> executor.submit(() -> getChunkManager().loadOrGenerateChunk(pos))); toLoad.clear(); - toGenerate.forEach(getChunkManager()::loadOrGenerateChunk); + toGenerate.forEach((pos) -> executor.submit(() -> getChunkManager().loadOrGenerateChunk(pos))); toGenerate.clear(); - unloadScheduledChunks(); + executor.submit(() -> unloadScheduledChunks()); } private void scheduleUnload(Vec3i chunkPos) { diff --git a/src/main/java/ru/windcorp/progressia/server/world/generation/planet/PlanetFeatureGenerator.java b/src/main/java/ru/windcorp/progressia/server/world/generation/planet/PlanetFeatureGenerator.java index 97e2424..205ea43 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/generation/planet/PlanetFeatureGenerator.java +++ b/src/main/java/ru/windcorp/progressia/server/world/generation/planet/PlanetFeatureGenerator.java @@ -56,6 +56,9 @@ public class PlanetFeatureGenerator { generateBorderFeatures(server, chunk); } + chunk.computeEmpty(); + chunk.computeOpaque(); + chunk.setGenerationHint(true); } diff --git a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java index e52c94c..d15e88f 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java @@ -126,7 +126,7 @@ public class TestWorldDiskIO { private static final Logger LOG = LogManager.getLogger("TestWorldDiskIO"); private static HashMap inOutMap; - private static final boolean ENABLE = true; + private static final boolean ENABLE = false; private static int maxSize = 1048576; private static int sectorSize = maxSize / 256; @@ -227,19 +227,19 @@ public class TestWorldDiskIO { private static void setRegionSize(int format) { inOutMap = new HashMap(); switch (format) { - case 0: - case 1: - regionSize = new Vec3i(1); - chunksPerRegion = 1; - currentFormat = format; - extension = ".progressia_chunk"; - break; case 65536: + default: regionSize = new Vec3i(16); chunksPerRegion = 16 * 16 * 16; currentFormat = 65536; extension = ".progressia_region"; break; + case 65537: + regionSize = new Vec3i(16); + chunksPerRegion = 16 * 16 * 16; + currentFormat = 65536; + extension = ".progressia_regionx"; + break; } } @@ -288,63 +288,7 @@ public class TestWorldDiskIO { try { - if (currentFormat == 0) { - LOG.debug( - "Saving {} {} {}", - chunk.getPosition().x, - chunk.getPosition().y, - chunk.getPosition().z - ); - - Files.createDirectories(SAVE_DIR); - - Path path = SAVE_DIR.resolve( - String.format( - "chunk_%+d_%+d_%+d" + extension, - chunk.getPosition().x, - chunk.getPosition().y, - chunk.getPosition().z - ) - ); - - try ( - DataOutputStream output = new DataOutputStream( - new DeflaterOutputStream(new BufferedOutputStream(Files.newOutputStream(path))) - ) - ) { - ChunkIO.save(chunk, output, IOContext.SAVE); - writeGenerationHint(chunk, output, server); - } - } else if (currentFormat == 1) { - LOG.debug( - "Saving {} {} {}", - chunk.getPosition().x, - chunk.getPosition().y, - chunk.getPosition().z - ); - - Files.createDirectories(SAVE_DIR); - - Vec3i saveCoords = getRegion(chunk.getPosition()); - - Path path = SAVE_DIR.resolve( - String.format( - "chunk_%d_%d_%d" + extension, - saveCoords.x, - saveCoords.y, - saveCoords.z - ) - ); - - try ( - DataOutputStream output = new DataOutputStream( - new DeflaterOutputStream(new BufferedOutputStream(Files.newOutputStream(path))) - ) - ) { - ChunkIO.save(chunk, output, IOContext.SAVE); - writeGenerationHint(chunk, output, server); - } - } else if (currentFormat == 65536) { + if (currentFormat == 65536) { LOG.debug( "Saving {} {} {}", chunk.getPosition().x, @@ -430,6 +374,97 @@ public class TestWorldDiskIO { // LOG.info("Used {} sectors",(int) // tempData.length/sectorSize + 1); + } + else if (currentFormat == 65537) { + LOG.debug( + "Saving {} {} {}", + chunk.getPosition().x, + chunk.getPosition().y, + chunk.getPosition().z + ); + + Files.createDirectories(SAVE_DIR); + + Vec3i saveCoords = getRegion(chunk.getPosition()); + + Path path = SAVE_DIR.resolve( + String.format( + "%d_%d_%d" + extension, + saveCoords.x, + saveCoords.y, + saveCoords.z + ) + ); + + + RandomFileMapped outputMap = inOutMap.get(new HashableVec3i(saveCoords)); + //LOG.info("saveCoords {},{},{}", saveCoords.x, saveCoords.y, saveCoords.z); + if (outputMap == null) + { + outputMap = makeNew(path, new HashableVec3i(saveCoords)); + } + RandomAccessFile output = outputMap.file; + + Vec3i pos = getRegionLoc(chunk.getPosition()); + int shortOffset = 4 * (pos.z + regionSize.z * (pos.y + regionSize.y * pos.x)); + int fullOffset = 4 * (chunksPerRegion); + int offset = 0; + + if (outputMap.hasOffset(pos)) + { + offset = outputMap.getOffset(pos); + } + else { + output.seek(shortOffset); + for (int i = 0; i < 3; i++) { + offset *= 256; + offset += output.read(); + } + int sectorLength = output.read(); + if (sectorLength == 0) { + int outputLen = (int) output.length(); + offset = (int) (outputLen - fullOffset) / sectorSize + 1; + int tempOffset = offset; + output.seek(shortOffset); + + byte readOffset[] = new byte[3]; + for (int i = 0; i < 3; i++) { + readOffset[2 - i] = (byte) (tempOffset % 256); + tempOffset >>= 8; + } + output.write(readOffset); + + output.setLength(fullOffset + offset * sectorSize); + } + outputMap.putOffset(pos, offset); + } + + ByteArrayOutputStream tempDataStream = new ByteArrayOutputStream(); + DataOutputStream trueOutput = new DataOutputStream( + new DeflaterOutputStream( + new BufferedOutputStream(tempDataStream) + ) + ); + ChunkIO.save(chunk, trueOutput, IOContext.SAVE); + writeGenerationHint(chunk, trueOutput, server); + + trueOutput.close(); + + byte tempData[] = tempDataStream.toByteArray(); + + output.seek( fullOffset + sectorSize * offset); + + chunk.computeOpaque(); + chunk.computeEmpty(); + output.write((chunk.isOpaque() ? 1 : 0) << 1 + (chunk.isEmpty() ? 1 : 0)); //Writes extra flag byte of whether or not the chunk is empty or solid + output.write(tempData); + + output.seek(shortOffset + 3); + output.write(tempData.length / sectorSize + 1); + outputMap.putLength(pos, tempData.length / sectorSize + 1); + // LOG.info("Used {} sectors",(int) + // tempData.length/sectorSize + 1); + } // else if (currentFormat) } catch (IOException e) { @@ -522,94 +557,7 @@ public class TestWorldDiskIO { } } - if (currentFormat == 0) { - - Path path = SAVE_DIR.resolve( - String.format( - "chunk_%+d_%+d_%+d" + extension, - chunkPos.x, - chunkPos.y, - chunkPos.z - ) - ); - - if (!Files.exists(path)) { - LOG.debug( - "Not found {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z - ); - - return null; - } - - try { - DefaultChunkData result = load(path, chunkPos, world, server); - - LOG.debug( - "Loaded {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z - ); - - return result; - } catch (Exception e) { - e.printStackTrace(); - LOG.debug( - "Could not load {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z - ); - return null; - } - } else if (currentFormat == 1) { - Vec3i saveCoords = getRegion(chunkPos); - - Path path = SAVE_DIR.resolve( - String.format( - "chunk_%d_%d_%d" + extension, - saveCoords.x, - saveCoords.y, - saveCoords.z - ) - ); - - if (!Files.exists(path)) { - LOG.debug( - "Not found {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z - ); - - return null; - } - - try { - DefaultChunkData result = load(path, chunkPos, world, server); - - LOG.debug( - "Loaded {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z - ); - - return result; - } catch (Exception e) { - e.printStackTrace(); - LOG.debug( - "Could not load {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z - ); - return null; - } - } else if (currentFormat == 65536) { + if (currentFormat == 65536) { Vec3i saveCoords = getRegion(chunkPos); Path path = SAVE_DIR.resolve( @@ -654,21 +602,52 @@ public class TestWorldDiskIO { return null; } } - return null; - } + else if (currentFormat == 65537) { + Vec3i saveCoords = getRegion(chunkPos); - private static DefaultChunkData load(Path path, Vec3i chunkPos, DefaultWorldData world, Server server) - throws IOException, - DecodingException { - try ( - DataInputStream input = new DataInputStream( - new InflaterInputStream(new BufferedInputStream(Files.newInputStream(path))) - ) - ) { - DefaultChunkData chunk = ChunkIO.load(world, chunkPos, input, IOContext.SAVE); - readGenerationHint(chunk, input, server); - return chunk; + Path path = SAVE_DIR.resolve( + String.format( + "%d_%d_%d" + extension, + saveCoords.x, + saveCoords.y, + saveCoords.z + ) + ); + + if (!Files.exists(path)) { + LOG.debug( + "Not found {} {} {}", + chunkPos.x, + chunkPos.y, + chunkPos.z + ); + + return null; + } + + try { + DefaultChunkData result = loadRegionX(path, chunkPos, world, server); + + LOG.debug( + "Loaded {} {} {}", + chunkPos.x, + chunkPos.y, + chunkPos.z + ); + + return result; + } catch (Exception e) { + e.printStackTrace(); + LOG.debug( + "Could not load {} {} {}", + chunkPos.x, + chunkPos.y, + chunkPos.z + ); + return null; + } } + return null; } private static DefaultChunkData loadRegion(Path path, Vec3i chunkPos, DefaultWorldData world, Server server) @@ -744,6 +723,86 @@ public class TestWorldDiskIO { } return null; } + + private static DefaultChunkData loadRegionX(Path path, Vec3i chunkPos, DefaultWorldData world, Server server) + throws IOException, + DecodingException { + int offset = 0; + int sectorLength = 0; + Vec3i pos; + RandomFileMapped inputMap; + int fullOffset = 4 * (chunksPerRegion); + try + { + Vec3i streamCoords = getRegion(chunkPos); + + inputMap = inOutMap.get(new HashableVec3i(streamCoords)); + //LOG.info("streamCoords {},{},{}", streamCoords.x,streamCoords.y,streamCoords.z); + if (inputMap == null) + { + //input = new RandomAccessFile(path.toFile(), "rw"); + //input = Files.newByteChannel(path); + inputMap = makeNew(path, new HashableVec3i(streamCoords)); + } + + RandomAccessFile input = inputMap.file; + + + pos = getRegionLoc(chunkPos); + + if (inputMap.hasOffset(pos)) + { + offset = inputMap.getOffset(pos); + sectorLength = inputMap.getLength(pos); + //LOG.info("{},{}", offset, sectorLength); + } + else + { + + // LOG.info(path.toString()); + + int shortOffset = 4 * (pos.z + regionSize.z * (pos.y + regionSize.y * pos.x)); + + input.seek(shortOffset); + for (int i = 0; i < 3; i++) { + offset *= 256; + offset += input.read(); + } + sectorLength = input.read(); + if (sectorLength == 0) + { + return null; + } + inputMap.putOffset(pos, offset); + inputMap.putLength(pos, sectorLength); + } + input.seek(fullOffset + sectorSize * offset); + + int xByte = input.read(); + + // LOG.info("Read {} sectors", sectorLength); + + byte tempData[] = new byte[sectorSize * sectorLength]; + input.read(tempData); + + DataInputStream trueInput = new DataInputStream( + new InflaterInputStream(new BufferedInputStream(new ByteArrayInputStream(tempData))) + ); + DefaultChunkData chunk = ChunkIO.load(world, chunkPos, trueInput, IOContext.SAVE); + readGenerationHint(chunk, trueInput, server); + + chunk.isOpaque = (xByte & 2)==2; + chunk.isEmpty = (xByte & 1)==1; + + return chunk; + } + catch (EOFException e) + { + LOG.warn("Reached end of file, offset was {}, sectors was {}", offset, sectorLength); + e.printStackTrace(); + } + return null; + } private static void readGenerationHint(DefaultChunkData chunk, DataInputStream input, Server server) throws IOException, From a222ea8f67ffd57db294dc70c115f8fddf579732 Mon Sep 17 00:00:00 2001 From: OLEGSHA Date: Sat, 28 Aug 2021 21:14:35 +0300 Subject: [PATCH 17/31] Fixed multithread chunk IO --- .../common/world/DefaultChunkData.java | 38 ++-- .../ru/windcorp/progressia/server/Server.java | 12 +- .../progressia/server/ServerState.java | 2 +- .../management/load/ChunkRequestDaemon.java | 191 ++++++++++++------ .../server/world/DefaultChunkLogic.java | 4 +- .../server/world/DefaultWorldLogic.java | 3 +- .../test/gen/TestGenerationConfig.java | 45 +++-- 7 files changed, 191 insertions(+), 104 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java b/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java index 967fe4e..730580c 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java +++ b/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java @@ -25,8 +25,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import java.util.HashSet; import java.util.Objects; +import java.util.Set; + import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.world.block.BlockData; @@ -49,7 +50,7 @@ public class DefaultChunkData implements ChunkData { public boolean isEmpty = false; public boolean isOpaque = false; - public static HashSet transparent; + public static Set transparent = Collections.emptySet(); private final Vec3i position = new Vec3i(); private final DefaultWorldData world; @@ -204,45 +205,36 @@ public class DefaultChunkData implements ChunkData { public void setGenerationHint(Object generationHint) { this.generationHint = generationHint; } - - public void computeOpaque() - { - for (int xyz=0;xyz buffer = new ArrayList<>(); - + private static class ChunkUnloadRequest { private final Vec3i chunkPos; private final long unloadAt; - + public ChunkUnloadRequest(Vec3i chunkPos, long unloadAt) { this.chunkPos = chunkPos; this.unloadAt = unloadAt; } - + /** * @return the chunk position */ public Vec3i getChunkPos() { return chunkPos; } - + /** * @return the moment when the chunks becomes eligible for unloading */ @@ -72,19 +72,42 @@ public class ChunkRequestDaemon { return unloadAt; } } - + private final ChunkMap unloadSchedule = ChunkMaps.newHashMap(); + private Thread thread = null; + private final AtomicBoolean shouldRun = new AtomicBoolean(false); + public ChunkRequestDaemon(ChunkManager chunkManager) { this.chunkManager = chunkManager; this.loaded = getServer().getWorld().getData().getLoadedChunks(); } - - public void tick() { + + public synchronized void start() { + if (this.thread != null) { + throw new IllegalStateException("Already running"); + } + + this.thread = new Thread(this::runOffthread, getClass().getSimpleName()); + this.shouldRun.set(true); + this.thread.start(); + } + + public synchronized void stop() { + this.shouldRun.set(false); + + synchronized (this) { + notify(); + } + } + + public synchronized void tick() { synchronized (getServer().getWorld().getData()) { synchronized (getServer().getPlayerManager().getMutex()) { loadAndUnloadChunks(); sendAndRevokeChunks(); + + notify(); } } } @@ -116,18 +139,13 @@ public class ChunkRequestDaemon { } private void processLoadQueues() { - toRequestUnload.forEach((pos) -> executor.submit(() -> scheduleUnload(pos))); - toRequestUnload.clear(); - - toLoad.forEach((pos) -> executor.submit(() -> getChunkManager().loadOrGenerateChunk(pos))); - toLoad.clear(); - - toGenerate.forEach((pos) -> executor.submit(() -> getChunkManager().loadOrGenerateChunk(pos))); + toGenerate.forEach(getChunkManager()::loadOrGenerateChunk); toGenerate.clear(); - - executor.submit(() -> unloadScheduledChunks()); + + toRequestUnload.forEach(this::scheduleUnload); + toRequestUnload.clear(); } - + private void scheduleUnload(Vec3i chunkPos) { if (unloadSchedule.containsKey(chunkPos)) { // Unload already requested, skip @@ -136,27 +154,8 @@ public class ChunkRequestDaemon { long unloadAt = System.currentTimeMillis() + (long) (getUnloadDelay() * 1000); Vec3i chunkPosCopy = new Vec3i(chunkPos); - - unloadSchedule.put(chunkPosCopy, new ChunkUnloadRequest(chunkPosCopy, unloadAt)); - } - - private void unloadScheduledChunks() { - long now = System.currentTimeMillis(); - - for (Iterator it = unloadSchedule.values().iterator(); it.hasNext();) { - ChunkUnloadRequest request = it.next(); - - if (request.getUnloadAt() < now) { - it.remove(); - - if (requested.contains(request.getChunkPos())) { - continue; // do not unload chunks that became requested - } - - getChunkManager().unloadChunk(request.getChunkPos()); - } - } + unloadSchedule.put(chunkPosCopy, new ChunkUnloadRequest(chunkPosCopy, unloadAt)); } private void sendAndRevokeChunks() { @@ -172,51 +171,129 @@ public class ChunkRequestDaemon { toGenerate.add(chunk); return; } - + if (vision.isChunkVisible(chunk.getPosition())) { return; } - + buffer.add(chunk.getPosition()); }); - - if (buffer.isEmpty()) return; + + if (buffer.isEmpty()) + return; for (Vec3i chunkPos : buffer) { getChunkManager().sendChunk(vision.getPlayer(), chunkPos); } - + buffer.clear(); } - + private void revokeChunks(PlayerVision vision) { vision.getVisibleChunks().forEach(chunkPos -> { if (getChunkManager().isChunkLoaded(chunkPos) && vision.getRequestedChunks().contains(chunkPos)) return; buffer.add(new Vec3i(chunkPos)); }); - - if (buffer.isEmpty()) return; + + if (buffer.isEmpty()) + return; for (Vec3i chunkPos : buffer) { getChunkManager().revokeChunk(vision.getPlayer(), chunkPos); } - + buffer.clear(); } + /* + * Off-thread activity + */ + + private void runOffthread() { + while (true) { + + processLoadQueue(); + processUnloadQueue(); + + synchronized (this) { + try { + // We're not afraid of spurious wakeups + wait(); + } catch (InterruptedException e) { + // Pretend nothing happened + } + + if (!shouldRun.get()) { + return; + } + } + + } + } + + private void processQueueOffthread(ChunkSet queue, Consumer action) { + while (true) { + synchronized (this) { + Iterator iterator = toLoad.iterator(); + if (!iterator.hasNext()) { + return; + } + Vec3i position = iterator.next(); + iterator.remove(); + + action.accept(position); + } + } + } + + private void processLoadQueue() { + processQueueOffthread(toLoad, getChunkManager()::loadOrGenerateChunk); + } + + private void processUnloadQueue() { + long now = System.currentTimeMillis(); + + Collection toUnload = null; + + synchronized (this) { + for (Iterator it = unloadSchedule.values().iterator(); it.hasNext();) { + ChunkUnloadRequest request = it.next(); + + if (request.getUnloadAt() < now) { + it.remove(); + + if (requested.contains(request.getChunkPos())) { + continue; // do not unload chunks that became requested + } + + if (toUnload == null) { + toUnload = new ArrayList<>(); + } + toUnload.add(request.getChunkPos()); + } + } + } + + if (toUnload == null) { + return; + } + + toUnload.forEach(getChunkManager()::unloadChunk); + } + /** * @return the minimum amount of time a chunk will spend in the unload queue */ public float getUnloadDelay() { return CHUNK_UNLOAD_DELAY; } - + /** * @return the manager */ public ChunkManager getChunkManager() { return chunkManager; } - + public Server getServer() { return getChunkManager().getServer(); } diff --git a/src/main/java/ru/windcorp/progressia/server/world/DefaultChunkLogic.java b/src/main/java/ru/windcorp/progressia/server/world/DefaultChunkLogic.java index d18ff11..7a05adf 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/DefaultChunkLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/DefaultChunkLogic.java @@ -34,7 +34,7 @@ import ru.windcorp.progressia.common.world.rels.RelFace; import ru.windcorp.progressia.common.world.TileDataStack; import ru.windcorp.progressia.common.world.generic.GenericChunks; import ru.windcorp.progressia.common.world.TileDataReference; -import ru.windcorp.progressia.server.Server; +import ru.windcorp.progressia.server.ServerState; import ru.windcorp.progressia.server.world.block.BlockLogic; import ru.windcorp.progressia.server.world.block.BlockLogicRegistry; import ru.windcorp.progressia.server.world.block.TickableBlock; @@ -226,7 +226,7 @@ public class DefaultChunkLogic implements ChunkLogic { } private void tmp_generateTickLists() { - ServerWorldContextRO context = Server.getCurrentServer().createContext(getUp()); + ServerWorldContextRO context = ServerState.getInstance().createContext(getUp()); GenericChunks.forEachBiC(blockInChunk -> { diff --git a/src/main/java/ru/windcorp/progressia/server/world/DefaultWorldLogic.java b/src/main/java/ru/windcorp/progressia/server/world/DefaultWorldLogic.java index 3e654b6..5c4e75d 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/DefaultWorldLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/DefaultWorldLogic.java @@ -19,6 +19,7 @@ package ru.windcorp.progressia.server.world; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -43,7 +44,7 @@ public class DefaultWorldLogic implements WorldLogic { private final WorldGenerator generator; - private final Map chunks = new HashMap<>(); + private final Map chunks = Collections.synchronizedMap(new HashMap<>()); private final Evaluation tickEntitiesTask = new TickEntitiesTask(); diff --git a/src/main/java/ru/windcorp/progressia/test/gen/TestGenerationConfig.java b/src/main/java/ru/windcorp/progressia/test/gen/TestGenerationConfig.java index ee0f312..76090d6 100644 --- a/src/main/java/ru/windcorp/progressia/test/gen/TestGenerationConfig.java +++ b/src/main/java/ru/windcorp/progressia/test/gen/TestGenerationConfig.java @@ -49,9 +49,18 @@ public class TestGenerationConfig { private static final float CURVATURE = Units.get("100 m"); private static final float INNER_RADIUS = Units.get("200 m"); - private static final Fields FIELDS = new Fields(SEED); + private final Fields fields = new Fields(SEED); + private final Function generator; + + public TestGenerationConfig() { + this.generator = createGenerator(); + } + + public Function getGenerator() { + return generator; + } - public static Function createGenerator() { + private Function createGenerator() { Planet planet = new Planet( ((int) PLANET_RADIUS) / Coordinates.CHUNK_SIZE, @@ -60,7 +69,7 @@ public class TestGenerationConfig { INNER_RADIUS ); - TestHeightMap heightMap = new TestHeightMap(planet, planet.getRadius() / 4, FIELDS); + TestHeightMap heightMap = new TestHeightMap(planet, planet.getRadius() / 4, fields); FloatRangeMap layers = new ArrayFloatRangeMap<>(); registerTerrainLayers(layers); @@ -72,11 +81,11 @@ public class TestGenerationConfig { } - private static void registerTerrainLayers(FloatRangeMap layers) { + private void registerTerrainLayers(FloatRangeMap layers) { BlockData dirt = BlockDataRegistry.getInstance().get("Test:Dirt"); BlockData air = BlockDataRegistry.getInstance().get("Test:Air"); - SurfaceFloatField cliffs = FIELDS.get("Test:Cliff"); + SurfaceFloatField cliffs = fields.get("Test:Cliff"); WorleyProceduralNoise.Builder builder = WorleyProceduralNoise.builder(); TestContent.ROCKS.getRocks().forEach(rock -> { @@ -88,9 +97,9 @@ public class TestGenerationConfig { } }, 1); }); - SurfaceFloatField rockDepthOffsets = FIELDS.register( + SurfaceFloatField rockDepthOffsets = fields.register( "Test:RockDepthOffsets", - () -> tweak(FIELDS.primitive(), 40, 5) + () -> tweak(fields.primitive(), 40, 5) ); RockLayer rockLayer = new RockLayer(builder.build(SEED), rockDepthOffsets); @@ -105,28 +114,28 @@ public class TestGenerationConfig { layers.put(4, Float.POSITIVE_INFINITY, rockLayer); } - private static void registerFeatures(List features) { + private void registerFeatures(List features) { - SurfaceFloatField forestiness = FIELDS.register( + SurfaceFloatField forestiness = fields.register( "Test:Forest", - () -> squash(scale(FIELDS.primitive(), 200), 5) + () -> squash(scale(fields.primitive(), 200), 5) ); - SurfaceFloatField grassiness = FIELDS.register( + SurfaceFloatField grassiness = fields.register( "Test:Grass", f -> multiply( - tweak(octaves(FIELDS.primitive(), 2, 2), 40, 0.5, 1.2), - squash(tweak(FIELDS.get("Test:Forest", f), 1, -1, 1), 10), - anti(squash(FIELDS.get("Test:Cliff", f), 10)) + tweak(octaves(fields.primitive(), 2, 2), 40, 0.5, 1.2), + squash(tweak(fields.get("Test:Forest", f), 1, -1, 1), 10), + anti(squash(fields.get("Test:Cliff", f), 10)) ) ); - Function floweriness = flowerName -> FIELDS.register( + Function floweriness = flowerName -> fields.register( "Test:Flower" + flowerName, f -> multiply( - selectPositive(squash(scale(octaves(FIELDS.primitive(), 2, 3), 100), 2), 1, 0.5), - tweak(FIELDS.get("Test:Forest", f), 1, -1, 1.1), - anti(squash(FIELDS.get("Test:Cliff", f), 10)) + selectPositive(squash(scale(octaves(fields.primitive(), 2, 3), 100), 2), 1, 0.5), + tweak(fields.get("Test:Forest", f), 1, -1, 1.1), + anti(squash(fields.get("Test:Cliff", f), 10)) ) ); From 41a2909f7c1575774a1bc6b93ecfa9e316e55bd7 Mon Sep 17 00:00:00 2001 From: OLEGSHA Date: Sat, 28 Aug 2021 21:31:34 +0300 Subject: [PATCH 18/31] Reverted last two commits because no one wants to fix the bugs --- .../common/world/DefaultChunkData.java | 38 ++-- .../ru/windcorp/progressia/server/Server.java | 12 +- .../progressia/server/ServerState.java | 2 +- .../management/load/ChunkRequestDaemon.java | 191 ++++++------------ .../server/world/DefaultChunkLogic.java | 4 +- .../server/world/DefaultWorldLogic.java | 3 +- .../test/gen/TestGenerationConfig.java | 45 ++--- 7 files changed, 104 insertions(+), 191 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java b/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java index 730580c..967fe4e 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java +++ b/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java @@ -25,9 +25,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.Objects; -import java.util.Set; - import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.world.block.BlockData; @@ -50,7 +49,7 @@ public class DefaultChunkData implements ChunkData { public boolean isEmpty = false; public boolean isOpaque = false; - public static Set transparent = Collections.emptySet(); + public static HashSet transparent; private final Vec3i position = new Vec3i(); private final DefaultWorldData world; @@ -205,36 +204,45 @@ public class DefaultChunkData implements ChunkData { public void setGenerationHint(Object generationHint) { this.generationHint = generationHint; } - - public void computeOpaque() { - for (int xyz = 0; xyz < BLOCKS_PER_CHUNK * BLOCKS_PER_CHUNK * BLOCKS_PER_CHUNK; xyz++) { - if (transparent.contains(blocks[xyz])) { + + public void computeOpaque() + { + for (int xyz=0;xyz buffer = new ArrayList<>(); - + private static class ChunkUnloadRequest { private final Vec3i chunkPos; private final long unloadAt; - + public ChunkUnloadRequest(Vec3i chunkPos, long unloadAt) { this.chunkPos = chunkPos; this.unloadAt = unloadAt; } - + /** * @return the chunk position */ public Vec3i getChunkPos() { return chunkPos; } - + /** * @return the moment when the chunks becomes eligible for unloading */ @@ -72,42 +72,19 @@ public class ChunkRequestDaemon { return unloadAt; } } - + private final ChunkMap unloadSchedule = ChunkMaps.newHashMap(); - private Thread thread = null; - private final AtomicBoolean shouldRun = new AtomicBoolean(false); - public ChunkRequestDaemon(ChunkManager chunkManager) { this.chunkManager = chunkManager; this.loaded = getServer().getWorld().getData().getLoadedChunks(); } - - public synchronized void start() { - if (this.thread != null) { - throw new IllegalStateException("Already running"); - } - - this.thread = new Thread(this::runOffthread, getClass().getSimpleName()); - this.shouldRun.set(true); - this.thread.start(); - } - - public synchronized void stop() { - this.shouldRun.set(false); - - synchronized (this) { - notify(); - } - } - - public synchronized void tick() { + + public void tick() { synchronized (getServer().getWorld().getData()) { synchronized (getServer().getPlayerManager().getMutex()) { loadAndUnloadChunks(); sendAndRevokeChunks(); - - notify(); } } } @@ -139,13 +116,18 @@ public class ChunkRequestDaemon { } private void processLoadQueues() { - toGenerate.forEach(getChunkManager()::loadOrGenerateChunk); - toGenerate.clear(); - - toRequestUnload.forEach(this::scheduleUnload); + toRequestUnload.forEach((pos) -> executor.submit(() -> scheduleUnload(pos))); toRequestUnload.clear(); + + toLoad.forEach((pos) -> executor.submit(() -> getChunkManager().loadOrGenerateChunk(pos))); + toLoad.clear(); + + toGenerate.forEach((pos) -> executor.submit(() -> getChunkManager().loadOrGenerateChunk(pos))); + toGenerate.clear(); + + executor.submit(() -> unloadScheduledChunks()); } - + private void scheduleUnload(Vec3i chunkPos) { if (unloadSchedule.containsKey(chunkPos)) { // Unload already requested, skip @@ -154,9 +136,28 @@ public class ChunkRequestDaemon { long unloadAt = System.currentTimeMillis() + (long) (getUnloadDelay() * 1000); Vec3i chunkPosCopy = new Vec3i(chunkPos); - + unloadSchedule.put(chunkPosCopy, new ChunkUnloadRequest(chunkPosCopy, unloadAt)); } + + private void unloadScheduledChunks() { + long now = System.currentTimeMillis(); + + for (Iterator it = unloadSchedule.values().iterator(); it.hasNext();) { + ChunkUnloadRequest request = it.next(); + + if (request.getUnloadAt() < now) { + + it.remove(); + + if (requested.contains(request.getChunkPos())) { + continue; // do not unload chunks that became requested + } + + getChunkManager().unloadChunk(request.getChunkPos()); + } + } + } private void sendAndRevokeChunks() { getChunkManager().getLoadManager().getVisionManager().forEachVision(vision -> { @@ -171,129 +172,51 @@ public class ChunkRequestDaemon { toGenerate.add(chunk); return; } - + if (vision.isChunkVisible(chunk.getPosition())) { return; } - + buffer.add(chunk.getPosition()); }); - - if (buffer.isEmpty()) - return; + + if (buffer.isEmpty()) return; for (Vec3i chunkPos : buffer) { getChunkManager().sendChunk(vision.getPlayer(), chunkPos); } - + buffer.clear(); } - + private void revokeChunks(PlayerVision vision) { vision.getVisibleChunks().forEach(chunkPos -> { if (getChunkManager().isChunkLoaded(chunkPos) && vision.getRequestedChunks().contains(chunkPos)) return; buffer.add(new Vec3i(chunkPos)); }); - - if (buffer.isEmpty()) - return; + + if (buffer.isEmpty()) return; for (Vec3i chunkPos : buffer) { getChunkManager().revokeChunk(vision.getPlayer(), chunkPos); } - + buffer.clear(); } - /* - * Off-thread activity - */ - - private void runOffthread() { - while (true) { - - processLoadQueue(); - processUnloadQueue(); - - synchronized (this) { - try { - // We're not afraid of spurious wakeups - wait(); - } catch (InterruptedException e) { - // Pretend nothing happened - } - - if (!shouldRun.get()) { - return; - } - } - - } - } - - private void processQueueOffthread(ChunkSet queue, Consumer action) { - while (true) { - synchronized (this) { - Iterator iterator = toLoad.iterator(); - if (!iterator.hasNext()) { - return; - } - Vec3i position = iterator.next(); - iterator.remove(); - - action.accept(position); - } - } - } - - private void processLoadQueue() { - processQueueOffthread(toLoad, getChunkManager()::loadOrGenerateChunk); - } - - private void processUnloadQueue() { - long now = System.currentTimeMillis(); - - Collection toUnload = null; - - synchronized (this) { - for (Iterator it = unloadSchedule.values().iterator(); it.hasNext();) { - ChunkUnloadRequest request = it.next(); - - if (request.getUnloadAt() < now) { - it.remove(); - - if (requested.contains(request.getChunkPos())) { - continue; // do not unload chunks that became requested - } - - if (toUnload == null) { - toUnload = new ArrayList<>(); - } - toUnload.add(request.getChunkPos()); - } - } - } - - if (toUnload == null) { - return; - } - - toUnload.forEach(getChunkManager()::unloadChunk); - } - /** * @return the minimum amount of time a chunk will spend in the unload queue */ public float getUnloadDelay() { return CHUNK_UNLOAD_DELAY; } - + /** * @return the manager */ public ChunkManager getChunkManager() { return chunkManager; } - + public Server getServer() { return getChunkManager().getServer(); } diff --git a/src/main/java/ru/windcorp/progressia/server/world/DefaultChunkLogic.java b/src/main/java/ru/windcorp/progressia/server/world/DefaultChunkLogic.java index 7a05adf..d18ff11 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/DefaultChunkLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/DefaultChunkLogic.java @@ -34,7 +34,7 @@ import ru.windcorp.progressia.common.world.rels.RelFace; import ru.windcorp.progressia.common.world.TileDataStack; import ru.windcorp.progressia.common.world.generic.GenericChunks; import ru.windcorp.progressia.common.world.TileDataReference; -import ru.windcorp.progressia.server.ServerState; +import ru.windcorp.progressia.server.Server; import ru.windcorp.progressia.server.world.block.BlockLogic; import ru.windcorp.progressia.server.world.block.BlockLogicRegistry; import ru.windcorp.progressia.server.world.block.TickableBlock; @@ -226,7 +226,7 @@ public class DefaultChunkLogic implements ChunkLogic { } private void tmp_generateTickLists() { - ServerWorldContextRO context = ServerState.getInstance().createContext(getUp()); + ServerWorldContextRO context = Server.getCurrentServer().createContext(getUp()); GenericChunks.forEachBiC(blockInChunk -> { diff --git a/src/main/java/ru/windcorp/progressia/server/world/DefaultWorldLogic.java b/src/main/java/ru/windcorp/progressia/server/world/DefaultWorldLogic.java index 5c4e75d..3e654b6 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/DefaultWorldLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/DefaultWorldLogic.java @@ -19,7 +19,6 @@ package ru.windcorp.progressia.server.world; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -44,7 +43,7 @@ public class DefaultWorldLogic implements WorldLogic { private final WorldGenerator generator; - private final Map chunks = Collections.synchronizedMap(new HashMap<>()); + private final Map chunks = new HashMap<>(); private final Evaluation tickEntitiesTask = new TickEntitiesTask(); diff --git a/src/main/java/ru/windcorp/progressia/test/gen/TestGenerationConfig.java b/src/main/java/ru/windcorp/progressia/test/gen/TestGenerationConfig.java index 76090d6..ee0f312 100644 --- a/src/main/java/ru/windcorp/progressia/test/gen/TestGenerationConfig.java +++ b/src/main/java/ru/windcorp/progressia/test/gen/TestGenerationConfig.java @@ -49,18 +49,9 @@ public class TestGenerationConfig { private static final float CURVATURE = Units.get("100 m"); private static final float INNER_RADIUS = Units.get("200 m"); - private final Fields fields = new Fields(SEED); - private final Function generator; - - public TestGenerationConfig() { - this.generator = createGenerator(); - } - - public Function getGenerator() { - return generator; - } + private static final Fields FIELDS = new Fields(SEED); - private Function createGenerator() { + public static Function createGenerator() { Planet planet = new Planet( ((int) PLANET_RADIUS) / Coordinates.CHUNK_SIZE, @@ -69,7 +60,7 @@ public class TestGenerationConfig { INNER_RADIUS ); - TestHeightMap heightMap = new TestHeightMap(planet, planet.getRadius() / 4, fields); + TestHeightMap heightMap = new TestHeightMap(planet, planet.getRadius() / 4, FIELDS); FloatRangeMap layers = new ArrayFloatRangeMap<>(); registerTerrainLayers(layers); @@ -81,11 +72,11 @@ public class TestGenerationConfig { } - private void registerTerrainLayers(FloatRangeMap layers) { + private static void registerTerrainLayers(FloatRangeMap layers) { BlockData dirt = BlockDataRegistry.getInstance().get("Test:Dirt"); BlockData air = BlockDataRegistry.getInstance().get("Test:Air"); - SurfaceFloatField cliffs = fields.get("Test:Cliff"); + SurfaceFloatField cliffs = FIELDS.get("Test:Cliff"); WorleyProceduralNoise.Builder builder = WorleyProceduralNoise.builder(); TestContent.ROCKS.getRocks().forEach(rock -> { @@ -97,9 +88,9 @@ public class TestGenerationConfig { } }, 1); }); - SurfaceFloatField rockDepthOffsets = fields.register( + SurfaceFloatField rockDepthOffsets = FIELDS.register( "Test:RockDepthOffsets", - () -> tweak(fields.primitive(), 40, 5) + () -> tweak(FIELDS.primitive(), 40, 5) ); RockLayer rockLayer = new RockLayer(builder.build(SEED), rockDepthOffsets); @@ -114,28 +105,28 @@ public class TestGenerationConfig { layers.put(4, Float.POSITIVE_INFINITY, rockLayer); } - private void registerFeatures(List features) { + private static void registerFeatures(List features) { - SurfaceFloatField forestiness = fields.register( + SurfaceFloatField forestiness = FIELDS.register( "Test:Forest", - () -> squash(scale(fields.primitive(), 200), 5) + () -> squash(scale(FIELDS.primitive(), 200), 5) ); - SurfaceFloatField grassiness = fields.register( + SurfaceFloatField grassiness = FIELDS.register( "Test:Grass", f -> multiply( - tweak(octaves(fields.primitive(), 2, 2), 40, 0.5, 1.2), - squash(tweak(fields.get("Test:Forest", f), 1, -1, 1), 10), - anti(squash(fields.get("Test:Cliff", f), 10)) + tweak(octaves(FIELDS.primitive(), 2, 2), 40, 0.5, 1.2), + squash(tweak(FIELDS.get("Test:Forest", f), 1, -1, 1), 10), + anti(squash(FIELDS.get("Test:Cliff", f), 10)) ) ); - Function floweriness = flowerName -> fields.register( + Function floweriness = flowerName -> FIELDS.register( "Test:Flower" + flowerName, f -> multiply( - selectPositive(squash(scale(octaves(fields.primitive(), 2, 3), 100), 2), 1, 0.5), - tweak(fields.get("Test:Forest", f), 1, -1, 1.1), - anti(squash(fields.get("Test:Cliff", f), 10)) + selectPositive(squash(scale(octaves(FIELDS.primitive(), 2, 3), 100), 2), 1, 0.5), + tweak(FIELDS.get("Test:Forest", f), 1, -1, 1.1), + anti(squash(FIELDS.get("Test:Cliff", f), 10)) ) ); From cd16334db8c043a9b67ee0153d2c8557d534405e Mon Sep 17 00:00:00 2001 From: OLEGSHA Date: Sat, 28 Aug 2021 23:31:50 +0300 Subject: [PATCH 19/31] Moved TestWorldDiskIO to a subpackage and introduced some abstractions --- .../ru/windcorp/progressia/server/Server.java | 13 ++++- .../progressia/server/ServerState.java | 13 ++++- .../server/management/load/ChunkManager.java | 10 +++- .../server/world/DefaultWorldLogic.java | 10 +++- .../server/world/io/WorldContainer.java | 37 ++++++++++++ .../server/world/io/WorldContainerFormat.java | 32 ++++++++++ .../test/gen/TestGenerationConfig.java | 45 ++++++++------ .../progressia/test/region/RegionFormat.java | 36 ++++++++++++ .../test/{ => region}/TestWorldDiskIO.java | 58 +++++++++++-------- 9 files changed, 204 insertions(+), 50 deletions(-) create mode 100644 src/main/java/ru/windcorp/progressia/server/world/io/WorldContainer.java create mode 100644 src/main/java/ru/windcorp/progressia/server/world/io/WorldContainerFormat.java create mode 100644 src/main/java/ru/windcorp/progressia/test/region/RegionFormat.java rename src/main/java/ru/windcorp/progressia/test/{ => region}/TestWorldDiskIO.java (92%) diff --git a/src/main/java/ru/windcorp/progressia/server/Server.java b/src/main/java/ru/windcorp/progressia/server/Server.java index ea8504f..1b67392 100644 --- a/src/main/java/ru/windcorp/progressia/server/Server.java +++ b/src/main/java/ru/windcorp/progressia/server/Server.java @@ -46,6 +46,7 @@ import ru.windcorp.progressia.server.world.context.impl.DefaultServerContext; import ru.windcorp.progressia.server.world.context.impl.ReportingServerContext; import ru.windcorp.progressia.server.world.context.impl.RotatingServerContext; import ru.windcorp.progressia.server.world.generation.WorldGenerator; +import ru.windcorp.progressia.server.world.io.WorldContainer; import ru.windcorp.progressia.server.world.tasks.WorldAccessor; import ru.windcorp.progressia.server.world.ticking.Change; import ru.windcorp.progressia.server.world.ticking.Evaluation; @@ -78,11 +79,16 @@ public class Server { private final TickingSettings tickingSettings = new TickingSettings(); - public Server(DefaultWorldData world, Function generatorCreator) { + public Server( + DefaultWorldData world, + Function generatorCreator, + WorldContainer worldContainer + ) { this.world = new DefaultWorldLogic( world, this, generatorCreator.apply(this), + worldContainer, worldAccessor ); this.serverThread = new ServerThread(this); @@ -241,14 +247,14 @@ public class Server { public void scheduleChange(Change change) { serverThread.getTicker().requestChange(change); } - + /** * Delayed */ public void scheduleEvaluation(Evaluation evaluation) { serverThread.getTicker().requestEvaluation(evaluation); } - + /** * Immediate if possible, otherwise delayed */ @@ -349,6 +355,7 @@ public class Server { public void shutdown(String message) { LogManager.getLogger().warn("Server.shutdown() is not yet implemented"); serverThread.stop(); + getWorld().getContainer().close(); } private void scheduleWorldTicks(Server server) { diff --git a/src/main/java/ru/windcorp/progressia/server/ServerState.java b/src/main/java/ru/windcorp/progressia/server/ServerState.java index 00aa901..c38f21b 100644 --- a/src/main/java/ru/windcorp/progressia/server/ServerState.java +++ b/src/main/java/ru/windcorp/progressia/server/ServerState.java @@ -18,8 +18,14 @@ package ru.windcorp.progressia.server; +import java.nio.file.Paths; +import java.util.function.Function; + import ru.windcorp.progressia.common.world.DefaultWorldData; +import ru.windcorp.progressia.server.world.generation.WorldGenerator; +import ru.windcorp.progressia.server.world.io.WorldContainer; import ru.windcorp.progressia.test.gen.TestGenerationConfig; +import ru.windcorp.progressia.test.region.RegionFormat; public class ServerState { @@ -34,9 +40,14 @@ public class ServerState { } public static void startServer() { - Server server = new Server(new DefaultWorldData(), TestGenerationConfig.createGenerator()); + + Function generator = new TestGenerationConfig().getGenerator(); + WorldContainer container = new RegionFormat("Test:Region").create(Paths.get("tmp_world")); + + Server server = new Server(new DefaultWorldData(), generator, container); setInstance(server); server.start(); + } private ServerState() { diff --git a/src/main/java/ru/windcorp/progressia/server/management/load/ChunkManager.java b/src/main/java/ru/windcorp/progressia/server/management/load/ChunkManager.java index 3071530..b58a3b2 100644 --- a/src/main/java/ru/windcorp/progressia/server/management/load/ChunkManager.java +++ b/src/main/java/ru/windcorp/progressia/server/management/load/ChunkManager.java @@ -24,7 +24,7 @@ import ru.windcorp.progressia.common.world.PacketSendChunk; import ru.windcorp.progressia.common.world.DefaultWorldData; import ru.windcorp.progressia.server.Player; import ru.windcorp.progressia.server.Server; -import ru.windcorp.progressia.test.TestWorldDiskIO; +import ru.windcorp.progressia.server.world.io.WorldContainer; /** * Chunk manager provides facilities to load, unload and generate chunks for a @@ -51,6 +51,10 @@ public class ChunkManager { public Server getServer() { return getLoadManager().getServer(); } + + public WorldContainer getContainer() { + return getServer().getWorld().getContainer(); + } /** * Describes the result of an attempt to load a chunk. @@ -115,7 +119,7 @@ public class ChunkManager { DefaultWorldData world = getServer().getWorld().getData(); - DefaultChunkData chunk = TestWorldDiskIO.tryToLoad(chunkPos, world, getServer()); + DefaultChunkData chunk = getServer().getWorld().getContainer().load(chunkPos, world, getServer()); if (chunk != null) { world.addChunk(chunk); return LoadResult.LOADED_FROM_DISK; @@ -141,7 +145,7 @@ public class ChunkManager { } world.removeChunk(chunk); - TestWorldDiskIO.saveChunk(chunk, getServer()); + getContainer().save(chunk, getServer().getWorld().getData(), getServer()); return true; } diff --git a/src/main/java/ru/windcorp/progressia/server/world/DefaultWorldLogic.java b/src/main/java/ru/windcorp/progressia/server/world/DefaultWorldLogic.java index 3e654b6..b573d07 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/DefaultWorldLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/DefaultWorldLogic.java @@ -32,6 +32,7 @@ import ru.windcorp.progressia.common.world.WorldDataListener; import ru.windcorp.progressia.common.world.entity.EntityData; import ru.windcorp.progressia.server.Server; import ru.windcorp.progressia.server.world.generation.WorldGenerator; +import ru.windcorp.progressia.server.world.io.WorldContainer; import ru.windcorp.progressia.server.world.tasks.TickEntitiesTask; import ru.windcorp.progressia.server.world.tasks.WorldAccessor; import ru.windcorp.progressia.server.world.ticking.Evaluation; @@ -42,17 +43,20 @@ public class DefaultWorldLogic implements WorldLogic { private final Server server; private final WorldGenerator generator; + private final WorldContainer container; private final Map chunks = new HashMap<>(); private final Evaluation tickEntitiesTask = new TickEntitiesTask(); - public DefaultWorldLogic(DefaultWorldData data, Server server, WorldGenerator generator, WorldAccessor accessor) { + public DefaultWorldLogic(DefaultWorldData data, Server server, WorldGenerator generator, WorldContainer container, WorldAccessor accessor) { this.data = data; this.server = server; this.generator = generator; data.setGravityModel(getGenerator().getGravityModel()); + + this.container = container; data.addListener(new WorldDataListener() { @Override @@ -105,6 +109,10 @@ public class DefaultWorldLogic implements WorldLogic { public WorldGenerator getGenerator() { return generator; } + + public WorldContainer getContainer() { + return container; + } public DefaultChunkData generate(Vec3i chunkPos) { DefaultChunkData chunk = getGenerator().generate(chunkPos); diff --git a/src/main/java/ru/windcorp/progressia/server/world/io/WorldContainer.java b/src/main/java/ru/windcorp/progressia/server/world/io/WorldContainer.java new file mode 100644 index 0000000..07aa7b5 --- /dev/null +++ b/src/main/java/ru/windcorp/progressia/server/world/io/WorldContainer.java @@ -0,0 +1,37 @@ +/* + * Progressia + * Copyright (C) 2020-2021 Wind Corporation and contributors + * + * 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 ru.windcorp.progressia.server.world.io; + +import java.nio.file.Path; + +import glm.vec._3.i.Vec3i; +import ru.windcorp.progressia.common.world.DefaultChunkData; +import ru.windcorp.progressia.common.world.DefaultWorldData; +import ru.windcorp.progressia.server.Server; + +public interface WorldContainer { + + Path getPath(); + + DefaultChunkData load(Vec3i position, DefaultWorldData world, Server server); + + void save(DefaultChunkData chunk, DefaultWorldData world, Server server); + + void close(); + +} diff --git a/src/main/java/ru/windcorp/progressia/server/world/io/WorldContainerFormat.java b/src/main/java/ru/windcorp/progressia/server/world/io/WorldContainerFormat.java new file mode 100644 index 0000000..9c8e0c8 --- /dev/null +++ b/src/main/java/ru/windcorp/progressia/server/world/io/WorldContainerFormat.java @@ -0,0 +1,32 @@ +/* + * Progressia + * Copyright (C) 2020-2021 Wind Corporation and contributors + * + * 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 ru.windcorp.progressia.server.world.io; + +import java.nio.file.Path; + +import ru.windcorp.progressia.common.util.namespaces.Namespaced; + +public abstract class WorldContainerFormat extends Namespaced { + + public WorldContainerFormat(String id) { + super(id); + } + + public abstract WorldContainer create(Path directory); + +} diff --git a/src/main/java/ru/windcorp/progressia/test/gen/TestGenerationConfig.java b/src/main/java/ru/windcorp/progressia/test/gen/TestGenerationConfig.java index ee0f312..76090d6 100644 --- a/src/main/java/ru/windcorp/progressia/test/gen/TestGenerationConfig.java +++ b/src/main/java/ru/windcorp/progressia/test/gen/TestGenerationConfig.java @@ -49,9 +49,18 @@ public class TestGenerationConfig { private static final float CURVATURE = Units.get("100 m"); private static final float INNER_RADIUS = Units.get("200 m"); - private static final Fields FIELDS = new Fields(SEED); + private final Fields fields = new Fields(SEED); + private final Function generator; + + public TestGenerationConfig() { + this.generator = createGenerator(); + } + + public Function getGenerator() { + return generator; + } - public static Function createGenerator() { + private Function createGenerator() { Planet planet = new Planet( ((int) PLANET_RADIUS) / Coordinates.CHUNK_SIZE, @@ -60,7 +69,7 @@ public class TestGenerationConfig { INNER_RADIUS ); - TestHeightMap heightMap = new TestHeightMap(planet, planet.getRadius() / 4, FIELDS); + TestHeightMap heightMap = new TestHeightMap(planet, planet.getRadius() / 4, fields); FloatRangeMap layers = new ArrayFloatRangeMap<>(); registerTerrainLayers(layers); @@ -72,11 +81,11 @@ public class TestGenerationConfig { } - private static void registerTerrainLayers(FloatRangeMap layers) { + private void registerTerrainLayers(FloatRangeMap layers) { BlockData dirt = BlockDataRegistry.getInstance().get("Test:Dirt"); BlockData air = BlockDataRegistry.getInstance().get("Test:Air"); - SurfaceFloatField cliffs = FIELDS.get("Test:Cliff"); + SurfaceFloatField cliffs = fields.get("Test:Cliff"); WorleyProceduralNoise.Builder builder = WorleyProceduralNoise.builder(); TestContent.ROCKS.getRocks().forEach(rock -> { @@ -88,9 +97,9 @@ public class TestGenerationConfig { } }, 1); }); - SurfaceFloatField rockDepthOffsets = FIELDS.register( + SurfaceFloatField rockDepthOffsets = fields.register( "Test:RockDepthOffsets", - () -> tweak(FIELDS.primitive(), 40, 5) + () -> tweak(fields.primitive(), 40, 5) ); RockLayer rockLayer = new RockLayer(builder.build(SEED), rockDepthOffsets); @@ -105,28 +114,28 @@ public class TestGenerationConfig { layers.put(4, Float.POSITIVE_INFINITY, rockLayer); } - private static void registerFeatures(List features) { + private void registerFeatures(List features) { - SurfaceFloatField forestiness = FIELDS.register( + SurfaceFloatField forestiness = fields.register( "Test:Forest", - () -> squash(scale(FIELDS.primitive(), 200), 5) + () -> squash(scale(fields.primitive(), 200), 5) ); - SurfaceFloatField grassiness = FIELDS.register( + SurfaceFloatField grassiness = fields.register( "Test:Grass", f -> multiply( - tweak(octaves(FIELDS.primitive(), 2, 2), 40, 0.5, 1.2), - squash(tweak(FIELDS.get("Test:Forest", f), 1, -1, 1), 10), - anti(squash(FIELDS.get("Test:Cliff", f), 10)) + tweak(octaves(fields.primitive(), 2, 2), 40, 0.5, 1.2), + squash(tweak(fields.get("Test:Forest", f), 1, -1, 1), 10), + anti(squash(fields.get("Test:Cliff", f), 10)) ) ); - Function floweriness = flowerName -> FIELDS.register( + Function floweriness = flowerName -> fields.register( "Test:Flower" + flowerName, f -> multiply( - selectPositive(squash(scale(octaves(FIELDS.primitive(), 2, 3), 100), 2), 1, 0.5), - tweak(FIELDS.get("Test:Forest", f), 1, -1, 1.1), - anti(squash(FIELDS.get("Test:Cliff", f), 10)) + selectPositive(squash(scale(octaves(fields.primitive(), 2, 3), 100), 2), 1, 0.5), + tweak(fields.get("Test:Forest", f), 1, -1, 1.1), + anti(squash(fields.get("Test:Cliff", f), 10)) ) ); diff --git a/src/main/java/ru/windcorp/progressia/test/region/RegionFormat.java b/src/main/java/ru/windcorp/progressia/test/region/RegionFormat.java new file mode 100644 index 0000000..85d1bbe --- /dev/null +++ b/src/main/java/ru/windcorp/progressia/test/region/RegionFormat.java @@ -0,0 +1,36 @@ +/* + * Progressia + * Copyright (C) 2020-2021 Wind Corporation and contributors + * + * 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 ru.windcorp.progressia.test.region; + +import java.nio.file.Path; + +import ru.windcorp.progressia.server.world.io.WorldContainer; +import ru.windcorp.progressia.server.world.io.WorldContainerFormat; + +public class RegionFormat extends WorldContainerFormat { + + public RegionFormat(String id) { + super(id); + } + + @Override + public WorldContainer create(Path directory) { + return new TestWorldDiskIO(directory); + } + +} diff --git a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java similarity index 92% rename from src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java rename to src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java index d15e88f..b391ec3 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package ru.windcorp.progressia.test; +package ru.windcorp.progressia.test.region; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; @@ -52,12 +52,13 @@ import ru.windcorp.progressia.common.world.DecodingException; import ru.windcorp.progressia.common.world.DefaultWorldData; import ru.windcorp.progressia.common.world.io.ChunkIO; import ru.windcorp.progressia.server.Server; +import ru.windcorp.progressia.server.world.io.WorldContainer; -public class TestWorldDiskIO { +public class TestWorldDiskIO implements WorldContainer { private static final boolean resetCorrupted = true; - public static class RandomFileMapped { + public class RandomFileMapped { public RandomAccessFile file; public HashMap offsets; public HashMap lengths; @@ -121,11 +122,11 @@ public class TestWorldDiskIO { } } - private static Path SAVE_DIR = Paths.get("tmp_world"); + private Path SAVE_DIR = Paths.get("tmp_world"); private static final String formatFile = "world.format"; private static final Logger LOG = LogManager.getLogger("TestWorldDiskIO"); - private static HashMap inOutMap; + private HashMap inOutMap; private static final boolean ENABLE = false; private static int maxSize = 1048576; @@ -134,11 +135,11 @@ public class TestWorldDiskIO { private static final int bestFormat = 65536; // private Map regions = new HashMap(); - private static Vec3i regionSize; - private static int chunksPerRegion; + private Vec3i regionSize; + private int chunksPerRegion; - private static int currentFormat = -1; - private static String extension = ".null"; + private int currentFormat = -1; + private String extension = ".null"; private static int natFromInt(int loc) { if (loc < 0) @@ -155,7 +156,7 @@ public class TestWorldDiskIO { * } */ - private static Vec3i getRegion(Vec3i chunkLoc) { + private Vec3i getRegion(Vec3i chunkLoc) { int x = chunkLoc.x; if (x<0) { @@ -197,15 +198,11 @@ public class TestWorldDiskIO { return ((a % m) + m) % m; } - private static Vec3i getRegionLoc(Vec3i chunkLoc) { + private Vec3i getRegionLoc(Vec3i chunkLoc) { return new Vec3i(mod(chunkLoc.x, regionSize.x), mod(chunkLoc.y, regionSize.y), mod(chunkLoc.z, regionSize.z)); } - public static void initRegions() { - initRegions(null); - } - - public static void initRegions(Path worldPath) { + public TestWorldDiskIO(Path worldPath) { if (worldPath != null) { SAVE_DIR = worldPath; } @@ -224,7 +221,7 @@ public class TestWorldDiskIO { return sectorsUsed; }*/ - private static void setRegionSize(int format) { + private void setRegionSize(int format) { inOutMap = new HashMap(); switch (format) { case 65536: @@ -243,7 +240,7 @@ public class TestWorldDiskIO { } } - public static boolean confirmHeaderHealth(RandomAccessFile input, HashMap offsets, HashMap length) throws IOException + public boolean confirmHeaderHealth(RandomAccessFile input, HashMap offsets, HashMap length) throws IOException { Set used = new HashSet(); input.seek(0); @@ -282,7 +279,8 @@ public class TestWorldDiskIO { return true; } - public static void saveChunk(DefaultChunkData chunk, Server server) { + @Override + public void save(DefaultChunkData chunk, DefaultWorldData world, Server server) { if (!ENABLE) return; @@ -472,7 +470,7 @@ public class TestWorldDiskIO { } } - private static RandomFileMapped makeNew(Path path, Object hashObj) { + private RandomFileMapped makeNew(Path path, Object hashObj) { try { RandomAccessFile raf = new RandomAccessFile(path.toFile(), "rw"); @@ -490,12 +488,13 @@ public class TestWorldDiskIO { return null; } - private static void writeGenerationHint(DefaultChunkData chunk, DataOutputStream output, Server server) + private void writeGenerationHint(DefaultChunkData chunk, DataOutputStream output, Server server) throws IOException { server.getWorld().getGenerator().writeGenerationHint(output, chunk.getGenerationHint()); } - public static DefaultChunkData tryToLoad(Vec3i chunkPos, DefaultWorldData world, Server server) { + @Override + public DefaultChunkData load(Vec3i chunkPos, DefaultWorldData world, Server server) { if (!ENABLE) return null; @@ -650,7 +649,7 @@ public class TestWorldDiskIO { return null; } - private static DefaultChunkData loadRegion(Path path, Vec3i chunkPos, DefaultWorldData world, Server server) + private DefaultChunkData loadRegion(Path path, Vec3i chunkPos, DefaultWorldData world, Server server) throws IOException, DecodingException { int offset = 0; @@ -724,7 +723,7 @@ public class TestWorldDiskIO { return null; } - private static DefaultChunkData loadRegionX(Path path, Vec3i chunkPos, DefaultWorldData world, Server server) + private DefaultChunkData loadRegionX(Path path, Vec3i chunkPos, DefaultWorldData world, Server server) throws IOException, DecodingException { int offset = 0; @@ -810,4 +809,15 @@ public class TestWorldDiskIO { chunk.setGenerationHint(server.getWorld().getGenerator().readGenerationHint(input)); } + @Override + public Path getPath() { + return SAVE_DIR; + } + + @Override + public void close() { + // TODO Auto-generated method stub + + } + } From f4300558d518ce42a9de50cb1c76d5d9828ee63e Mon Sep 17 00:00:00 2001 From: OLEGSHA Date: Sun, 29 Aug 2021 02:08:19 +0300 Subject: [PATCH 20/31] Formatted and broke the saving mechanism. I'm too tired to bugfix - Refactored and formatted TestWorldDiskIO - Removed HashableVec3i - Added Coordinates methods for custom bit count - Properly reverted commit 98250cd - Known bugs: - Server shutdown close()s regions too early - Re-entering a world does not show saved changes --- .../progressia/client/world/ChunkRender.java | 4 +- .../progressia/common/util/HashableVec3i.java | 35 - .../progressia/common/world/Coordinates.java | 67 ++ .../common/world/DefaultChunkData.java | 45 +- .../management/load/ChunkRequestDaemon.java | 13 +- .../planet/PlanetFeatureGenerator.java | 3 - .../progressia/test/region/Region.java | 249 +++++ .../test/region/TestWorldDiskIO.java | 848 +++--------------- 8 files changed, 428 insertions(+), 836 deletions(-) delete mode 100644 src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java create mode 100644 src/main/java/ru/windcorp/progressia/test/region/Region.java diff --git a/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java b/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java index 2d432ab..41aa933 100644 --- a/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java +++ b/src/main/java/ru/windcorp/progressia/client/world/ChunkRender.java @@ -102,9 +102,7 @@ public class ChunkRender } public synchronized void render(ShapeRenderHelper renderer) { - if (!data.isEmpty) { - model.render(renderer); - } + model.render(renderer); } public synchronized void update() { diff --git a/src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java b/src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java deleted file mode 100644 index f003555..0000000 --- a/src/main/java/ru/windcorp/progressia/common/util/HashableVec3i.java +++ /dev/null @@ -1,35 +0,0 @@ -package ru.windcorp.progressia.common.util; - -import glm.vec._3.i.Vec3i; - -public class HashableVec3i { - - public Vec3i value; - - public HashableVec3i(Vec3i inValue) - { - value = inValue; - } - - @Override - public int hashCode() // Uses first 3 primes greater than 2**30 - { - return 1073741827 * value.x + 1073741831 * value.y + 1073741833 * value.z; - } - - @Override - public boolean equals(Object comparee) - { - if (comparee == null) - { - return false; - } - if (comparee.getClass() != HashableVec3i.class) - { - return false; - } - HashableVec3i compareeCast = (HashableVec3i) comparee; - return compareeCast.value.x == value.x && compareeCast.value.y == value.y && compareeCast.value.z == value.z ; - } - -} diff --git a/src/main/java/ru/windcorp/progressia/common/world/Coordinates.java b/src/main/java/ru/windcorp/progressia/common/world/Coordinates.java index b43231b..634b05e 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/Coordinates.java +++ b/src/main/java/ru/windcorp/progressia/common/world/Coordinates.java @@ -162,5 +162,72 @@ public class Coordinates { public static boolean isOnChunkBorder(int blockInChunk) { return blockInChunk == 0 || blockInChunk == BLOCKS_PER_CHUNK - 1; } + + /* + * Generalized versions + */ + + public static int convertGlobalToCell(int bits, int global) { + return global >> bits; + } + + public static Vec3i convertGlobalToCell( + int bits, + Vec3i global, + Vec3i output + ) { + if (output == null) + output = new Vec3i(); + + output.x = convertGlobalToCell(bits, global.x); + output.y = convertGlobalToCell(bits, global.y); + output.z = convertGlobalToCell(bits, global.z); + + return output; + } + + public static int convertGlobalToInCell(int bits, int global) { + int mask = (1 << bits) - 1; + return global & mask; + } + + public static Vec3i convertGlobalToInCell( + int bits, + Vec3i global, + Vec3i output + ) { + if (output == null) + output = new Vec3i(); + + output.x = convertGlobalToInCell(bits, global.x); + output.y = convertGlobalToInCell(bits, global.y); + output.z = convertGlobalToInCell(bits, global.z); + + return output; + } + + public static int getGlobal(int bits, int cell, int inCell) { + return inCell | (cell << bits); + } + + public static Vec3i getGlobal( + int bits, + Vec3i cell, + Vec3i inCell, + Vec3i output + ) { + if (output == null) + output = new Vec3i(); + + output.x = getGlobal(bits, cell.x, inCell.x); + output.y = getGlobal(bits, cell.y, inCell.y); + output.z = getGlobal(bits, cell.z, inCell.z); + + return output; + } + + public static boolean isOnCellBorder(int bits, int inCell) { + return inCell == 0 || inCell == (1 << bits) - 1; + } } diff --git a/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java b/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java index 967fe4e..e11509b 100644 --- a/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java +++ b/src/main/java/ru/windcorp/progressia/common/world/DefaultChunkData.java @@ -25,8 +25,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import java.util.HashSet; import java.util.Objects; + import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.world.block.BlockData; @@ -45,11 +45,6 @@ public class DefaultChunkData implements ChunkData { public static final int BLOCKS_PER_CHUNK = Coordinates.CHUNK_SIZE; public static final int CHUNK_RADIUS = BLOCKS_PER_CHUNK / 2; - - public boolean isEmpty = false; - public boolean isOpaque = false; - - public static HashSet transparent; private final Vec3i position = new Vec3i(); private final DefaultWorldData world; @@ -204,44 +199,6 @@ public class DefaultChunkData implements ChunkData { public void setGenerationHint(Object generationHint) { this.generationHint = generationHint; } - - public void computeOpaque() - { - for (int xyz=0;xyz buffer = new ArrayList<>(); private static class ChunkUnloadRequest { @@ -116,16 +113,16 @@ public class ChunkRequestDaemon { } private void processLoadQueues() { - toRequestUnload.forEach((pos) -> executor.submit(() -> scheduleUnload(pos))); + toRequestUnload.forEach(this::scheduleUnload); toRequestUnload.clear(); - toLoad.forEach((pos) -> executor.submit(() -> getChunkManager().loadOrGenerateChunk(pos))); + toLoad.forEach(getChunkManager()::loadOrGenerateChunk); toLoad.clear(); - toGenerate.forEach((pos) -> executor.submit(() -> getChunkManager().loadOrGenerateChunk(pos))); + toGenerate.forEach(getChunkManager()::loadOrGenerateChunk); toGenerate.clear(); - executor.submit(() -> unloadScheduledChunks()); + unloadScheduledChunks(); } private void scheduleUnload(Vec3i chunkPos) { diff --git a/src/main/java/ru/windcorp/progressia/server/world/generation/planet/PlanetFeatureGenerator.java b/src/main/java/ru/windcorp/progressia/server/world/generation/planet/PlanetFeatureGenerator.java index 205ea43..97e2424 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/generation/planet/PlanetFeatureGenerator.java +++ b/src/main/java/ru/windcorp/progressia/server/world/generation/planet/PlanetFeatureGenerator.java @@ -56,9 +56,6 @@ public class PlanetFeatureGenerator { generateBorderFeatures(server, chunk); } - chunk.computeEmpty(); - chunk.computeOpaque(); - chunk.setGenerationHint(true); } diff --git a/src/main/java/ru/windcorp/progressia/test/region/Region.java b/src/main/java/ru/windcorp/progressia/test/region/Region.java new file mode 100644 index 0000000..7afd862 --- /dev/null +++ b/src/main/java/ru/windcorp/progressia/test/region/Region.java @@ -0,0 +1,249 @@ +/* + * Progressia + * Copyright (C) 2020-2021 Wind Corporation and contributors + * + * 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 ru.windcorp.progressia.test.region; + +import static ru.windcorp.progressia.test.region.TestWorldDiskIO.REGION_DIAMETER; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import java.util.zip.DeflaterOutputStream; +import java.util.zip.InflaterInputStream; + +import glm.vec._3.i.Vec3i; +import ru.windcorp.progressia.common.state.IOContext; +import ru.windcorp.progressia.common.world.DecodingException; +import ru.windcorp.progressia.common.world.DefaultChunkData; +import ru.windcorp.progressia.common.world.DefaultWorldData; +import ru.windcorp.progressia.common.world.generic.ChunkMap; +import ru.windcorp.progressia.common.world.generic.ChunkMaps; +import ru.windcorp.progressia.common.world.io.ChunkIO; +import ru.windcorp.progressia.server.Server; + +public class Region { + + private static final boolean RESET_CORRUPTED = true; + + // 1 MiB + private static final int MAX_CHUNK_SIZE = 1024 * 1024; + private static final int SECTOR_SIZE = MAX_CHUNK_SIZE / 256; + + private static final int HEADER_SIZE = Integer.BYTES * REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER; + + private final RandomAccessFile file; + + private final ChunkMap offsets = ChunkMaps.newHashMap(); + private final ChunkMap lengths = ChunkMaps.newHashMap(); + + public Region(RandomAccessFile file) throws IOException { + this.file = file; + + try { + confirmHeaderHealth(); + } catch (IOException e) { + + TestWorldDiskIO.LOG.debug("Uh the file broke"); + if (RESET_CORRUPTED) { + byte headerBytes[] = new byte[HEADER_SIZE]; + Arrays.fill(headerBytes, (byte) 0); + + try { + file.write(headerBytes); + } catch (IOException e1) { + e.addSuppressed(e1); + throw e; + } + } + + } + } + + public RandomAccessFile getFile() { + return file; + } + + public void close() throws IOException { + this.file.close(); + } + + public int getOffset(Vec3i chunkLoc) { + return offsets.get(chunkLoc); + } + + public boolean hasOffset(Vec3i pos) { + return offsets.containsKey(pos); + } + + public void putOffset(Vec3i pos, int offset) { + offsets.put(pos, offset); + } + + public int getLength(Vec3i chunkLoc) { + return lengths.get(chunkLoc); + } + + public boolean hasLength(Vec3i pos) { + return lengths.containsKey(pos); + } + + public void putLength(Vec3i pos, int length) { + lengths.put(pos, length); + } + + private void confirmHeaderHealth() throws IOException { + + Set used = new HashSet(); + final int chunksPerRegion = REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER; + + file.seek(0); + + if (file.length() < HEADER_SIZE) { + throw new IOException("File is too short to contain a header"); + } + + for (int i = 0; i < chunksPerRegion; i++) { + int offset = file.readInt(); + + int sectorLength = file.read(); + if (sectorLength == 0) { + continue; + } + + Vec3i pos = new Vec3i(); + pos.x = i / REGION_DIAMETER / REGION_DIAMETER; + pos.y = (i / REGION_DIAMETER) % REGION_DIAMETER; + pos.z = i % REGION_DIAMETER; + + offsets.put(pos, offset); + lengths.put(pos, sectorLength); + + for (int sector = 0; sector < sectorLength; sector++) { + if (!used.add(offset + sector)) { + throw new IOException("A sector is used twice"); + } + } + } + + } + + public void save(DefaultChunkData chunk, Server server) throws IOException { + Vec3i pos = TestWorldDiskIO.getInRegionCoords(chunk.getPosition()); + int definitionOffset = Integer.BYTES * (pos.z + REGION_DIAMETER * (pos.y + REGION_DIAMETER * pos.x)); + + if (!hasOffset(pos)) { + allocateChunk(definitionOffset, pos); + } + int dataOffset = getOffset(pos); + + byte[] buffer = saveToBuffer(chunk, server); + writeBuffer(buffer, definitionOffset, dataOffset, pos); + } + + private byte[] saveToBuffer(DefaultChunkData chunk, Server server) throws IOException { + ByteArrayOutputStream arrayStream = new ByteArrayOutputStream(); + try ( + DataOutputStream dataStream = new DataOutputStream( + new DeflaterOutputStream( + new BufferedOutputStream(arrayStream) + ) + ) + ) { + ChunkIO.save(chunk, dataStream, IOContext.SAVE); + TestWorldDiskIO.writeGenerationHint(chunk, dataStream, server); + } + + return arrayStream.toByteArray(); + } + + private void writeBuffer(byte[] buffer, int definitionOffset, int dataOffset, Vec3i pos) throws IOException { + file.seek(HEADER_SIZE + SECTOR_SIZE * dataOffset); + file.write(buffer); + + file.seek(definitionOffset + Integer.BYTES - 1); + + int sectors = buffer.length / SECTOR_SIZE + 1; + file.write(sectors); + + putLength(pos, sectors); + } + + private void allocateChunk(int definitionOffset, Vec3i pos) throws IOException { + int outputLen = (int) file.length(); + + int dataOffset = (int) (outputLen - HEADER_SIZE) / SECTOR_SIZE + 1; + + file.seek(definitionOffset); + file.writeInt(dataOffset); + + file.setLength(HEADER_SIZE + dataOffset * SECTOR_SIZE); + putOffset(pos, dataOffset); + } + + public DefaultChunkData load(Vec3i chunkPos, DefaultWorldData world, Server server) + throws IOException, + DecodingException { + + int dataOffset = 0; + int sectorLength = 0; + Vec3i pos = TestWorldDiskIO.getInRegionCoords(chunkPos); + + if (hasOffset(pos)) { + dataOffset = getOffset(pos); + sectorLength = getLength(pos); + } else { + return null; + } + + byte[] buffer = readBuffer(dataOffset, sectorLength); + DefaultChunkData result = loadFromBuffer(buffer, chunkPos, world, server); + return result; + } + + private DefaultChunkData loadFromBuffer(byte[] buffer, Vec3i chunkPos, DefaultWorldData world, Server server) + throws IOException, + DecodingException { + + DataInputStream dataStream = new DataInputStream( + new InflaterInputStream( + new BufferedInputStream( + new ByteArrayInputStream(buffer) + ) + ) + ); + + DefaultChunkData result = ChunkIO.load(world, chunkPos, dataStream, IOContext.SAVE); + TestWorldDiskIO.readGenerationHint(result, dataStream, server); + return result; + } + + private byte[] readBuffer(int dataOffset, int sectorLength) throws IOException { + file.seek(HEADER_SIZE + SECTOR_SIZE * dataOffset); + + byte buffer[] = new byte[SECTOR_SIZE * sectorLength]; + file.read(buffer); + return buffer; + } +} \ No newline at end of file diff --git a/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java index b391ec3..da0da50 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java @@ -18,792 +18,149 @@ package ru.windcorp.progressia.test.region; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.BufferedWriter; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; -import java.io.EOFException; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Scanner; -import java.util.Set; -import java.util.zip.DeflaterOutputStream; -import java.util.zip.InflaterInputStream; - import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import glm.vec._3.i.Vec3i; -import ru.windcorp.progressia.common.state.IOContext; -import ru.windcorp.progressia.common.util.HashableVec3i; +import ru.windcorp.progressia.common.util.crash.CrashReports; import ru.windcorp.progressia.common.world.DefaultChunkData; +import ru.windcorp.progressia.common.world.Coordinates; import ru.windcorp.progressia.common.world.DecodingException; import ru.windcorp.progressia.common.world.DefaultWorldData; -import ru.windcorp.progressia.common.world.io.ChunkIO; +import ru.windcorp.progressia.common.world.generic.ChunkMap; +import ru.windcorp.progressia.common.world.generic.ChunkMaps; import ru.windcorp.progressia.server.Server; import ru.windcorp.progressia.server.world.io.WorldContainer; public class TestWorldDiskIO implements WorldContainer { - - private static final boolean resetCorrupted = true; - - public class RandomFileMapped { - public RandomAccessFile file; - public HashMap offsets; - public HashMap lengths; - - public RandomFileMapped(RandomAccessFile inFile) - { - boolean check = false; - offsets = new HashMap<>(); - lengths = new HashMap<>(); - try { - check = confirmHeaderHealth(inFile, offsets, lengths); - } catch (IOException e) { - e.printStackTrace(); - } - if (!check) - { - LOG.debug("Uh the file broke"); - if (resetCorrupted) { - byte headerBytes[] = new byte[4 * chunksPerRegion]; - for (int i = 0; i < 4 * chunksPerRegion; i++) { - headerBytes[i] = (byte) 0; - } - try { - inFile.write(headerBytes); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - - file = inFile; - } - - public int getOffset(Vec3i chunkLoc) - { - return offsets.get(new HashableVec3i(chunkLoc)); - } - public boolean hasOffset(Vec3i pos) { - return offsets.containsKey(new HashableVec3i(pos)); - } - - public void putOffset(Vec3i pos, int offset) - { - offsets.put(new HashableVec3i(pos), offset); - } - - public int getLength(Vec3i chunkLoc) - { - return lengths.get(new HashableVec3i(chunkLoc)); - } + private static final boolean ENABLE = true; - public boolean hasLength(Vec3i pos) { - return lengths.containsKey(new HashableVec3i(pos)); - } - - public void putLength(Vec3i pos, int length) - { - lengths.put(new HashableVec3i(pos), length); - } + private static final String FILE_NAME_FORMAT = "region_%d_%d_%d.progressia_region"; + + private static final int BITS_IN_CHUNK_COORDS = 4; + public static final int REGION_DIAMETER = 1 << BITS_IN_CHUNK_COORDS; + + public static Vec3i getRegionCoords(Vec3i chunkCoords) { + return Coordinates.convertGlobalToCell(BITS_IN_CHUNK_COORDS, chunkCoords, null); } - private Path SAVE_DIR = Paths.get("tmp_world"); - private static final String formatFile = "world.format"; - private static final Logger LOG = LogManager.getLogger("TestWorldDiskIO"); - - private HashMap inOutMap; - private static final boolean ENABLE = false; - - private static int maxSize = 1048576; - private static int sectorSize = maxSize / 256; - - private static final int bestFormat = 65536; - - // private Map regions = new HashMap(); - private Vec3i regionSize; - private int chunksPerRegion; - - private int currentFormat = -1; - private String extension = ".null"; - - private static int natFromInt(int loc) { - if (loc < 0) - return -2*loc - 1; - return 2*loc; + public static Vec3i getInRegionCoords(Vec3i chunkCoords) { + return Coordinates.convertGlobalToInCell(BITS_IN_CHUNK_COORDS, chunkCoords, null); } - /* - * private static int intFromNat(int loc) // Possibly unused - * { - * if ((loc & 1) == 1) - * return -loc >> 1; - * return loc >> 1; - * } - */ + static final Logger LOG = LogManager.getLogger(); - private Vec3i getRegion(Vec3i chunkLoc) { - int x = chunkLoc.x; - if (x<0) - { - x /= regionSize.x; - x--; - } - else - { - x /= regionSize.x; - } - int y = chunkLoc.y; - if (y<0) - { - y /= regionSize.y; - y--; - } - else - { - y /= regionSize.y; - } - int z = chunkLoc.z; - if (z<0) - { - z /= regionSize.z; - z--; - } - else - { - z /= regionSize.z; - } - return new Vec3i( - natFromInt(x), - natFromInt(y), - natFromInt(z) - ); - } + private final Path path; + private final ChunkMap regions = ChunkMaps.newHashMap(); - private static int mod(int a, int m) { - return ((a % m) + m) % m; - } - - private Vec3i getRegionLoc(Vec3i chunkLoc) { - return new Vec3i(mod(chunkLoc.x, regionSize.x), mod(chunkLoc.y, regionSize.y), mod(chunkLoc.z, regionSize.z)); - } - - public TestWorldDiskIO(Path worldPath) { - if (worldPath != null) { - SAVE_DIR = worldPath; - } - - // regions.put(new Vec3i(0,0,0), new Vec3i(1,1,1)); - } - - /*public static int getAvailableSector(MappedByteBuffer mbb) - { - int sectorsUsed = 0; - for (int i=offsetBytes; i<(offsetBytes+1)*chunksPerRegion; i+= (offsetBytes+1)) - { - - sectorsUsed += mbb.get(i); - } - return sectorsUsed; - }*/ - - private void setRegionSize(int format) { - inOutMap = new HashMap(); - switch (format) { - case 65536: - default: - regionSize = new Vec3i(16); - chunksPerRegion = 16 * 16 * 16; - currentFormat = 65536; - extension = ".progressia_region"; - break; - case 65537: - regionSize = new Vec3i(16); - chunksPerRegion = 16 * 16 * 16; - currentFormat = 65536; - extension = ".progressia_regionx"; - break; - } - } - - public boolean confirmHeaderHealth(RandomAccessFile input, HashMap offsets, HashMap length) throws IOException - { - Set used = new HashSet(); - input.seek(0); - if (input.length() < 4*chunksPerRegion) - { - return false; - } - for (int i=0;i<4*chunksPerRegion;i+=4) - { - int offset = 0; - for (int ii = 0; ii < 3; ii++) { - offset *= 256; - offset += input.read(); - } - int sectorLength = input.read(); - if (sectorLength==0) - { - continue; - } - int headerPos = i/4; - int x = headerPos/regionSize.y/regionSize.z; - int y = (headerPos/regionSize.z)%regionSize.y; - int z = headerPos%regionSize.z; - HashableVec3i key = new HashableVec3i(new Vec3i(x,y,z)); - offsets.put(key , offset); - length.put(key, sectorLength); - for (int ii=0;ii>= 8; - } - output.write(readOffset); - - output.setLength(fullOffset + offset * sectorSize); - } - outputMap.putOffset(pos, offset); - } - - ByteArrayOutputStream tempDataStream = new ByteArrayOutputStream(); - DataOutputStream trueOutput = new DataOutputStream( - new DeflaterOutputStream( - new BufferedOutputStream(tempDataStream) - ) - ); - ChunkIO.save(chunk, trueOutput, IOContext.SAVE); - writeGenerationHint(chunk, trueOutput, server); - - trueOutput.close(); - - byte tempData[] = tempDataStream.toByteArray(); - - output.seek( fullOffset + sectorSize * offset); - output.write(tempData); - - output.seek(shortOffset + 3); - output.write(tempData.length / sectorSize + 1); - outputMap.putLength(pos, tempData.length / sectorSize + 1); - // LOG.info("Used {} sectors",(int) - // tempData.length/sectorSize + 1); - - } - else if (currentFormat == 65537) { - LOG.debug( - "Saving {} {} {}", - chunk.getPosition().x, - chunk.getPosition().y, - chunk.getPosition().z - ); - - Files.createDirectories(SAVE_DIR); - - Vec3i saveCoords = getRegion(chunk.getPosition()); - - Path path = SAVE_DIR.resolve( - String.format( - "%d_%d_%d" + extension, - saveCoords.x, - saveCoords.y, - saveCoords.z - ) - ); - - - RandomFileMapped outputMap = inOutMap.get(new HashableVec3i(saveCoords)); - //LOG.info("saveCoords {},{},{}", saveCoords.x, saveCoords.y, saveCoords.z); - if (outputMap == null) - { - outputMap = makeNew(path, new HashableVec3i(saveCoords)); - } - RandomAccessFile output = outputMap.file; - - Vec3i pos = getRegionLoc(chunk.getPosition()); - int shortOffset = 4 * (pos.z + regionSize.z * (pos.y + regionSize.y * pos.x)); - int fullOffset = 4 * (chunksPerRegion); - int offset = 0; - - if (outputMap.hasOffset(pos)) - { - offset = outputMap.getOffset(pos); - } - else { - output.seek(shortOffset); - for (int i = 0; i < 3; i++) { - offset *= 256; - offset += output.read(); - } - int sectorLength = output.read(); - if (sectorLength == 0) { - int outputLen = (int) output.length(); - offset = (int) (outputLen - fullOffset) / sectorSize + 1; - int tempOffset = offset; - output.seek(shortOffset); - - byte readOffset[] = new byte[3]; - for (int i = 0; i < 3; i++) { - readOffset[2 - i] = (byte) (tempOffset % 256); - tempOffset >>= 8; - } - output.write(readOffset); - - output.setLength(fullOffset + offset * sectorSize); - } - outputMap.putOffset(pos, offset); - } - - ByteArrayOutputStream tempDataStream = new ByteArrayOutputStream(); - DataOutputStream trueOutput = new DataOutputStream( - new DeflaterOutputStream( - new BufferedOutputStream(tempDataStream) - ) - ); - ChunkIO.save(chunk, trueOutput, IOContext.SAVE); - writeGenerationHint(chunk, trueOutput, server); - - trueOutput.close(); - - byte tempData[] = tempDataStream.toByteArray(); - - output.seek( fullOffset + sectorSize * offset); - - chunk.computeOpaque(); - chunk.computeEmpty(); - output.write((chunk.isOpaque() ? 1 : 0) << 1 + (chunk.isEmpty() ? 1 : 0)); //Writes extra flag byte of whether or not the chunk is empty or solid - output.write(tempData); - - output.seek(shortOffset + 3); - output.write(tempData.length / sectorSize + 1); - outputMap.putLength(pos, tempData.length / sectorSize + 1); - // LOG.info("Used {} sectors",(int) - // tempData.length/sectorSize + 1); - - } - // else if (currentFormat) - } catch (IOException e) { - e.printStackTrace(); - } - } - - private RandomFileMapped makeNew(Path path, Object hashObj) { - try - { - RandomAccessFile raf = new RandomAccessFile(path.toFile(), "rw"); - //FileChannel fc = raf.getChannel(); - //MappedByteBuffer output = fc.map(FileChannel.MapMode.READ_WRITE, 0, maxSize*chunksPerRegion); - //output.limit(maxSize*chunksPerRegion); - RandomFileMapped rfm = new RandomFileMapped(raf); - inOutMap.put((HashableVec3i) hashObj, rfm); - return rfm; - } - catch (IOException e) - { - LOG.warn("bad things"); - } - return null; - } - - private void writeGenerationHint(DefaultChunkData chunk, DataOutputStream output, Server server) - throws IOException { - server.getWorld().getGenerator().writeGenerationHint(output, chunk.getGenerationHint()); + public TestWorldDiskIO(Path path) { + this.path = path; } @Override public DefaultChunkData load(Vec3i chunkPos, DefaultWorldData world, Server server) { - if (!ENABLE) + if (!ENABLE) { return null; - - if (currentFormat == -1) { - Path formatPath = SAVE_DIR.resolve(formatFile); - File format = formatPath.toFile(); - - if (format.exists()) { - String data = null; - try { - Scanner reader = new Scanner(format); - - data = reader.next(); - - reader.close(); - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - byte[] formatBytes = data.getBytes(); - int formatNum = formatBytes[0] * 256 * 256 * 256 + formatBytes[1] * 256 * 256 + formatBytes[2] * 256 - + formatBytes[3]; - - setRegionSize(formatNum); - } else { - setRegionSize(bestFormat); - - LOG.debug("Making new world with format {}", bestFormat); - - BufferedWriter bw; - try { - bw = new BufferedWriter(new FileWriter(format)); - - int bfClone = bestFormat; - - for (int i = 0; i < 4; i++) { - bw.write(bfClone >> 24); - LOG.debug(bfClone >> 24); - bfClone = bfClone << 8; - } - - /* - * bw.write( - * new char[] { - * (char) bestFormat / (256 * 256 * 256), - * (char) (bestFormat % 256) / (256 * 256), - * (char) (bestFormat % (256 * 256)) / (256), - * (char) (bestFormat % (256 * 256 * 256)) } - * ); - */ - - bw.close(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } } - if (currentFormat == 65536) { - Vec3i saveCoords = getRegion(chunkPos); + try { - Path path = SAVE_DIR.resolve( + Region region = getRegion(chunkPos, false); + if (region == null) { + return null; + } + + DefaultChunkData result = region.load(chunkPos, world, server); + return result; + + } catch (IOException | DecodingException e) { + LOG.warn( + "Failed to load chunk {} {} {}", + chunkPos.x, + chunkPos.y, + chunkPos.z + ); + e.printStackTrace(); + return null; + } + } + + @Override + public void save(DefaultChunkData chunk, DefaultWorldData world, Server server) { + if (!ENABLE) { + return; + } + + try { + LOG.debug( + "Saving {} {} {}", + chunk.getPosition().x, + chunk.getPosition().y, + chunk.getPosition().z + ); + + Region region = getRegion(chunk.getPosition(), true); + region.save(chunk, server); + } catch (IOException e) { + LOG.warn( + "Failed to save chunk {} {} {}", + chunk.getPosition().x, + chunk.getPosition().y, + chunk.getPosition().z + ); + e.printStackTrace(); + } + } + + private Region getRegion(Vec3i position, boolean createIfMissing) throws IOException { + if (regions.isEmpty()) { + Files.createDirectories(getPath()); + } + + Vec3i regionCoords = getRegionCoords(position); + + Region region = regions.get(regionCoords); + if (region == null) { + + Path path = getPath().resolve( String.format( - "%d_%d_%d" + extension, - saveCoords.x, - saveCoords.y, - saveCoords.z + FILE_NAME_FORMAT, + regionCoords.x, + regionCoords.y, + regionCoords.z ) ); - if (!Files.exists(path)) { - LOG.debug( - "Not found {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z - ); - + if (!Files.exists(path) && !createIfMissing) { return null; } - try { - DefaultChunkData result = loadRegion(path, chunkPos, world, server); - - LOG.debug( - "Loaded {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z - ); - - return result; - } catch (Exception e) { - e.printStackTrace(); - LOG.debug( - "Could not load {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z - ); - return null; - } + region = openRegion(path, regionCoords); } - else if (currentFormat == 65537) { - Vec3i saveCoords = getRegion(chunkPos); - Path path = SAVE_DIR.resolve( - String.format( - "%d_%d_%d" + extension, - saveCoords.x, - saveCoords.y, - saveCoords.z - ) - ); - - if (!Files.exists(path)) { - LOG.debug( - "Not found {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z - ); - - return null; - } - - try { - DefaultChunkData result = loadRegionX(path, chunkPos, world, server); - - LOG.debug( - "Loaded {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z - ); - - return result; - } catch (Exception e) { - e.printStackTrace(); - LOG.debug( - "Could not load {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z - ); - return null; - } - } - return null; + return region; } - private DefaultChunkData loadRegion(Path path, Vec3i chunkPos, DefaultWorldData world, Server server) - throws IOException, - DecodingException { - int offset = 0; - int sectorLength = 0; - Vec3i pos; - RandomFileMapped inputMap; - int fullOffset = 4 * (chunksPerRegion); - try - { - Vec3i streamCoords = getRegion(chunkPos); - - inputMap = inOutMap.get(new HashableVec3i(streamCoords)); - //LOG.info("streamCoords {},{},{}", streamCoords.x,streamCoords.y,streamCoords.z); - if (inputMap == null) - { - //input = new RandomAccessFile(path.toFile(), "rw"); - //input = Files.newByteChannel(path); - inputMap = makeNew(path, new HashableVec3i(streamCoords)); - } - - RandomAccessFile input = inputMap.file; - - - pos = getRegionLoc(chunkPos); - - if (inputMap.hasOffset(pos)) - { - offset = inputMap.getOffset(pos); - sectorLength = inputMap.getLength(pos); - //LOG.info("{},{}", offset, sectorLength); - } - else - { - - // LOG.info(path.toString()); - - int shortOffset = 4 * (pos.z + regionSize.z * (pos.y + regionSize.y * pos.x)); - - input.seek(shortOffset); - for (int i = 0; i < 3; i++) { - offset *= 256; - offset += input.read(); - } - sectorLength = input.read(); - if (sectorLength == 0) - { - return null; - } - inputMap.putOffset(pos, offset); - inputMap.putLength(pos, sectorLength); - } - input.seek(fullOffset + sectorSize * offset); - - // LOG.info("Read {} sectors", sectorLength); - - byte tempData[] = new byte[sectorSize * sectorLength]; - input.read(tempData); - - DataInputStream trueInput = new DataInputStream( - new InflaterInputStream(new BufferedInputStream(new ByteArrayInputStream(tempData))) - ); - DefaultChunkData chunk = ChunkIO.load(world, chunkPos, trueInput, IOContext.SAVE); - readGenerationHint(chunk, trueInput, server); - return chunk; - } - catch (EOFException e) - { - LOG.warn("Reached end of file, offset was {}, sectors was {}", offset, sectorLength); - e.printStackTrace(); - } - return null; - } - - private DefaultChunkData loadRegionX(Path path, Vec3i chunkPos, DefaultWorldData world, Server server) - throws IOException, - DecodingException { - int offset = 0; - int sectorLength = 0; - Vec3i pos; - RandomFileMapped inputMap; - int fullOffset = 4 * (chunksPerRegion); - try - { - Vec3i streamCoords = getRegion(chunkPos); - - inputMap = inOutMap.get(new HashableVec3i(streamCoords)); - //LOG.info("streamCoords {},{},{}", streamCoords.x,streamCoords.y,streamCoords.z); - if (inputMap == null) - { - //input = new RandomAccessFile(path.toFile(), "rw"); - //input = Files.newByteChannel(path); - inputMap = makeNew(path, new HashableVec3i(streamCoords)); - } - - RandomAccessFile input = inputMap.file; - - - pos = getRegionLoc(chunkPos); - - if (inputMap.hasOffset(pos)) - { - offset = inputMap.getOffset(pos); - sectorLength = inputMap.getLength(pos); - //LOG.info("{},{}", offset, sectorLength); - } - else - { - - // LOG.info(path.toString()); - - int shortOffset = 4 * (pos.z + regionSize.z * (pos.y + regionSize.y * pos.x)); - - input.seek(shortOffset); - for (int i = 0; i < 3; i++) { - offset *= 256; - offset += input.read(); - } - sectorLength = input.read(); - if (sectorLength == 0) - { - return null; - } - inputMap.putOffset(pos, offset); - inputMap.putLength(pos, sectorLength); - } - input.seek(fullOffset + sectorSize * offset); - - int xByte = input.read(); - - // LOG.info("Read {} sectors", sectorLength); - - byte tempData[] = new byte[sectorSize * sectorLength]; - input.read(tempData); - - DataInputStream trueInput = new DataInputStream( - new InflaterInputStream(new BufferedInputStream(new ByteArrayInputStream(tempData))) - ); - DefaultChunkData chunk = ChunkIO.load(world, chunkPos, trueInput, IOContext.SAVE); - readGenerationHint(chunk, trueInput, server); - - chunk.isOpaque = (xByte & 2)==2; - chunk.isEmpty = (xByte & 1)==1; - - return chunk; - } - catch (EOFException e) - { - LOG.warn("Reached end of file, offset was {}, sectors was {}", offset, sectorLength); - e.printStackTrace(); - } - return null; + private Region openRegion(Path path, Vec3i regionCoords) throws IOException { + RandomAccessFile raf = new RandomAccessFile(path.toFile(), "rw"); + Region region = new Region(raf); + regions.put(regionCoords, region); + return region; } - private static void readGenerationHint(DefaultChunkData chunk, DataInputStream input, Server server) + static void writeGenerationHint(DefaultChunkData chunk, DataOutputStream output, Server server) + throws IOException { + server.getWorld().getGenerator().writeGenerationHint(output, chunk.getGenerationHint()); + } + + static void readGenerationHint(DefaultChunkData chunk, DataInputStream input, Server server) throws IOException, DecodingException { chunk.setGenerationHint(server.getWorld().getGenerator().readGenerationHint(input)); @@ -811,13 +168,18 @@ public class TestWorldDiskIO implements WorldContainer { @Override public Path getPath() { - return SAVE_DIR; + return path; } @Override public void close() { - // TODO Auto-generated method stub - + try { + for (Region region : regions.values()) { + region.close(); + } + } catch (IOException e) { + CrashReports.report(e, "Could not close region files"); + } } } From d2ffe1fe0e7297479828d0e0554af675c5b0ffc5 Mon Sep 17 00:00:00 2001 From: OLEGSHA Date: Sun, 29 Aug 2021 12:04:02 +0300 Subject: [PATCH 21/31] Fixed the bug that opfromthestart found, reloading now works --- .../progressia/test/region/Region.java | 8 ++- .../test/region/TestWorldDiskIO.java | 60 ++++++++++--------- src/main/resources/log4j2.xml | 5 +- 3 files changed, 40 insertions(+), 33 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/test/region/Region.java b/src/main/java/ru/windcorp/progressia/test/region/Region.java index 7afd862..251f36e 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/Region.java +++ b/src/main/java/ru/windcorp/progressia/test/region/Region.java @@ -50,8 +50,10 @@ public class Region { // 1 MiB private static final int MAX_CHUNK_SIZE = 1024 * 1024; private static final int SECTOR_SIZE = MAX_CHUNK_SIZE / 256; + + private static final int DEFINITION_SIZE = Integer.BYTES + 1; - private static final int HEADER_SIZE = Integer.BYTES * REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER; + private static final int HEADER_SIZE = DEFINITION_SIZE * REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER; private final RandomAccessFile file; @@ -151,7 +153,7 @@ public class Region { public void save(DefaultChunkData chunk, Server server) throws IOException { Vec3i pos = TestWorldDiskIO.getInRegionCoords(chunk.getPosition()); - int definitionOffset = Integer.BYTES * (pos.z + REGION_DIAMETER * (pos.y + REGION_DIAMETER * pos.x)); + int definitionOffset = DEFINITION_SIZE * (pos.z + REGION_DIAMETER * (pos.y + REGION_DIAMETER * pos.x)); if (!hasOffset(pos)) { allocateChunk(definitionOffset, pos); @@ -182,7 +184,7 @@ public class Region { file.seek(HEADER_SIZE + SECTOR_SIZE * dataOffset); file.write(buffer); - file.seek(definitionOffset + Integer.BYTES - 1); + file.seek(definitionOffset + Integer.BYTES); int sectors = buffer.length / SECTOR_SIZE + 1; file.write(sectors); diff --git a/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java index da0da50..f8b015f 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java @@ -55,7 +55,7 @@ public class TestWorldDiskIO implements WorldContainer { return Coordinates.convertGlobalToInCell(BITS_IN_CHUNK_COORDS, chunkCoords, null); } - static final Logger LOG = LogManager.getLogger(); + static final Logger LOG = LogManager.getLogger("TestWorldDiskIO"); private final Path path; private final ChunkMap regions = ChunkMaps.newHashMap(); @@ -74,6 +74,7 @@ public class TestWorldDiskIO implements WorldContainer { Region region = getRegion(chunkPos, false); if (region == null) { + debug("Could not load chunk {} {} {}: region did not load", chunkPos); return null; } @@ -81,12 +82,7 @@ public class TestWorldDiskIO implements WorldContainer { return result; } catch (IOException | DecodingException e) { - LOG.warn( - "Failed to load chunk {} {} {}", - chunkPos.x, - chunkPos.y, - chunkPos.z - ); + warn("Failed to load chunk {} {} {}", chunkPos); e.printStackTrace(); return null; } @@ -99,22 +95,11 @@ public class TestWorldDiskIO implements WorldContainer { } try { - LOG.debug( - "Saving {} {} {}", - chunk.getPosition().x, - chunk.getPosition().y, - chunk.getPosition().z - ); - + debug("Saving chunk {} {} {}", chunk.getPosition()); Region region = getRegion(chunk.getPosition(), true); region.save(chunk, server); } catch (IOException e) { - LOG.warn( - "Failed to save chunk {} {} {}", - chunk.getPosition().x, - chunk.getPosition().y, - chunk.getPosition().z - ); + warn("Failed to save chunk {} {} {}", chunk.getPosition()); e.printStackTrace(); } } @@ -128,21 +113,17 @@ public class TestWorldDiskIO implements WorldContainer { Region region = regions.get(regionCoords); if (region == null) { + debug("Region {} {} {} is not loaded, loading", regionCoords); - Path path = getPath().resolve( - String.format( - FILE_NAME_FORMAT, - regionCoords.x, - regionCoords.y, - regionCoords.z - ) - ); + Path path = getRegionPath(regionCoords); - if (!Files.exists(path) && !createIfMissing) { + if (!createIfMissing && !Files.exists(path)) { + debug("Region {} {} {} does not exist on disk, aborting load", regionCoords); return null; } region = openRegion(path, regionCoords); + debug("Region {} {} {} loaded", regionCoords); } return region; @@ -170,6 +151,17 @@ public class TestWorldDiskIO implements WorldContainer { public Path getPath() { return path; } + + private Path getRegionPath(Vec3i regionPos) { + return getPath().resolve( + String.format( + FILE_NAME_FORMAT, + regionPos.x, + regionPos.y, + regionPos.z + ) + ); + } @Override public void close() { @@ -181,5 +173,15 @@ public class TestWorldDiskIO implements WorldContainer { CrashReports.report(e, "Could not close region files"); } } + + private static void debug(String message, Vec3i vector) { + if (LOG.isDebugEnabled()) { + LOG.debug(message, vector.x, vector.y, vector.z); + } + } + + private static void warn(String message, Vec3i vector) { + LOG.warn(message, vector.x, vector.y, vector.z); + } } diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index b249e72..68d804f 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -26,7 +26,10 @@ --> - + + From e967a644010bb05d0e5f8ac6847fe834b5e074df Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Mon, 30 Aug 2021 10:52:56 -0400 Subject: [PATCH 22/31] More Compact region files -Sector length increased to a short, the minimum sector size is now 16 bytes --- .../ru/windcorp/progressia/test/region/Region.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/test/region/Region.java b/src/main/java/ru/windcorp/progressia/test/region/Region.java index 251f36e..e26396d 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/Region.java +++ b/src/main/java/ru/windcorp/progressia/test/region/Region.java @@ -49,9 +49,10 @@ public class Region { // 1 MiB private static final int MAX_CHUNK_SIZE = 1024 * 1024; - private static final int SECTOR_SIZE = MAX_CHUNK_SIZE / 256; + private static final int SECTORS_BYTES = Short.BYTES; + private static final int SECTOR_SIZE = MAX_CHUNK_SIZE >> (SECTORS_BYTES*8); - private static final int DEFINITION_SIZE = Integer.BYTES + 1; + private static final int DEFINITION_SIZE = Integer.BYTES + Short.BYTES; private static final int HEADER_SIZE = DEFINITION_SIZE * REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER; @@ -129,7 +130,7 @@ public class Region { for (int i = 0; i < chunksPerRegion; i++) { int offset = file.readInt(); - int sectorLength = file.read(); + int sectorLength = file.readShort(); if (sectorLength == 0) { continue; } @@ -186,8 +187,8 @@ public class Region { file.seek(definitionOffset + Integer.BYTES); - int sectors = buffer.length / SECTOR_SIZE + 1; - file.write(sectors); + int sectors = (int) buffer.length / SECTOR_SIZE + 1; + file.writeShort(sectors); putLength(pos, sectors); } From 0100c8791d98b4358a7c4be7bcd0299c9be76cb9 Mon Sep 17 00:00:00 2001 From: serega404 Date: Mon, 30 Aug 2021 18:23:42 +0300 Subject: [PATCH 23/31] Added player saving and loading from disk --- .../progressia/ProgressiaLauncher.java | 4 - .../progressia/client/ClientProxy.java | 7 -- .../progressia/server/PlayerManager.java | 46 ++++----- .../progressia/server/ServerState.java | 3 +- .../server/comms/ClientManager.java | 5 +- .../server/world/io/WorldContainer.java | 18 ++-- .../server/world/io/WorldContainerFormat.java | 3 +- .../windcorp/progressia/test/LayerTitle.java | 23 +++-- .../progressia/test/region/RegionFormat.java | 3 +- .../test/region/TestWorldDiskIO.java | 99 +++++++++++++++---- 10 files changed, 141 insertions(+), 70 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java b/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java index 630f9c6..e85e2f0 100644 --- a/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java +++ b/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java @@ -39,10 +39,6 @@ public class ProgressiaLauncher { GUI.addTopLayer(new LayerTitle("Title")); } - public static void play() { - proxy.setupServer(); - } - private static void setupCrashReports() { // Context providers CrashReports.registerProvider(new OSContextProvider()); diff --git a/src/main/java/ru/windcorp/progressia/client/ClientProxy.java b/src/main/java/ru/windcorp/progressia/client/ClientProxy.java index ffb9bd7..ac9d61f 100644 --- a/src/main/java/ru/windcorp/progressia/client/ClientProxy.java +++ b/src/main/java/ru/windcorp/progressia/client/ClientProxy.java @@ -30,7 +30,6 @@ import ru.windcorp.progressia.client.graphics.world.WorldRenderProgram; import ru.windcorp.progressia.client.localization.Localizer; import ru.windcorp.progressia.common.resource.ResourceManager; import ru.windcorp.progressia.common.util.crash.CrashReports; -import ru.windcorp.progressia.server.ServerState; import ru.windcorp.progressia.test.TestContent; import ru.windcorp.progressia.test.TestMusicPlayer; @@ -62,10 +61,4 @@ public class ClientProxy implements Proxy { TestMusicPlayer.start(); } - - public void setupServer() { - ServerState.startServer(); - ClientState.connectToLocalServer(); - } - } diff --git a/src/main/java/ru/windcorp/progressia/server/PlayerManager.java b/src/main/java/ru/windcorp/progressia/server/PlayerManager.java index a7184e9..5e94784 100644 --- a/src/main/java/ru/windcorp/progressia/server/PlayerManager.java +++ b/src/main/java/ru/windcorp/progressia/server/PlayerManager.java @@ -15,21 +15,21 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package ru.windcorp.progressia.server; +import glm.vec._3.Vec3; +import ru.windcorp.progressia.common.world.entity.EntityData; +import ru.windcorp.progressia.common.world.entity.EntityDataRegistry; +import ru.windcorp.progressia.server.comms.ClientPlayer; +import ru.windcorp.progressia.server.events.PlayerJoinedEvent; +import ru.windcorp.progressia.server.events.PlayerLeftEvent; +import ru.windcorp.progressia.test.TestContent; + import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import glm.vec._3.Vec3; -import ru.windcorp.progressia.common.util.crash.CrashReports; -import ru.windcorp.progressia.common.world.entity.EntityData; -import ru.windcorp.progressia.common.world.entity.EntityDataRegistry; -import ru.windcorp.progressia.server.events.PlayerJoinedEvent; -import ru.windcorp.progressia.server.events.PlayerLeftEvent; -import ru.windcorp.progressia.test.TestContent; - public class PlayerManager { private final Server server; @@ -48,36 +48,38 @@ public class PlayerManager { this.players.add(player); getServer().postEvent(new PlayerJoinedEvent.Immutable(getServer(), player)); } - + public void removePlayer(Player player) { + server.getWorld().getContainer().savePlayer(player, server); this.players.remove(player); getServer().postEvent(new PlayerLeftEvent.Immutable(getServer(), player)); } - public EntityData conjurePlayerEntity(String login) { - // TODO Live up to the name - if (TestContent.PLAYER_LOGIN.equals(login)) { - EntityData entity = spawnPlayerEntity(login); - return entity; - } else { - throw CrashReports.report(null, "Unknown login %s, javahorse stupid", login); + public Player conjurePlayer(ClientPlayer clientPlayer, String login) { + + Player player = getServer().getWorld().getContainer().loadPlayer(login, clientPlayer, getServer()); + if (player == null) { // create new player + EntityData entity = spawnPlayerEntity(clientPlayer, login); + player = new Player(entity, getServer(), clientPlayer); } + + getServer().getWorld().getData().addEntity(player.getEntity()); + + return player; } - private EntityData spawnPlayerEntity(String login) { + private EntityData spawnPlayerEntity(ClientPlayer clientPlayer, String login) { EntityData player = EntityDataRegistry.getInstance().create("Test:Player"); player.setEntityId(TestContent.PLAYER_ENTITY_ID); player.setPosition(getServer().getWorld().getGenerator().suggestSpawnLocation()); - + player.setUpVector(new Vec3(0, 0, 1)); player.setLookingAt(new Vec3(2, 1, 0)); - getServer().getWorld().getData().addEntity(player); - return player; } - + public Object getMutex() { return players; } diff --git a/src/main/java/ru/windcorp/progressia/server/ServerState.java b/src/main/java/ru/windcorp/progressia/server/ServerState.java index c38f21b..79844cb 100644 --- a/src/main/java/ru/windcorp/progressia/server/ServerState.java +++ b/src/main/java/ru/windcorp/progressia/server/ServerState.java @@ -18,6 +18,7 @@ package ru.windcorp.progressia.server; +import java.io.IOException; import java.nio.file.Paths; import java.util.function.Function; @@ -39,7 +40,7 @@ public class ServerState { ServerState.instance = instance; } - public static void startServer() { + public static void startServer() throws IOException { Function generator = new TestGenerationConfig().getGenerator(); WorldContainer container = new RegionFormat("Test:Region").create(Paths.get("tmp_world")); diff --git a/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java b/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java index fc55cbb..095c403 100644 --- a/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java +++ b/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java @@ -80,12 +80,11 @@ public class ClientManager { setGravityModelPacket.set(getServer().getWorld().getData().getGravityModel()); client.sendPacket(setGravityModelPacket); - EntityData entity = getServer().getPlayerManager().conjurePlayerEntity(login); - Player player = new Player(entity, getServer(), client); + Player player = getServer().getPlayerManager().conjurePlayer(client, login); getServer().getPlayerManager().addPlayer(player); PacketSetLocalPlayer packet = new PacketSetLocalPlayer(); - packet.set(entity.getEntityId()); + packet.set(player.getEntity().getEntityId()); client.sendPacket(packet); } diff --git a/src/main/java/ru/windcorp/progressia/server/world/io/WorldContainer.java b/src/main/java/ru/windcorp/progressia/server/world/io/WorldContainer.java index 07aa7b5..42451ad 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/io/WorldContainer.java +++ b/src/main/java/ru/windcorp/progressia/server/world/io/WorldContainer.java @@ -17,21 +17,27 @@ */ package ru.windcorp.progressia.server.world.io; -import java.nio.file.Path; - import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.world.DefaultChunkData; import ru.windcorp.progressia.common.world.DefaultWorldData; +import ru.windcorp.progressia.server.Player; import ru.windcorp.progressia.server.Server; +import ru.windcorp.progressia.server.comms.ClientPlayer; + +import java.nio.file.Path; public interface WorldContainer { - + Path getPath(); - + DefaultChunkData load(Vec3i position, DefaultWorldData world, Server server); - + void save(DefaultChunkData chunk, DefaultWorldData world, Server server); - + + Player loadPlayer(String login, ClientPlayer clientPlayer, Server server); + + void savePlayer(Player player, Server server); + void close(); } diff --git a/src/main/java/ru/windcorp/progressia/server/world/io/WorldContainerFormat.java b/src/main/java/ru/windcorp/progressia/server/world/io/WorldContainerFormat.java index 9c8e0c8..4c89621 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/io/WorldContainerFormat.java +++ b/src/main/java/ru/windcorp/progressia/server/world/io/WorldContainerFormat.java @@ -17,6 +17,7 @@ */ package ru.windcorp.progressia.server.world.io; +import java.io.IOException; import java.nio.file.Path; import ru.windcorp.progressia.common.util.namespaces.Namespaced; @@ -27,6 +28,6 @@ public abstract class WorldContainerFormat extends Namespaced { super(id); } - public abstract WorldContainer create(Path directory); + public abstract WorldContainer create(Path directory) throws IOException; } diff --git a/src/main/java/ru/windcorp/progressia/test/LayerTitle.java b/src/main/java/ru/windcorp/progressia/test/LayerTitle.java index d2ba139..e497252 100644 --- a/src/main/java/ru/windcorp/progressia/test/LayerTitle.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerTitle.java @@ -1,15 +1,20 @@ package ru.windcorp.progressia.test; -import ru.windcorp.progressia.ProgressiaLauncher; +import ru.windcorp.progressia.client.ClientState; import ru.windcorp.progressia.client.graphics.Colors; import ru.windcorp.progressia.client.graphics.GUI; import ru.windcorp.progressia.client.graphics.font.Font; +import ru.windcorp.progressia.client.graphics.gui.BasicButton; import ru.windcorp.progressia.client.graphics.gui.Button; import ru.windcorp.progressia.client.graphics.gui.GUILayer; import ru.windcorp.progressia.client.graphics.gui.Label; import ru.windcorp.progressia.client.graphics.gui.layout.LayoutVertical; import ru.windcorp.progressia.client.localization.MutableString; import ru.windcorp.progressia.client.localization.MutableStringLocalized; +import ru.windcorp.progressia.common.util.crash.CrashReports; +import ru.windcorp.progressia.server.ServerState; + +import java.io.IOException; public class LayerTitle extends GUILayer { @@ -22,11 +27,7 @@ public class LayerTitle extends GUILayer { Font buttonFont = titleFont; MutableString playText = new MutableStringLocalized("Layer" + name + ".Play"); - getRoot().addChild(new Button(name + ".Play", new Label(name + ".Play", buttonFont, playText)).addAction(b -> { - GUI.removeLayer(this); - - ProgressiaLauncher.play(); - })); + getRoot().addChild(new Button(name + ".Play", new Label(name + ".Play", buttonFont, playText)).addAction(this::startGame)); MutableString quitText = new MutableStringLocalized("Layer" + name + ".Quit"); getRoot().addChild(new Button(name + "Quit", new Label(name + ".Quit", buttonFont, quitText)).addAction(b -> { @@ -34,4 +35,14 @@ public class LayerTitle extends GUILayer { })); } + private void startGame(BasicButton basicButton) { + GUI.removeLayer(this); + try { + ServerState.startServer(); + ClientState.connectToLocalServer(); + } catch (IOException e) { + throw CrashReports.report(e, "Problem with loading server"); + } + } + } diff --git a/src/main/java/ru/windcorp/progressia/test/region/RegionFormat.java b/src/main/java/ru/windcorp/progressia/test/region/RegionFormat.java index 85d1bbe..ad67074 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/RegionFormat.java +++ b/src/main/java/ru/windcorp/progressia/test/region/RegionFormat.java @@ -17,6 +17,7 @@ */ package ru.windcorp.progressia.test.region; +import java.io.IOException; import java.nio.file.Path; import ru.windcorp.progressia.server.world.io.WorldContainer; @@ -29,7 +30,7 @@ public class RegionFormat extends WorldContainerFormat { } @Override - public WorldContainer create(Path directory) { + public WorldContainer create(Path directory) throws IOException { return new TestWorldDiskIO(directory); } diff --git a/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java index f8b015f..2bc3f50 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java @@ -18,31 +18,37 @@ package ru.windcorp.progressia.test.region; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.RandomAccessFile; -import java.nio.file.Files; -import java.nio.file.Path; +import glm.vec._3.i.Vec3i; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; - -import glm.vec._3.i.Vec3i; +import ru.windcorp.progressia.common.state.IOContext; import ru.windcorp.progressia.common.util.crash.CrashReports; -import ru.windcorp.progressia.common.world.DefaultChunkData; import ru.windcorp.progressia.common.world.Coordinates; import ru.windcorp.progressia.common.world.DecodingException; +import ru.windcorp.progressia.common.world.DefaultChunkData; import ru.windcorp.progressia.common.world.DefaultWorldData; +import ru.windcorp.progressia.common.world.entity.EntityData; +import ru.windcorp.progressia.common.world.entity.EntityDataRegistry; import ru.windcorp.progressia.common.world.generic.ChunkMap; import ru.windcorp.progressia.common.world.generic.ChunkMaps; +import ru.windcorp.progressia.server.Player; import ru.windcorp.progressia.server.Server; +import ru.windcorp.progressia.server.comms.ClientPlayer; import ru.windcorp.progressia.server.world.io.WorldContainer; +import ru.windcorp.progressia.test.TestContent; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; public class TestWorldDiskIO implements WorldContainer { private static final boolean ENABLE = true; - private static final String FILE_NAME_FORMAT = "region_%d_%d_%d.progressia_region"; + private static final String REGION_FOLDER_NAME = "regions"; + private static final String PLAYERS_FOLDER_NAME = "players"; + private static final String REGION_NAME_FORMAT = REGION_FOLDER_NAME + "/" + "region_%d_%d_%d.progressia_region"; + private static final String PLAYER_NAME_FORMAT = PLAYERS_FOLDER_NAME + "/" + "%s.progressia_player"; private static final int BITS_IN_CHUNK_COORDS = 4; public static final int REGION_DIAMETER = 1 << BITS_IN_CHUNK_COORDS; @@ -60,8 +66,12 @@ public class TestWorldDiskIO implements WorldContainer { private final Path path; private final ChunkMap regions = ChunkMaps.newHashMap(); - public TestWorldDiskIO(Path path) { + public TestWorldDiskIO(Path path) throws IOException { this.path = path; + + Files.createDirectories(getPath()); + Files.createDirectories(getPath().resolve(REGION_FOLDER_NAME)); + Files.createDirectories(getPath().resolve(PLAYERS_FOLDER_NAME)); } @Override @@ -104,11 +114,53 @@ public class TestWorldDiskIO implements WorldContainer { } } - private Region getRegion(Vec3i position, boolean createIfMissing) throws IOException { - if (regions.isEmpty()) { - Files.createDirectories(getPath()); + @Override + public Player loadPlayer(String login, ClientPlayer clientPlayer, Server server) { + + Path path = getPlayerPath(login); + if (!Files.exists(path)) { + LOG.debug("Could not load player {} because file {} does not exist", login, path); + return null; } + EntityData player = EntityDataRegistry.getInstance().create("Test:Player"); + try ( + DataInputStream dataInputStream = new DataInputStream( + new BufferedInputStream( + Files.newInputStream( + getPlayerPath(login) + ) + ) + ) + ) { + player.read(dataInputStream, IOContext.SAVE); + player.setEntityId(TestContent.PLAYER_ENTITY_ID); + return new Player(player, server, clientPlayer); + } catch (IOException ioException) { + throw CrashReports.report(ioException, "Could not load player data: " + login); + } + } + + @Override + public void savePlayer(Player player, Server server) { + Path path = getPlayerPath(player.getLogin()); + try ( + DataOutputStream dataOutputStream = new DataOutputStream( + new BufferedOutputStream( + Files.newOutputStream(path) + ) + ) + ) { + player.getEntity(). + + write(dataOutputStream, IOContext.SAVE); + } catch (IOException ioException) { + throw CrashReports.report(ioException, "Could not save player %s data in file ", player.getLogin(), path); + } + } + + private Region getRegion(Vec3i position, boolean createIfMissing) throws IOException { + Vec3i regionCoords = getRegionCoords(position); Region region = regions.get(regionCoords); @@ -151,11 +203,11 @@ public class TestWorldDiskIO implements WorldContainer { public Path getPath() { return path; } - + private Path getRegionPath(Vec3i regionPos) { return getPath().resolve( String.format( - FILE_NAME_FORMAT, + REGION_NAME_FORMAT, regionPos.x, regionPos.y, regionPos.z @@ -163,6 +215,15 @@ public class TestWorldDiskIO implements WorldContainer { ); } + private Path getPlayerPath(String login) { + return getPath().resolve( + String.format( + PLAYER_NAME_FORMAT, + login + ) + ); + } + @Override public void close() { try { @@ -170,16 +231,16 @@ public class TestWorldDiskIO implements WorldContainer { region.close(); } } catch (IOException e) { - CrashReports.report(e, "Could not close region files"); + throw CrashReports.report(e, "Could not close region files"); } } - + private static void debug(String message, Vec3i vector) { if (LOG.isDebugEnabled()) { LOG.debug(message, vector.x, vector.y, vector.z); } } - + private static void warn(String message, Vec3i vector) { LOG.warn(message, vector.x, vector.y, vector.z); } From c5dfe3d0b7e1679c8263d3bc0e2c3f8460dede31 Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Thu, 9 Sep 2021 16:52:55 -0400 Subject: [PATCH 24/31] Saving Modifications -Safer saving, it waits for the file to stop being used to close(still has holes) -If a chunk is too large, it is moved to the end of the file. -Calculates the efficiency of each region file in confirmHeaderHealth -Fixed import warning --- .../server/comms/ClientManager.java | 1 - .../progressia/test/region/Region.java | 39 ++++++++++++++++++- .../test/region/TestWorldDiskIO.java | 27 ++++++++++++- 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java b/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java index 095c403..e031c27 100644 --- a/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java +++ b/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java @@ -31,7 +31,6 @@ import ru.windcorp.progressia.common.comms.CommsChannel.State; import ru.windcorp.progressia.common.comms.packets.Packet; import ru.windcorp.progressia.common.world.PacketSetGravityModel; import ru.windcorp.progressia.common.world.PacketSetLocalPlayer; -import ru.windcorp.progressia.common.world.entity.EntityData; import ru.windcorp.progressia.server.Player; import ru.windcorp.progressia.server.Server; diff --git a/src/main/java/ru/windcorp/progressia/test/region/Region.java b/src/main/java/ru/windcorp/progressia/test/region/Region.java index e26396d..8706ae4 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/Region.java +++ b/src/main/java/ru/windcorp/progressia/test/region/Region.java @@ -30,9 +30,12 @@ import java.io.RandomAccessFile; import java.util.Arrays; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.zip.DeflaterOutputStream; import java.util.zip.InflaterInputStream; +import org.apache.logging.log4j.LogManager; + import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.state.IOContext; import ru.windcorp.progressia.common.world.DecodingException; @@ -52,10 +55,15 @@ public class Region { private static final int SECTORS_BYTES = Short.BYTES; private static final int SECTOR_SIZE = MAX_CHUNK_SIZE >> (SECTORS_BYTES*8); + public int loadedChunks; + private static final int DEFINITION_SIZE = Integer.BYTES + Short.BYTES; private static final int HEADER_SIZE = DEFINITION_SIZE * REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER; + private AtomicBoolean isUsing = new AtomicBoolean(false); + private AtomicBoolean isClosed = new AtomicBoolean(false); + private final RandomAccessFile file; private final ChunkMap offsets = ChunkMaps.newHashMap(); @@ -90,6 +98,7 @@ public class Region { public void close() throws IOException { this.file.close(); + isClosed.lazySet(true);; } public int getOffset(Vec3i chunkLoc) { @@ -115,10 +124,21 @@ public class Region { public void putLength(Vec3i pos, int length) { lengths.put(pos, length); } + + public AtomicBoolean isClosed() + { + return isClosed; + } + + public AtomicBoolean isUsing() + { + return isUsing; + } private void confirmHeaderHealth() throws IOException { Set used = new HashSet(); + int maxUsed = 0; final int chunksPerRegion = REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER; file.seek(0); @@ -142,6 +162,11 @@ public class Region { offsets.put(pos, offset); lengths.put(pos, sectorLength); + + if (offset+sectorLength > maxUsed) + { + maxUsed = offset + sectorLength; + } for (int sector = 0; sector < sectorLength; sector++) { if (!used.add(offset + sector)) { @@ -149,10 +174,11 @@ public class Region { } } } - + LogManager.getLogger("Region").debug("Efficiency of {}", (double) used.size()/maxUsed); } public void save(DefaultChunkData chunk, Server server) throws IOException { + isUsing.set(true); Vec3i pos = TestWorldDiskIO.getInRegionCoords(chunk.getPosition()); int definitionOffset = DEFINITION_SIZE * (pos.z + REGION_DIAMETER * (pos.y + REGION_DIAMETER * pos.x)); @@ -162,7 +188,16 @@ public class Region { int dataOffset = getOffset(pos); byte[] buffer = saveToBuffer(chunk, server); + if (hasLength(pos) && buffer.length > getLength(pos)*SECTOR_SIZE ) + { + byte emptyBuffer[] = new byte[getLength(pos)*SECTOR_SIZE]; + writeBuffer(emptyBuffer, definitionOffset, dataOffset, pos); + allocateChunk(definitionOffset, pos); + dataOffset = getOffset(pos); + } + writeBuffer(buffer, definitionOffset, dataOffset, pos); + isUsing.set(false); } private byte[] saveToBuffer(DefaultChunkData chunk, Server server) throws IOException { @@ -208,6 +243,7 @@ public class Region { public DefaultChunkData load(Vec3i chunkPos, DefaultWorldData world, Server server) throws IOException, DecodingException { + isUsing.set(true); int dataOffset = 0; int sectorLength = 0; @@ -222,6 +258,7 @@ public class Region { byte[] buffer = readBuffer(dataOffset, sectorLength); DefaultChunkData result = loadFromBuffer(buffer, chunkPos, world, server); + isUsing.set(false); return result; } diff --git a/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java index 2bc3f50..f8f247f 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java @@ -18,6 +18,8 @@ package ru.windcorp.progressia.test.region; +import java.util.concurrent.atomic.AtomicBoolean; + import glm.vec._3.i.Vec3i; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -227,8 +229,29 @@ public class TestWorldDiskIO implements WorldContainer { @Override public void close() { try { - for (Region region : regions.values()) { - region.close(); + ChunkMap isCloseds = ChunkMaps.newHashMap(); + ChunkMap isUsings = ChunkMaps.newHashMap(); + + for (Vec3i region : regions.keys()) + { + isCloseds.put(region, regions.get(region).isClosed()); + isUsings.put(region, regions.get(region).isUsing()); + } + + boolean stillOpen = true; + while (stillOpen) + { + stillOpen = false; + for (Vec3i region : regions.keys()) { + if (!isCloseds.get(region).get() && !isUsings.get(region).get()) + { + regions.get(region).close(); + } + else if (isUsings.get(region).get()) + { + stillOpen = false; + } + } } } catch (IOException e) { throw CrashReports.report(e, "Could not close region files"); From 46bcb85044efe4c0bd560ac9df1f5be710e740d5 Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Thu, 9 Sep 2021 19:58:44 -0400 Subject: [PATCH 25/31] Region File better???? -Moved most of the file accessing of Region to RegionFile -Disabled most of the header check except the length check(it will be back soon) -Max chunk size arbitrarily raised to 4MiB because I wanted sectors longer than 16B -Sectors now have a mandatory 1B header that identifies it -0 is a null sector, it ends every chunk -1 is a normal data sector, it has a "parity" byte that makes sure it is reading chunks in linear order(fun fact: it isnt at the moment) -2 is a jump to a different location. this isnt implemented well yet -3 will be a "bulk data" sector. Multiple chunks with identical data can point here. Probably only useful when it is easily identifiable, like multiple chunks being one entire block, like air. -Removed all chunk length references as I think they do not make sense when it can use different sectors for non-data purposes. --- .../progressia/test/region/Region.java | 143 +----------- .../progressia/test/region/RegionFile.java | 217 ++++++++++++++++++ 2 files changed, 229 insertions(+), 131 deletions(-) create mode 100644 src/main/java/ru/windcorp/progressia/test/region/RegionFile.java diff --git a/src/main/java/ru/windcorp/progressia/test/region/Region.java b/src/main/java/ru/windcorp/progressia/test/region/Region.java index 8706ae4..0f38ee0 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/Region.java +++ b/src/main/java/ru/windcorp/progressia/test/region/Region.java @@ -17,8 +17,6 @@ */ package ru.windcorp.progressia.test.region; -import static ru.windcorp.progressia.test.region.TestWorldDiskIO.REGION_DIAMETER; - import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; @@ -27,15 +25,10 @@ import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.RandomAccessFile; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; import java.util.zip.DeflaterOutputStream; import java.util.zip.InflaterInputStream; -import org.apache.logging.log4j.LogManager; - import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.state.IOContext; import ru.windcorp.progressia.common.world.DecodingException; @@ -47,58 +40,40 @@ import ru.windcorp.progressia.common.world.io.ChunkIO; import ru.windcorp.progressia.server.Server; public class Region { - + private static final boolean RESET_CORRUPTED = true; - - // 1 MiB - private static final int MAX_CHUNK_SIZE = 1024 * 1024; - private static final int SECTORS_BYTES = Short.BYTES; - private static final int SECTOR_SIZE = MAX_CHUNK_SIZE >> (SECTORS_BYTES*8); public int loadedChunks; - - private static final int DEFINITION_SIZE = Integer.BYTES + Short.BYTES; - - private static final int HEADER_SIZE = DEFINITION_SIZE * REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER; private AtomicBoolean isUsing = new AtomicBoolean(false); private AtomicBoolean isClosed = new AtomicBoolean(false); - private final RandomAccessFile file; + private final RegionFile file; private final ChunkMap offsets = ChunkMaps.newHashMap(); - private final ChunkMap lengths = ChunkMaps.newHashMap(); public Region(RandomAccessFile file) throws IOException { - this.file = file; + this.file = new RegionFile(file); try { - confirmHeaderHealth(); + this.file.confirmHeaderHealth(offsets); } catch (IOException e) { TestWorldDiskIO.LOG.debug("Uh the file broke"); if (RESET_CORRUPTED) { - byte headerBytes[] = new byte[HEADER_SIZE]; - Arrays.fill(headerBytes, (byte) 0); - - try { - file.write(headerBytes); - } catch (IOException e1) { - e.addSuppressed(e1); - throw e; - } + this.file.makeHeader(); } } } - public RandomAccessFile getFile() { + public RegionFile getFile() { return file; } public void close() throws IOException { this.file.close(); - isClosed.lazySet(true);; + isClosed.lazySet(true); } public int getOffset(Vec3i chunkLoc) { @@ -112,18 +87,6 @@ public class Region { public void putOffset(Vec3i pos, int offset) { offsets.put(pos, offset); } - - public int getLength(Vec3i chunkLoc) { - return lengths.get(chunkLoc); - } - - public boolean hasLength(Vec3i pos) { - return lengths.containsKey(pos); - } - - public void putLength(Vec3i pos, int length) { - lengths.put(pos, length); - } public AtomicBoolean isClosed() { @@ -135,68 +98,18 @@ public class Region { return isUsing; } - private void confirmHeaderHealth() throws IOException { - - Set used = new HashSet(); - int maxUsed = 0; - final int chunksPerRegion = REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER; - - file.seek(0); - - if (file.length() < HEADER_SIZE) { - throw new IOException("File is too short to contain a header"); - } - - for (int i = 0; i < chunksPerRegion; i++) { - int offset = file.readInt(); - - int sectorLength = file.readShort(); - if (sectorLength == 0) { - continue; - } - - Vec3i pos = new Vec3i(); - pos.x = i / REGION_DIAMETER / REGION_DIAMETER; - pos.y = (i / REGION_DIAMETER) % REGION_DIAMETER; - pos.z = i % REGION_DIAMETER; - - offsets.put(pos, offset); - lengths.put(pos, sectorLength); - - if (offset+sectorLength > maxUsed) - { - maxUsed = offset + sectorLength; - } - - for (int sector = 0; sector < sectorLength; sector++) { - if (!used.add(offset + sector)) { - throw new IOException("A sector is used twice"); - } - } - } - LogManager.getLogger("Region").debug("Efficiency of {}", (double) used.size()/maxUsed); - } - public void save(DefaultChunkData chunk, Server server) throws IOException { isUsing.set(true); Vec3i pos = TestWorldDiskIO.getInRegionCoords(chunk.getPosition()); - int definitionOffset = DEFINITION_SIZE * (pos.z + REGION_DIAMETER * (pos.y + REGION_DIAMETER * pos.x)); - + if (!hasOffset(pos)) { - allocateChunk(definitionOffset, pos); + putOffset(pos, file.allocateChunk(pos)); } int dataOffset = getOffset(pos); byte[] buffer = saveToBuffer(chunk, server); - if (hasLength(pos) && buffer.length > getLength(pos)*SECTOR_SIZE ) - { - byte emptyBuffer[] = new byte[getLength(pos)*SECTOR_SIZE]; - writeBuffer(emptyBuffer, definitionOffset, dataOffset, pos); - allocateChunk(definitionOffset, pos); - dataOffset = getOffset(pos); - } - writeBuffer(buffer, definitionOffset, dataOffset, pos); + file.writeBuffer(buffer, dataOffset, pos); isUsing.set(false); } @@ -216,29 +129,7 @@ public class Region { return arrayStream.toByteArray(); } - private void writeBuffer(byte[] buffer, int definitionOffset, int dataOffset, Vec3i pos) throws IOException { - file.seek(HEADER_SIZE + SECTOR_SIZE * dataOffset); - file.write(buffer); - - file.seek(definitionOffset + Integer.BYTES); - - int sectors = (int) buffer.length / SECTOR_SIZE + 1; - file.writeShort(sectors); - - putLength(pos, sectors); - } - - private void allocateChunk(int definitionOffset, Vec3i pos) throws IOException { - int outputLen = (int) file.length(); - - int dataOffset = (int) (outputLen - HEADER_SIZE) / SECTOR_SIZE + 1; - - file.seek(definitionOffset); - file.writeInt(dataOffset); - - file.setLength(HEADER_SIZE + dataOffset * SECTOR_SIZE); - putOffset(pos, dataOffset); - } + public DefaultChunkData load(Vec3i chunkPos, DefaultWorldData world, Server server) throws IOException, @@ -246,17 +137,15 @@ public class Region { isUsing.set(true); int dataOffset = 0; - int sectorLength = 0; Vec3i pos = TestWorldDiskIO.getInRegionCoords(chunkPos); if (hasOffset(pos)) { dataOffset = getOffset(pos); - sectorLength = getLength(pos); } else { return null; } - byte[] buffer = readBuffer(dataOffset, sectorLength); + byte[] buffer = file.readBuffer(dataOffset); DefaultChunkData result = loadFromBuffer(buffer, chunkPos, world, server); isUsing.set(false); return result; @@ -278,12 +167,4 @@ public class Region { TestWorldDiskIO.readGenerationHint(result, dataStream, server); return result; } - - private byte[] readBuffer(int dataOffset, int sectorLength) throws IOException { - file.seek(HEADER_SIZE + SECTOR_SIZE * dataOffset); - - byte buffer[] = new byte[SECTOR_SIZE * sectorLength]; - file.read(buffer); - return buffer; - } } \ No newline at end of file diff --git a/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java b/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java new file mode 100644 index 0000000..f37aaa4 --- /dev/null +++ b/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java @@ -0,0 +1,217 @@ +package ru.windcorp.progressia.test.region; + +import static ru.windcorp.progressia.test.region.TestWorldDiskIO.REGION_DIAMETER; + +import java.io.IOException; +import java.io.RandomAccessFile; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.apache.logging.log4j.LogManager; + +import glm.vec._3.i.Vec3i; +import ru.windcorp.progressia.common.world.generic.ChunkMap; + +/**Backend for the .progressia_region file. + * Use similarly to a file object + * + */ +public class RegionFile { + // 4 MiB + private static final int MAX_CHUNK_SIZE = 4 * 1024 * 1024; + private static final int SECTORS_BYTES = Short.BYTES; + private static final int SECTOR_SIZE = MAX_CHUNK_SIZE >> (SECTORS_BYTES*8); + private static final int SECTOR_HEADER_LENGTH = 1; + + final byte endBytes[] = new byte[SECTOR_SIZE]; + + private Map isFilledMap = new HashMap(); // TODO ill do this at the same time I finish the new confirmheaderhealth + + public enum SectorType + { + Ending (0), // Just an empty block + Data (1), // has a byte counting up in position 1, and then + PartitionLink (2), + BulkSaved (3); // TODO implement this + + private final byte data; + + SectorType(int i) + { + this.data = (byte) i; + } + + } + + private static final int DEFINITION_SIZE = Integer.BYTES; + + private static final int HEADER_SIZE = DEFINITION_SIZE * REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER; + + private final RandomAccessFile file; + + public RegionFile(RandomAccessFile inFile) + { + file = inFile; + } + + public void confirmHeaderHealth(ChunkMap offsets) throws IOException { + + Set used = new HashSet(); + int maxUsed = 0; + final int chunksPerRegion = REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER; + + file.seek(0); + + if (file.length() < HEADER_SIZE) { + throw new IOException("File is too short to contain a header"); + } + +// for (int i = 0; i < chunksPerRegion; i++) { // TODO ill make the rest in a bit +// int offset = file.readInt(); +// +// if (offset == 0) { +// continue; +// } +// +// Vec3i pos = new Vec3i(); +// pos.x = i / REGION_DIAMETER / REGION_DIAMETER; +// pos.y = (i / REGION_DIAMETER) % REGION_DIAMETER; +// pos.z = i % REGION_DIAMETER; +// +// offsets.put(pos, offset); +// +// boolean shouldEnd = false; +// while (!shouldEnd) +// { +// if (offset > maxUsed) +// { +// maxUsed = offset; +// } +// +// if (!used.add(offset)) { +// throw new IOException("A sector is used twice"); +// } +// +// } +// } + LogManager.getLogger("Region").debug("Efficiency of {}", (double) used.size()/maxUsed); + } + + public void makeHeader() throws IOException + { + file.seek(0); + for (int i=0;i Date: Fri, 10 Sep 2021 13:51:37 -0400 Subject: [PATCH 26/31] Finished Partition Logic Note: it still does waste a lot of space, I will work on that next -Added back the confirmHeaderHealth logic -Checks to make sure it will not overwrite important chunks -Uses PartitionLink chunks to move to a different part of the file -Added allocateEmptySector() to allow for the file size to be increased without moving the origin point of the chunk. --- .../progressia/test/region/RegionFile.java | 136 ++++++++++++------ 1 file changed, 92 insertions(+), 44 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java b/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java index f37aaa4..385d97d 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java +++ b/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java @@ -4,9 +4,8 @@ import static ru.windcorp.progressia.test.region.TestWorldDiskIO.REGION_DIAMETER import java.io.IOException; import java.io.RandomAccessFile; -import java.util.HashMap; +import java.nio.ByteBuffer; import java.util.HashSet; -import java.util.Map; import java.util.Set; import org.apache.logging.log4j.LogManager; @@ -23,13 +22,11 @@ public class RegionFile { private static final int MAX_CHUNK_SIZE = 4 * 1024 * 1024; private static final int SECTORS_BYTES = Short.BYTES; private static final int SECTOR_SIZE = MAX_CHUNK_SIZE >> (SECTORS_BYTES*8); - private static final int SECTOR_HEADER_LENGTH = 1; + private static final int SECTOR_HEADER_SIZE = 1; final byte endBytes[] = new byte[SECTOR_SIZE]; - private Map isFilledMap = new HashMap(); // TODO ill do this at the same time I finish the new confirmheaderhealth - - public enum SectorType + public static enum SectorType { Ending (0), // Just an empty block Data (1), // has a byte counting up in position 1, and then @@ -62,40 +59,61 @@ public class RegionFile { int maxUsed = 0; final int chunksPerRegion = REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER; - file.seek(0); - if (file.length() < HEADER_SIZE) { throw new IOException("File is too short to contain a header"); } -// for (int i = 0; i < chunksPerRegion; i++) { // TODO ill make the rest in a bit -// int offset = file.readInt(); -// -// if (offset == 0) { -// continue; -// } -// -// Vec3i pos = new Vec3i(); -// pos.x = i / REGION_DIAMETER / REGION_DIAMETER; -// pos.y = (i / REGION_DIAMETER) % REGION_DIAMETER; -// pos.z = i % REGION_DIAMETER; -// -// offsets.put(pos, offset); -// -// boolean shouldEnd = false; -// while (!shouldEnd) -// { -// if (offset > maxUsed) -// { -// maxUsed = offset; -// } -// -// if (!used.add(offset)) { -// throw new IOException("A sector is used twice"); -// } -// -// } -// } + for (int i = 0; i < chunksPerRegion; i++) { + file.seek(i*DEFINITION_SIZE); + int offset = file.readInt(); + + if (offset == 0) { + continue; + } + + Vec3i pos = new Vec3i(); + pos.x = i / REGION_DIAMETER / REGION_DIAMETER; + pos.y = (i / REGION_DIAMETER) % REGION_DIAMETER; + pos.z = i % REGION_DIAMETER; + + offsets.put(pos, offset); + + boolean shouldEnd = false; + byte counter = 0; + while (!shouldEnd) + { + if (offset > maxUsed) + { + maxUsed = offset; + } + + if (!used.add(offset)) { + throw new IOException("A sector is used twice"); + } + + file.seek(HEADER_SIZE + SECTOR_SIZE*offset); + byte type = file.readByte(); + + if (type == SectorType.Data.data) + { + byte fileCounter = file.readByte(); + if (fileCounter != counter) + { + throw new IOException("An unexpected block was found"); + } + counter++; + offset++; + } + else if (type == SectorType.Ending.data) { + shouldEnd = true; + } + else if (type == SectorType.PartitionLink.data) + { + offset = file.readInt(); + } + + } + } LogManager.getLogger("Region").debug("Efficiency of {}", (double) used.size()/maxUsed); } @@ -116,14 +134,30 @@ public class RegionFile { boolean isDone = false; while (!isDone) { + if (file.length() > HEADER_SIZE + SECTOR_SIZE * (dataOffset + 1)) { + file.seek(HEADER_SIZE + SECTOR_SIZE * (dataOffset + 1)); + byte header = file.readByte(); + if (header == SectorType.Data.data) { + byte fileCounter = file.readByte(); + if (fileCounter != counter+1) // This makes the actual + // partition place + { + int newOffset = allocateEmptySector(); + file.seek(HEADER_SIZE + SECTOR_SIZE * dataOffset); + file.write(2); + file.writeInt(newOffset); + dataOffset = newOffset; + } + } + } tempBuffer[0] = 1; tempBuffer[1] = counter; counter++; - for (int i=0;i<(SECTOR_SIZE-SECTOR_HEADER_LENGTH-1);i++) + for (int i=0;i<(SECTOR_SIZE-SECTOR_HEADER_SIZE-1);i++) { - if (loc*(SECTOR_SIZE-SECTOR_HEADER_LENGTH-1) + i Date: Fri, 10 Sep 2021 14:14:18 -0400 Subject: [PATCH 27/31] Bug fixes -Now offset technically starts at 1, so any chunks with offset 0 are ignored. -Reduced number of unused chunks, storage efficiency is at about 99% (if null sectors are counted as useful) --- .../ru/windcorp/progressia/test/region/RegionFile.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java b/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java index 385d97d..fa064b8 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java +++ b/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java @@ -70,6 +70,8 @@ public class RegionFile { if (offset == 0) { continue; } + + offset--; Vec3i pos = new Vec3i(); pos.x = i / REGION_DIAMETER / REGION_DIAMETER; @@ -181,10 +183,10 @@ public class RegionFile { int outputLen = (int) file.length(); - int dataOffset = (int) (outputLen - HEADER_SIZE) / SECTOR_SIZE + 1; + int dataOffset = (int) Math.ceil((double) (outputLen - HEADER_SIZE) / SECTOR_SIZE); file.seek(definitionOffset); - file.writeInt(dataOffset); + file.writeInt(dataOffset+1); file.setLength(HEADER_SIZE + dataOffset * SECTOR_SIZE); return dataOffset; @@ -194,7 +196,7 @@ public class RegionFile { { int outputLen = (int) file.length(); - int dataOffset = (int) (outputLen - HEADER_SIZE) / SECTOR_SIZE + 1; + int dataOffset = (int) Math.ceil((double) (outputLen - HEADER_SIZE) / SECTOR_SIZE); file.setLength(HEADER_SIZE + dataOffset * SECTOR_SIZE); From e2308b825db8c99b888a7e9a614eaf5ae241e4e7 Mon Sep 17 00:00:00 2001 From: OLEGSHA Date: Fri, 10 Sep 2021 23:31:14 +0300 Subject: [PATCH 28/31] Removed warnings and formatted code --- .../progressia/ProgressiaLauncher.java | 13 +- .../progressia/test/region/Region.java | 22 +-- .../progressia/test/region/RegionFile.java | 184 ++++++++---------- .../test/region/TestWorldDiskIO.java | 17 +- 4 files changed, 103 insertions(+), 133 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java b/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java index e85e2f0..099d378 100644 --- a/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java +++ b/src/main/java/ru/windcorp/progressia/ProgressiaLauncher.java @@ -18,7 +18,6 @@ package ru.windcorp.progressia; -import ru.windcorp.progressia.client.ClientProxy; import ru.windcorp.progressia.client.graphics.GUI; import ru.windcorp.progressia.common.util.crash.CrashReports; import ru.windcorp.progressia.common.util.crash.analyzers.OutOfMemoryAnalyzer; @@ -28,16 +27,20 @@ import ru.windcorp.progressia.test.LayerTitle; public class ProgressiaLauncher { public static String[] arguments; - private static ClientProxy proxy; + private static Proxy proxy; - public static void launch(String[] args, ClientProxy inProxy) { + public static void launch(String[] args, Proxy proxy) { arguments = args.clone(); setupCrashReports(); - inProxy.initialize(); - proxy = inProxy; + proxy.initialize(); + ProgressiaLauncher.proxy = proxy; GUI.addTopLayer(new LayerTitle("Title")); } + + public static Proxy getProxy() { + return proxy; + } private static void setupCrashReports() { // Context providers diff --git a/src/main/java/ru/windcorp/progressia/test/region/Region.java b/src/main/java/ru/windcorp/progressia/test/region/Region.java index 0f38ee0..3ff1804 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/Region.java +++ b/src/main/java/ru/windcorp/progressia/test/region/Region.java @@ -40,14 +40,14 @@ import ru.windcorp.progressia.common.world.io.ChunkIO; import ru.windcorp.progressia.server.Server; public class Region { - + private static final boolean RESET_CORRUPTED = true; - + public int loadedChunks; private AtomicBoolean isUsing = new AtomicBoolean(false); private AtomicBoolean isClosed = new AtomicBoolean(false); - + private final RegionFile file; private final ChunkMap offsets = ChunkMaps.newHashMap(); @@ -87,28 +87,26 @@ public class Region { public void putOffset(Vec3i pos, int offset) { offsets.put(pos, offset); } - - public AtomicBoolean isClosed() - { + + public AtomicBoolean isClosed() { return isClosed; } - - public AtomicBoolean isUsing() - { + + public AtomicBoolean isUsing() { return isUsing; } public void save(DefaultChunkData chunk, Server server) throws IOException { isUsing.set(true); Vec3i pos = TestWorldDiskIO.getInRegionCoords(chunk.getPosition()); - + if (!hasOffset(pos)) { putOffset(pos, file.allocateChunk(pos)); } int dataOffset = getOffset(pos); byte[] buffer = saveToBuffer(chunk, server); - + file.writeBuffer(buffer, dataOffset, pos); isUsing.set(false); } @@ -129,8 +127,6 @@ public class Region { return arrayStream.toByteArray(); } - - public DefaultChunkData load(Vec3i chunkPos, DefaultWorldData world, Server server) throws IOException, DecodingException { diff --git a/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java b/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java index fa064b8..ee30f1a 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java +++ b/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java @@ -13,46 +13,43 @@ import org.apache.logging.log4j.LogManager; import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.world.generic.ChunkMap; -/**Backend for the .progressia_region file. +/** + * Backend for the .progressia_region file. * Use similarly to a file object - * */ public class RegionFile { // 4 MiB private static final int MAX_CHUNK_SIZE = 4 * 1024 * 1024; private static final int SECTORS_BYTES = Short.BYTES; - private static final int SECTOR_SIZE = MAX_CHUNK_SIZE >> (SECTORS_BYTES*8); + private static final int SECTOR_SIZE = MAX_CHUNK_SIZE >> (SECTORS_BYTES * 8); private static final int SECTOR_HEADER_SIZE = 1; - + final byte endBytes[] = new byte[SECTOR_SIZE]; - - public static enum SectorType - { - Ending (0), // Just an empty block - Data (1), // has a byte counting up in position 1, and then - PartitionLink (2), - BulkSaved (3); // TODO implement this - + + public static enum SectorType { + Ending(0), // Just an empty block + Data(1), // has a byte counting up in position 1, and then + PartitionLink(2), + BulkSaved(3); // TODO implement this + private final byte data; - - SectorType(int i) - { + + SectorType(int i) { this.data = (byte) i; } - + } - + private static final int DEFINITION_SIZE = Integer.BYTES; private static final int HEADER_SIZE = DEFINITION_SIZE * REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER; - + private final RandomAccessFile file; - - public RegionFile(RandomAccessFile inFile) - { + + public RegionFile(RandomAccessFile inFile) { file = inFile; } - + public void confirmHeaderHealth(ChunkMap offsets) throws IOException { Set used = new HashSet(); @@ -63,14 +60,14 @@ public class RegionFile { throw new IOException("File is too short to contain a header"); } - for (int i = 0; i < chunksPerRegion; i++) { - file.seek(i*DEFINITION_SIZE); + for (int i = 0; i < chunksPerRegion; i++) { + file.seek(i * DEFINITION_SIZE); int offset = file.readInt(); if (offset == 0) { continue; } - + offset--; Vec3i pos = new Vec3i(); @@ -79,70 +76,60 @@ public class RegionFile { pos.z = i % REGION_DIAMETER; offsets.put(pos, offset); - + boolean shouldEnd = false; byte counter = 0; - while (!shouldEnd) - { - if (offset > maxUsed) - { + while (!shouldEnd) { + if (offset > maxUsed) { maxUsed = offset; } if (!used.add(offset)) { throw new IOException("A sector is used twice"); } - - file.seek(HEADER_SIZE + SECTOR_SIZE*offset); + + file.seek(HEADER_SIZE + SECTOR_SIZE * offset); byte type = file.readByte(); - - if (type == SectorType.Data.data) - { + + if (type == SectorType.Data.data) { byte fileCounter = file.readByte(); - if (fileCounter != counter) - { + if (fileCounter != counter) { throw new IOException("An unexpected block was found"); } counter++; offset++; - } - else if (type == SectorType.Ending.data) { + } else if (type == SectorType.Ending.data) { shouldEnd = true; - } - else if (type == SectorType.PartitionLink.data) - { + } else if (type == SectorType.PartitionLink.data) { offset = file.readInt(); } - + } } - LogManager.getLogger("Region").debug("Efficiency of {}", (double) used.size()/maxUsed); + LogManager.getLogger("Region").debug("Efficiency of {}", (double) used.size() / maxUsed); } - - public void makeHeader() throws IOException - { + + public void makeHeader() throws IOException { file.seek(0); - for (int i=0;i HEADER_SIZE + SECTOR_SIZE * (dataOffset + 1)) { file.seek(HEADER_SIZE + SECTOR_SIZE * (dataOffset + 1)); byte header = file.readByte(); if (header == SectorType.Data.data) { byte fileCounter = file.readByte(); - if (fileCounter != counter+1) // This makes the actual - // partition place + if (fileCounter != counter + 1) // This makes the actual + // partition place { int newOffset = allocateEmptySector(); file.seek(HEADER_SIZE + SECTOR_SIZE * dataOffset); @@ -155,51 +142,47 @@ public class RegionFile { tempBuffer[0] = 1; tempBuffer[1] = counter; counter++; - for (int i=0;i<(SECTOR_SIZE-SECTOR_HEADER_SIZE-1);i++) - { - if (loc*(SECTOR_SIZE-SECTOR_HEADER_SIZE-1) + i isCloseds = ChunkMaps.newHashMap(); ChunkMap isUsings = ChunkMaps.newHashMap(); - - for (Vec3i region : regions.keys()) - { + + for (Vec3i region : regions.keys()) { isCloseds.put(region, regions.get(region).isClosed()); isUsings.put(region, regions.get(region).isUsing()); } - + boolean stillOpen = true; - while (stillOpen) - { + while (stillOpen) { stillOpen = false; for (Vec3i region : regions.keys()) { - if (!isCloseds.get(region).get() && !isUsings.get(region).get()) - { + if (!isCloseds.get(region).get() && !isUsings.get(region).get()) { regions.get(region).close(); - } - else if (isUsings.get(region).get()) - { + } else if (isUsings.get(region).get()) { stillOpen = false; } } From 6b33f231b47331067bea07d8b264a480cbe22476 Mon Sep 17 00:00:00 2001 From: OLEGSHA Date: Fri, 10 Sep 2021 23:59:03 +0300 Subject: [PATCH 29/31] Moved region implementation to .server.world.io.region --- .../ru/windcorp/progressia/server/ServerState.java | 2 +- .../{test => server/world/io}/region/Region.java | 12 ++++++------ .../{test => server/world/io}/region/RegionFile.java | 4 ++-- .../world/io}/region/RegionFormat.java | 4 ++-- .../world/io/region/RegionWorldContainer.java} | 6 +++--- .../ru/windcorp/progressia/test/TestContent.java | 2 +- 6 files changed, 15 insertions(+), 15 deletions(-) rename src/main/java/ru/windcorp/progressia/{test => server/world/io}/region/Region.java (91%) rename src/main/java/ru/windcorp/progressia/{test => server/world/io}/region/RegionFile.java (97%) rename src/main/java/ru/windcorp/progressia/{test => server/world/io}/region/RegionFormat.java (91%) rename src/main/java/ru/windcorp/progressia/{test/region/TestWorldDiskIO.java => server/world/io/region/RegionWorldContainer.java} (97%) diff --git a/src/main/java/ru/windcorp/progressia/server/ServerState.java b/src/main/java/ru/windcorp/progressia/server/ServerState.java index 79844cb..41b2c6b 100644 --- a/src/main/java/ru/windcorp/progressia/server/ServerState.java +++ b/src/main/java/ru/windcorp/progressia/server/ServerState.java @@ -25,8 +25,8 @@ import java.util.function.Function; import ru.windcorp.progressia.common.world.DefaultWorldData; import ru.windcorp.progressia.server.world.generation.WorldGenerator; import ru.windcorp.progressia.server.world.io.WorldContainer; +import ru.windcorp.progressia.server.world.io.region.RegionFormat; import ru.windcorp.progressia.test.gen.TestGenerationConfig; -import ru.windcorp.progressia.test.region.RegionFormat; public class ServerState { diff --git a/src/main/java/ru/windcorp/progressia/test/region/Region.java b/src/main/java/ru/windcorp/progressia/server/world/io/region/Region.java similarity index 91% rename from src/main/java/ru/windcorp/progressia/test/region/Region.java rename to src/main/java/ru/windcorp/progressia/server/world/io/region/Region.java index 3ff1804..990ae8a 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/Region.java +++ b/src/main/java/ru/windcorp/progressia/server/world/io/region/Region.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package ru.windcorp.progressia.test.region; +package ru.windcorp.progressia.server.world.io.region; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; @@ -59,7 +59,7 @@ public class Region { this.file.confirmHeaderHealth(offsets); } catch (IOException e) { - TestWorldDiskIO.LOG.debug("Uh the file broke"); + RegionWorldContainer.LOG.debug("Uh the file broke"); if (RESET_CORRUPTED) { this.file.makeHeader(); } @@ -98,7 +98,7 @@ public class Region { public void save(DefaultChunkData chunk, Server server) throws IOException { isUsing.set(true); - Vec3i pos = TestWorldDiskIO.getInRegionCoords(chunk.getPosition()); + Vec3i pos = RegionWorldContainer.getInRegionCoords(chunk.getPosition()); if (!hasOffset(pos)) { putOffset(pos, file.allocateChunk(pos)); @@ -121,7 +121,7 @@ public class Region { ) ) { ChunkIO.save(chunk, dataStream, IOContext.SAVE); - TestWorldDiskIO.writeGenerationHint(chunk, dataStream, server); + RegionWorldContainer.writeGenerationHint(chunk, dataStream, server); } return arrayStream.toByteArray(); @@ -133,7 +133,7 @@ public class Region { isUsing.set(true); int dataOffset = 0; - Vec3i pos = TestWorldDiskIO.getInRegionCoords(chunkPos); + Vec3i pos = RegionWorldContainer.getInRegionCoords(chunkPos); if (hasOffset(pos)) { dataOffset = getOffset(pos); @@ -160,7 +160,7 @@ public class Region { ); DefaultChunkData result = ChunkIO.load(world, chunkPos, dataStream, IOContext.SAVE); - TestWorldDiskIO.readGenerationHint(result, dataStream, server); + RegionWorldContainer.readGenerationHint(result, dataStream, server); return result; } } \ No newline at end of file diff --git a/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java b/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionFile.java similarity index 97% rename from src/main/java/ru/windcorp/progressia/test/region/RegionFile.java rename to src/main/java/ru/windcorp/progressia/server/world/io/region/RegionFile.java index ee30f1a..2060b9c 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/RegionFile.java +++ b/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionFile.java @@ -1,6 +1,6 @@ -package ru.windcorp.progressia.test.region; +package ru.windcorp.progressia.server.world.io.region; -import static ru.windcorp.progressia.test.region.TestWorldDiskIO.REGION_DIAMETER; +import static ru.windcorp.progressia.server.world.io.region.RegionWorldContainer.REGION_DIAMETER; import java.io.IOException; import java.io.RandomAccessFile; diff --git a/src/main/java/ru/windcorp/progressia/test/region/RegionFormat.java b/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionFormat.java similarity index 91% rename from src/main/java/ru/windcorp/progressia/test/region/RegionFormat.java rename to src/main/java/ru/windcorp/progressia/server/world/io/region/RegionFormat.java index ad67074..89c5361 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/RegionFormat.java +++ b/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionFormat.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package ru.windcorp.progressia.test.region; +package ru.windcorp.progressia.server.world.io.region; import java.io.IOException; import java.nio.file.Path; @@ -31,7 +31,7 @@ public class RegionFormat extends WorldContainerFormat { @Override public WorldContainer create(Path directory) throws IOException { - return new TestWorldDiskIO(directory); + return new RegionWorldContainer(directory); } } diff --git a/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java b/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionWorldContainer.java similarity index 97% rename from src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java rename to src/main/java/ru/windcorp/progressia/server/world/io/region/RegionWorldContainer.java index 0d2879a..378e01e 100644 --- a/src/main/java/ru/windcorp/progressia/test/region/TestWorldDiskIO.java +++ b/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionWorldContainer.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package ru.windcorp.progressia.test.region; +package ru.windcorp.progressia.server.world.io.region; import java.util.concurrent.atomic.AtomicBoolean; @@ -43,7 +43,7 @@ import java.io.*; import java.nio.file.Files; import java.nio.file.Path; -public class TestWorldDiskIO implements WorldContainer { +public class RegionWorldContainer implements WorldContainer { private static final boolean ENABLE = true; @@ -68,7 +68,7 @@ public class TestWorldDiskIO implements WorldContainer { private final Path path; private final ChunkMap regions = ChunkMaps.newHashMap(); - public TestWorldDiskIO(Path path) throws IOException { + public RegionWorldContainer(Path path) throws IOException { this.path = path; Files.createDirectories(getPath()); diff --git a/src/main/java/ru/windcorp/progressia/test/TestContent.java b/src/main/java/ru/windcorp/progressia/test/TestContent.java index d927613..4ba3ea6 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestContent.java +++ b/src/main/java/ru/windcorp/progressia/test/TestContent.java @@ -380,7 +380,7 @@ public class TestContent { ru.windcorp.progressia.client.Client client = ClientState.getInstance(); if (client == null || !client.isReady()) return null; - + return client.getLocalPlayer().getSelection(); } From a633c8324e3dcd38d4b726e7467f62878bef9e70 Mon Sep 17 00:00:00 2001 From: OLEGSHA Date: Sat, 11 Sep 2021 00:47:28 +0300 Subject: [PATCH 30/31] Added Reset World button and fixed some translations --- .../windcorp/progressia/test/LayerTitle.java | 57 +++++++++++++++++-- .../resources/assets/languages/en-US.lang | 1 + .../resources/assets/languages/ru-RU.lang | 15 ++--- 3 files changed, 61 insertions(+), 12 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/test/LayerTitle.java b/src/main/java/ru/windcorp/progressia/test/LayerTitle.java index e497252..365e437 100644 --- a/src/main/java/ru/windcorp/progressia/test/LayerTitle.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerTitle.java @@ -7,7 +7,9 @@ import ru.windcorp.progressia.client.graphics.font.Font; import ru.windcorp.progressia.client.graphics.gui.BasicButton; import ru.windcorp.progressia.client.graphics.gui.Button; import ru.windcorp.progressia.client.graphics.gui.GUILayer; +import ru.windcorp.progressia.client.graphics.gui.Group; import ru.windcorp.progressia.client.graphics.gui.Label; +import ru.windcorp.progressia.client.graphics.gui.layout.LayoutAlign; import ru.windcorp.progressia.client.graphics.gui.layout.LayoutVertical; import ru.windcorp.progressia.client.localization.MutableString; import ru.windcorp.progressia.client.localization.MutableStringLocalized; @@ -15,24 +17,45 @@ import ru.windcorp.progressia.common.util.crash.CrashReports; import ru.windcorp.progressia.server.ServerState; import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; public class LayerTitle extends GUILayer { + + private final BasicButton resetButton; public LayerTitle(String name) { - super(name, new LayoutVertical(20, 10)); + super(name, new LayoutAlign(0.5f, 0.7f, 15)); + Group content = new Group("Layer" + name + ".Group", new LayoutVertical(15)); MutableString title = new MutableStringLocalized("Layer" + name + ".Title"); Font titleFont = new Font().deriveBold().withColor(Colors.BLACK).withAlign(0.5f); - getRoot().addChild(new Label(name + ".Title", titleFont, title)); + content.addChild(new Label(name + ".Title", titleFont, title)); - Font buttonFont = titleFont; + Font buttonFont = titleFont.deriveNotBold(); MutableString playText = new MutableStringLocalized("Layer" + name + ".Play"); - getRoot().addChild(new Button(name + ".Play", new Label(name + ".Play", buttonFont, playText)).addAction(this::startGame)); + content.addChild(new Button(name + ".Play", new Label(name + ".Play", buttonFont, playText)).addAction(this::startGame)); + + MutableString resetText = new MutableStringLocalized("Layer" + name + ".Reset"); + this.resetButton = new Button(name + ".Reset", new Label(name + ".Reset", buttonFont, resetText)).addAction(this::resetWorld); + content.addChild(resetButton); + + updateResetButton(); MutableString quitText = new MutableStringLocalized("Layer" + name + ".Quit"); - getRoot().addChild(new Button(name + "Quit", new Label(name + ".Quit", buttonFont, quitText)).addAction(b -> { + content.addChild(new Button(name + "Quit", new Label(name + ".Quit", buttonFont, quitText)).addAction(b -> { System.exit(0); })); + + getRoot().addChild(content); + } + + private void updateResetButton() { + resetButton.setEnabled(Files.exists(Paths.get("tmp_world"))); } private void startGame(BasicButton basicButton) { @@ -44,5 +67,29 @@ public class LayerTitle extends GUILayer { throw CrashReports.report(e, "Problem with loading server"); } } + + private void resetWorld(BasicButton basicButton) { + Path rootPath = Paths.get("tmp_world"); + + try { + Files.walkFileTree(rootPath, new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + Files.delete(file); + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { + Files.delete(dir); + return FileVisitResult.CONTINUE; + } + }); + } catch (IOException e) { + throw CrashReports.report(e, "Could not reset world"); + } + + updateResetButton(); + } } diff --git a/src/main/resources/assets/languages/en-US.lang b/src/main/resources/assets/languages/en-US.lang index e6ab183..b3de478 100644 --- a/src/main/resources/assets/languages/en-US.lang +++ b/src/main/resources/assets/languages/en-US.lang @@ -26,6 +26,7 @@ LayerButtonTest.Return = Back To Menu LayerTitle.Title = Progressia LayerTitle.Play = Play World +LayerTitle.Reset = Reset World LayerTitle.Options = Options LayerTitle.Quit = Quit diff --git a/src/main/resources/assets/languages/ru-RU.lang b/src/main/resources/assets/languages/ru-RU.lang index 09c9c33..69e07f2 100644 --- a/src/main/resources/assets/languages/ru-RU.lang +++ b/src/main/resources/assets/languages/ru-RU.lang @@ -21,13 +21,14 @@ LayerTestGUI.PlacementModeHint = (Блок %s плитки: Ctrl + прокру LayerTestGUI.IsFullscreen = Полный экран: %5s (F11) LayerTestGUI.IsVSync = Верт. синхр.: %5s (F12) -LayerButtonTest.Title = Тест Кнопок -LayerButtonTest.Return = Back To Menu [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ +LayerButtonTest.Title = Тест кнопок +LayerButtonTest.Return = Главное меню LayerTitle.Title = Прогрессия -LayerTitle.Play = ??????? -LayerTitle.Options = ???????? -LayerTitle.Quit = ???????? +LayerTitle.Play = Играть +LayerTitle.Reset = Сбросить мир +LayerTitle.Options = Настройки +LayerTitle.Quit = Выход -LayerText.Load = Loading... (Change) -LayerText.Save = Saving...(Cahnsf) \ No newline at end of file +LayerText.Load = Загрузка... +LayerText.Save = Сохранение... \ No newline at end of file From 0c41350ae7230617e3c2156c5deeae0ff9ce9329 Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Fri, 10 Sep 2021 22:19:18 -0400 Subject: [PATCH 31/31] Added file identification header -All files now start with a 16 byte header consisting of "PROG" followed by the integer position of the region in region coordinates. -regionCoords is passed through some functions to allow for this to be confirmed. --- .../server/world/io/region/Region.java | 6 ++-- .../server/world/io/region/RegionFile.java | 35 ++++++++++++++++--- .../world/io/region/RegionWorldContainer.java | 2 +- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/server/world/io/region/Region.java b/src/main/java/ru/windcorp/progressia/server/world/io/region/Region.java index 990ae8a..b25535c 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/io/region/Region.java +++ b/src/main/java/ru/windcorp/progressia/server/world/io/region/Region.java @@ -52,16 +52,16 @@ public class Region { private final ChunkMap offsets = ChunkMaps.newHashMap(); - public Region(RandomAccessFile file) throws IOException { + public Region(RandomAccessFile file, Vec3i regionCoords) throws IOException { this.file = new RegionFile(file); try { - this.file.confirmHeaderHealth(offsets); + this.file.confirmHeaderHealth(offsets, regionCoords); } catch (IOException e) { RegionWorldContainer.LOG.debug("Uh the file broke"); if (RESET_CORRUPTED) { - this.file.makeHeader(); + this.file.makeHeader(regionCoords); } } diff --git a/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionFile.java b/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionFile.java index 2060b9c..520d24e 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionFile.java +++ b/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionFile.java @@ -23,6 +23,8 @@ public class RegionFile { private static final int SECTORS_BYTES = Short.BYTES; private static final int SECTOR_SIZE = MAX_CHUNK_SIZE >> (SECTORS_BYTES * 8); private static final int SECTOR_HEADER_SIZE = 1; + private static final int ID_HEADER_SIZE = 16; + private static final byte[] HEADER_ID = {'P','R','O','G'}; final byte endBytes[] = new byte[SECTOR_SIZE]; @@ -42,7 +44,7 @@ public class RegionFile { private static final int DEFINITION_SIZE = Integer.BYTES; - private static final int HEADER_SIZE = DEFINITION_SIZE * REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER; + private static final int HEADER_SIZE = DEFINITION_SIZE * REGION_DIAMETER * REGION_DIAMETER * REGION_DIAMETER + ID_HEADER_SIZE; private final RandomAccessFile file; @@ -50,7 +52,7 @@ public class RegionFile { file = inFile; } - public void confirmHeaderHealth(ChunkMap offsets) throws IOException { + public void confirmHeaderHealth(ChunkMap offsets, Vec3i regionCoords) throws IOException { Set used = new HashSet(); int maxUsed = 0; @@ -59,9 +61,28 @@ public class RegionFile { if (file.length() < HEADER_SIZE) { throw new IOException("File is too short to contain a header"); } + + + char prog; + for (int i=0;i<4;i++) { + prog = file.readChar(); + if (prog != HEADER_ID[i]) + { + throw new IOException("File is not a .progressia_chunk file"); + } + } + + int tempX = file.readInt(); + int tempY = file.readInt(); + int tempZ = file.readInt(); + + if (regionCoords.x != tempX || regionCoords.y != tempY || regionCoords.z != tempZ) + { + throw new IOException("Region file is in the wrong place/ has the wrong name."); + } for (int i = 0; i < chunksPerRegion; i++) { - file.seek(i * DEFINITION_SIZE); + file.seek(i * DEFINITION_SIZE + ID_HEADER_SIZE); int offset = file.readInt(); if (offset == 0) { @@ -109,8 +130,12 @@ public class RegionFile { LogManager.getLogger("Region").debug("Efficiency of {}", (double) used.size() / maxUsed); } - public void makeHeader() throws IOException { + public void makeHeader(Vec3i regionCoords) throws IOException { file.seek(0); + file.write(HEADER_ID); + file.writeInt(regionCoords.x); + file.writeInt(regionCoords.y); + file.writeInt(regionCoords.z); for (int i = 0; i < HEADER_SIZE; i++) { file.write(0); } @@ -163,7 +188,7 @@ public class RegionFile { } public int allocateChunk(Vec3i pos) throws IOException { - int definitionOffset = DEFINITION_SIZE * (pos.z + REGION_DIAMETER * (pos.y + REGION_DIAMETER * pos.x)); + int definitionOffset = ID_HEADER_SIZE + DEFINITION_SIZE * (pos.z + REGION_DIAMETER * (pos.y + REGION_DIAMETER * pos.x)); int outputLen = (int) file.length(); diff --git a/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionWorldContainer.java b/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionWorldContainer.java index 378e01e..ca83027 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionWorldContainer.java +++ b/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionWorldContainer.java @@ -185,7 +185,7 @@ public class RegionWorldContainer implements WorldContainer { private Region openRegion(Path path, Vec3i regionCoords) throws IOException { RandomAccessFile raf = new RandomAccessFile(path.toFile(), "rw"); - Region region = new Region(raf); + Region region = new Region(raf, regionCoords); regions.put(regionCoords, region); return region; }