diff --git a/Plugin NPC/src/net/simon987/npcplugin/HarvestTask.java b/Plugin NPC/src/net/simon987/npcplugin/HarvestTask.java new file mode 100644 index 0000000..df37864 --- /dev/null +++ b/Plugin NPC/src/net/simon987/npcplugin/HarvestTask.java @@ -0,0 +1,4 @@ +package net.simon987.npcplugin; + +public class HarvestTask { +} diff --git a/Plugin NPC/src/net/simon987/npcplugin/HarvesterNPC.java b/Plugin NPC/src/net/simon987/npcplugin/HarvesterNPC.java new file mode 100644 index 0000000..cb54a4c --- /dev/null +++ b/Plugin NPC/src/net/simon987/npcplugin/HarvesterNPC.java @@ -0,0 +1,4 @@ +package net.simon987.npcplugin; + +public class HarvesterNPC { +} diff --git a/Plugin NPC/src/net/simon987/npcplugin/NPCTask.java b/Plugin NPC/src/net/simon987/npcplugin/NPCTask.java new file mode 100644 index 0000000..2bb7353 --- /dev/null +++ b/Plugin NPC/src/net/simon987/npcplugin/NPCTask.java @@ -0,0 +1,4 @@ +package net.simon987.npcplugin; + +public class NPCTask { +} diff --git a/Plugin NPC/src/net/simon987/npcplugin/NonPlayerCharacter.java b/Plugin NPC/src/net/simon987/npcplugin/NonPlayerCharacter.java new file mode 100644 index 0000000..e54571b --- /dev/null +++ b/Plugin NPC/src/net/simon987/npcplugin/NonPlayerCharacter.java @@ -0,0 +1,4 @@ +package net.simon987.npcplugin; + +public class NonPlayerCharacter { +} diff --git a/Plugin NPC/src/net/simon987/npcplugin/NpcPlugin.java b/Plugin NPC/src/net/simon987/npcplugin/NpcPlugin.java new file mode 100644 index 0000000..ca7c6f9 --- /dev/null +++ b/Plugin NPC/src/net/simon987/npcplugin/NpcPlugin.java @@ -0,0 +1,4 @@ +package net.simon987.npcplugin; + +public class NpcPlugin { +} diff --git a/Plugin NPC/src/net/simon987/npcplugin/event/WorldUpdateListener.java b/Plugin NPC/src/net/simon987/npcplugin/event/WorldUpdateListener.java new file mode 100644 index 0000000..d77ea5e --- /dev/null +++ b/Plugin NPC/src/net/simon987/npcplugin/event/WorldUpdateListener.java @@ -0,0 +1,24 @@ +package net.simon987.npcplugin.event; + +import net.simon987.server.event.GameEvent; +import net.simon987.server.event.GameEventListener; +import net.simon987.server.event.TickEvent; +import net.simon987.server.logging.LogManager; + +public class TickListener implements GameEventListener { + @Override + public Class getListenedEventType() { + return TickEvent.class; + } + + @Override + public void handle(GameEvent event) { + + LogManager.LOGGER.info("Time is " + ((TickEvent)event).getTime()); + + +// NonPlayerCharacter npc = new HarvesterNPC(); +// GameServer.INSTANCE.getGameUniverse().getWorld(0,0).getGameObjects().add(npc); + } + +} diff --git a/Server/src/main/java/net/simon987/server/GameServer.java b/Server/src/main/java/net/simon987/server/GameServer.java index 03effd9..714c906 100644 --- a/Server/src/main/java/net/simon987/server/GameServer.java +++ b/Server/src/main/java/net/simon987/server/GameServer.java @@ -4,8 +4,10 @@ package net.simon987.server; import net.simon987.server.event.GameEvent; import net.simon987.server.event.GameEventDispatcher; import net.simon987.server.event.TickEvent; +import net.simon987.server.game.DayNightCycle; import net.simon987.server.game.GameUniverse; import net.simon987.server.game.World; +import net.simon987.server.io.FileUtils; import net.simon987.server.logging.LogManager; import net.simon987.server.plugin.PluginManager; import net.simon987.server.plugin.ServerPlugin; @@ -34,6 +36,8 @@ public class GameServer implements Runnable { private int maxExecutionTime; + private DayNightCycle dayNightCycle; + public GameServer() { this.config = new ServerConfiguration(new File("config.properties")); @@ -43,6 +47,9 @@ public class GameServer implements Runnable { maxExecutionTime = config.getInt("user_timeout"); + + dayNightCycle = new DayNightCycle(); + //Load all plugins in plugins folder, if it doesn't exist, create it File pluginDir = new File("plugins/"); File[] pluginDirListing = pluginDir.listFiles(); @@ -62,6 +69,7 @@ public class GameServer implements Runnable { } eventDispatcher = new GameEventDispatcher(pluginManager); + eventDispatcher.getListeners().add(dayNightCycle); } @@ -112,7 +120,7 @@ public class GameServer implements Runnable { //Dispatch tick event GameEvent event = new TickEvent(gameUniverse.getTime()); - GameServer.INSTANCE.getEventDispatcher().dispatch(event); //Ignore cancellation + eventDispatcher.dispatch(event); //Ignore cancellation //Process user code @@ -212,4 +220,8 @@ public class GameServer implements Runnable { public void setSocketServer(SocketServer socketServer) { this.socketServer = socketServer; } + + public DayNightCycle getDayNightCycle() { + return dayNightCycle; + } } diff --git a/Server/src/main/java/net/simon987/server/event/GameEventDispatcher.java b/Server/src/main/java/net/simon987/server/event/GameEventDispatcher.java index c2e1271..b6beeeb 100644 --- a/Server/src/main/java/net/simon987/server/event/GameEventDispatcher.java +++ b/Server/src/main/java/net/simon987/server/event/GameEventDispatcher.java @@ -3,16 +3,30 @@ package net.simon987.server.event; import net.simon987.server.plugin.PluginManager; import net.simon987.server.plugin.ServerPlugin; +import java.util.ArrayList; + public class GameEventDispatcher { private PluginManager pluginManager; + private ArrayList listeners; + public GameEventDispatcher(PluginManager pluginManager) { this.pluginManager = pluginManager; + listeners = new ArrayList<>(5); } public void dispatch(GameEvent event) { + + //Dispatch to 'local' listeners + for (GameEventListener listener : listeners) { + if (event.getClass().equals(listener.getListenedEventType())) { + listener.handle(event); + } + } + + //Dispatch to plugins for (ServerPlugin plugin : pluginManager.getPlugins()) { for (GameEventListener listener : plugin.getListeners()) { if (event.getClass().equals(listener.getListenedEventType())) { @@ -23,4 +37,7 @@ public class GameEventDispatcher { } + public ArrayList getListeners() { + return listeners; + } } diff --git a/Server/src/main/java/net/simon987/server/game/DayNightCycle.java b/Server/src/main/java/net/simon987/server/game/DayNightCycle.java new file mode 100644 index 0000000..655b1c9 --- /dev/null +++ b/Server/src/main/java/net/simon987/server/game/DayNightCycle.java @@ -0,0 +1,41 @@ +package net.simon987.server.game; + +import net.simon987.server.event.GameEvent; +import net.simon987.server.event.GameEventListener; +import net.simon987.server.event.TickEvent; + +public class DayNightCycle implements GameEventListener { + + /** + * Length of an hour in ticks + */ + private static final int HOUR_LENGTH = 16; + + //Current time of the day (0-23) + private int currentDayTime; + + //Current light intensity (0-10) + private int sunIntensity; + + @Override + public Class getListenedEventType() { + return TickEvent.class; + } + + @Override + public void handle(GameEvent event) { + + currentDayTime = (int) ((TickEvent) event).getTime() / HOUR_LENGTH % 24; + + // -0.25x² + 6x - 27 with a minimum of 1 + sunIntensity = Math.max((int) Math.round((-(0.25 * currentDayTime * currentDayTime) + (6 * currentDayTime) - 27)), 0) + 1; + } + + public int getCurrentDayTime() { + return currentDayTime; + } + + public int getSunIntensity() { + return sunIntensity; + } +} diff --git a/Server/src/main/java/net/simon987/server/FileUtils.java b/Server/src/main/java/net/simon987/server/io/FileUtils.java similarity index 88% rename from Server/src/main/java/net/simon987/server/FileUtils.java rename to Server/src/main/java/net/simon987/server/io/FileUtils.java index f00684a..8e9ba15 100644 --- a/Server/src/main/java/net/simon987/server/FileUtils.java +++ b/Server/src/main/java/net/simon987/server/io/FileUtils.java @@ -1,16 +1,10 @@ -package net.simon987.server; +package net.simon987.server.io; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.UnsupportedEncodingException; +import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Collections; import java.util.Date; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -48,9 +42,9 @@ public class FileUtils { /** * Created a directory if none exists with the specified name - * - * @param name folder to create - * @return true is the file exists or create operation is successful + * + * @param directory folder to create + * @return true is the file exists or create operation is successful */ public static boolean prepDirectory(Path directory) { File file = directory.toFile(); @@ -67,9 +61,9 @@ public class FileUtils { /** * Converts a file into an array of bytes - * - * @param fileName the file to be converted into bytes - * @return the byte array of the given file + * + * @param path the file to be converted into bytes + * @return the byte array of the given file */ public static byte[] bytifyFile(Path path) { byte[] bytes = null; @@ -88,9 +82,9 @@ public class FileUtils { /** * Takes in a file that had been converted to a byte[] to be written to a new * zip file - * - * @param payload - * contains data in byte array form to be written, typically a file + * + * @param data + * contains data in byte array form to be written, typically a file * that has been converted with bytifyFile() * @throws IOException * if an error occurs during the write process diff --git a/Server/src/net/simon987/server/event/TickEvent.java b/Server/src/net/simon987/server/event/TickEvent.java new file mode 100644 index 0000000..c2483b0 --- /dev/null +++ b/Server/src/net/simon987/server/event/TickEvent.java @@ -0,0 +1,4 @@ +package net.simon987.server.event; + +public class TickEvent { +} diff --git a/Server/src/net/simon987/server/event/WorldUpdateEvent.java b/Server/src/net/simon987/server/event/WorldUpdateEvent.java new file mode 100644 index 0000000..c47fb3b --- /dev/null +++ b/Server/src/net/simon987/server/event/WorldUpdateEvent.java @@ -0,0 +1,4 @@ +package net.simon987.server.event; + +public class UpdateEvent { +} diff --git a/plugins/Cubot.jar b/plugins/Cubot.jar index f574edc..9d3d984 100644 Binary files a/plugins/Cubot.jar and b/plugins/Cubot.jar differ diff --git a/plugins/Plant.jar b/plugins/Plant.jar index 9e8de1f..35a0817 100644 Binary files a/plugins/Plant.jar and b/plugins/Plant.jar differ diff --git a/plugins/Plugin Misc HW.jar b/plugins/Plugin Misc HW.jar index 689cf46..111b3c6 100644 Binary files a/plugins/Plugin Misc HW.jar and b/plugins/Plugin Misc HW.jar differ diff --git a/plugins/Plugin NPC.jar b/plugins/Plugin NPC.jar new file mode 100644 index 0000000..eee586f Binary files /dev/null and b/plugins/Plugin NPC.jar differ