Skip to content

Commit

Permalink
Add ForceGamemode Option
Browse files Browse the repository at this point in the history
  • Loading branch information
glorydark committed Feb 18, 2024
1 parent 180134d commit 9c439d5
Show file tree
Hide file tree
Showing 18 changed files with 405 additions and 387 deletions.
30 changes: 17 additions & 13 deletions src/main/java/glorydark/DLevelEventPlus/CheckTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
import cn.nukkit.item.Item;
import cn.nukkit.level.Level;
import cn.nukkit.scheduler.Task;
import glorydark.DLevelEventPlus.utils.ConfigUtil;
import glorydark.DLevelEventPlus.api.PermissionAPI;
import glorydark.DLevelEventPlus.api.WorldSettingAPI;
import glorydark.DLevelEventPlus.utils.ItemUtils;

import java.util.List;
Expand All @@ -16,32 +17,35 @@ public class CheckTask extends Task {
@Override
public void onRun(int i) {
for (Level level : Server.getInstance().getLevels().values()) {
List<String> clearItems = LevelEventPlusMain.getLevelStringListInit(level.getName(), "Player", "ClearItems");
Boolean movable = LevelEventPlusMain.getLevelBooleanInit(level.getName(), "World", "Move");
List<String> clearItems = WorldSettingAPI.getLevelStringListInit(level.getName(), "Player", "ClearItems");
Boolean movable = WorldSettingAPI.getLevelBooleanInit(level.getName(), "World", "Move");
String defaultGameMode = WorldSettingAPI.getLevelSettingInit(level.getName(), "World", "ForceGameMode", "");
for (Player player : level.getPlayers().values()) {
Boolean antiVoid = LevelEventPlusMain.getLevelBooleanInit(player.getLevel().getName(), "World", "AntiVoid");
if (antiVoid != null) {
if (antiVoid) {
Object voidHeight = LevelEventPlusMain.getLevelSettingInit(player.getLevel().getName(), "World", "VoidHeight");
if (voidHeight != null) {
if (player.getFloorY() <= Integer.parseInt(voidHeight.toString())) {
player.teleport(player.getLevel().getSpawnLocation().getLocation());
}
Boolean antiVoid = WorldSettingAPI.getLevelBooleanInit(player.getLevel().getName(), "World", "AntiVoid");
if (antiVoid != null && antiVoid) {
Object voidHeight = WorldSettingAPI.getLevelSettingInit(player.getLevel().getName(), "World", "VoidHeight", 0);
if (voidHeight != null) {
if (player.getFloorY() <= Integer.parseInt(voidHeight.toString())) {
player.teleport(player.getLevel().getSpawnLocation().getLocation());
}
}
}
if (ConfigUtil.isAdmin(player)) {
if (PermissionAPI.isAdmin(player)) {
if (player.isImmobile()) {
player.setImmobile(false);
}
return;
}
if (ConfigUtil.isOperator(player, player.getLevel())) {
if (PermissionAPI.isOperator(player, player.getLevel())) {
if (player.isImmobile()) {
player.setImmobile(false);
}
return;
}
int forceGamemode = Server.getGamemodeFromString(defaultGameMode);
if (forceGamemode != -1 && player.getGamemode() != forceGamemode) {
player.setGamemode(forceGamemode);
}
for (Map.Entry<Integer, Item> entry : player.getInventory().getContents().entrySet()) {
Item check = entry.getValue();
if (clearItems.stream().anyMatch(s -> ItemUtils.isEqual(s, check))) {
Expand Down
22 changes: 11 additions & 11 deletions src/main/java/glorydark/DLevelEventPlus/Command.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import cn.nukkit.command.CommandSender;
import glorydark.DLevelEventPlus.gui.FormMain;
import glorydark.DLevelEventPlus.protection.ProtectionEntryMain;
import glorydark.DLevelEventPlus.utils.ConfigUtil;
import glorydark.DLevelEventPlus.api.PermissionAPI;

import java.io.File;

Expand All @@ -16,7 +16,7 @@ public Command(String name) {

@Override
public boolean execute(CommandSender sender, String s, String[] args) {
if (!(sender.isPlayer()) || (sender.isPlayer() && (ConfigUtil.isAdmin((Player) sender) || ConfigUtil.isOperator((Player) sender, ((Player) sender).getLevel())))) {
if (!(sender.isPlayer()) || (sender.isPlayer() && (PermissionAPI.isAdmin((Player) sender) || PermissionAPI.isOperator((Player) sender, ((Player) sender).getLevel())))) {
switch (args.length) {
case 0:
if (sender.isPlayer()) {
Expand All @@ -26,7 +26,7 @@ public boolean execute(CommandSender sender, String s, String[] args) {
}
return true;
case 1:
if (sender.isPlayer() && !ConfigUtil.isAdmin((Player) sender)) {
if (sender.isPlayer() && !PermissionAPI.isAdmin((Player) sender)) {
sender.sendMessage(LevelEventPlusMain.language.translateString("tip_generic_noPermission"));
return false;
}
Expand All @@ -45,7 +45,7 @@ public boolean execute(CommandSender sender, String s, String[] args) {
}
break;
case 2:
if (sender.isPlayer() && !ConfigUtil.isAdmin((Player) sender)) {
if (sender.isPlayer() && !PermissionAPI.isAdmin((Player) sender)) {
sender.sendMessage(LevelEventPlusMain.language.translateString("tip_generic_noPermission"));
return false;
}
Expand All @@ -67,14 +67,14 @@ public boolean execute(CommandSender sender, String s, String[] args) {
switch (args[1]) {
case "add":
if (Server.getInstance().lookupName(args[2]).isPresent()) {
ConfigUtil.adminList(sender, 0, args[2]);
PermissionAPI.adminList(sender, 0, args[2]);
} else {
sender.sendMessage(LevelEventPlusMain.language.translateString("tip_generic_playerNotFound"));
}
return true;
case "del":
if (Server.getInstance().lookupName(args[2]).isPresent()) {
ConfigUtil.adminList(sender, 1, args[2]);
PermissionAPI.adminList(sender, 1, args[2]);
} else {
sender.sendMessage(LevelEventPlusMain.language.translateString("tip_generic_playerNotFound"));
}
Expand All @@ -83,7 +83,7 @@ public boolean execute(CommandSender sender, String s, String[] args) {
}
break;
case 4:
if (sender.isPlayer() && !ConfigUtil.isAdmin((Player) sender)) {
if (sender.isPlayer() && !PermissionAPI.isAdmin((Player) sender)) {
sender.sendMessage(LevelEventPlusMain.language.translateString("tip_generic_noPermission"));
return false;
}
Expand All @@ -92,14 +92,14 @@ public boolean execute(CommandSender sender, String s, String[] args) {
switch (args[1]) {
case "add":
if (Server.getInstance().lookupName(args[2]).isPresent()) {
ConfigUtil.operatorList(sender, 0, args[2], args[3]);
PermissionAPI.operatorList(sender, 0, args[2], args[3]);
} else {
sender.sendMessage(LevelEventPlusMain.language.translateString("tip_generic_playerNotFound"));
}
return true;
case "del":
if (Server.getInstance().lookupName(args[2]).isPresent()) {
ConfigUtil.operatorList(sender, 1, args[2], args[3]);
PermissionAPI.operatorList(sender, 1, args[2], args[3]);
} else {
sender.sendMessage(LevelEventPlusMain.language.translateString("tip_generic_playerNotFound"));
}
Expand All @@ -108,10 +108,10 @@ public boolean execute(CommandSender sender, String s, String[] args) {
case "whitelist":
switch (args[1]) {
case "add":
ConfigUtil.whiteList(sender, 0, args[2], args[3]);
PermissionAPI.whiteList(sender, 0, args[2], args[3]);
return true;
case "del":
ConfigUtil.whiteList(sender, 1, args[2], args[3]);
PermissionAPI.whiteList(sender, 1, args[2], args[3]);
return true;
}
break;
Expand Down
124 changes: 25 additions & 99 deletions src/main/java/glorydark/DLevelEventPlus/LevelEventPlusMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@
import cn.nukkit.level.Level;
import cn.nukkit.plugin.PluginBase;
import cn.nukkit.utils.Config;
import glorydark.DLevelEventPlus.api.WorldSettingAPI;
import glorydark.DLevelEventPlus.event.*;
import glorydark.DLevelEventPlus.gui.FormEventListener;
import glorydark.DLevelEventPlus.protection.ProtectionEntryMain;
import glorydark.DLevelEventPlus.utils.ConfigUtil;
import glorydark.DLevelEventPlus.api.PermissionAPI;
import glorydark.DLevelEventPlus.utils.Language;

import java.io.File;
Expand Down Expand Up @@ -98,28 +99,26 @@ public static void loadAllLevelConfig() {
}
plugin.getLogger().info(language.translateString("tip_loading_gameRule", level.getName()));
configCache.put(levelName, (LinkedHashMap<String, Object>) config.getAll());
if (!getLevelSettingBooleanInit(levelName, "World", "TimeFlow")) {
if (!WorldSettingAPI.getLevelSettingBooleanInit(levelName, "World", "TimeFlow")) {
level.getGameRules().setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false);
}
Object weather = getLevelSettingInit(levelName, "World", "Weather");
if (weather != null) {
switch (String.valueOf(weather).toLowerCase()) {
case "clear":
level.setRaining(false);
level.setThundering(false);
level.setRainTime(12000 * 20);
level.setThunderTime(12000 * 20);
break;
case "rain":
level.setRaining(true);
level.setRainTime(12000 * 20);
break;
case "thunder":
level.setThundering(true);
level.setRainTime(12000 * 20);
level.setThunderTime(12000 * 20);
break;
}
String weather = WorldSettingAPI.getLevelSettingInit(levelName, "World", "Weather", "");
switch (weather.toLowerCase()) {
case "clear":
level.setRaining(false);
level.setThundering(false);
level.setRainTime(12000 * 20);
level.setThunderTime(12000 * 20);
break;
case "rain":
level.setRaining(true);
level.setRainTime(12000 * 20);
break;
case "thunder":
level.setThundering(true);
level.setRainTime(12000 * 20);
level.setThunderTime(12000 * 20);
break;
}
LinkedHashMap<String, Object> gamerules = (LinkedHashMap<String, Object>) configCache.get(levelName).getOrDefault("GameRule", new LinkedHashMap<>());
int loadedGameRule = 0;
Expand Down Expand Up @@ -150,7 +149,7 @@ public static void loadAllLevelConfig() {
}

public static void loadTemplateConfig() {
ConfigUtil.templateCache = new LinkedHashMap<>();
PermissionAPI.templateCache = new LinkedHashMap<>();
File file = new File(path + "/templates/");
File[] listFiles = file.listFiles();
plugin.getLogger().info(language.translateString("tip_loading_allTemplates"));
Expand All @@ -159,10 +158,10 @@ public static void loadTemplateConfig() {
Config config = new Config(file1);
String templateName = file1.getName().split("\\.")[0];
plugin.getLogger().info(language.translateString("tip_loading_template_success", templateName));
ConfigUtil.templateCache.put(templateName, (LinkedHashMap<String, Object>) config.getAll());
PermissionAPI.templateCache.put(templateName, (LinkedHashMap<String, Object>) config.getAll());
}
}
plugin.getLogger().info(language.translateString("tip_loading_allTemplates_finish", ConfigUtil.templateCache.keySet().size()));
plugin.getLogger().info(language.translateString("tip_loading_allTemplates_finish", PermissionAPI.templateCache.keySet().size()));
}

public static void saveAllConfig() {
Expand All @@ -174,85 +173,12 @@ public static void saveAllConfig() {
plugin.getLogger().info(language.translateString("tip_save_config_success", s));
}
plugin.getLogger().info(language.translateString("tip_save_all_templates_start"));
for (String s : ConfigUtil.templateCache.keySet()) {
for (String s : PermissionAPI.templateCache.keySet()) {
Config config = new Config(path + "/templates/" + s + ".yml", Config.YAML);
config.setAll(ConfigUtil.templateCache.get(s));
config.setAll(PermissionAPI.templateCache.get(s));
config.save();
plugin.getLogger().info(language.translateString("tip_save_template_success", s));
}
plugin.getLogger().alert(language.translateString("tip_save_all_success"));
}

public static Boolean getLevelBooleanInit(String LevelName, String key, String subKey) {
if (configCache.containsKey(LevelName)) {
Map<String, Object> map = configCache.get(LevelName);
if (map.containsKey(key)) {
Map<String, Object> keyMap = (Map<String, Object>) map.get(key);
if (keyMap.containsKey(subKey)) {
return (Boolean) keyMap.get(subKey);
}
}
}
return null;
}

public static Boolean getLevelSettingBooleanInit(String LevelName, String key, String subKey) {
if (configCache.containsKey(LevelName)) {
Map<String, Object> map = configCache.get(LevelName); // world的全部配置
if (map.containsKey(key)) {
Map<String, Object> keyMap = (Map<String, Object>) map.get(key); //键下的所有配置
if (keyMap.containsKey(subKey)) {
return (Boolean) keyMap.get(subKey);
}
}
}
return false;
}

public static Object getLevelSettingInit(String LevelName, String key, String subKey) {
if (configCache.containsKey(LevelName)) {
Map<String, Object> map = configCache.get(LevelName); // world的全部配置
if (map.containsKey(key)) {
Map<String, Object> keyMap = (Map<String, Object>) map.get(key); //键下的所有配置
if (keyMap.containsKey(subKey)) {
return keyMap.get(subKey);
}
}
}
return null;
}

public static void setLevelInit(String LevelName, String key, String subKey, Object value) {
LinkedHashMap<String, Object> map;
if (configCache.containsKey(LevelName)) {
map = configCache.get(LevelName);
LinkedHashMap<String, Object> keyMap;
if (map.containsKey(key)) {
keyMap = (LinkedHashMap<String, Object>) map.get(key);
} else {
keyMap = new LinkedHashMap<>();
}
keyMap.put(subKey, value);
map.put(key, keyMap);
} else {
map = new LinkedHashMap<>();
LinkedHashMap<String, Object> keyMap = new LinkedHashMap<>();
keyMap.put(subKey, value);
map.put(key, keyMap);
}
configCache.put(LevelName, map);
}

public static List<String> getLevelStringListInit(String LevelName, String key, String subKey) {
if (configCache.containsKey(LevelName)) {
Map<String, Object> map = configCache.get(LevelName); // world的全部配置
if (map.containsKey(key)) {
Map<String, Object> keyMap = (Map<String, Object>) map.get(key); //键下的所有配置
if (keyMap.containsKey(subKey)) {
return (List<String>) keyMap.get(subKey);
}
}
}
return new ArrayList<>();
}
}
Loading

0 comments on commit 9c439d5

Please sign in to comment.