diff --git a/Plugin Vault/src/main/java/net/simon987/vaultplugin/VaultDoor.java b/Plugin Vault/src/main/java/net/simon987/vaultplugin/VaultDoor.java index 5103a8a..c75378c 100644 --- a/Plugin Vault/src/main/java/net/simon987/vaultplugin/VaultDoor.java +++ b/Plugin Vault/src/main/java/net/simon987/vaultplugin/VaultDoor.java @@ -6,6 +6,7 @@ import net.simon987.server.game.GameObject; import net.simon987.server.game.Programmable; import net.simon987.server.game.Updatable; import net.simon987.server.logging.LogManager; +import net.simon987.server.crypto.CryptoProvider; import java.util.Arrays; @@ -19,31 +20,42 @@ public class VaultDoor extends GameObject implements Programmable, Enterable, Up */ private char[] password; + private RandomString random_string_generator; + /** * Whether or not the vault door is opened */ - private boolean opened; + private boolean open = false; - private int openedTimer; /** * Number of ticks to remain the door open */ - private static final int OPEN_TIME = 4; //todo load from config + private int OPEN_TIME = GameServer.INSTANCE.getConfig().getInt("vault_door_open_time"); + + private int openedTimer = 0; + private int cypher_id; + + public VaultDoor(int cypher_id){ + this.cypher_id = cypher_id; + this.random_string_generator = new RandomStringGenerator(PASSWORD_LENGTH); + + password = GameServer.INSTANCE.getConfig().getRandomPassword(); + } @Override public void update() { - - if (openedTimer <= 0) { - - //Door was opened for OPEN_TIME, close it and regen password - password = getRandomPassword(); - opened = false; - - LogManager.LOGGER.fine("Closed Vault door ID: " + getObjectId()); - } else { - openedTimer--; + if (open){ + if (openedTimer <= 0) { + //Door was open for OPEN_TIME, close it and regen password + password = GameServer.INSTANCE.getConfig().getRandomPassword(); + open = false; + openedTimer = 0; + LogManager.LOGGER.fine("Closed Vault door ID: " + getObjectId()); + } else { + openedTimer--; + } } } @@ -51,44 +63,42 @@ public class VaultDoor extends GameObject implements Programmable, Enterable, Up @Override public boolean sendMessage(char[] message) { - System.out.println("VAULT: sendMessage" + new String(message));//todo rmv - - if (!opened) { - - if (Arrays.equals(message, password)) { - opened = true; - openedTimer = OPEN_TIME; - - LogManager.LOGGER.fine("Opened Vault door ID: " + getObjectId()); + if (Arrays.equals(message, password)) { + if (!open) { + openVault(); + } else { + keepVaultOpen(); } - return true; } else { - //Can't receive messages when opened return false; } } + private void openVault(){ + open = true; + openedTimer = OPEN_TIME; + LogManager.LOGGER.fine("Opened Vault door ID: " + getObjectId()); + } + + private void keepVaultOpen(){ + open = true; + openedTimer = OPEN_TIME; + } + @Override public boolean enter(GameObject object) { - LogManager.LOGGER.fine("VAULT enter " + opened); - - if (opened) { + LogManager.LOGGER.fine("VAULT enter " + open); + if (open) { //TODO: Enter in the vault - - return true; } else { return false; } - } - private static char[] getRandomPassword() { - return "12345678".toCharArray();//todo actual random password - } @Override public char getMapInfo() { @@ -99,4 +109,5 @@ public class VaultDoor extends GameObject implements Programmable, Enterable, Up public BasicDBObject mongoSerialise() { return null; } + } diff --git a/Server/src/main/java/net/simon987/server/GameServer.java b/Server/src/main/java/net/simon987/server/GameServer.java index bc41d72..e2e09e9 100644 --- a/Server/src/main/java/net/simon987/server/GameServer.java +++ b/Server/src/main/java/net/simon987/server/GameServer.java @@ -14,6 +14,7 @@ import net.simon987.server.logging.LogManager; import net.simon987.server.plugin.PluginManager; import net.simon987.server.user.User; import net.simon987.server.webserver.SocketServer; +import net.simon987.server.crypto.CryptoProvider; import java.io.File; import java.net.UnknownHostException; @@ -36,6 +37,8 @@ public class GameServer implements Runnable { private DayNightCycle dayNightCycle; + private CryptoProvider cryptoProvider; + public GameServer() { this.config = new ServerConfiguration("config.properties"); @@ -45,6 +48,7 @@ public class GameServer implements Runnable { maxExecutionTime = config.getInt("user_timeout"); + cryptoProvider = new CryptoProvider(); dayNightCycle = new DayNightCycle(); @@ -79,6 +83,10 @@ public class GameServer implements Runnable { return eventDispatcher; } + public CryptoProvider getCryptoProvider(){ + return cryptoProvider; + } + @Override public void run() { LogManager.LOGGER.info("(G) Started game loop"); diff --git a/Server/src/main/java/net/simon987/server/crypto/AutokeyCypher.java b/Server/src/main/java/net/simon987/server/crypto/AutokeyCypher.java new file mode 100644 index 0000000..707d3a0 --- /dev/null +++ b/Server/src/main/java/net/simon987/server/crypto/AutokeyCypher.java @@ -0,0 +1,31 @@ +package net.simon987.server.crypto; + +public class AutokeyCypher extends ShiftSubstitutionCypher { + + public AutokeyCypher(String charset){ + super(charset); + } + + public AutokeyCypher(){ + super(); + } + + @override + protected char encryptionShiftAt(int position, char[] plaintext, char[] key, char[] partial_cyphertext){ + if (i