From 0d910d3baf10f272af708a1b983f418fbb26d433 Mon Sep 17 00:00:00 2001 From: unurled Date: Fri, 8 Apr 2022 16:51:40 +0200 Subject: [PATCH] 0.5.0 bis Monster stuff --- .../raxen/components/dungeons/Dungeon.java | 29 +++-- .../raxen/components/dungeons/Gate.java | 11 +- .../components/dungeons/WorldManagement.java | 69 ---------- .../dungeons/types/MonsterType.java | 44 +++++++ .../dungeons/types/forest/ForestMonster.java | 71 +++++++++- .../components/entity/other/RaxenEntity.java | 3 +- .../other/custom/dungeon/forest/Elf.java | 35 +++++ .../other/custom/dungeon/forest/Wolf.java | 30 +++++ .../other/custom/hostile/low/Goblin.java | 9 +- .../raxen/manager/server/WorldManager.java | 122 +++++++++++------- .../java/gq/unurled/raxen/utils/Utils.java | 17 ++- src/main/resources/config.yml | 4 - 12 files changed, 301 insertions(+), 143 deletions(-) delete mode 100644 src/main/java/gq/unurled/raxen/components/dungeons/WorldManagement.java create mode 100644 src/main/java/gq/unurled/raxen/components/dungeons/types/MonsterType.java create mode 100644 src/main/java/gq/unurled/raxen/components/entity/other/custom/dungeon/forest/Elf.java create mode 100644 src/main/java/gq/unurled/raxen/components/entity/other/custom/dungeon/forest/Wolf.java diff --git a/src/main/java/gq/unurled/raxen/components/dungeons/Dungeon.java b/src/main/java/gq/unurled/raxen/components/dungeons/Dungeon.java index f47ef73..9c0cce3 100644 --- a/src/main/java/gq/unurled/raxen/components/dungeons/Dungeon.java +++ b/src/main/java/gq/unurled/raxen/components/dungeons/Dungeon.java @@ -1,37 +1,49 @@ package gq.unurled.raxen.components.dungeons; +import gq.unurled.raxen.Raxen; +import gq.unurled.raxen.components.dungeons.types.MonsterType; +import gq.unurled.raxen.components.dungeons.types.forest.ForestMonster; import gq.unurled.raxen.components.entity.other.RaxenEntity; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.World; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.UUID; import static gq.unurled.raxen.utils.DungeonUtils.getRadiusFromRank; +import static gq.unurled.raxen.utils.Utils.log; public class Dungeon { - private UUID uuid; + private String name; private Rank rank; private Gate gate; - private Map monster = new HashMap(); + private Map monster = new HashMap(); /** * The Type of the Dungeon */ private Types types; + /** + * Monster Types + */ + private MonsterType monsterType; + private Location location; private Integer radius; - public Dungeon(UUID uuid, Rank rank, Types types) { - this.uuid = uuid; + public Dungeon(String name, Rank rank, Types types, MonsterType mType) { + this.name = name; this.rank = rank; this.types = types; + this.monsterType = mType; } /** @@ -42,17 +54,16 @@ public class Dungeon { // -281.50 36.00 187.50 Location loc = new Location(Bukkit.getWorld("Liberty_City"), -284.0, 45.00, 187.50); Integer radius = getRadiusFromRank(this.rank); - this.gate = new Gate(uuid, loc, radius); + this.gate = new Gate(name, loc, radius); } /** * TODO: Terrain Generation of the inside of the Dungeons */ public void generate() { - genMonster(); - } - - public void genMonster() { + Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); + main.getManager().getWorldManager().loadWorld(name); + monsterType.genMonster(Bukkit.getWorld(name), rank); } } diff --git a/src/main/java/gq/unurled/raxen/components/dungeons/Gate.java b/src/main/java/gq/unurled/raxen/components/dungeons/Gate.java index afa8588..a48aead 100644 --- a/src/main/java/gq/unurled/raxen/components/dungeons/Gate.java +++ b/src/main/java/gq/unurled/raxen/components/dungeons/Gate.java @@ -8,17 +8,16 @@ import java.util.UUID; public class Gate { - private UUID uuid; - + private String name; private Location loc; private Integer portalRadius; - public Gate(UUID uuid, Location loc, Integer portalRadius) { + public Gate(String name, Location loc, Integer portalRadius) { this.loc = loc; this.portalRadius = portalRadius; - this.uuid = uuid; + this.name = name; } public void teleport() { @@ -70,7 +69,7 @@ public class Gate { return portalRadius; } - public UUID getUuid() { - return uuid; + public String getName() { + return name; } } diff --git a/src/main/java/gq/unurled/raxen/components/dungeons/WorldManagement.java b/src/main/java/gq/unurled/raxen/components/dungeons/WorldManagement.java deleted file mode 100644 index e377fdc..0000000 --- a/src/main/java/gq/unurled/raxen/components/dungeons/WorldManagement.java +++ /dev/null @@ -1,69 +0,0 @@ -package gq.unurled.raxen.components.dungeons; - -import com.onarandombox.MultiverseCore.api.MVWorldManager; -import com.onarandombox.MultiverseCore.api.MultiverseWorld; -import gq.unurled.raxen.Raxen; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static gq.unurled.raxen.utils.Utils.*; - -public class WorldManagement { - - private Raxen main; - - MVWorldManager worldManager; - - /** - * String : name - * MultiverseWorld : a world that need to be registered - */ - private Map loadedWorlds = new HashMap<>(); - - private List worlds = new ArrayList<>(); - - private File pluginFolder; - private File worldFolder; - - - public WorldManagement(Raxen main) { - this.main = main; - this.pluginFolder = new File(main.getDataFolder() + "/worlds/"); - this.worldFolder = new File("worlds/"); - this.worldManager = main.getManager().getMultiverse().getWorldManager(); - worlds.add("Forest"); - log(pluginFolder.getAbsolutePath(), "" + pluginFolder.isDirectory()); - log(worldFolder.getAbsolutePath(), "" + worldFolder.isDirectory()); - } - - public void load() { - if (!pluginFolder.exists()) { - pluginFolder.mkdirs(); - error("Please put in the folder " + pluginFolder.getAbsolutePath() + " all the needed worlds :"); - for (String s : worlds) { - error(" - " + s + ","); - } - } - } - - public void loadWorld(String name) { - File world = new File(pluginFolder + name + "/"); - if (!world.exists() || !world.isDirectory()) { - error("Loading world " + name + ". Folder don't exists."); - } - File newWorld = new File(worldFolder + name); - try { - copyDirectory(world.getAbsolutePath(), newWorld.getAbsolutePath()); - } catch (IOException e) { - error("Error while Loading world " + name + " at coping data."); - e.printStackTrace(); - } - worldManager.loadWorld(name); - } - -} diff --git a/src/main/java/gq/unurled/raxen/components/dungeons/types/MonsterType.java b/src/main/java/gq/unurled/raxen/components/dungeons/types/MonsterType.java new file mode 100644 index 0000000..79b6fa1 --- /dev/null +++ b/src/main/java/gq/unurled/raxen/components/dungeons/types/MonsterType.java @@ -0,0 +1,44 @@ +package gq.unurled.raxen.components.dungeons.types; + +import gq.unurled.raxen.components.dungeons.Rank; +import org.bukkit.World; + +public interface MonsterType { + public enum type {; + + private Double rate; + public String ID; + public Class clazz; + type(Double rate, String ID, Class clazz) { + this.rate = rate; + this.ID = ID; + this.clazz = clazz; + } + + public static type getTypeById(String ID) { + for (type type : type.values()) { + if(type.ID.equals(ID)) { + return type; + } + } + return null; + } + + public Double getRate() { + return rate; + } + + public void setRate(Double rate) { + this.rate = rate; + } + public String getID() { + return ID; + } + + public void setID(String ID) { + this.ID = ID; + } + } + + void genMonster(World world, Rank rank); +} diff --git a/src/main/java/gq/unurled/raxen/components/dungeons/types/forest/ForestMonster.java b/src/main/java/gq/unurled/raxen/components/dungeons/types/forest/ForestMonster.java index 0282220..545d515 100644 --- a/src/main/java/gq/unurled/raxen/components/dungeons/types/forest/ForestMonster.java +++ b/src/main/java/gq/unurled/raxen/components/dungeons/types/forest/ForestMonster.java @@ -1,6 +1,71 @@ package gq.unurled.raxen.components.dungeons.types.forest; -public enum ForestMonster { - ELF, - WOLF +import gq.unurled.raxen.components.dungeons.Rank; +import gq.unurled.raxen.components.dungeons.types.MonsterType; +import gq.unurled.raxen.components.entity.other.custom.dungeon.forest.Elf; +import gq.unurled.raxen.components.entity.other.custom.dungeon.forest.Wolf; +import lombok.Getter; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Zombie; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitScheduler; +import org.bukkit.scheduler.BukkitTask; +import org.jetbrains.annotations.NotNull; + +import java.util.Random; + +import static gq.unurled.raxen.utils.Utils.debug; +import static org.apache.commons.lang.math.RandomUtils.nextInt; + +public class ForestMonster implements MonsterType { + @Override + public void genMonster(World world, Rank rank) { + Double x = 0.0; + Double y = 100.0; + Double z = 0.0; + for (type type : type.values()) { + type.name(); + Random r = new Random(); + int per = r.nextInt(100); + if (per >= type.rate) { + // spawn entity + debug("Spawning Entity " + type.ID); + Entity e = world.spawnEntity(new Location(world, x, y, z), EntityType.ARROW); + e.setInvulnerable(true); + BukkitTask task = new BukkitRunnable() { + @Override + public void run() { + Location loc = new Location(e.getWorld(), e.getLocation().getX(), e.getLocation().getY()-1, e.getLocation().getZ()); + if (loc.getBlock().getType() != Material.AIR) { + e.setInvulnerable(false); + this.cancel(); + } + } + }.runTaskTimerAsynchronously(Bukkit.getPluginManager().getPlugin("Raxen"), 0L, 20L); + } + x = 5.0 + ( 50.0 - 5.0 ) * r.nextDouble(); + z = 5.0 + ( 50.0 - 5.0 ) * r.nextDouble(); + } + } + + @Getter + enum type { + ELF(50.0 ,"ELF", Elf.class), + WOLF(50.0, "WOLF", Wolf.class); + + private Double rate; + public String ID; + public Class clazz; + + type(Double rate, String ID, Class clazz) { + this.rate = rate; + this.ID = ID; + this.clazz = clazz; + } + } } diff --git a/src/main/java/gq/unurled/raxen/components/entity/other/RaxenEntity.java b/src/main/java/gq/unurled/raxen/components/entity/other/RaxenEntity.java index 8d2d97a..d79b3db 100644 --- a/src/main/java/gq/unurled/raxen/components/entity/other/RaxenEntity.java +++ b/src/main/java/gq/unurled/raxen/components/entity/other/RaxenEntity.java @@ -11,7 +11,7 @@ import org.bukkit.entity.EntityType; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; -public class RaxenEntity { +public abstract class RaxenEntity { private final Raxen main; @@ -52,4 +52,5 @@ public class RaxenEntity { return data.get(key.maxHealth, PersistentDataType.DOUBLE); } + public abstract Entity createEntity(Location location); } diff --git a/src/main/java/gq/unurled/raxen/components/entity/other/custom/dungeon/forest/Elf.java b/src/main/java/gq/unurled/raxen/components/entity/other/custom/dungeon/forest/Elf.java new file mode 100644 index 0000000..ca30343 --- /dev/null +++ b/src/main/java/gq/unurled/raxen/components/entity/other/custom/dungeon/forest/Elf.java @@ -0,0 +1,35 @@ +package gq.unurled.raxen.components.entity.other.custom.dungeon.forest; + +import gq.unurled.raxen.Raxen; +import gq.unurled.raxen.components.entity.other.RaxenEntity; +import lombok.Getter; +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; + +public class Elf extends RaxenEntity { + + @Getter + private final String name; + + public Elf(Raxen main, String name, Integer level, Double health, Double strength) { + super(main, name, level, health, strength); + this.name = name; + } + + @Override + public Entity createEntity(Location location) { + return super.createEntity(EntityType.PLAYER, name, location); + } + + /** + * Elf Default values + * @param main the main instance + * @param name + */ + public Elf(Raxen main, String name) { + super(main, "Elf", 10, 120.0, 25.0); + this.name = name; + } + +} diff --git a/src/main/java/gq/unurled/raxen/components/entity/other/custom/dungeon/forest/Wolf.java b/src/main/java/gq/unurled/raxen/components/entity/other/custom/dungeon/forest/Wolf.java new file mode 100644 index 0000000..fff8d7c --- /dev/null +++ b/src/main/java/gq/unurled/raxen/components/entity/other/custom/dungeon/forest/Wolf.java @@ -0,0 +1,30 @@ +package gq.unurled.raxen.components.entity.other.custom.dungeon.forest; + +import gq.unurled.raxen.Raxen; +import gq.unurled.raxen.components.entity.other.RaxenEntity; +import lombok.Getter; +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; + +public class Wolf extends RaxenEntity { + + @Getter + private final String name; + + + public Wolf(Raxen main, String name, Integer level, Double health, Double strength) { + super(main, name, level, health, strength); + this.name = name; + } + + public Wolf(Raxen main) { + super(main, "Wolf", 5, 100.0, 20.0); + this.name = "Wolf"; + } + + @Override + public Entity createEntity(Location location) { + return super.createEntity(EntityType.WOLF, name, location); + } +} diff --git a/src/main/java/gq/unurled/raxen/components/entity/other/custom/hostile/low/Goblin.java b/src/main/java/gq/unurled/raxen/components/entity/other/custom/hostile/low/Goblin.java index d537a47..203b8cc 100644 --- a/src/main/java/gq/unurled/raxen/components/entity/other/custom/hostile/low/Goblin.java +++ b/src/main/java/gq/unurled/raxen/components/entity/other/custom/hostile/low/Goblin.java @@ -3,6 +3,8 @@ package gq.unurled.raxen.components.entity.other.custom.hostile.low; import gq.unurled.raxen.Raxen; import gq.unurled.raxen.components.entity.other.RaxenEntity; import gq.unurled.raxen.components.entity.other.custom.Entity; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; public class Goblin extends Entity { @@ -10,7 +12,12 @@ public class Goblin extends Entity { public Goblin(Raxen main) { super("Goblin", 1, 100.0, 10.0, 0.0, 50.0, true); - this.goblin = new RaxenEntity(main, "Goblin", 1, 100.0, 10.0); + this.goblin = new RaxenEntity(main, "Goblin", 1, 100.0, 10.0) { + @Override + public org.bukkit.entity.Entity createEntity(Location location) { + return super.createEntity(EntityType.PLAYER, "Goblin", location); + } + }; register(main); } diff --git a/src/main/java/gq/unurled/raxen/manager/server/WorldManager.java b/src/main/java/gq/unurled/raxen/manager/server/WorldManager.java index f7c86fc..3acc377 100644 --- a/src/main/java/gq/unurled/raxen/manager/server/WorldManager.java +++ b/src/main/java/gq/unurled/raxen/manager/server/WorldManager.java @@ -1,72 +1,100 @@ package gq.unurled.raxen.manager.server; +import com.onarandombox.MultiverseCore.api.MVWorldManager; +import com.onarandombox.MultiverseCore.api.MultiverseWorld; import gq.unurled.raxen.Raxen; -import gq.unurled.raxen.manager.entity.StorageManager; -import lombok.Getter; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.WorldCreator; -import org.bukkit.configuration.file.FileConfiguration; import java.io.File; import java.io.IOException; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; +import java.util.*; + +import static gq.unurled.raxen.utils.Utils.*; +import static gq.unurled.raxen.utils.Utils.error; public class WorldManager { private Raxen main; - private static StorageManager sto; - @Getter - private HashMap worlds = new HashMap<>(); + MVWorldManager worldManager; + + /** + * String : name + * MultiverseWorld : a world that need to be registered + */ + private Map loadedWorlds = new HashMap<>(); + + private List worlds = new ArrayList<>(); + + private File pluginFolder; + private File worldFolder; public WorldManager(Raxen main) { this.main = main; - this.sto = main.getManager().getStorageManager(); - if(!(new File(main.getDataFolder() + "/Worlds/").exists())) { - new File(main.getDataFolder() + "/Worlds/").mkdirs(); + this.pluginFolder = new File(main.getDataFolder() + "/worlds/"); + this.worldFolder = new File("worlds/"); + this.worldManager = main.getManager().getMultiverse().getWorldManager(); + worlds.add("Forest"); + log(pluginFolder.getAbsolutePath(), "" + pluginFolder.isDirectory()); + log(worldFolder.getAbsolutePath(), "" + worldFolder.isDirectory()); + } + + public void removeWorld(String name) { + File world = new File(worldFolder + name + "/"); + if (!world.exists() || !world.isDirectory()) { + error("Saving world " + name + ". Folder don't exists."); + return; + } + worldManager.unloadWorld(name); + try { + removeDirectory(world.toPath()); + } catch (IOException e) { + error("Error while Saving world " + name + " at coping data."); + e.printStackTrace(); } } - public void save() { - String path = main.getDataFolder() + "/Worlds/"; - File folder = new File(path); - List worlds = Bukkit.getWorlds(); - for (World world : worlds) { - File file = new File(path + world.getName() + ".yml"); - FileConfiguration fileConf = sto.createYml(file); - fileConf.set("name", world.getName()); - fileConf.set("uuid", world.getUID().toString()); - try { - fileConf.save(file); - } catch (IOException e) { - e.printStackTrace(); + public void load() { + if (!pluginFolder.exists()) { + pluginFolder.mkdirs(); + error("Please put in the folder " + pluginFolder.getAbsolutePath() + " all the needed worlds :"); + for (String s : worlds) { + error(" - " + s + ","); + } + return; + } + for (String s : worlds) { + File world = new File(pluginFolder + s); + File worldd = new File(worldFolder + s); + if (worldd.exists()) { + if (worldd.isDirectory()) { + worldManager.loadWorld(s); + } + } else if (world.exists() ) { + if (world.isDirectory()) { + loadWorld(s); + } else { + error("World " + s + " is not a world Folder!"); + } + } else { + error("World " + s + " do not exist."); } } } - public void saveWorld(String name) { - World world = Bukkit.getWorld(name); - UUID uuid = world.getUID(); - String key = world.getKey().getKey(); - File file = new File(main.getDataFolder() + "/Worlds/" + name + ".yml"); - } - - public void load() { - String path = main.getDataFolder() + "/Worlds/"; - File folder = new File(path); - File[] listFile = folder.listFiles(); - for (File file : listFile) { - loadWorld(file); + public void loadWorld(String name) { + File world = new File(pluginFolder + name + "/"); + if (!world.exists() || !world.isDirectory()) { + error("Loading world " + name + ". Folder don't exists."); + return; } + File newWorld = new File(worldFolder + name); + try { + copyDirectory(world.getAbsolutePath(), newWorld.getAbsolutePath()); + } catch (IOException e) { + error("Error while Loading world " + name + " at coping data."); + e.printStackTrace(); + } + worldManager.loadWorld(name); } - public World loadWorld(File file) { - FileConfiguration fileConf = sto.createYml(file); - World world = Bukkit.createWorld(new WorldCreator(fileConf.getString("name"))); - worlds.put(world.getName(), world); - return world; - } } diff --git a/src/main/java/gq/unurled/raxen/utils/Utils.java b/src/main/java/gq/unurled/raxen/utils/Utils.java index bb99f00..be3bf25 100644 --- a/src/main/java/gq/unurled/raxen/utils/Utils.java +++ b/src/main/java/gq/unurled/raxen/utils/Utils.java @@ -18,10 +18,10 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; +import java.io.File; import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; +import java.nio.file.*; +import java.util.Comparator; public class Utils { @@ -226,4 +226,15 @@ public class Utils { }); } + public static void removeDirectory(Path path) throws IOException { + if (Files.isDirectory(path, LinkOption.NOFOLLOW_LINKS)) { + try (DirectoryStream entries = Files.newDirectoryStream(path)) { + for (Path entry : entries) { + removeDirectory(entry); + } + } + } + Files.delete(path); + } + } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 94f2532..b81a1bd 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -12,8 +12,4 @@ resource_pack_url: "https://mc-packs.net/" # recommend to use https://mc-packs.net/ => free resource pack hoster (will eventually develop one myself but not atm) resource_pack_sha1: "sha1hallo" # sha1 hash - worlds: - forest: - enabled: true - debug: false \ No newline at end of file