diff --git a/src/main/java/cz/jzitnik/game/Game.java b/src/main/java/cz/jzitnik/game/Game.java index ba8c924..1495171 100644 --- a/src/main/java/cz/jzitnik/game/Game.java +++ b/src/main/java/cz/jzitnik/game/Game.java @@ -117,7 +117,7 @@ public class Game { * @param screenRenderer the renderer used to refresh the screen. * @param terminal the terminal instance used for layout. */ - public void movePlayerRight(ScreenRenderer screenRenderer, Terminal terminal) { + public synchronized void movePlayerRight(ScreenRenderer screenRenderer, Terminal terminal) { if (window != Window.WORLD) { return; } @@ -137,9 +137,9 @@ public class Game { new Thread(() -> entitySpawnProvider.update(this, terminal)).start(); - playMovePlayerSound(cords[0] + 1, cords[1]); + new Thread(() -> playMovePlayerSound(cords[0] + 1, cords[1])).start(); - update(screenRenderer); + new Thread(() -> update(screenRenderer)).start(); } /** @@ -148,7 +148,7 @@ public class Game { * @param screenRenderer the renderer used to refresh the screen. * @param terminal the terminal instance used for layout. */ - public void movePlayerLeft(ScreenRenderer screenRenderer, Terminal terminal) { + public synchronized void movePlayerLeft(ScreenRenderer screenRenderer, Terminal terminal) { if (window != Window.WORLD) { return; } @@ -168,19 +168,19 @@ public class Game { new Thread(() -> entitySpawnProvider.update(this, terminal)).start(); - playMovePlayerSound(cords[0] - 1, cords[1]); + new Thread(() -> playMovePlayerSound(cords[0] - 1, cords[1])).start(); - update(screenRenderer); + new Thread(() -> update(screenRenderer)).start(); } - private boolean playerMovingUp = false; + private transient boolean playerMovingUp = false; /** * Moves the player upward by one block, if jumping is valid. * * @param screenRenderer the renderer used to refresh the screen. */ - public void movePlayerUp(ScreenRenderer screenRenderer) { + public synchronized void movePlayerUp(ScreenRenderer screenRenderer) { if (playerMovingUp) { return; } @@ -192,6 +192,7 @@ public class Game { int[] cords = getPlayerCords(); if (isSolid(world[cords[1] - 2][cords[0]]) || !isSolid(world[cords[1] + 1][cords[0]])) { + playerMovingUp = false; return; } @@ -211,8 +212,9 @@ public class Game { throw new RuntimeException(e); } - update(screenRenderer); playerMovingUp = false; + + update(screenRenderer); }).start(); } @@ -235,7 +237,9 @@ public class Game { int dealDamage = inventory.getItemInHand().map(Item::getDealDamage).orElse(1); if (mob.getHp() - dealDamage <= 0) { // Mob is killed - gameStates.dependencies.entityKill.get(mob.getBlockId()).killed(this, mob, x, y); + try { + gameStates.dependencies.entityKill.get(mob.getBlockId()).killed(this, mob, x, y); + } catch (Exception _) {} world[y][x].remove(mob); } else { mob.decreaseHp(dealDamage); diff --git a/src/main/java/cz/jzitnik/game/generation/Generation.java b/src/main/java/cz/jzitnik/game/generation/Generation.java index 2886d7b..84a5e17 100644 --- a/src/main/java/cz/jzitnik/game/generation/Generation.java +++ b/src/main/java/cz/jzitnik/game/generation/Generation.java @@ -27,7 +27,7 @@ public class Generation { int[] terrainHeight = PopulateWorld.generateTerrain(); - game.getInventory().addItem(ItemBlockSupplier.getItem("lava_bucket")); + game.getInventory().addItem(ItemBlockSupplier.getItem("coal")); game.getPlayer().setPlayerBlock1(steveBlock); game.getPlayer().setPlayerBlock2(steveBlock2); diff --git a/src/main/java/cz/jzitnik/game/threads/list/BackgroundSaveTask.java b/src/main/java/cz/jzitnik/game/threads/list/BackgroundSaveTask.java new file mode 100644 index 0000000..240e260 --- /dev/null +++ b/src/main/java/cz/jzitnik/game/threads/list/BackgroundSaveTask.java @@ -0,0 +1,23 @@ +package cz.jzitnik.game.threads.list; + +import cz.jzitnik.game.Game; +import cz.jzitnik.game.annotations.ThreadRegistry; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@ThreadRegistry +public class BackgroundSaveTask extends Thread { + private final Game game; + + @Override + public void run() { + while (true) { + try { + Thread.sleep(10000); + game.getGameStates().dependencies.gameSaver.save(game); + } catch (InterruptedException e) { + break; + } + } + } +}