Skip to content

Commit

Permalink
changed new minigame create/join method
Browse files Browse the repository at this point in the history
  • Loading branch information
Bruce0203 committed Nov 12, 2021
1 parent 96c9d05 commit b3ebc7e
Show file tree
Hide file tree
Showing 8 changed files with 224 additions and 370 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ sourceCompatibility = 1.8
targetCompatibility = 1.8

group 'kr.jongwonlee.fmg'
version '1.5.7'
version '1.5.8'

compileJava.options.encoding 'UTF-8'

Expand Down
Binary file modified jar/FreedyMinigameMaker2.jar
Binary file not shown.
28 changes: 15 additions & 13 deletions src/main/java/kr/jongwonlee/fmg/game/GameStore.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import kr.jongwonlee.fmg.FMGPlugin;
import kr.jongwonlee.fmg.conf.Settings;
import kr.jongwonlee.fmg.proc.FileParser;
import kr.jongwonlee.fmg.proc.ProcBundle;
import kr.jongwonlee.fmg.util.FileStore;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
Expand All @@ -14,29 +17,30 @@

public class GameStore implements Listener {

private static Map<String, Map<String, ProcBundle>> bundleMap;
private static Map<String, MiniGame> gameMap;
private static Map<Player, MiniGame> playerGameMap;
private static MiniGame hubGame;
private static GameStore gameStore;
private static Map<UUID, GameData> playersData = new HashMap<>();

public static void init() {
if (gameStore == null) {
gameStore = new GameStore();
FMGPlugin.registerEvent(gameStore);
}
if (gameMap == null) gameMap = new HashMap<>();
if (playerGameMap == null) playerGameMap = new HashMap<>();
bundleMap = new HashMap<>();
List<String> dirFiles = FileStore.getDirFiles("");
dirFiles.forEach(name -> bundleMap.put(name, FileParser.parseBundles(name)));
createGame(Settings.getHubGameName());
hubGame = getGame(Settings.getHubGameName());
List<String> dirFiles = FileStore.getDirFiles("");
dirFiles.forEach(GameStore::loadGame);
for (String name : new ArrayList<>(gameMap.keySet())) {
if (!dirFiles.contains(name) || name.length() == 0) {
removeGame(name);
}
}
gameMap.values().forEach(MiniGame::reload);
if (gameStore == null) {
gameStore = new GameStore();
FMGPlugin.registerEvent(gameStore);
}
}

public static Map<String, ProcBundle> getBundles(String name) {
return bundleMap.getOrDefault(name, null);
}

public static Map<UUID, GameData> getPlayersData() {
Expand Down Expand Up @@ -79,7 +83,6 @@ public static void removeGame(Player player) {
playerGameMap.remove(player);
}

@Deprecated
public static void createGame(String name, MiniGame game) {
if (isGame(name)) return;
gameMap.put(name, game);
Expand All @@ -91,7 +94,6 @@ public static void loadGame(String name) {
gameMap.put(name, game);
}

@Deprecated
public static void unloadGame(String name) {
if (isGame(name)) return;
gameMap.remove(name);
Expand Down
18 changes: 14 additions & 4 deletions src/main/java/kr/jongwonlee/fmg/game/MiniGame.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package kr.jongwonlee.fmg.game;

import kr.jongwonlee.fmg.proc.EventBundle;
import kr.jongwonlee.fmg.proc.FileParser;
import kr.jongwonlee.fmg.proc.ProcBundle;
import kr.jongwonlee.fmg.proc.ProcUnit;
import org.bukkit.Bukkit;
Expand All @@ -15,18 +14,24 @@

public class MiniGame {

private final String bundle;
private final String name;
private Map<String, ProcBundle> bundleMap;
private final List<UUID> players;
private final GameData gameData;

public MiniGame(String name) {
public MiniGame(String name, String bundle) {
this.name = name;
bundleMap = FileParser.parseBundles(name);
this.bundle = bundle;
bundleMap = GameStore.getBundles(bundle);
players = new ArrayList<>();
gameData = new GameData();
}

public MiniGame(String name) {
this(name, name);
}

public String run(String name, Player player) {
if (bundleMap.containsKey(name)) return bundleMap.get(name).run(this, player);
else return "";
Expand Down Expand Up @@ -97,7 +102,11 @@ public static Player toPlayer(UUID uuid) {
}

public void reload() {
bundleMap = FileParser.parseBundles(name);
bundleMap = GameStore.getBundles(bundle);
if (bundleMap == null) {
players.stream().map(Bukkit::getPlayer).forEach(GameStore::removeGame);
GameStore.unloadGame(name);
}
}

public void disable() {
Expand All @@ -108,6 +117,7 @@ public void disable() {
players.clear();
gameData.clear();
run(EventBundle.GAME_STOP);
GameStore.unloadGame(name);
}

}
1 change: 1 addition & 0 deletions src/main/java/kr/jongwonlee/fmg/proc/ProcType.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ public enum ProcType {
MATH_SQRT(MathSqrt.class),
MATH_TAN(MathTan.class),
MILLI_SECONDS(MilliSeconds.class),
MINI_GAME(MiniGame.class),
RANDOM(Random.class),
REFERENCE(Refs.class),
REPEAT(Repeat.class),
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/kr/jongwonlee/fmg/proc/Process.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package kr.jongwonlee.fmg.proc;

import kr.jongwonlee.fmg.conf.GameDataStore;
import kr.jongwonlee.fmg.game.GameData;
import kr.jongwonlee.fmg.game.GameStore;
import kr.jongwonlee.fmg.game.MiniGame;

public interface Process {
Expand All @@ -10,4 +13,19 @@ public interface Process {

ProcType getType();

default GameData getGameData(MiniGame miniGame, ProcUnit procUnit, ProcType procType) {
switch (procType) {
case EXECUTE_GAME: return miniGame.getGameData();
case EXECUTE_ONLINE: return GameDataStore.getInst();
default: return GameStore.getPlayerData(procUnit.target.player.getUniqueId());
}
}

default ProcType getGameData(ParseUnit parseUnit) {
if (parseUnit.useExecutor(ProcType.EXECUTE_ONLINE)) return ProcType.EXECUTE_ONLINE;
else if (parseUnit.useExecutor(ProcType.EXECUTE_GAME)) return ProcType.EXECUTE_GAME;
else return ProcType.EXECUTE_PLAYER;

}

}
71 changes: 71 additions & 0 deletions src/main/java/kr/jongwonlee/fmg/proc/data/etc/MiniGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package kr.jongwonlee.fmg.proc.data.etc;

import kr.jongwonlee.fmg.conf.Settings;
import kr.jongwonlee.fmg.game.GameStore;
import kr.jongwonlee.fmg.proc.*;
import kr.jongwonlee.fmg.proc.Process;
import kr.jongwonlee.fmg.proc.data.control.SmallFrontBrace;

import java.util.List;

@Processable(alias = "minigame")
public class MiniGame implements Process {

boolean isCreate;
boolean isRemove;
boolean isExists;
Process process;
SmallFrontBrace frontBrace;
List<Process> processList;

@Override
public void parse(ParseUnit parseUnit, String arguments) {
isExists = parseUnit.useExecutor(ProcType.EXECUTE_EXISTS);
isCreate = parseUnit.useExecutor(ProcType.EXECUTE_CREATE);
isRemove = parseUnit.useExecutor(ProcType.EXECUTE_REMOVE);
process = FileParser.parseProcess(parseUnit, arguments);
if (!(process instanceof SmallFrontBrace)) return;
frontBrace = ((SmallFrontBrace) process);
processList = frontBrace.cutBehindEndBrace();
}

@Override
public String run(kr.jongwonlee.fmg.game.MiniGame miniGame, ProcUnit procUnit) {
String name = process.run(miniGame, procUnit);
if (frontBrace != null) {
if (processList.size() >= 2) {
if (isCreate) {
String gameName = processList.get(0).run(miniGame, procUnit);
String bundleName = processList.get(2).run(miniGame, procUnit);
kr.jongwonlee.fmg.game.MiniGame mg = new kr.jongwonlee.fmg.game.MiniGame(gameName, bundleName);
GameStore.createGame(gameName, mg);
}
}
if (run(name)) return String.valueOf(GameStore.isGame(name));
return frontBrace.getLastProc().run(miniGame, procUnit);
} else {
if (run(name)) return String.valueOf(GameStore.isGame(name));
return name;
}
}

private boolean run(String name) {
if (isExists) {
return GameStore.isGame(name);
}
else if (isCreate) {
GameStore.createGame(name);
} else if (isRemove) {
if (name.equals(Settings.getHubGameName())) return false;
kr.jongwonlee.fmg.game.MiniGame game = GameStore.getGame(name);
game.disable();
GameStore.unloadGame(name);
}
return false;
}

@Override
public ProcType getType() {
return ProcType.MINI_GAME;
}
}
Loading

0 comments on commit b3ebc7e

Please sign in to comment.