From b47a87cae62fdb1c8a47a5b7f63132b477dcc916 Mon Sep 17 00:00:00 2001 From: HSGamer Date: Mon, 24 Jul 2023 11:27:56 +0700 Subject: [PATCH] add createArena in ArenaManager --- .../minigamecore/manager/ArenaManager.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/minigamecore-manager/src/main/java/me/hsgamer/minigamecore/manager/ArenaManager.java b/minigamecore-manager/src/main/java/me/hsgamer/minigamecore/manager/ArenaManager.java index 88b7788..3d2585e 100644 --- a/minigamecore-manager/src/main/java/me/hsgamer/minigamecore/manager/ArenaManager.java +++ b/minigamecore-manager/src/main/java/me/hsgamer/minigamecore/manager/ArenaManager.java @@ -3,7 +3,9 @@ import me.hsgamer.minigamecore.base.Arena; import me.hsgamer.minigamecore.base.FeatureUnit; +import java.lang.reflect.Constructor; import java.util.*; +import java.util.function.Consumer; import java.util.stream.Collectors; /** @@ -92,4 +94,43 @@ public void clearAllArenas() { }); arenaList.clear(); } + + /** + * Create an arena + * + * @param name the name of the arena + * @param arenaClass the class of the arena + * @param onCreateConsumer the consumer that will be called when the arena is created + * @param the type of the arena + * @return the arena or empty if it cannot be created + */ + public Optional createArena(String name, Class arenaClass, Consumer onCreateConsumer) { + T arena = null; + + try { + Constructor constructor = arenaClass.getConstructor(String.class, FeatureUnit.class); + arena = constructor.newInstance(name, this); + } catch (Exception ignored) { + // IGNORED + } + + if (arena == null) { + try { + Constructor constructor = arenaClass.getConstructor(String.class); + arena = constructor.newInstance(name); + } catch (Exception ignored) { + // IGNORED + } + } + + if (arena == null) return Optional.empty(); + + onCreateConsumer.accept(arena); + + if (addArena(arena)) { + return Optional.of(arena); + } else { + return Optional.empty(); + } + } }