From 6559cbe4c7ab84ba1223870a058eed0066d682fc Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Sun, 8 Feb 2026 18:03:08 +0100 Subject: [PATCH] feat: Requirements for game --- .../handlers/RoomChangeEventHandler.java | 16 ++++++++++++++ .../java/cz/jzitnik/client/game/GameRoom.java | 3 +++ .../cz/jzitnik/client/game/Requirement.java | 13 +++++++++++ .../jzitnik/client/game/ResourceManager.java | 17 +++++++++++++- .../client/game/items/types/ItemType.java | 3 ++- .../jzitnik/client/game/items/types/Junk.java | 8 +++++++ game/src/main/resources/setup/rooms.yaml | 22 +++++++++---------- 7 files changed, 68 insertions(+), 14 deletions(-) create mode 100644 game/src/main/java/cz/jzitnik/client/game/Requirement.java create mode 100644 game/src/main/java/cz/jzitnik/client/game/items/types/Junk.java diff --git a/game/src/main/java/cz/jzitnik/client/events/handlers/RoomChangeEventHandler.java b/game/src/main/java/cz/jzitnik/client/events/handlers/RoomChangeEventHandler.java index 34a762b..7e56d27 100644 --- a/game/src/main/java/cz/jzitnik/client/events/handlers/RoomChangeEventHandler.java +++ b/game/src/main/java/cz/jzitnik/client/events/handlers/RoomChangeEventHandler.java @@ -7,6 +7,7 @@ import cz.jzitnik.client.events.RoomChangeEvent; import cz.jzitnik.client.events.SendSocketMessageEvent; import cz.jzitnik.client.game.GameRoom; import cz.jzitnik.client.game.GameState; +import cz.jzitnik.client.game.Requirement; import cz.jzitnik.common.models.coordinates.RoomCords; import cz.jzitnik.client.utils.events.AbstractEventHandler; import cz.jzitnik.client.utils.events.EventManager; @@ -14,6 +15,7 @@ import cz.jzitnik.client.utils.roomtasks.RoomTaskScheduler; import cz.jzitnik.common.socket.messages.room.MovePlayerRoom; import lombok.extern.slf4j.Slf4j; +import java.util.Arrays; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -45,6 +47,20 @@ public class RoomChangeEventHandler extends AbstractEventHandler { + if (item == null) { + return false; + } + + return item.getType().getItemType().getSimpleName().equals(itemType); + })) { + return; + } + } + switch (event.door()) { case LEFT -> playerCords.updateCords(155, playerCords.getY()); case RIGHT -> playerCords.updateCords(30, playerCords.getY()); diff --git a/game/src/main/java/cz/jzitnik/client/game/GameRoom.java b/game/src/main/java/cz/jzitnik/client/game/GameRoom.java index d73205a..3bf4625 100644 --- a/game/src/main/java/cz/jzitnik/client/game/GameRoom.java +++ b/game/src/main/java/cz/jzitnik/client/game/GameRoom.java @@ -34,6 +34,9 @@ public class GameRoom { @JsonIgnore private final List colliders = new ArrayList<>(); + @JsonProperty("requirement") + private Requirement requirement; + private GameRoom left; private GameRoom right; private GameRoom up; diff --git a/game/src/main/java/cz/jzitnik/client/game/Requirement.java b/game/src/main/java/cz/jzitnik/client/game/Requirement.java new file mode 100644 index 0000000..3f41071 --- /dev/null +++ b/game/src/main/java/cz/jzitnik/client/game/Requirement.java @@ -0,0 +1,13 @@ +package cz.jzitnik.client.game; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + +public record Requirement(String itemType) { + @JsonCreator + public Requirement( + @JsonProperty("item") String itemType + ) { + this.itemType = itemType; + } +} diff --git a/game/src/main/java/cz/jzitnik/client/game/ResourceManager.java b/game/src/main/java/cz/jzitnik/client/game/ResourceManager.java index abf3a37..b03cc3b 100644 --- a/game/src/main/java/cz/jzitnik/client/game/ResourceManager.java +++ b/game/src/main/java/cz/jzitnik/client/game/ResourceManager.java @@ -36,8 +36,23 @@ public class ResourceManager { APPLE("food/apple.png"), - DOORS("rooms/doors.png"), + // TEMP TEXTURES JUST TO GET THE GAME WORKING + OLD_MAN("player/front.png"), + KEY_KEEPER("player/front.png"), + CAVE_BEAST("player/front.png"), + BLIND_HUNTER("player/front.png"), + ZOMBIE("player/front.png"), + RUSTY_SWORD("tools/wooden_sword.png"), + AXE("tools/wooden_sword.png"), + DAGGER("tools/wooden_sword.png"), + BREAD("food/apple.png"), + ROCK("food/apple.png"), + KEY("food/apple.png"), + BOSS_SKIN("tools/wooden_sword.png"), + + // UI + DOORS("rooms/doors.png"), STAMINA("ui/stamina.png"), HEART("ui/heart.png"); diff --git a/game/src/main/java/cz/jzitnik/client/game/items/types/ItemType.java b/game/src/main/java/cz/jzitnik/client/game/items/types/ItemType.java index 0a5610e..7bbfcef 100644 --- a/game/src/main/java/cz/jzitnik/client/game/items/types/ItemType.java +++ b/game/src/main/java/cz/jzitnik/client/game/items/types/ItemType.java @@ -11,7 +11,8 @@ import cz.jzitnik.client.game.items.types.weapons.Sword; ) @JsonSubTypes({ @JsonSubTypes.Type(value = Food.class, name = "food"), - @JsonSubTypes.Type(value = Sword.class, name = "weapon_sword") + @JsonSubTypes.Type(value = Sword.class, name = "weapon_sword"), + @JsonSubTypes.Type(value = Junk.class, name = "junk") }) public interface ItemType { Class getItemType(); diff --git a/game/src/main/java/cz/jzitnik/client/game/items/types/Junk.java b/game/src/main/java/cz/jzitnik/client/game/items/types/Junk.java new file mode 100644 index 0000000..9c45fa3 --- /dev/null +++ b/game/src/main/java/cz/jzitnik/client/game/items/types/Junk.java @@ -0,0 +1,8 @@ +package cz.jzitnik.client.game.items.types; + +public class Junk implements ItemType { + @Override + public Class getItemType() { + return Junk.class; + } +} diff --git a/game/src/main/resources/setup/rooms.yaml b/game/src/main/resources/setup/rooms.yaml index 836595c..d8abc62 100644 --- a/game/src/main/resources/setup/rooms.yaml +++ b/game/src/main/resources/setup/rooms.yaml @@ -54,11 +54,11 @@ texture: "ROOM1" objects: - objectType: "chest" - cords: { x: 100, y: 45 } + cords: { x: 140, y: 45 } items: - id: 1 name: "Dagger" - type: { name: "weapon_dagger", dealDamage: 2, attackCooldownMs: 300 } + type: { name: "weapon_sword", dealDamage: 2, attackCooldownMs: 300 } # TODO: Make it dagger texture: "DAGGER" - id: 2 name: "Bread" @@ -69,15 +69,13 @@ type: { name: "junk" } texture: "ROCK" colliders: - - start: { x: 100, y: 45 } - end: { x: 140, y: 67 } + - start: { x: 140, y: 45 } + end: { x: 180, y: 67 } west: "spawn" east: "filler_1" north: "klicnik" south: "filler_south_1" - - # ========================= # KEY KEEPER (QUEST NPC) # ========================= @@ -134,7 +132,7 @@ itemsDrops: - id: 200 name: "Beast Skin" - type: { name: "quest_item_boss_skin" } + type: { name: "junk" } texture: "BOSS_SKIN" tasks: - type: "following_player" @@ -155,12 +153,12 @@ # FINAL ROOM / EXIT # ========================= - id: "final_room" - texture: "ROOM_EXIT" + texture: "ROOM1" requirement: item: "quest_item_final_key" - objects: - - objectType: "exit" - cords: { x: 140, y: 40 } + #objects: + # - objectType: "exit" + # cords: { x: 140, y: 40 } west: null east: null north: null @@ -235,7 +233,7 @@ items: - id: 7 name: "Axe" - type: { name: "weapon_axe", dealDamage: 4, attackCooldownMs: 800 } + type: { name: "weapon_sword", dealDamage: 4, attackCooldownMs: 800 } # TODO: Make it an axe texture: "AXE" - id: 8 name: "Apple"