From 2565d3338ccf7ddd28b03a4f204dc269e3e44ece Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 10 Mar 2018 13:54:43 -0500 Subject: [PATCH] Implemented shield hardware. Added heal, damage and charge shield debug commands. --- .../java/net/simon987/cubotplugin/Cubot.java | 22 +++++---- .../net/simon987/cubotplugin/CubotPlugin.java | 2 + .../net/simon987/cubotplugin/CubotShield.java | 2 + .../event/ChargeShieldCommandListener.java | 45 ++++++++++++++++++ .../java/net/simon987/server/GameServer.java | 4 +- .../game/debug/DamageObjCommandListener.java | 46 +++++++++++++++++++ .../game/debug/HealObjCommandListener.java | 46 +++++++++++++++++++ .../server/webserver/DebugCommandHandler.java | 3 +- .../webserver/TerrainRequestHandler.java | 2 +- 9 files changed, 159 insertions(+), 13 deletions(-) create mode 100644 Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/ChargeShieldCommandListener.java create mode 100644 Server/src/main/java/net/simon987/server/game/debug/DamageObjCommandListener.java create mode 100644 Server/src/main/java/net/simon987/server/game/debug/HealObjCommandListener.java diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java index 46d72a2..9385def 100644 --- a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java @@ -265,12 +265,12 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr this.shield = shield; } - public boolean chargeShield(int qty) { - qty = Math.min(qty, maxShield - shield); - int cost = GameServer.INSTANCE.getConfig().getInt("shield_energy_cost"); - int energySpent = qty * cost; + public boolean chargeShield(int amount) { + amount = Math.min(amount, maxShield - shield); + + int energySpent = amount * CubotShield.COST; if(spendEnergy(energySpent)) { - shield += qty; + shield += amount; return true; } else { return false; @@ -278,12 +278,12 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr } /** - * Damages shield by qty. + * Damages shield by amount. * * Return damage that broke through the shield. */ - public int damageShield(int qty) { - int after = shield - qty; + public int damageShield(int amount) { + int after = shield - amount; if(after < 0) { shield = 0; return -after; @@ -409,7 +409,11 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr @Override public void damage(int amount) { - hp -= amount; + + //Damage shield first + int hullDamage = damageShield(amount); + + hp -= hullDamage; if (hp <= 0) { setDead(true); diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotPlugin.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotPlugin.java index f0939cc..b8243d1 100644 --- a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotPlugin.java +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotPlugin.java @@ -1,6 +1,7 @@ package net.simon987.cubotplugin; import com.mongodb.DBObject; +import net.simon987.cubotplugin.event.ChargeShieldCommandListener; import net.simon987.cubotplugin.event.CpuInitialisationListener; import net.simon987.cubotplugin.event.UserCreationListener; import net.simon987.server.ServerConfiguration; @@ -18,6 +19,7 @@ public class CubotPlugin extends ServerPlugin implements GameObjectDeserializer, public void init(ServerConfiguration config) { listeners.add(new CpuInitialisationListener()); listeners.add(new UserCreationListener()); + listeners.add(new ChargeShieldCommandListener()); LogManager.LOGGER.info("Initialised Cubot plugin"); } diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotShield.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotShield.java index c003652..c45336c 100644 --- a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotShield.java +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotShield.java @@ -16,6 +16,8 @@ public class CubotShield extends CpuHardware { private static final int SHIELD_POLL = 2; private Cubot cubot; + public static final int COST = GameServer.INSTANCE.getConfig().getInt("shield_energy_cost"); + public CubotShield(Cubot cubot) { this.cubot = cubot; } diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/ChargeShieldCommandListener.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/ChargeShieldCommandListener.java new file mode 100644 index 0000000..4b14f21 --- /dev/null +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/event/ChargeShieldCommandListener.java @@ -0,0 +1,45 @@ +package net.simon987.cubotplugin.event; + +import net.simon987.cubotplugin.Cubot; +import net.simon987.server.GameServer; +import net.simon987.server.event.DebugCommandEvent; +import net.simon987.server.event.GameEvent; +import net.simon987.server.event.GameEventListener; +import net.simon987.server.game.GameObject; + +public class ChargeShieldCommandListener implements GameEventListener { + @Override + public Class getListenedEventType() { + return DebugCommandEvent.class; + } + + @Override + public void handle(GameEvent event) { + + DebugCommandEvent e = (DebugCommandEvent) event; + + if (e.getName().equals("chargeShield")) { + + GameObject cubot = GameServer.INSTANCE.getGameUniverse().getObject(e.getLong("objectId")); + + if (cubot != null) { + + if (cubot instanceof Cubot) { + + String hp = ((Cubot) cubot).getHp() + "/" + ((Cubot) cubot).getMaxHp(); + int oldShield = ((Cubot) cubot).getShield(); + ((Cubot) cubot).chargeShield(e.getInt("amount")); + + e.reply("Success: " + hp + " (" + oldShield + ") -> " + hp + "(" + ((Cubot) cubot).getShield() + + ")"); + } else { + e.reply("Object is not a Cubot"); + } + + } else { + e.reply("Object not found: " + e.getLong("objectId")); + } + } + } + +} diff --git a/Server/src/main/java/net/simon987/server/GameServer.java b/Server/src/main/java/net/simon987/server/GameServer.java index e82ddce..1ad30c6 100644 --- a/Server/src/main/java/net/simon987/server/GameServer.java +++ b/Server/src/main/java/net/simon987/server/GameServer.java @@ -90,6 +90,8 @@ public class GameServer implements Runnable { eventDispatcher.getListeners().add(new SpawnObjCommandListener()); eventDispatcher.getListeners().add(new TpObjectCommandListener()); eventDispatcher.getListeners().add(new UserInfoCommandListener()); + eventDispatcher.getListeners().add(new HealObjCommandListener()); + eventDispatcher.getListeners().add(new DamageObjCommandListener()); } @@ -184,7 +186,7 @@ public class GameServer implements Runnable { socketServer.tick(); LogManager.LOGGER.info("Processed " + gameUniverse.getWorldCount() + " worlds (" + updatedWorlds + - ") updated"); + " updated)"); } diff --git a/Server/src/main/java/net/simon987/server/game/debug/DamageObjCommandListener.java b/Server/src/main/java/net/simon987/server/game/debug/DamageObjCommandListener.java new file mode 100644 index 0000000..03f214e --- /dev/null +++ b/Server/src/main/java/net/simon987/server/game/debug/DamageObjCommandListener.java @@ -0,0 +1,46 @@ +package net.simon987.server.game.debug; + +import net.simon987.server.GameServer; +import net.simon987.server.event.DebugCommandEvent; +import net.simon987.server.event.GameEvent; +import net.simon987.server.event.GameEventListener; +import net.simon987.server.game.Attackable; +import net.simon987.server.game.GameObject; + + +public class DamageObjCommandListener implements GameEventListener { + + @Override + public Class getListenedEventType() { + return DebugCommandEvent.class; + } + + @Override + public void handle(GameEvent event) { + + DebugCommandEvent e = (DebugCommandEvent) event; + + if (e.getName().equals("damageObj")) { + + GameObject object = GameServer.INSTANCE.getGameUniverse().getObject(e.getLong("objectId")); + + if (object != null) { + + if (object instanceof Attackable) { + + int oldHp = ((Attackable) object).getHp(); + int maxHp = ((Attackable) object).getMaxHp(); + ((Attackable) object).damage(e.getInt("amount")); + + e.reply("Success: " + oldHp + "/" + maxHp + " -> " + ((Attackable) object).getHp() + "/" + maxHp); + } else { + e.reply("Object is not Attackable"); + } + + } else { + e.reply("Object not found: " + e.getLong("objectId")); + } + } + } + +} diff --git a/Server/src/main/java/net/simon987/server/game/debug/HealObjCommandListener.java b/Server/src/main/java/net/simon987/server/game/debug/HealObjCommandListener.java new file mode 100644 index 0000000..265aed6 --- /dev/null +++ b/Server/src/main/java/net/simon987/server/game/debug/HealObjCommandListener.java @@ -0,0 +1,46 @@ +package net.simon987.server.game.debug; + +import net.simon987.server.GameServer; +import net.simon987.server.event.DebugCommandEvent; +import net.simon987.server.event.GameEvent; +import net.simon987.server.event.GameEventListener; +import net.simon987.server.game.Attackable; +import net.simon987.server.game.GameObject; + + +public class HealObjCommandListener implements GameEventListener { + + @Override + public Class getListenedEventType() { + return DebugCommandEvent.class; + } + + @Override + public void handle(GameEvent event) { + + DebugCommandEvent e = (DebugCommandEvent) event; + + if (e.getName().equals("healObj")) { + + GameObject object = GameServer.INSTANCE.getGameUniverse().getObject(e.getLong("objectId")); + + if (object != null) { + + if (object instanceof Attackable) { + + int oldHp = ((Attackable) object).getHp(); + int maxHp = ((Attackable) object).getMaxHp(); + ((Attackable) object).heal(e.getInt("amount")); + + e.reply("Success: " + oldHp + "/" + maxHp + " -> " + ((Attackable) object).getHp() + "/" + maxHp); + } else { + e.reply("Object is not Attackable"); + } + + } else { + e.reply("Object not found: " + e.getLong("objectId")); + } + } + } + +} diff --git a/Server/src/main/java/net/simon987/server/webserver/DebugCommandHandler.java b/Server/src/main/java/net/simon987/server/webserver/DebugCommandHandler.java index a464a82..a9b6a91 100644 --- a/Server/src/main/java/net/simon987/server/webserver/DebugCommandHandler.java +++ b/Server/src/main/java/net/simon987/server/webserver/DebugCommandHandler.java @@ -13,9 +13,8 @@ public class DebugCommandHandler implements MessageHandler { if (json.get("t").equals("debug") && user.isModerator()) { - DebugCommandEvent e = new DebugCommandEvent(json, user); - GameServer.INSTANCE.getEventDispatcher().dispatch(e); + GameServer.INSTANCE.getEventDispatcher().dispatch(e); //Ignore cancellation } } } diff --git a/Server/src/main/java/net/simon987/server/webserver/TerrainRequestHandler.java b/Server/src/main/java/net/simon987/server/webserver/TerrainRequestHandler.java index 01e144f..cf52a0a 100644 --- a/Server/src/main/java/net/simon987/server/webserver/TerrainRequestHandler.java +++ b/Server/src/main/java/net/simon987/server/webserver/TerrainRequestHandler.java @@ -18,7 +18,7 @@ public class TerrainRequestHandler implements MessageHandler { try { world = GameServer.INSTANCE.getGameUniverse().getWorld( Long.valueOf((long) json.get("x")).intValue(), - Long.valueOf((long) json.get("y")).intValue(), false, + Long.valueOf((long) json.get("y")).intValue(), true, (String) json.get("dimension")); } catch (NullPointerException e) { LogManager.LOGGER.severe("FIXME: handle TerrainRequestHandler");