fix: Mining mobs when in ghost block and saving

This commit is contained in:
Jakub Žitník 2025-03-08 19:19:10 +01:00
parent 73050de76d
commit 26f35da0f3
Signed by: jzitnik
GPG Key ID: C577A802A6AF4EF3
7 changed files with 12 additions and 9 deletions

View File

@ -6,7 +6,6 @@ public class GameSaver {
public void save(Game game) { public void save(Game game) {
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("world.ser"))) { try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("world.ser"))) {
out.writeObject(game); out.writeObject(game);
System.out.println("Inner class saved!");
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@ -11,11 +11,12 @@ import cz.jzitnik.tui.SpriteList;
import org.jline.terminal.MouseEvent; import org.jline.terminal.MouseEvent;
import org.jline.terminal.Terminal; import org.jline.terminal.Terminal;
import java.io.Serializable;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@RightClickLogic @RightClickLogic
public class Chest implements RightClickHandler { public class Chest implements RightClickHandler, Serializable {
private static final int ROW_AMOUNT = 4; private static final int ROW_AMOUNT = 4;
private static final int COLUMN_AMOUNT = 6; private static final int COLUMN_AMOUNT = 6;
private static final int CELL_WIDTH = 50; private static final int CELL_WIDTH = 50;

View File

@ -16,11 +16,12 @@ import cz.jzitnik.tui.utils.SpriteCombiner;
import org.jline.terminal.MouseEvent; import org.jline.terminal.MouseEvent;
import org.jline.terminal.Terminal; import org.jline.terminal.Terminal;
import java.io.Serializable;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@RightClickLogic @RightClickLogic
public class Furnace implements RightClickHandler { public class Furnace implements RightClickHandler, Serializable {
private final Block block; private final Block block;
private final InventoryItem[] items = new InventoryItem[2]; private final InventoryItem[] items = new InventoryItem[2];
private InventoryItem outputItem; private InventoryItem outputItem;

View File

@ -8,8 +8,10 @@ import cz.jzitnik.game.sprites.OakDoor;
import cz.jzitnik.tui.ScreenRenderer; import cz.jzitnik.tui.ScreenRenderer;
import java.io.Serializable;
@RightClickLogic @RightClickLogic
public class OakDoorData implements RightClickHandler { public class OakDoorData implements RightClickHandler, Serializable {
private void change(Block door) { private void change(Block door) {
door.setSpriteState(switch (door.getSpriteState().get()) { door.setSpriteState(switch (door.getSpriteState().get()) {
case OakDoor.OakDoorState.TOP -> OakDoor.OakDoorState.TOPCLOSED; case OakDoor.OakDoorState.TOP -> OakDoor.OakDoorState.TOPCLOSED;

View File

@ -21,7 +21,7 @@ public class DefaultPlaceHandler implements CustomPlaceHandler {
public boolean mine(Game game, int x, int y) { public boolean mine(Game game, int x, int y) {
var blocks = game.getWorld()[y][x]; var blocks = game.getWorld()[y][x];
blocks.removeAll(blocks.stream().filter(i -> !i.getBlockId().equals("air")).toList()); blocks.removeAll(blocks.stream().filter(i -> !i.getBlockId().equals("air") && !i.isMob()).toList());
return true; return true;
} }

View File

@ -43,16 +43,16 @@ public class DoorPlaceHandler implements CustomPlaceHandler {
if (block.getSpriteState().get() == OakDoor.OakDoorState.BOTTOM if (block.getSpriteState().get() == OakDoor.OakDoorState.BOTTOM
|| block.getSpriteState().get() == OakDoor.OakDoorState.BOTTOMCLOSED) { || block.getSpriteState().get() == OakDoor.OakDoorState.BOTTOMCLOSED) {
var blocks2 = game.getWorld()[y - 1][x]; var blocks2 = game.getWorld()[y - 1][x];
blocks2.removeAll(blocks2.stream().filter(i -> !i.getBlockId().equals("air")).toList()); blocks2.removeAll(blocks2.stream().filter(i -> !i.getBlockId().equals("air") && !i.isMob()).toList());
} }
if (block.getSpriteState().get() == OakDoor.OakDoorState.TOP if (block.getSpriteState().get() == OakDoor.OakDoorState.TOP
|| block.getSpriteState().get() == OakDoor.OakDoorState.TOPCLOSED) { || block.getSpriteState().get() == OakDoor.OakDoorState.TOPCLOSED) {
var blocks2 = game.getWorld()[y + 1][x]; var blocks2 = game.getWorld()[y + 1][x];
blocks2.removeAll(blocks2.stream().filter(i -> !i.getBlockId().equals("air")).toList()); blocks2.removeAll(blocks2.stream().filter(i -> !i.getBlockId().equals("air") && !i.isMob()).toList());
} }
blocks.removeAll(blocks.stream().filter(i -> !i.getBlockId().equals("air")).toList()); blocks.removeAll(blocks.stream().filter(i -> !i.getBlockId().equals("air") && !i.isMob()).toList());
return true; return true;
} }

View File

@ -29,7 +29,7 @@ public class OakLeavesMineHandler implements CustomPlaceHandler {
public boolean mine(Game game, int x, int y) { public boolean mine(Game game, int x, int y) {
var blocks = game.getWorld()[y][x]; var blocks = game.getWorld()[y][x];
blocks.removeAll(blocks.stream().filter(i -> !i.getBlockId().equals("air")).toList()); blocks.removeAll(blocks.stream().filter(i -> !i.getBlockId().equals("air") && !i.isMob()).toList());
Random random = new Random(); Random random = new Random();
int percentage = random.nextInt(100); int percentage = random.nextInt(100);