From 50aa4c31a2370c3bdd02e7702a1063584f7e2ff9 Mon Sep 17 00:00:00 2001 From: Zahra Gharagozloo Mazlaghan Date: Mon, 11 May 2026 02:06:10 +0330 Subject: [PATCH] Completed The main class, almost completed the project, ready for debug. --- .../src/main/java/org/project/Main.java | 333 +++++++++++++++++- .../org/project/entity/enemies/Enemy.java | 4 + .../org/project/entity/players/Assassin.java | 15 +- .../entity/players/ICombatActions.java | 7 +- .../org/project/entity/players/Knight.java | 8 +- .../org/project/entity/players/Player.java | 26 +- .../org/project/entity/players/Wizard.java | 14 +- .../java/org/project/location/Location.java | 68 +++- .../org/project/location/LocationManager.java | 66 ++++ .../project/location/NarrativeConsole.java | 4 + .../target/classes/org/project/Main.class | Bin 0 -> 10993 bytes .../classes/org/project/entity/Entity.class | Bin 0 -> 273 bytes .../org/project/entity/enemies/Dragon.class | Bin 0 -> 2747 bytes .../org/project/entity/enemies/Enemy.class | Bin 0 -> 2839 bytes .../org/project/entity/enemies/Goblin.class | Bin 0 -> 1964 bytes .../org/project/entity/enemies/Skeleton.class | Bin 0 -> 2552 bytes .../org/project/entity/enemies/Vampire.class | Bin 0 -> 2068 bytes .../org/project/entity/players/Assassin.class | Bin 0 -> 3397 bytes .../entity/players/ICombatActions.class | Bin 0 -> 283 bytes .../org/project/entity/players/Knight.class | Bin 0 -> 2995 bytes .../org/project/entity/players/Player.class | Bin 0 -> 4988 bytes .../org/project/entity/players/Wizard.class | Bin 0 -> 3207 bytes .../classes/org/project/item/Item.class | Bin 0 -> 153 bytes .../org/project/item/armors/Armor.class | Bin 0 -> 2385 bytes .../project/item/armors/AssassinMask.class | Bin 0 -> 337 bytes .../org/project/item/armors/KnightArmor.class | Bin 0 -> 334 bytes .../org/project/item/armors/WizardRobe.class | Bin 0 -> 331 bytes .../project/item/consumables/Consumable.class | Bin 0 -> 832 bytes .../org/project/item/consumables/Flask.class | Bin 0 -> 1874 bytes .../project/item/consumables/GreatFlask.class | Bin 0 -> 381 bytes .../item/consumables/HealthFlask.class | Bin 0 -> 385 bytes .../project/item/consumables/ManaFlask.class | Bin 0 -> 1390 bytes .../org/project/item/weapons/BoneDagger.class | Bin 0 -> 335 bytes .../org/project/item/weapons/Dagger.class | Bin 0 -> 352 bytes .../org/project/item/weapons/DragonClaw.class | Bin 0 -> 336 bytes .../org/project/item/weapons/Rapier.class | Bin 0 -> 324 bytes .../org/project/item/weapons/Sword.class | Bin 0 -> 876 bytes .../project/item/weapons/ToothedHook.class | Bin 0 -> 339 bytes .../org/project/item/weapons/Wand.class | Bin 0 -> 346 bytes .../org/project/item/weapons/Weapon.class | Bin 0 -> 984 bytes .../org/project/location/AnsiColors.class | Bin 0 -> 1046 bytes .../org/project/location/Location.class | Bin 0 -> 2350 bytes .../project/location/LocationManager.class | Bin 0 -> 3124 bytes .../project/location/NarrativeConsole.class | Bin 0 -> 2106 bytes 44 files changed, 508 insertions(+), 37 deletions(-) create mode 100644 Java-Knight/src/main/java/org/project/location/LocationManager.java create mode 100644 Java-Knight/target/classes/org/project/Main.class create mode 100644 Java-Knight/target/classes/org/project/entity/Entity.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Dragon.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Enemy.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Goblin.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Skeleton.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Vampire.class create mode 100644 Java-Knight/target/classes/org/project/entity/players/Assassin.class create mode 100644 Java-Knight/target/classes/org/project/entity/players/ICombatActions.class create mode 100644 Java-Knight/target/classes/org/project/entity/players/Knight.class create mode 100644 Java-Knight/target/classes/org/project/entity/players/Player.class create mode 100644 Java-Knight/target/classes/org/project/entity/players/Wizard.class create mode 100644 Java-Knight/target/classes/org/project/item/Item.class create mode 100644 Java-Knight/target/classes/org/project/item/armors/Armor.class create mode 100644 Java-Knight/target/classes/org/project/item/armors/AssassinMask.class create mode 100644 Java-Knight/target/classes/org/project/item/armors/KnightArmor.class create mode 100644 Java-Knight/target/classes/org/project/item/armors/WizardRobe.class create mode 100644 Java-Knight/target/classes/org/project/item/consumables/Consumable.class create mode 100644 Java-Knight/target/classes/org/project/item/consumables/Flask.class create mode 100644 Java-Knight/target/classes/org/project/item/consumables/GreatFlask.class create mode 100644 Java-Knight/target/classes/org/project/item/consumables/HealthFlask.class create mode 100644 Java-Knight/target/classes/org/project/item/consumables/ManaFlask.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/BoneDagger.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/Dagger.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/DragonClaw.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/Rapier.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/Sword.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/ToothedHook.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/Wand.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/Weapon.class create mode 100644 Java-Knight/target/classes/org/project/location/AnsiColors.class create mode 100644 Java-Knight/target/classes/org/project/location/Location.class create mode 100644 Java-Knight/target/classes/org/project/location/LocationManager.class create mode 100644 Java-Knight/target/classes/org/project/location/NarrativeConsole.class diff --git a/Java-Knight/src/main/java/org/project/Main.java b/Java-Knight/src/main/java/org/project/Main.java index 6bde20e..8a82d0c 100644 --- a/Java-Knight/src/main/java/org/project/Main.java +++ b/Java-Knight/src/main/java/org/project/Main.java @@ -1,15 +1,338 @@ package org.project; -import org.project.location.Location; +import org.project.entity.players.*; +import org.project.entity.enemies.*; +import org.project.location.*; +import org.project.item.weapons.*; +import org.project.item.consumables.*; +import org.project.item.armors.*; import java.util.ArrayList; import java.util.List; +import java.util.Random; +import java.util.Scanner; public class Main { - public static void main(String[] args) { - // TODO: ADD LOCATIONS TO YOUR GAME - List locations = new ArrayList<>(); + private static Scanner scanner = new Scanner(System.in); + private static Random random = new Random(); - // TODO: IMPLEMENT GAMEPLAY + private static Player player; + + //Collected keys + private static boolean hasGoblinKey = false; + private static boolean hasSkeletonKey = false; + private static boolean hasVampireKey = false; + + private static boolean castleUnlocked = false; + + public static void main(String[] args) { + System.out.println("⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️"); + NarrativeConsole.printNormal(" JAVA KNIGHT - THE DRAGON'S CURSE"); + System.out.println("⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️"); + NarrativeConsole.printNormal("\nFor centuries, the land of Javanest lived in peace..."); + NarrativeConsole.printNormal("Until a magical Dragon attacked, plunging the realm into darkness!"); + NarrativeConsole.printNormal("You are the last hope. Gather the 3 keys and slay the Dragon!\n"); + + //Choosing a role + createPlayer(); + + gameLoop(); + } + + private static void createPlayer() { + System.out.println("=".repeat(20)); + System.out.println("CHOOSE YOUR HERO:"); + System.out.println("1. Knight ⚔️ - High damage, strong armor"); + System.out.println("2. Wizard 🧙‍♂️ - High HP, healing spells"); + System.out.println("3. Assassin 🗡️ - High mana, critical strikes"); + System.out.print("\nEnter choice (1-3): "); + + int choice = getIntInput(); + scanner.nextLine(); + + System.out.print("Enter your hero's name: "); + String name = scanner.nextLine(); + + switch (choice) { + case 1: + player = new Knight(name); + break; + case 2: + player = new Wizard(name); + break; + case 3: + player = new Assassin(name); + break; + default: + System.out.println("Invalid choice! Defaulting to Knight."); + player = new Knight(name); + } + + System.out.println("\n✨ " + player.getName() + " the " + + player.getClass().getSimpleName() + " has entered Javanest!"); + NarrativeConsole.printHeal("💚 HP: " + player.getHp() + "/" + player.getMaxHP()); + NarrativeConsole.printMana("💙 MP: " + player.getMp() + "/" + player.getMaxMP()); + System.out.println("\nPress Enter to begin your journey..."); + scanner.nextLine(); + } + + private static void gameLoop() { + boolean gameRunning = true; + boolean firstLocation = true; + + while (gameRunning && player.isAlive()) { + //Entering a new location + if (!firstLocation) { + System.out.println("\n" + "=".repeat(30)); + System.out.println("You move to a new location..."); + } + firstLocation = false; + + Enemy currentEnemy = spawnRandomEnemy(); + NarrativeConsole.printWarning("\n⭕⭕⭕ A " + + currentEnemy.getName(currentEnemy).toUpperCase() + " appears before you! ⭕⭕⭕"); + NarrativeConsole.printWarning("❤️ " + currentEnemy.getName(currentEnemy) + " HP: " + + currentEnemy.getHp() + "/" + currentEnemy.getMaxHP()); + + //Pre-battle menu + boolean locationExited = false; + + while (!locationExited && player.isAlive() && gameRunning) { + displayMainMenu(); + int choice = getIntInput(); + + if (choice == 1) { + //Option 1: Starting the battle + boolean victory = startBattle(currentEnemy); + + if (victory) { + handleVictory(currentEnemy); + locationExited = true; //Moving on the next location + } else { + gameRunning = false; //Player's death + } + + } else if (choice == 2) { + //Option 2: Move to another location1 + System.out.println("\n🚶 You flee to another location..."); + currentEnemy = spawnRandomEnemy(); + NarrativeConsole.printWarning("⭕ A " + currentEnemy.getName(currentEnemy) + + " appears in this new location!"); + + } else if (choice == 3 && castleUnlocked) { + //Option 3: Going to the castle and fight the dragon (only with 3 keys) + System.out.println("\n🏰🏰🏰 YOU STAND BEFORE THE DRAGON'S CASTLE! 🏰🏰🏰"); + System.out.println("The gates slowly open... A massive shadow emerges...\n"); + + boolean victory = startBattle(new Dragon()); + if (victory) { + System.out.println("\n🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉"); + NarrativeConsole.printSuccess(" THE DRAGON IS DEFEATED! YOU SAVED JAVANEST!"); + System.out.println("🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉"); + gameRunning = false; + } else { + NarrativeConsole.printError("\n💀 The Dragon's flames consume you... GAME OVER!"); + gameRunning = false; + } + break; + } + + //Checking the condition for opening the castle + if (hasAllKeys() && !castleUnlocked) { + castleUnlocked = true; + System.out.println("\n🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑"); + NarrativeConsole.printSuccess(" YOU HAVE COLLECTED ALL 3 KEYS!"); + NarrativeConsole.printSuccess("🏰 THE PATH TO THE DRAGON'S CASTLE IS NOW OPEN! 🏰"); + System.out.println("🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑"); + } + + displayKeyProgress(); + + //End game + if (!player.isAlive()) { + NarrativeConsole.printError("\n💀💀💀 GAME OVER! 💀💀💀"); + NarrativeConsole.printError("Your journey ends here. The curse of Javanest remains unbroken..."); + } + } + } + } + + private static void displayMainMenu() { + System.out.println("\n" + "-".repeat(30)); + System.out.println("WHAT WILL YOU DO?"); + System.out.println("1. ⚔️ FIGHT the enemy"); + System.out.println("2. 🚶 MOVE to another location"); + + if (castleUnlocked) { + System.out.println("3. 🏰 GO TO THE CASTLE (Fight the Dragon!)"); + } + System.out.print("\nChoose: "); + } + + private static boolean startBattle(Enemy enemy) { + System.out.println("\n" + "🔥".repeat(30)); + System.out.println(" BATTLE BEGINS!"); + System.out.println("🔥".repeat(30)); + + while (player.isAlive() && enemy.isAlive()) { + displayBattleStatus(enemy); + + playerTurn(enemy); + if (!enemy.isAlive()) { + break; + } + + enemyTurn(enemy); + } + + return player.isAlive(); + } + + private static void playerTurn(Enemy enemy) { + System.out.println("\n" + "-".repeat(30)); + System.out.println("YOUR TURN"); + System.out.println("1. ⚔️ Light Attack (0 Mana)"); + System.out.println("2. 💥 Heavy Attack (-8 Mana)"); + System.out.println("3. 🛡️ Defend (-6 Mana)"); + System.out.println("4. 💚 Heal (-12 Mana)"); + System.out.println("5. ⭐ Special Ability (-15 Mana)"); + System.out.print("Choose action: "); + + int choice = getIntInput(); + + switch (choice) { + case 1: + player.lightAttack(enemy); + break; + case 2: + player.heavyAttack(enemy); + break; + case 3: + player.defend(); + break; + case 4: + player.heal(12); + break; + case 5: + player.specialAbility(enemy); + break; + default: + NarrativeConsole.printWarning("❌ Invalid choice! You hesitate and lose your turn!"); + } + + //Checking the death of enemy + if (!enemy.isAlive()) { + NarrativeConsole.printSuccess("\n💀 " + + enemy.getName(enemy).toUpperCase() + " HAS BEEN DEFEATED! 💀"); + } + } + + private static void enemyTurn(Enemy enemy) { + System.out.println("\n" + "-".repeat(30)); + System.out.println("ENEMY TURN"); + enemy.attack(player); + } + + private static void displayBattleStatus(Enemy enemy) { + System.out.println("\n" + "═".repeat(45)); + System.out.printf("❤️ %s: %d/%d HP | 💙 Mana: %d/%d%n", + player.getName(), player.getHp(), player.getMaxHP(), + player.getMp(), player.getMaxMP()); + System.out.printf("👹 %s: %d/%d HP%n", + enemy.getName(enemy), enemy.getHp(), enemy.getMaxHP()); + System.out.println("═".repeat(45)); + } + + private static Enemy spawnRandomEnemy() { + int roll = random.nextInt(3); // 0, 1, 2 + + switch (roll) { + case 0: + return new Goblin(); + case 1: + return new Skeleton(); + default: + return new Vampire(); + } + } + + private static void handleVictory(Enemy defeatedEnemy) { + NarrativeConsole.printSuccess("\n✨✨✨ VICTORY! ✨✨✨"); + NarrativeConsole.printSuccess(defeatedEnemy.getName(defeatedEnemy).toUpperCase() + + " has been defeated!"); + + //Getting Higher Max HP and MP + player.setMaxHP(player.getMaxHP() + getXpReward(defeatedEnemy)/5); + player.setMaxMP(player.getMaxMP() + getXpReward(defeatedEnemy)/5); + + //Full HP and Mana Recovery (Post-Combat Recovery) + player.setHp(player.getMaxHP()); + player.setMp(player.getMaxMP()); + NarrativeConsole.printHeal("💚 HP and Mana fully restored in higher levels!"); + + //Key Drop (20% chance) + attemptKeyDrop(defeatedEnemy); + } + + private static int getXpReward(Enemy enemy) { + if (enemy instanceof Goblin) return 50; + if (enemy instanceof Skeleton) return 65; + if (enemy instanceof Vampire) return 85; + if (enemy instanceof Dragon) return 300; + return 40; + } + + private static void attemptKeyDrop(Enemy enemy) { + //Checking if we already have this key or not + if (enemy instanceof Goblin && hasGoblinKey) { + return; + } + if (enemy instanceof Skeleton && hasSkeletonKey) { + return; + } + if (enemy instanceof Vampire && hasVampireKey) { + return; + } + + //Dropping the key (20% Chance) + int dropChance = random.nextInt(100); + if (dropChance > 80) { + if (enemy instanceof Goblin) { + hasGoblinKey = true; + NarrativeConsole.printSuccess("\n🔑🔑🔑 YOU FOUND THE GOBLIN KEY! (1/3) 🔑🔑🔑"); + } else if (enemy instanceof Skeleton) { + hasSkeletonKey = true; + NarrativeConsole.printSuccess("\n🔑🔑🔑 YOU FOUND THE SKELETON KEY! (2/3) 🔑🔑🔑"); + } else if (enemy instanceof Vampire) { + hasVampireKey = true; + NarrativeConsole.printSuccess("\n🔑🔑🔑 YOU FOUND THE VAMPIRE KEY! (3/3) 🔑🔑🔑"); + } + } else { + System.out.println("🔑 No key dropped this time... Keep fighting!"); + } + } + + private static boolean hasAllKeys() { + return hasGoblinKey && hasSkeletonKey && hasVampireKey; + } + + private static void displayKeyProgress() { + System.out.println("\n" + "-".repeat(40)); + System.out.println("KEY PROGRESS:"); + System.out.println(" " + (hasGoblinKey ? "👹" : "⬜") + " Goblin Key " + (hasGoblinKey ? "(Obtained)" : "(Missing)")); + System.out.println(" " + (hasSkeletonKey ? "💀" : "⬜") + " Skeleton Key " + (hasSkeletonKey ? "(Obtained)" : "(Missing)")); + System.out.println(" " + (hasVampireKey ? "🦇" : "⬜") + " Vampire Key " + (hasVampireKey ? "(Obtained)" : "(Missing)")); + System.out.println("-".repeat(40)); + } + + private static int getIntInput() { + while (true) { + try { + int input = Integer.parseInt(scanner.nextLine().trim()); + return input; + } catch (NumberFormatException e) { + NarrativeConsole.printWarning("❌ Invalid input! Please enter a number: "); + } + } } } \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java b/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java index 31970ea..f0c360e 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java @@ -119,4 +119,8 @@ public abstract class Enemy implements Entity { public void setHp(int newHp) { hp = newHp; } + + public boolean isAlive() { + return (getHp() != 0); + } } diff --git a/Java-Knight/src/main/java/org/project/entity/players/Assassin.java b/Java-Knight/src/main/java/org/project/entity/players/Assassin.java index 7281576..708355d 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Assassin.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Assassin.java @@ -1,17 +1,22 @@ package org.project.entity.players; import org.project.entity.Entity; +import org.project.entity.enemies.Enemy; import org.project.item.armors.Armor; +import org.project.item.armors.AssassinMask; +import org.project.item.weapons.Dagger; import org.project.item.weapons.Weapon; import org.project.location.NarrativeConsole; public class Assassin extends Player implements Entity, ICombatActions { - public Assassin(String name, Weapon weapon, Armor armor) { - super(name, 45, 60, weapon, armor); + public Assassin(String name) { + super(name, 45, 60, new Dagger(), new AssassinMask()); + setHp(getMaxHP()); + setMp(getMaxMP()); } @Override - public void specialAbility(Entity target) { + public void specialAbility(Enemy target) { //Checking if the mana is enough of not if (getMp() < 15) { NarrativeConsole.printWarning("❌ Not enough mana for Devastating Spell!"); @@ -30,7 +35,7 @@ public class Assassin extends Player implements Entity, ICombatActions { NarrativeConsole.printMana("💙 Mana left: " + getMp()); } - public void lightAttack(Entity target) { + public void lightAttack(Enemy target) { int damage = 10; //Critical Action (if enabled) @@ -45,7 +50,7 @@ public class Assassin extends Player implements Entity, ICombatActions { } @Override - public void heavyAttack(Entity target) { + public void heavyAttack(Enemy target) { if (getMp() < 8) { NarrativeConsole.printWarning("❌ Not enough mana for Heavy Attack!"); return; diff --git a/Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java b/Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java index ca94831..8d1ea8e 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java +++ b/Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java @@ -1,18 +1,19 @@ package org.project.entity.players; import org.project.entity.Entity; +import org.project.entity.enemies.Enemy; import java.util.ArrayList; public interface ICombatActions { - void lightAttack(Entity target); + void lightAttack(Enemy target); - void heavyAttack(Entity target); + void heavyAttack(Enemy target); void defend(); void heal(); - void specialAbility(Entity target); + void specialAbility(Enemy target); } \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/entity/players/Knight.java b/Java-Knight/src/main/java/org/project/entity/players/Knight.java index a9c90d5..0b78c19 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Knight.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Knight.java @@ -14,10 +14,12 @@ import java.util.ArrayList; public class Knight extends Player implements ICombatActions { public Knight(String name) { super(name, 45, 45, new Sword(), new KnightArmor()); + setHp(getMaxHP()); + setMp(getMaxMP()); } @Override - public void specialAbility(Entity target) { + public void specialAbility(Enemy target) { //Checking if the mana is enough of not if (getMp() < 15) { NarrativeConsole.printWarning("❌ Mana is not enough for Shield Bash!"); @@ -35,14 +37,14 @@ public class Knight extends Player implements ICombatActions { NarrativeConsole.printSpecial("💥 Shield Bash! Enemy is stunned!"); } - public void lightAttack(Entity target) { + public void lightAttack(Enemy target) { int damage = 10; target.takeDamage(damage); NarrativeConsole.printCombat("⚔️ " + getName() + " used Light Attack! Dealt " + damage + " damage."); } @Override - public void heavyAttack(Entity target) { + public void heavyAttack(Enemy target) { if (getMp() < 8) { NarrativeConsole.printWarning("❌ Mana is not enough for Heavy Attack!"); return; diff --git a/Java-Knight/src/main/java/org/project/entity/players/Player.java b/Java-Knight/src/main/java/org/project/entity/players/Player.java index f78de84..b3d64ef 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Player.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Player.java @@ -1,6 +1,7 @@ package org.project.entity.players; import org.project.entity.Entity; +import org.project.entity.enemies.Enemy; import org.project.item.armors.Armor; import org.project.item.weapons.Weapon; import org.project.location.NarrativeConsole; @@ -22,15 +23,20 @@ public abstract class Player implements Entity { private boolean isInvisible = false; private boolean nextAttackCritical = false; - public Player(String name, int hp, int mp, Weapon weapon, Armor armor) { + public Player(String name, int maxHP, int maxMP, Weapon weapon, Armor armor) { this.name = name; - this.hp = hp; - this.mp = mp; - + this.maxMP = maxMP; + this.maxHP = maxHP; this.weapon = weapon; this.armor = armor; } + public abstract void specialAbility(Enemy enemy); + + public abstract void lightAttack(Enemy enemy); + + public abstract void heavyAttack(Enemy enemy); + @Override public void defend() { //checking mana @@ -152,6 +158,10 @@ public abstract class Player implements Entity { public boolean isNextAttackCritical() { return nextAttackCritical; } + public boolean isAlive() { + return (getHp() != 0); + } + public void setInvisible(boolean invisible) { this.isInvisible = invisible; } public void setNextAttackCritical(boolean critical) { this.nextAttackCritical = critical; } @@ -167,4 +177,12 @@ public abstract class Player implements Entity { public void setDefending(boolean defending) { isDefending = defending; } + + public void setMaxHP(int maxHP) { + this.maxHP = maxHP; + } + + public void setMaxMP(int maxMP) { + this.maxMP = maxMP; + } } diff --git a/Java-Knight/src/main/java/org/project/entity/players/Wizard.java b/Java-Knight/src/main/java/org/project/entity/players/Wizard.java index af60377..4cbba68 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Wizard.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Wizard.java @@ -3,18 +3,22 @@ package org.project.entity.players; import org.project.entity.Entity; import org.project.entity.enemies.Enemy; import org.project.item.armors.Armor; +import org.project.item.armors.AssassinMask; +import org.project.item.armors.WizardRobe; import org.project.item.weapons.Sword; import org.project.item.weapons.Wand; import org.project.item.weapons.Weapon; import org.project.location.NarrativeConsole; public class Wizard extends Player implements Entity,ICombatActions { - public Wizard (String name, Weapon weapon, Armor armor) { - super(name, 60, 45, new Wand(), armor); + public Wizard (String name) { + super(name, 60, 45, new Wand(), new WizardRobe()); + setHp(getMaxHP()); + setMp(getMaxMP()); } @Override - public void specialAbility(Entity target) { + public void specialAbility(Enemy target) { //Checking if the mana is enough of not if (getMp() < 15) { NarrativeConsole.printWarning("❌ Not enough mana for Devastating Spell!"); @@ -36,14 +40,14 @@ public class Wizard extends Player implements Entity,ICombatActions { NarrativeConsole.printMana("💙 Mana left: " + getMp()); } - public void lightAttack(Entity target) { + public void lightAttack(Enemy target) { int damage = 10; target.takeDamage(damage); NarrativeConsole.printCombat("⚔️ " + getName() + " used Light Attack! Dealt " + damage + " damage."); } @Override - public void heavyAttack(Entity target) { + public void heavyAttack(Enemy target) { if (getMp() < 8) { NarrativeConsole.printWarning("❌ Not enough mana for Heavy Attack!"); return; diff --git a/Java-Knight/src/main/java/org/project/location/Location.java b/Java-Knight/src/main/java/org/project/location/Location.java index b0b4b98..468d8b8 100644 --- a/Java-Knight/src/main/java/org/project/location/Location.java +++ b/Java-Knight/src/main/java/org/project/location/Location.java @@ -1,28 +1,72 @@ package org.project.location; -import org.project.entity.enemies.Enemy; - +import org.project.entity.enemies.*; import java.util.ArrayList; +import java.util.Random; public class Location { + private String name; + private String description; + private ArrayList possibleEnemies; + private Enemy currentEnemy; + private Random random; - private ArrayList enemies; - - public Location(ArrayList locations, ArrayList enemies) { - this.locations = locations; - this.enemies = enemies; + public Location(String name, String description) { + this.name = name; + this.description = description; + this.possibleEnemies = new ArrayList<>(); + this.random = new Random(); } + //Adding enemy to location + public void addEnemy(Enemy enemy) { + possibleEnemies.add(enemy); + } + + //Spawning a random enemy from among the enemies in this location + public void spawnRandomEnemy() { + if (possibleEnemies.isEmpty()) { + //If no enemy was defined + addDefaultEnemies(); + } + + int index = random.nextInt(possibleEnemies.size()); + currentEnemy = copyEnemy(possibleEnemies.get(index)); + } + + private void addDefaultEnemies() { + possibleEnemies.add(new Goblin()); + possibleEnemies.add(new Skeleton()); + possibleEnemies.add(new Vampire()); + } + + //Copying the enemy to have a new instance each time + private Enemy copyEnemy(Enemy original) { + if (original instanceof Goblin) return new Goblin(); + if (original instanceof Skeleton) return new Skeleton(); + if (original instanceof Vampire) return new Vampire(); + return new Goblin(); + } + + public String getName() { return name; } - public ArrayList getLocations() { - return locations; + public String getDescription() { + return description; } - public ArrayList getEnemies() { - return enemies; + public Enemy getCurrentEnemy() { + return currentEnemy; } -} + + public void setCurrentEnemy(Enemy enemy) { + this.currentEnemy = enemy; + } + + public boolean hasEnemy() { + return currentEnemy != null && currentEnemy.isAlive(); + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/location/LocationManager.java b/Java-Knight/src/main/java/org/project/location/LocationManager.java new file mode 100644 index 0000000..ec9c572 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/location/LocationManager.java @@ -0,0 +1,66 @@ +package org.project.location; + +import org.project.entity.enemies.*; +import java.util.ArrayList; +import java.util.Random; + +public class LocationManager { + + private ArrayList locations; + private Location currentLocation; + private Random random; + + public LocationManager() { + locations = new ArrayList<>(); + random = new Random(); + createLocations(); + } + + private void createLocations() { + //Creating different game locations + Location forest = new Location("Dark Forest", "A mysterious forest filled with dangerous creatures"); + forest.addEnemy(new Goblin()); + forest.addEnemy(new Skeleton()); + + Location crypt = new Location("Ancient Crypt", "An old crypt where skeletons roam"); + crypt.addEnemy(new Skeleton()); + crypt.addEnemy(new Vampire()); + + Location castleGate = new Location("Castle Gate", "The entrance to the Dragon's castle"); + castleGate.addEnemy(new Goblin()); + castleGate.addEnemy(new Vampire()); + + locations.add(forest); + locations.add(crypt); + locations.add(castleGate); + } + + public void moveToRandomLocation() { + int index = random.nextInt(locations.size()); + currentLocation = locations.get(index); + currentLocation.spawnRandomEnemy(); + } + + public void moveToLocation(int index) { + if (index >= 0 && index < locations.size()) { + currentLocation = locations.get(index); + currentLocation.spawnRandomEnemy(); + } + } + + public Location getCurrentLocation() { + return currentLocation; + } + + public void displayLocations() { + NarrativeConsole.printInfo("\n=== Available Locations ==="); + for (int i = 0; i < locations.size(); i++) { + NarrativeConsole.printInfo((i + 1) + ". " + locations.get(i).getName()); + NarrativeConsole.printInfo(" " + locations.get(i).getDescription()); + } + } + + public ArrayList getLocations() { + return locations; + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/location/NarrativeConsole.java b/Java-Knight/src/main/java/org/project/location/NarrativeConsole.java index cf9e1d0..d93f46e 100644 --- a/Java-Knight/src/main/java/org/project/location/NarrativeConsole.java +++ b/Java-Knight/src/main/java/org/project/location/NarrativeConsole.java @@ -1,6 +1,10 @@ package org.project.location; public class NarrativeConsole { + //Normal + public static void printNormal(String message) { + System.out.println(AnsiColors.WHITE + "⭐ " + message + AnsiColors.RESET); + } //Damage public static void printDamage(String message) { diff --git a/Java-Knight/target/classes/org/project/Main.class b/Java-Knight/target/classes/org/project/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..72bdc55ee8d20f7c823aa8140921b1a66af0b141 GIT binary patch literal 10993 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 literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Dragon.class b/Java-Knight/target/classes/org/project/entity/enemies/Dragon.class new file mode 100644 index 0000000000000000000000000000000000000000..41222e4588d0e80b77b6c3ba665bdf89cad82308 GIT binary patch literal 2747 zcmaJ@+fy4=82=rTk~C}~#NH6Z1EnQEA=+AcNpD;hNDV0xno8^Kker4s$!^?Tp!^9w z`R3@G&e(Cr@j;zRu^k%J_z8N-$J%(@f}%XBjSrHPtYPauM34Kc(?_Of9b?p20J zdZ3g*0xdCU>f0d(9@ZsI*Kjv7(v)>WIvJhj4TcNp{C%+|GBsgVGey@n%xX55%ZCMb zfVk~}$qtlaXk$ovva7C9%ghV2V$~C9Me{+V@LCLqH5|cFhMuspT_}7`#KQK(8B#u+ zkjkvmd0ayWUT27z@`0N(U502nH;_w^r7jI`pqn9a&#>jVErq+x(4F2vA+V}@E+Ftq zj%(;qa++z`bx|90T~S_%;l%!c8#S>ZZ6`D5%?b44q=r-IXJ|2;NqJA26>^;yg*$N! zFbqBW`nP94e#U)<+^CWn>F^C})#eStC|#q>on=GTDm@7d;dBhc8b**|I2m?W%_E+I=Xs!F#Y>ZBy|$|&qj zycE^M6%AK$jp10G&=6H(f16Ax(ylOFhoL{6+bcS-_egnlOvAWxsqZSETpW`OS)WyS zDuzd|n@0n9+-TDmSn9@bDFXtrSmbm{y84F9yYiEE}R0M~-1iU3&B|Jd!4T zelbwY^}_V6{8W+aB|2P~$rYx3BRgf{c$Z;RX?gn1KU<&kMU^;yzVKN+zfk0>W<}bZ zGKp8b=cC`@OJ4f-#4*b-;v?W*aypV54!>2@^Lnw!MO7H&PLicV;UzvruopKq%;7yE z+#MHQO`6@k6p&g~NcN}~y@LW$6pH%wVrtuIM?K`g1cOOUbKJ6AswB~v zmF}`tapJg7_*KMye#ja3)$@uJHHwnO8HKb)@A>uxRjLkMoE<9`b0s|x=xJ+)nSg~x z44E+m)#kF{)Cp8fh+3^korj#QtKot7ckLi>2`v?dH5a&^?%9?f4>Dd5Xy5V;p#lgM&}eO3UOg zX#a_BHlajgEA?ogjkG4IKegjF?KILw8t^_AX=b=XYhU{YNvZqYgOAXjtZd@gm9Av^ zTeJ)gZKCr##MS(!(jM`&AH@M$A0foYNPh>8qf2!`&kFZ71y+>3yZC_YByboX;v=&3 zG0Dcz^c=@ol(y6c0~p_vXp}yVCOfVS{fXYMaCqns^cIFU(f1YNsq_{Ghq`{nTTMuf z(z;8*y6^;-fh}Br3GWmRl9nFQc7n|IksD5uOHZMbUd~>eMn8sej+&iv${<;6BiDQa z;Q=4r20j`9kKinpwt-Vvo}*KRNfGwl_ZRIHZaq1CB{i`HJvBpv&!9WRAeFkIKIUl{ zj%=b3aPe4lJ;D4g8fOR=sDUZ~acZE4FiJi=PyW6Dj*CR<62Z?RgKPBVIwmo;O{s$j zzo4XVQ_{C7jqj#J&4i(hN1S1CZ9q$N&HU literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Enemy.class b/Java-Knight/target/classes/org/project/entity/enemies/Enemy.class new file mode 100644 index 0000000000000000000000000000000000000000..83a3f0297676b0b5a49c296e1d6f9c59a2e421a8 GIT binary patch literal 2839 zcmah~T~iZh6n-{r5)w9iq<$e96GRP*5Zgk2#(yovF@;oOk0AF=KD`{XFM9&vVXu_OE|`{{z4*>S@H# zk%Vp_j)aEZ`_==iRJGhn>H6Azdp*#QIPbVla8W}?ad;(#PNb4Z8|Z?eA@BK>Qr-9D zX32H~CwR=kt~qw2G|Ta^hLqD-4z^s^E^E+M#lG7>4|;jh;Qq}m-)-<@UQV(G-jb7a z*}iAH(Sy3rP+KZMl~Gy`^k6tB`?U^uD4a$$k!~_$_HLvpcm38;Y<>58+Zrr zYB^>f#bQQCCm3Ydtgs{Zo{jRn^7m9;FjgPq@`hh@pZ1lD*|l7z!5^ovbM++VHT1V}Ijag#Lq-$|EH_xOs#|sk3q2tpR?uV{ ziRS13H@U+rtfy(OOwD^19M@jjs;$}nO>0fEkX>MgswpwhFV4$eqTF1k8+H)AG`+Yghe>&2>gi>c zCB~vvZvxDe?RDR-5t7(2$M>9Sb&*9$$5NZL^{VA?BN0AFRn4nBmzrf@8G?;4D~ol$ zXJ#jS4Xmx=@GD%}JsF0e#gclar8iQ4y{;KPuzZ?p7fo2rlm04`oa` zjmuR&B8s`}ZTai=RY#JTR>>HXUZEFQaWQC^LyA?yM!;`O+Jzd~C)CLPr$)9iHL~e& z%t`~J?T2dbBigZZseN{;Xn%nXkdUy*?-Eac;k`J=3G-KIX2%Ya^2wOJi5>LGbf4L4 z?BJj|vV+6sksajBqdO>={rV1uo~cmR`5j|Z1_9^{nL-BL46~16`_YGEoDE?=h6!j4 z2QiLAxWU`wVPJfWPq-ok>7IloGoc()Ga)TcXhO-M>l&7ElWPs1Vx>u9nm6QjmwD$o zasy?e+=V8;86bx=fk@Z`;ngT?7j7wiG~C9Wro-F3BUU};02LY7MyIJ$6>-`D;hQB> zV2})slkX7uo@{a66FKj}DizW2nX=TnIsF`oW)zFggl^7!j^sA_1${;*`V2QRPZ(74 zu^aS&63j#rBb4&$Bv@hKuHBz}%KrWAsF=sco6iZ7L}aTM{DN~fSA_kVDje_h;- zbddB3`aXrEH$epoqW8YtBz7z3S6F4Ubal0ba$hqb|Ix7MMvA(`Q5?oa*q=FxsicYS zzYrNRjcrDWSd*YPBnG}tCjUSN8p8gGE&q8K~Vy0@8!b{q7lzF@< z_jt2x!wMT@D*$Uf#cJ?OC}mYj`yZIl^$O8>30R@xd@u+cPr#8H$fjQokS+el>3J>_glW*21kfy^#H%}$Hs zP=XvQ9oXcz%Gc|%<~_EOuQ33hl^(RvFGTbUaB!cYgnk?y=~Rk~%_u(?i9t{#f!S>&^`D@3h^8U>u-d+9ktNe~7h;QbT@rsT I4Px;A17JS^oB#j- literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Goblin.class b/Java-Knight/target/classes/org/project/entity/enemies/Goblin.class new file mode 100644 index 0000000000000000000000000000000000000000..aa1879be04bee8db69bbbf68903b12bb85cf41c5 GIT binary patch literal 1964 zcmaJ?Yf~Fl7=8{3Y*-dZQxKt$ZdzyqNY_inY6{w>P__-Uk~B!G&K#06WXonZvwOhu zPxPBJ>iESkb)4QD{Q>?K`xiRCC%f2CGM&uqp7ZW|d!F}_e_p-#8^8*_O`(UO@20=w zI-Z6k!?YjlTCKo;C~DGjq-a{-3EuL((5m>pY>4`r@9*hIpwEDY6d7N2JV!1wB=WOW z9XbXy80y;~gW2g!c+!!FmheQ=5uvq0??Z+w`O-svz%7@1yH;5Sj<;K|?NX=Vu`IUQ z*%W50{TN1C!zlw9oMy;%TD%b|f=8(a+^hRdhD;Q5UplU}*_IV_jN%;)V+P*EI77Of zREGkC=7~qr_9R0xZ_nBTID<(IQwFj)%P`(0{z@A$gD&}=xWSuzS476u6mmrM%OC%G z`TI|1l%BaCin>|cv@3S;TFER|HtpLhIa9}ZOlz1iZ~+$?W;(;TevM1V_pA*b1avwO zMJkl_Ov-Xg)Ew?IjCNsJRcjct2IeqN=yrwN;7u~M^2gYZxs0$BW=~ctL!Go> z;1Vo`u_hsbSCl6x{_xR|$3ns)J~@P1(6Lj`uA4I&~g1BS~g%Et^Bx}iDg zUAg+iz?Ijoihgs4s{$7NIw2h{IiA?qZ|;bo!gmyHnG#XzR(as4dn`=KhC>L>ccbN~ zo1+>QsK>aJytc=XeJhPs(v&D-Q~D;$rSK&Ufzo^Y{75gNg1VaJhWk*~QNcY8RaM0; zYX8@B?|29Po`}akYM)hJlYT%8;``2G$BI#IYc#p82&YT5k@j1KlMT=zIc8WnY>6)F z4?6Vk?5G8JtleW5Mee#~T1ixE!}dH86kQ&MBGf?Tm^p!|TdEqqrv7-lDwQ_Eg&a+( zPBX^PqgEZAl60osOV3Z~_67Rr1Z3tiES*h{{E5W&Q}jMX|6`K&;4^ya^ah4-ihLF5 zWJDIYiY2-+EaUUo+rPBhdr5XbtuG~(=l;M@y8Z+si^sUU=a}fh z)DIZXn9p!-a&Gl5Eo+R0u9dS;hz`U*h2!VMt&L*HI+Ay|{-P^dFZXzqhbT zvLtSjCH;B5!W3i7oFM%**fH`2dMh3i>FjUxiinG-o$DYi@jq#|x|oiZj0lvZbfAlNp+5i9m literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Skeleton.class b/Java-Knight/target/classes/org/project/entity/enemies/Skeleton.class new file mode 100644 index 0000000000000000000000000000000000000000..2212388ad2c7820498e78b56d8a99414a38988e4 GIT binary patch literal 2552 zcmaJ?O;Z#{7=D`FW!GhZb)ymlbWlE)QJI89G_GO-qHF?4Tm{8M)9g0O$n4B!rh!nE zL;gXoRw`C`$t@RCi5gPL56I8R-O4eSR4Q-J46wlJWqP{%{dk`DtN;9O>kj~v_%eki zhE#D?*h0Ea5^;vpu2(T@p8H6Yq-jY}H8%vWxsGp+yN|*hPTnl z&{^*}vNIVVXGlxFN)f2?ieQN63W{$#x-@j7hap)Ja+X)=%FOM-zsE{`=pf%LCF7(9 z9lZ=4Rq`?6IwdX_EV)8|zT}Sd83r0es)4aIPNOf0ehmW{WazKwW4mP5avgJ)dmjC* zD^I>_6K1VOp_dEXb0`B0M;ket&w^n{0W}x~bA^LUUW4bXhI0x`OW-7opbDL-;T^oo zkf6{_)q)Z#sPp$UysyqvbUwqsnwnFGqZ%%#3?+OeoWchTeXpMW{_3Z1^z8)elwN&F z2uClAWx*-K!^6WWAbAa!6@ZXsajjGmzMn-C#uS^Yif`dH*gw)RUZ+|UC5zixYJh7> zb&@icD-;?jr*MPe>|c+c{{8aXh6sJ>xtpS_FT0*zaosXyKR)4>DH-k4mLq1@s!PJV z&6iYqveT40d!Boi+DC_Rxnfaa^f#)u?KayEO`bZHOUX;C3@6@LpYtRsxksUA=xSs- zYzJkq9Q6V#FtmEReWh}laKwgMTZ_u+46j9?qnysn1?gU7IIQxyuPx)b#Ua9xF1l-8 zNnE#72wJzP46A{`kQsMfNipQL86j8PvY)~OLcG5uLedmw)|AI^sUV2IH zlFm%l-i+lmDp*OvQuXwR0PfC1%UO3Um-r0db(d|cn5kzg2zDejbQ;rC6G z$F*AiV3*dN>`}bESrZM!@7KxSTvG4Co*@>QnBcZuq)|)A<`>_g*0J z0*8#)FKBy4S4|`Yv{5qyEjUc7$DrY3+G(LGKEX8Y7-ldVnf;oimHa>^edSE|uQ<{K zkuqZR-=#K6a|;szc(s3mRQ5XQDI&2TT;oIn=ps5jMCBxX zbt2J=K>~ReeK=3BM=^vv4BViT0?qzAwBCh@hcxfY7zxN41ipvJ6p5G$sMw(`0ax8Q1M_R&+hKV1o%VcaPlk*K!JNK*R8>(ip z5P3BtuL%|J{mNJCloLCC@8VvhJVq#+2y3&^wWki#!RZ7NxE5GA7E0}er8y{bRSk;) h)BE_0*5edLL6$!cz7K;h556U=(tVolY&fW)^M6pLVs!uj literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Vampire.class b/Java-Knight/target/classes/org/project/entity/enemies/Vampire.class new file mode 100644 index 0000000000000000000000000000000000000000..258fdbb0eb28b9cf6b86809e337db821af63a73e GIT binary patch literal 2068 zcmaJ?-Bue_6#h;UNC;C%(?ZLyLrXD$?I>1S3B|SnOf*n5G+1kE56K~!GMUMmIZ$~5 zU%}-S7kcN7UQmk5K7jAS6S!8F`(&n=KLx~VPzbn`xX8}c1>N5YIsk<>F|`Yx*5}O1y?D{q_)ayguqC( z&}#vko;;h5B-QGgh6%jSaH&RAGLBv1a>JBWl03<6=`l>SNn{&maZF+=ifIiW;5x&# zX6BYdZcWEFR=Mkvw5uX{jzyTe>r@$;acY}fGW4~JRZN1oDV!fFjokkPpV9EKitKyz ztCB03LN zwWoW;g-cN$Qy~^Ke5OKlHA3XP~G_xa)jV(N5+mC03EUraA|g z5m_}U;p6S9c&cmC^gg(hytK_Q`p&W!NmFu{nuKAfooBz9mBVt-$t*{$T@~EAS95l3 zvg@$L3)P|L3M%3XuLppG4qaIz{erXOmc+8D*l9tgZm1W?kho7T+>eKObHWtG}D#-EvU&nv^sxJ}_sWaUNN8dIWZYk4OhkD-J61pczWA3ClWtW>a zdC{|LI=9QZD=L&b>N??(@uRnne?BqDuFdJpV7;Aq9LINf62(*16W>!I{u>~sz3Xg? zV2=3DWSN(wr%!Z>h< z)bJ5*DB+`#BivNNC(2f-AK`Y(c^|Q4`Ve;%)Nljp9C}FZp;LmuUZCH@MGO-4tLUfa ze;Edy<}pN&hp~zgJf(?kLWfOrT2Z^{!w;wt5qyp;kqg5@4qp(xB%a_)lEUQaA@U?e zutJvI2))51W9%Qw3R8avKPR|OyUK7lG4mU3eoFnMPc)@7e3H)9Hm0f5rqgXq!+6jL iu!gT_A0%MkQsl22>w04?Hr8+OjK0U|8%GHO1OEanEC(Y1 literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/players/Assassin.class b/Java-Knight/target/classes/org/project/entity/players/Assassin.class new file mode 100644 index 0000000000000000000000000000000000000000..3cee048728b6976f59937f6d0144944925968cfc GIT binary patch literal 3397 zcma)9-E$My9X;1JmMkw=RqPOgffX@Cw!tDaP{2TIY=btHjT<|5fV9oEbdeUXcGcar z!TtXJOq+frZJ_B)(`g?%)0gzYVa&AC=l&VIXZjChIz4w+w&Yl}eehlF{rKH;&ON{1 zUjOson|}u|jdv615IExbm3-az?x<3jw?kFS-&L~ixj}wPRw~L*L7>aP9&`(IU$k92 zye!a}8(vHxDKNBawe)MAALJ*3Kn8*B&d6XTg#@}%=!KEMUL9(mK(=+Eazi^@&(|Hf zuDEtCdI~J%ig)Ci%sbMph)Mq9L%SqQaSaMBPf_X@QZ)zk9=+^+Hp*-fE?4)}$-V+n#SusWlmdG9+Ac zzOEc6o5C|VkifGB4q{N?SnGz4SK?I9&Cg2T=dU$2N%1{L2^e)!4wt0wGL*nT8#!V! zhYcKoNsK{^u`6fA14j)!hapDdfaR{)fxWB)cja!zCKCAA96JaPzE0ew* z+9l~|orVpJU{oMM`m?ge#r?VA-N%xlqfQzaLtbEiO|EDX$22N|OVht!`$(BwMFAAJ|{NO!PgEeJ@*1T&wj=8MN$(OAKYjUD!=1$);%d#db zYB-z3S%LE({{C+tK6>w858pJG^yIQvt|&9CD$~_*Y`5gq^l3E$@~!TuP&w<_4BdZD z^E$8fx7sk*V8;zy)L?s}1Dl}{v~-sZd>WsjV0N%u+sH^aGw8s%6ecm1z_fv@`Vh@l zcQov%TvfAGke}vrT_6=w;i-sW2AwEqfR@1XZRC9thuh5$J+rKCE4NJRr!j9}VatV6Q8&fTunwHm;w>3?wTWcXt1Zhg ziJJn0Pl#MqQm0fJuNnBfPGFsyg}UzfqJh`95+UwcHc--Yk~)3my~11u-6-gNZyTsI z4~^`c1Z;r=ZRDSh>Qe$M0>f>Fx9XM^gP$nre5T#ICcQEfrmtwbYIe1@to#KT+f188p`}>JC@2F0#Of z(x*@YNB{SHfxYv(TFl6LgF&xjSE`K~!dP(%3J6-Wmxs2t9-BuGMJ^x-eU|jIeoWN7 zRhL_*=Dk(Fq^{b!QtjO;z+?JLAdtS|d0`OxvOc52s#gw@_zurZ=l5UVHH8_j`fgxa zvy0Zeb)`7X^#7i~Q_=8!QzxeBsN3NMQzY>N)+1d?w#!DrTF9DlCa^-R@?^>;jVu`C zM*^ddAH1ath%i?J4iq)jt!!Y)mrlr`nDST>KjDIC*FSA7puw8yvwOi$1FHF09v8o9VY&=3igd zmyq$+BHIWtDII5?-+KDquv}O9lMZheDoEfRntKV1xNpvE>8&D)Fp*aw&I zPsi)vq0To(z?a}Nsz89S5&bVL=sNnfkqz{v`~HBQ%)mqJe}5!?FK^(`NY@6kx;e(a z+$K%{4{<8MZ;$IHQoJE6X8)Lx%?P|vW2+;so{2mboUz@LV}z%NqXGX#E?@}8r- z=W&QvgCSfZrOSAM7lO06f^mNF3z%vlV{MbM8e|UbAVbIXeT3th%~vBkY9rny7s2O= zh)uU% z+0>`%^FOb?e?GqeEHTN^BP>Ewsk#XVHc_#UHg>9Zy5pu*ug~FF>R6a)gKu;62@eN- z(#mOHsa2UWgt4>LJ{B=*^G=w}-~MT2&qvFxT8eg0i;blAtWVuvD%?MWS|?nD(K>uIhF`2>!t@&NF_C2i>5%t;fzS?+AyMZS9pd)9k1je+cS+pI H?BV_wJrh9`J3@$Qcn&+C4aLubVcUZ6 zCJQR>R2VG`N1lB9g+9qGt{bjy*`6*eySR|kZ`+QZ&KbhY>KD12YmZYS&ib7h9pwNDhXm#Eh_~D<2So! zVyMFvne+tJxJGIuRI@`iDV7?A z4pNUh!~;V|EexCYQy-?KJ|=mggul^LXRA^T`N}HsGcYQ9Bh_SS#TS(Pq!d6&$Wl?S z$YD5d7cB}MN!vvyBgPHMQ=^}6pKKI{=tbN1T+iW!N#W(}tQ$s=q4&vyul`!QuQR>q zimW~%L2PJOA0^Koee%Kdg|SQqrL&-9K$WeCeX9W-Fay%y@%MfZIxc+pB;a;^O5F2w zu2R;Q4b#-;g`VT)lE_l5x9Eseu^tctnIpktdUCqGxgPIC@Gjm9;e9Fm4;Z>CXMtfY z*^8odwfG0XIL~;tLr}i1?vK(&pNu58vZipmCTx4LSQy-@i>j4PhSydKqQ>@HRr{~b z%UgJ`x)Dn*M!0FF>AE9DYAHHHoe`6}u5d&6m=4`7In{z1!l!hEJbNo?#?K4w)WwZ- zBE1Trp2lrxrRVGPHcj_=9gTZ>dZWjp#~y>-c!a=XglK4ZgvdksR);s}8BzP9*o_^S zqxTly4jl9JMjntsmb@|u+%9>)Psf7vKG3s@=4kT|Xo&4v!|sPY{(E*6Z8U5D1MC|# z$=UBs~{z3>{FRI}oOM3mPbR69sA}`1|Ot?1D~LOeap#Y)j-UmkRWx$8w{;bL1mHyLI$i+QFjz@EMz)|!G=Mna=*BMesA#%x zU5?gLiWZ>1B8xD|J43!4?MvD%qxGxQ!;*?~6)M7#is;TwI4(#W!~bQWk61_$3;o2x zabn>F+9>}Hx+oJkRfVg+jH|zdtF4Sn@(}=QCV-aGgH*z@T%z%)0$48rj#dEHt6BwD zF)mqJ$K^6feu)l{j({@+ZjitY5x8>%?mQLg0(vp5fN8$}60j-|b{WLa1VYv@sX%BF z#AF48=Cd>;<#Toa+$vs{6Z&2M5sh;3y1#T{|2kfg0B=;-J512z|KtXY6TnLZFhu|_ z6MI*vwi5(>l2)e_P+!`~63{kEpg{HXbwusb{I~pb6u@0_SO*6#jr&L>Z_^e}J(tw; Uo_fBC59z!7EA|mS!Dra}FH0Zqg#Z8m literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/players/Player.class b/Java-Knight/target/classes/org/project/entity/players/Player.class new file mode 100644 index 0000000000000000000000000000000000000000..2ea17bf54925f7ccb21e72f993b9ee999e65b8d5 GIT binary patch literal 4988 zcmaJ_>su7p9exM)1`I-}LKM(lqh{Ht+uB+$h&R+o1T@j0F_&gw2N;>1*~|i+M-CibmZ`$hPdGsT~EWRg($V+=l95l?i4m?SoyEFUri6X zLE3cO$+7Wt(Qu4(;HE@l?hxPisAxLb0u8(5(A^qZvweMCQB*1H)zOQ6RKz!fig<}-Pj(H} z;{YB?;-HQ`VePE6iSkXQl{F+Sf3N3Gm;yVbqaOnd(6KVDPh&C2`(*L3jw5)43E`QA z$q{qkq-P9UHshPolDGm6HT*@750r!cOeW0821 z)XPXNoYFBNxezZJXAd5cnW7G7c4pv63#$fo&Er`eo}5#syggtzMhgx!Gr3>i&)Tm|K;wqX%Dh)YYyAV#K7>@(u^Duk|O57e!4RETC!?4!TFpSqq z2S*je5UdIv>t__;9w%v7YWaf;D!R(vJvK{QSPJHD0t#f!-U=F)F}b3^sgd%{5ayq# zR2N!SmBkccWsS>2(X{@kJL!#>2P}z?hVV+;D7OeJ!(P`7{J=9x17}{qDbSolk3N&#-*cPy6GRX&2U~OP*O`a5-aA(}!8HC(?3nr44m)Wm5Q1!}@u= zDs{e@4l7V09lA9=>bXU7lR``3vW9K*2xZ}r*(`8Rh{&WLHH!u>aUNWlD^uGA{zq0! zfq(X)Vss}eKnIVgEuUy;S6g1-+PLAThfUK_H9oX7+Vazm zdnP?PY1^4}R?BN$DSS$|-?PUV@l3;~kQLfAC2*}CpW*W)u1l?(*05&&!ls8=xAWn> z9bQfc7~ihPiu^`pttf8{opR7{3byI5>37|U$x`>i`=w&$9^kR5k{Pl6iHiN<1F5^R zT$d?&4ck7-L|{eG`y9vgdTqmJBqVW**Y*OPqC`z%hIak`TbawDUa<@-a}6)k06L31 z-#n0ie7C5c4-xh?^2$*?OSbxdPru5%ih z-168o*5sDQr;)v;$iK&SlM-wNRa%OAETcfJY};y(f1A-51c>9=ChiJ7#DCIWSjy z1A8bz_8-_H-3{!26C1+O!#g`V3q2hd5wGo$nb-{sc7{uj&fu{SPu8K1!VNsm!IK^G zHG^klX+*{s#hK;B8H}p=c^!x7D_{q$y^DJ8MkDsncYEoJ{nYvZwS5TNaFDAHb99K0 zv3|a%4&gWs!{F;{jB2{hjemYD0Kc{p^hceCSa00I?9pd!XFXrr?LhW6w*E&Tz zK6Keik;t=`*p5?-6<0Z^QAr`G1rmyb!{CpX={0#tM}SvesRF+k3I1gy*s2D<6bU{b z3C>i5Ux@_&DiUm0gU?5Tf6dTbXs|Wa274_M{2G260nS!~UylUy7g_|kv0Ci6BEhYZ z;HA~zcOt>Riv+h-gD*vbe?JG_OYtR`8l_BKKr(h2v05Ps%WoKI?^lpCmLpA4Fpipr z-GYA|``AjvZfA%}jY#C$d4oyDREF$FiYUzL#9T%s@CGkP;kgja(^k#%@gh8LmU;N& zu`JKdN_kWT3gwYM=K!Bjg)572$^9oXy%o)snU^W#`jlK(7vYi{RJi!-oUPdD9=RH; zxjrY?^+mWYmUVnPS}v=a>n6EwEy5)a9FgmtXfC^&>o&Q*T!c#=NBpw@{-At*3GcFB m&)fSdXWvup2de!@wI8eYPpZA5+P~li5%t`C6JOvqmj4f4q!*U} literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/players/Wizard.class b/Java-Knight/target/classes/org/project/entity/players/Wizard.class new file mode 100644 index 0000000000000000000000000000000000000000..4895d1932cdf0d058cb43b0d59d1018dc15114dc GIT binary patch literal 3207 zcmai1+j1Ml7F}%{OO}U7h{PepHscTy*-j#xBwXSopx90%kQIZC4dLdt)sZJ2&4|(1 zj=A6O9L}k89u8Dd#W@8Jyif&2nUquT0el7zyixoBMX`EDwqz{erAO1hsVMK7FcC<^NuhC37zU8l_E4Exyw44l{ z0<)?76}ckQwscDADc`f4(nv0sZ?xPFHUK@cb3+YLMgtq^pNS!Xn<7XWxEZ_u8cG<1 zzzrqkPgH`ib5V2&4E*@X`)0xQP35@DrA4zW9cf;6J#$R0$f_@Wf;Fcq%C`GrxCQ$n zxYfXZbPL?kh~IV>xYc#i1?hSGwW3BzyK5@}qr!mwS?M`+C9tOn8DS{B25y5%jMWfh zTPmj)4&e3(4jQ;aubGX9*63D_DqE_W9_MpSAm+;@H73il#Dpbq*gy*X0ue@DkYxhe zo$BA2k0fO@Xy6Er3hXV@1MxGYS<7G4k@(W_s{)6bf#2y&GnFEcj=j^PL8~qoz#=}7`S(njcg@J?T%=8rv*|?K;&{wV`{-!ZFHZe zz1a>8G-KeL2HFwiX@dDrq7`G>Zd~ASv%{L4r9E9Rkky_#15cxFd0zTaJV2@ZnaHwA zuB@3E-U**>q5MU+SdHSUz_Fh{{qE;)zBI*hRTa&#@tMrjbY?nNxL{6Aj_332 zc+&Qd51ApBz9^n$Pt`VGe{2dM2vCMSm2}3)~!R`^ePQW7_Jn z&$TFC6d3&Rf$TJRRp6vHxcesBH`rkmdDjtLnkL>n<%1*^jbwV z+5ULL{)_Yax*uumNi`Rv(zd5~v$7hDoZ~2O)Rxt%sz&euCBGx4W>6#ekZtF$w^F`g zTO>2kz*7Lb2ulFn9Ow8p$&ZH?K5rQqOq@;}y$My||8^ z!9?#m`uKim0|US{9OLidL~QO%H-DV?3{m|!Gtj+`yY();s%JKEYIApd184N_`!(3s z0PHF3;_p4^Ak1Ba9OuWut>}S?UTVk036hfG9ey4M@gVQ;Sw1h}5Cb?I1ZRe@w}LCd z!W9N}f|ukHY=&N@e^M9!6~j7aXDjA8F6x-O60tLbL>@EPVC-><3WuhU#IE- zPX~rc)t#j3IH@{Gs_r6LcaxxdkmiN2^Bqz$w1sP^hO1`_m!_l@B2GG<31l|MiB&zt z=aB$ly9Ri%4zOJV9B5m|LtLf;9@!!(%wsP(2D96Nvjle^!DR^U9KXm$N!wTe%n1G0 zfHi>dwm^JA5L)Hg0ED4I%+x^`Axo#VDu?&ag+dEN_8B_$( zemUj{@BsqM6W|2dD^N-oDbh(?z(WDhuwt?`pgjzr%6y6jDGl%w7(N}gU>PfX9%1}% kaLZ~it_9rmQu?7#X;N^Gl18Q{6IifT}q`2I_&# cVq;_g8UeJNfq@ZdJ}Uzoh{eDTB$*gE0AD~Qwg{ zF)@Iwz{q|3fn9Ce?rQbg%6-`k1+r%y*9p%Fq)T(lLm0%6ft-n5Fa-{J{%W=Bd&;uv zgtAk${f_4c)eCA8Fk14SbOR|M>dJMuiDBiJYxR74#c4a?hC1G3qM(mE_E#4p4|TlP z#6ESLSI65N#!T$T0mgTNdEZ-C@ox`d0+R*~nwY|&ZJ9JS0#aiFUXS_gThuu^UiG@~ zxM3sorQN9wVwyghw&euYii+w^=Wqlw29BC|1+xO9eLP8`tKzg>hAu_1b^RFFaaU_| z%LP_?&O{ln3XFB^b-CcVO*_2lglk*{q3wo&K(SP>&+T*{#BqVyOn7g7DS^RN87{Q#fViWjB&t5F z}vWI^DKhvOBE)-fcnR%nJ~BN99fJ%=W2FzjO_pXBl^> zs;>Jtph~nXkXi6r1RY*a?Pc3{)IL7Ugli7-JhZqYYEr9A zGv5g9=K58;8#`vBs!|rdZ1tLQOM;|O(oC{;$LqNiRl27{K2_QVBHfSzuU^sz=Y>J&+uf@& zT=QDNAU+W|@%-T*&mTXsB3VUg%GR_MW1g|ZF>4Eq+d$ zQ$MN(lptPiN3Nh5@h65z zYZ~Loa$O{uF$UaE0tdJoC)A{-5WyXZDZHos#1s*)&@syVYlc#sYAW(~sOUt?+>9t_ z&Z7}JR|bFiXD9(A@(8;Wr(;~IvP68MvRLFZO+JUQmtTNM%-|$u`54Y6IMouIGDw{? zNTQDSV^Vh+FU6>1L@a)fLirYvCt9i_Pf@wK1z2DQfMWza&g3gh{)7f8M(&%nAHxT_ z_HhY{#974E8134BXiSLlPd>$)D%)o`t25o|y7~x!-+&@c{SV3#t}&>-`BaZ*@1K9sglj=%kW|e sF7oPJN|YeGS?Fvm@-%MfTtCJ#=iQ8ThZ*10<1N@c%W=Pg7VhD|zgb824FCWD literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/armors/AssassinMask.class b/Java-Knight/target/classes/org/project/item/armors/AssassinMask.class new file mode 100644 index 0000000000000000000000000000000000000000..2883e8364b907bc24df7f83330a5ca41719a4f1c GIT binary patch literal 337 zcma)2Jxc>Y5PfrB8_!b{Noyg9Boo@138*{g^d+~o+1uXId{88d8 zTBHd$18?3N=7X89@6Qc@d-PHS2nC`HF%rUwvCsLNH49a>xo%aROIsW3@{tdOiVdz_Qb>1HC`DVOG0#Ko)qDz(2aUr)pKQMa=zruabYUCETz?6 z|0SdLMLWWI@t+mfgmh|Fwo(t;Pwb7h_FpdKyTmC3-|LOoW9%`etga9;13DL?+h2n| cmgfT$(2m0|%^8f$< literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/armors/KnightArmor.class b/Java-Knight/target/classes/org/project/item/armors/KnightArmor.class new file mode 100644 index 0000000000000000000000000000000000000000..250ca3eed5fa2dd845d5224e383bf3d3d8ee6c10 GIT binary patch literal 334 zcma)2Jxc>Y6r6Y8o~K^yEG$HXBt@>XQ3MGI1P>eK`pvl{8*;Z{v+;jf2^RhUf0X1c zNnsOk7v{}8-t6%9=lAOyzzCfb9{dPx6aT&Bb5Pfr>aGoC8TRi)O*JUmT;_D4h#R46^R8ufFEU? zjV4xvo#f4XlbLy$J$!%d0X*R{f&({%7sE$DxYlN#z8SrgWu2;8R;e(RHk)){6Crp| zYgIoI{N8BP&qFi_ontdo^&!k`tP4qSd;Of?4fTvglBu)ta4$L z)qh2=UZ@SBo1HeeCq%D$YfAa7?7rmR`*tbb1=6{TU$Oxezh4__q(|xM0N=j1F2qGYCsz literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/consumables/Consumable.class b/Java-Knight/target/classes/org/project/item/consumables/Consumable.class new file mode 100644 index 0000000000000000000000000000000000000000..4edc46a8fd2c70f1a156fd64565ee246fd150a0c GIT binary patch literal 832 zcmZuu+iufP5S&e%m^da$Zz-1oEg+G&68?Z7UaD3^iVCPG?@l;MPnFonagg{Y9zde1 z!~-9|M35q&%(Ep3pLFI z^;bI9*=s?y*B>`<2MrgVk0yM)V2zUip8%bi>Ccwgjzn70o&JPNh>7Q=SZ6>~ONAWJo#Odz5_S z-u6hx>U6c3sPuyoXOtwUi#MriMwTCX@T~yWjoJ`Of|F=RXI}0Nljq z8oCfmBCeww34!yjx09`V?p?DKWUaugWlOH(H)?X*HvR0-kygj16Ij7s_GZ`#bnlo!zAg~U%oI}S6FB|+ z{Lr(}V zPq!Mw&FGlHtU!_&)?|(F2QxG6SxQp^7j(Reivq(nSygP2z%47NDBc3;1irwzPE>Vr zCh(ea_PS!X(DAx1yrC@Sm1qi`O=7q}VwT)8gYI9k9CNKv+cv!oB|w4n3NvhPO3zaB z=3+dkSd4RO<^MC2qi-i9B;AgH0&Muarz2v`&1_QoK`2e?^d*J@n#%I^n%htU z=yvV0(zqr|K||UqQv$u~fh<*5Wxa_+TX!22%(A7hYN3`cs<$ODaKm*2Kk#II)eI_b z*-xQBEgtUwe)!9ehA_%hchxt7ifJgS`H#?Z$X|cbxt*ThARf$a( zOVYO2`F1G>z2G>ex5Q`bn|>0Xu%fhK>J(}cpHV3FY{T$tda?BZ(!TWSFbwwF08 zAjU6{oShqc4Dl#5c#Ewn%V5Pwpa)ktG9oj)jjNpT0CKoSCu+p96uMo&V&qm_;k=uB z_vZe9KKB$!f&1u5_dY@YBTk0|W`D)0%0Ss(7#q+YATgjVL}rU~V^49W3(;)6d^w(; ze1fUj-*El_a{$Lf@dISTQDhW3Jiw*4wSDwQ2j2|0LQe`}3<}~hjfBq<#(9E_m~dpnUCPUpywXm!Mh}55?|qZ zNY5om+~6oie?|Vr5yyMHzZdb|?!PcB{)QB+0Q^r>Nm|DH>_=%-q?>%$eh{`RVY`M+ O?rYrJ!l$@{k$(ZSzvprQ literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/consumables/GreatFlask.class b/Java-Knight/target/classes/org/project/item/consumables/GreatFlask.class new file mode 100644 index 0000000000000000000000000000000000000000..102d29e69d852a77c31432264720d6f3b890de42 GIT binary patch literal 381 zcma)2Jx{|h6ug(DO_~N$g2W6gGz?f`=}^RiC_;)@in6=G3NA^E9EbnKgv7uP;71{x zQi%;=OXoZ5y?Y;@U+*6PuCX7$A&hUd;O1~q@%AZ%hk=h_1Rnw6Sm}~IYqb`IVbX}2 z6{=~wny)I+vP}kIcp)2UE(r(IY|URdt9VngrO~n}=eKF@BP5*s>9px!Yv)eWoZwxl z2SJE4*@(NYUI~5Q7bPT_DtMK1EqlHF^vt7d32FAvDsw`(RGluwLiVQdZv$uj2spyX zZlXVAuaB|C$f_A!%Ye~oLX-11xUW_?*s&Pe7Z@PG5WAK|KY@rbv5K%~(LwSJ8qi!5 literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/consumables/HealthFlask.class b/Java-Knight/target/classes/org/project/item/consumables/HealthFlask.class new file mode 100644 index 0000000000000000000000000000000000000000..47aff07c4f80065167b0fccfa294e0becb6f6b4e GIT binary patch literal 385 zcma)2Jx{|h6uj4@Ng4tTK|*2!rnCbd8H!jC6-W_FQFb?2sY?SzgAVhb9S7voOuXy_$!o|>s7r{qBI9Ix4FIufdVVE?c zW`%0nuI9^1wCpE?;9bc^nrp&wnyvYUvx+w*TNo{ya&|w-eT0PcPp54QJ3l9#ZQ<+eN{q|se)HI*Rt2UPuHwuOPFT=Ei)s83)SgD%w_Ky|7zi)p8{tX z*=6*H?Der{F|z6sj%C1TnoxZ52Itj^0roA1_63Fr;NifsXd8$zVyg&;76(Ya0WIBK AiU0rr literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/consumables/ManaFlask.class b/Java-Knight/target/classes/org/project/item/consumables/ManaFlask.class new file mode 100644 index 0000000000000000000000000000000000000000..a36a7207f4237740a32e052dd5277593418cabe1 GIT binary patch literal 1390 zcma)6U2hXd6g`s!e=JK993X`>sRIF=&xO)9ZJnkCL%@lFwSE=bqM{)!8PSirFRjSS{4*X{WWL;w{%9 zfkKU`MB6eB-99}WvHKx;m1-Xsq|9n|5`xW~_DGxfsN2i3OC!^3sKAX=&}Vj=s9uXa z?zc=wTLDp}zm+k&D=>AIe;P>O!lsptW?i;ZKHjG3#0|9(I>w{_7iY!IguwU%V{Bq$ z*{&wyI`z(HNlW|{Q?qs$?eQ260 z9qrz*Y{&)yjs$+~?`CS)i}*z9U0#>Dnla5zyFA$RzLQgqTSskmhWU#=`yY4Q)hzc9 zXbMr0QMAd?Az8nwwTdge--$}Hc*t=b;B;21S!}TDA2wyzdc1faZt?MOzaa=dA0>Y0 zxm(3BB_O|05aTm{V)*y2$pXI~O{qYR(jq0lXNV;%b0@HZAO-n_AP#(G@n7U$VSe!+ zuM5zKqLeb5AMy2;z5%@VDX}?=gFqoOh|UZWTW5ZN$}tY_)#If zDtHp?ftsqOYl`X5-TMcC5jrs(xFNg*J_5q2v1PipX2C_B>Y7*S3#+xMHtEyXO$e@a zrRy7l-=9ndd5DP6{nK@8Djuq`WJ_@SgPh>qnHdvWnXdSLyPC3nRMVw&PBK%dWv;Al z^iR{P=XyivW&cRHBE%17YYQIh=E2r)_{Bm!E1V&e-!?^Zd>jbIqAuYI1ETYG9KC^F cg*!MDY_A?TpJ2iS5j=R<;(0J+ o60*C5+nt@qQ5<}Lb_^YiSljPvb-bB)7T|7xdpdH#{hoXxb2uqh@JwLaHJz4k3bJf4AQ{bULz&}cy zt-zDe416=+Ff$)ByZ!bXz!1#<7Hl6*2p1lqqs=s47(J6&8LLvxukCe{L1@cG)xh}}h!zR>rE7%XlkAq4QPz`4;-^t7;x%fY74;1l=` z-k4~OUKqXgnT&DHE|`+2H}i95=9_P3&W~STz5>`o(?$wu3x)#|8HTMe8u;TVJQjWB zOC?7Bso>)+s z(LgY;mQ4sn2TLe1TZOdN-y)(%20TiPKVB2IARt z)DzJ@?+xi?xgGZTu*)N<{n?|Tj^u=Tw=Xtd*k-(q9a_gUkgulVQL+@;pSw`AFyoG< zlTmtaieddfi41uaDn6XAqtH>jfAW-%XZ%WpFl#x#gWUA2Y% zGGwp7*8hbLyNOkTuAoWxtx=?wfX^CJ8{EV#YOQl`6Ri|n%F2NKM3ep|>O?ph(imF#K^o=j!_naYc^8ovQIJhk8e literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/weapons/ToothedHook.class b/Java-Knight/target/classes/org/project/item/weapons/ToothedHook.class new file mode 100644 index 0000000000000000000000000000000000000000..9de6964ee59af8d69ce676fa0c890effc8413d3d GIT binary patch literal 339 zcma)2%Sr=L3_Y1=JC1hj4-`S9b>S>sDBXx+VQ|wjUEfYG_SSY%Zg2IwTnR4x06$91 zs0%lO37q7FoP^~4iR#lU5t9xB2ud5~52} z8#g3`{n2Pp#%K|a|5Qzw-9pcAnI8y#e^3&FE1qjYr!cj?+pTBXPSk8Am2Sb6T9wM0 zhW``;w=i46N%5Z*7ldTYJ6q`+(@e~Mtv_3;M};HAa&TiL9-=Ln2s?)_8PGn>I$87r edKThgPq6tA5TPZ~RI>ED5&Jk0CWi=m$UXt&Gfr&) literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/weapons/Wand.class b/Java-Knight/target/classes/org/project/item/weapons/Wand.class new file mode 100644 index 0000000000000000000000000000000000000000..d8c9018a8ad0319f625a26797de30e91d303adf2 GIT binary patch literal 346 zcmaKo&rZTX5XQf0OG|5!if3cIfd_l^pz%U5Y0`Mnl=HT1U`gqcWzqOpoJ>6U06vsq zid;3DnVs)9+4-~IKc8O!COD7azzyKV=)fmjYBNvQMlWS$Q)T5UeUoCXn@u`B+ywt# zHOf8^I>Rg*6#=@0i@#rqW=80VQq{`7j~BwsC4n-6I~)}RZ>(nw`nhW4({@!#^CHTc z$spI2s0(3KtB=sL3$@`P^MCu@5u#_kHI;l+ZK-g|L)n{_ oW_1hqH+P-HiT?rGF?7&l-+mO(fgc5Pj=7c4IqD2?PjfQ&PT?AmJZS)JrImr2q#|5XVhw1((FG90$aI;(|nl z;J^>yM`}5cL9{`TgabTce!}L&uC9rcU-%EcY| zQcJlD;UB4YG+R{MfWUQHL%kT^+)xidZ!urQP1-u6H_R94E8VXU-NrfW?(R9tpLN46 z+A2(1ht@@j0NW^|!OZPN8+NhBhya>K=#wH+^iAyNG(E-!@7#yoFR;I1$H0<8eMRs) zI3!chYHF5VK)WPs5lG+wcXB{q$3RixePX!*HLY3>sA(8apNlz+z}=0_<;%_Wjm`H6 yx=`$hRBAp;t95ycJ!;!r*}}Tm!pa2_xW5@|Mf8OtEn*$~14~J)6nUUmZ~q3FF`lCU literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/location/AnsiColors.class b/Java-Knight/target/classes/org/project/location/AnsiColors.class new file mode 100644 index 0000000000000000000000000000000000000000..7202aba2c04c9d88c7ef1e854612952ccc1fb2e6 GIT binary patch literal 1046 zcmaiy-BQy)7>3{NZ(56m;vZJUDk`87N(-n(v`s@nGL&gc8KwtLS~E3FNSrkFzC3cq z124dfa{M;i414Cu&OXn(yYtTO{`vdsHvk>SS;P=eBauTADTet=^Sh}!raM;K!%J%v zFr@Zu*ADg>;;U=@G!%wq&mXJbe2?d<z=di~rL%KL9*DAb8HuSSPFQbGPx)CN(tBok)y)t1W%9W#l*Asi9j@2mQ zEyW&DbvFul*;Jz?dc6zVR(UIh+^o}kVR@qr*{IJ)p?RA$Y0*U!k~c|c-WQ7@Z`iJN zGQApFe$N~_WC{kowbM6!oAXR2g0D8cc**$Br=W+=cD<=TvJPy1SpNFIZ17Kl64LY+ zfkiAKgDmJuh+@bQ-;_8{ydZIb_?E=CiSJ5$kNCdCMdF7NKO%lCaf$e;#4E(lC4ND? zChIJGiE9$?5${Xt1#Wo3swxmr=AzV{hhqQ4@n)JHZTW1q{*IKWW(1)sj zBfp?8eV|ftq(-XRmp=4IRsCjmF@_+hEbYvhIhXG{=gjdx|Nj05fDIHigbk(!yZQ!qTs zu`{_~BM`BTiYd^WJ93-%T+1$HrK2t#3F)PyXx0j@Rh7nZ^a%7R^}1)3Gb^rZ?B%SQ zr=c5RY1OY|0D}UFs#B|3yJd63HY=7{6BzKr9JkBHap91cy18fAMW>=+$ai;9$6L5W znyxx;f^E^w%Gjei#xTw-7{ww(C0i)@naZXfNxexOS1=_Iw`v=es<)@|#+x=w>qyER z_t3+-`MpsudjWK5m)0?Zt4vwV`hh89vbQA0SsfY7(VcC+@V0E$Ba+;bSKW9=$Gdos zswI=h13Z2cQykX?##*an+Mea@WlTS58Hr#|qWeI{4cruHFF4gbbtzI7b81jf(6aogD~TegN}*~n`GlV|AWpPFUUbEv&4wKoMO z&d}a5DpkuhH9nNEh6QZt_&BKTO4)kGGPUQel5Kc(m-`#1wcq0T1edY`)2;m!Jdu`a z1}CWU~<&_#vyqv1f>JXkx{L04#bMhO)l@=MfC8n!()Y5`m=@6_FbxoOEfb{>we zSviF;&gKnqRz~^d%;PR3r9iCsHZcDu78-c}09hF}3`ua1IRf*g zVU*-1xSPZr=}B@vg!ur%B~pHXFBtlvvKC#8&50UdDbk_jJu8E~#xhg6A{qMPD#i69 zaf9OR)DQ(RS|3M$17 zC90tNhgyn*%zz(wmVq-2JjcNEE$kPX1z5l%RRGC8ig2Q zLMp#9J;3!AD$&5Bz}Kf5cb+u9d8+X@`1X{@*^|agry76PY{{h{i81*mRA2bG{dQa> z(>3M6?}b=18?k0P8f<#M9dleI+aabP`!{;z(!fXT%E-@%gn!|c-*kRbHd~+#1&;mX Oh6Zj)PrE9Mh5rC7{_EQS literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/location/LocationManager.class b/Java-Knight/target/classes/org/project/location/LocationManager.class new file mode 100644 index 0000000000000000000000000000000000000000..0b48b97854fe50059bc1a5740f96585362bdd25a GIT binary patch literal 3124 zcma)8SyL2O6#g#T3}YiWE<{jilpSH>5`zLN4zeVGMhFJYVl#7rmY(iOcLS1LWA^Pe zRe4BNUh$be}%=-1D9DopaBfKmUI48-R=WCV>)^ z#!#lA92EjJH;rW@Wf}H->eB2@nehcG`b^vO&kB^bwNJ+o7uX#bE%~OE8gN}>b_*%{5To}P7LU|RnM2M=`4BrT(F?enU*E9`iki<=vfjeU9}iME^%i9 zb!b#<9~NkB3j+=Kp7dSQp6`89qgZbeXe+prlc)%ru0(7&a7qH2^>MG^53eV z4ebJPBb&WQlU0G{wy|yY2S&XLs8is`Hinan(vrSIs1B6I(JfFlU}sE*qo>`~JZX8B zkq+3pV`Z5$HTueebfxY^8$I21j9d)I1rBe6Gi~JZrYjRTreK~U_i4lPEvXN)aB)1( zD5n;rPF&VJBX!@=eSQzR#=K*Wqy=KOyycJDJP&1UqwQRZ;i85i4AXR8QoWbzqS{5i)rlC@@B&^` zZMWpQjJVKu0u7sLQaA?dCxlH~hj9%P!O8UU#)=(wb5O20E(;t;^!NAc1IvbK8MCCP z;M>!wPv8nBW0=zLGN#!A#eA=WO&C1FzPT*Zj_o-XQ?Jak5t-|p^B7-Ihqh0vxL(mP zgKH#)*-scb?%UH=Oh9Cu<>V~C^9nl@ZheMibNf5BwNE!#Veh9kXKgkwdZJUC7QiLkfT zK_KTjXIV};VOtc6Pg~Q@%3A_rlsttd8;h!e*$!2czL8lRH}ZvO$!GfU4sB#jw``k& zJ4RTOHNCvWYaklz%ubjB8vPZiY75=5nPBek*?Q&wP@kA|mfVaSG8Nr>3TP2|-Rde~ zco!VU_c$l=?8(Gq88grb*rTi9yy{Nx8ZJb)o%Pq{W7ugp^SCJ}m zkv1%A()1;X)kbYwx@pVsJjqM$3yy#%a@s1?7`_rXw7n@CGt3K(9C0N)<)wV`+UGHp z{3^j5|2g*pnb$MlF|P4f2A}i%n&A$?cSFa0h>nMd&D=-jJtQdBP)y##?v6Fo{v0@1 z;By~0163#sV5&I^YH$dkGV{8Q22$7vhpV@EvEN2hkZDJlO_ZsIWmqIx zaQ_r?luEe!IBZIaUT2+$xu8Hm3j^D&f?Gr18qW81D7k(OgTJHh9!B^zvWBsZSd#%> zD+}AksM^uYn_n@$k4W?u#Zk>H@_3Vo0xmp0Rf(MfX8m_)s*gZ_!2YLWmO@oJ#Oxww zH!)MhJhla!)nDZ*rJpF21in>Y04IyOraa0)U}c@H@1w{^ zl9ztPOQn4q!S~dc-6*1L4ObtqR-n};?Hdm;8))we@#8;#C_cm7>WBgKu$NCW&ok&m zF9s+Nqklce7|yfiicMf7icaNNiITq%6OV9?ORIQ`DJhzZGfh06>G>@(4G-wsjOZP1 fFTuNbkMEt7KBVLKgXe90MqPs6pW{n>js5=u^so)! literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/location/NarrativeConsole.class b/Java-Knight/target/classes/org/project/location/NarrativeConsole.class new file mode 100644 index 0000000000000000000000000000000000000000..bbb25051aa872adbf7e2f41a93458e89ef8710e3 GIT binary patch literal 2106 zcma)+O;a327{~w3+px>~onh=EqP?-?&qHaXZ1_WJ5bdel5HA@QV zE_6HSanXxDhLMN-fO`RtcD;Ms4@Dzk=)3JlezM5WJw3BoKtBo&iY^A=p0L*s<3xny zk}XOas~M0lz5B|Kl6s;94=W|=bI8RoMi|b9d|y;$)ZobjKiQ*NobV`#87@z!$z~Lk z=|{VjnbV;nN;u=-1s7u&XE};OTU%^ zh8$dCn38JOYbvQ1#|tD4-?ljXskMMdMsjN~#QAmEkt0jZY!I&-#W}onRz~JfB!{h{vb8qAoAB8=GDwhU1oC`?!!k#)Uf7YU0;WL43o#(=0^u| zUwG;6r8i`mHxj818NTT}#Ye_;(N=i06Nq@SCgpysSvh@QIwB_$Hx8S^V&CfUr%%C& zOL&B+@*t@DiJ(nzSEER%YQW=I#11~8t8!{iwxK%MV7Tz#R(gffdEpW!=(g(L09{>r zvq)c|mPaL{vUm0uu%D^Yg;z=SXVA@_Bz02*rf`{B1zf>6MRan7+}bzz1kUU;3<6Iv zdJNHTq(-^)92|oNF^w4mn#}{9wSws7q`wXHS{~>{D`m Ml>ag6_!Q^<0S2w69smFU literal 0 HcmV?d00001