Add game state handlers

This commit is contained in:
Mathieu Strypsteen 2024-09-14 19:21:35 +02:00
parent 91c1a6c840
commit c0751511a5
5 changed files with 130 additions and 0 deletions

View file

@ -1,6 +1,25 @@
package gent.zeus.mc13dtl; package gent.zeus.mc13dtl;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import gent.zeus.mc13dtl.gamestate.GameStateCommand;
import gent.zeus.mc13dtl.gamestate.GameStateHandler;
import io.papermc.paper.command.brigadier.Commands;
import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager;
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
public class MC13DTL extends JavaPlugin { public class MC13DTL extends JavaPlugin {
public static MC13DTL instance;
@Override
public void onEnable() {
instance = this;
getServer().getPluginManager().registerEvents(new GameStateHandler(), this);
LifecycleEventManager<Plugin> manager = this.getLifecycleManager();
manager.registerEventHandler(LifecycleEvents.COMMANDS, event -> {
Commands commands = event.registrar();
commands.register("start-game", "Start a game of 13 days to live", new GameStateCommand());
});
}
} }

View file

@ -0,0 +1,38 @@
package gent.zeus.mc13dtl.gamestate;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.potion.PotionEffect;
import gent.zeus.mc13dtl.MC13DTL;
import io.papermc.paper.command.brigadier.BasicCommand;
import io.papermc.paper.command.brigadier.CommandSourceStack;
public class GameStateCommand implements BasicCommand {
@Override
public void execute(CommandSourceStack stack, String[] args) {
World world = Bukkit.getWorld("world");
NamespacedKey key = new NamespacedKey(MC13DTL.instance, "game-state");
world.getPersistentDataContainer().set(key, PersistentDataType.STRING, "active");
GameStateUtil.loadWorld(world);
for (OfflinePlayer i : Bukkit.getOfflinePlayers()) {
Player player = i.getPlayer();
player.getInventory().clear();
player.heal(100);
player.getActivePotionEffects().clear();
for (PotionEffect effect : player.getActivePotionEffects()) {
player.removePotionEffect(effect.getType());
}
GameStateUtil.loadPlayer(player);
}
}
@Override
public String permission() {
return "13dtl.manage-game";
}
}

View file

@ -0,0 +1,23 @@
package gent.zeus.mc13dtl.gamestate;
import org.bukkit.World;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.world.WorldLoadEvent;
public class GameStateHandler implements Listener {
@EventHandler
void onPlayerJoin(PlayerJoinEvent event) {
GameStateUtil.loadPlayer(event.getPlayer());
}
@EventHandler
void onWorldLoad(WorldLoadEvent event) {
World world = event.getWorld();
if (!world.getName().equals("world")) {
return;
}
GameStateUtil.loadWorld(world);
}
}

View file

@ -0,0 +1,49 @@
package gent.zeus.mc13dtl.gamestate;
import org.bukkit.Bukkit;
import org.bukkit.Difficulty;
import org.bukkit.GameMode;
import org.bukkit.GameRule;
import org.bukkit.NamespacedKey;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.persistence.PersistentDataType;
import gent.zeus.mc13dtl.MC13DTL;
import net.md_5.bungee.api.ChatColor;
public class GameStateUtil {
static void loadWorld(World world) {
NamespacedKey key = new NamespacedKey(MC13DTL.instance, "game-state");
if (!world.getPersistentDataContainer().has(key)) {
world.getPersistentDataContainer().set(key, PersistentDataType.STRING, "lobby");
}
String gameState = world.getPersistentDataContainer().get(key, PersistentDataType.STRING);
if (gameState.equals("lobby")) {
world.setDifficulty(Difficulty.PEACEFUL);
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false);
world.setFullTime(0);
world.getWorldBorder().setSize(200);
}
if (gameState.equals("active")) {
world.setDifficulty(Difficulty.NORMAL);
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, true);
world.getWorldBorder().setSize(10000);
}
}
static void loadPlayer(Player player) {
NamespacedKey key = new NamespacedKey(MC13DTL.instance, "game-state");
String gameState = Bukkit.getWorld("world").getPersistentDataContainer().get(key, PersistentDataType.STRING);
if (gameState.equals("lobby")) {
player.setGameMode(GameMode.ADVENTURE);
player.setInvulnerable(true);
player.sendMessage(ChatColor.DARK_PURPLE + "Game hasn't started yet, please wait...");
}
if (gameState.equals("active")) {
player.setGameMode(GameMode.SURVIVAL);
player.setInvulnerable(false);
player.sendMessage(ChatColor.DARK_PURPLE + "Game is active, have fun!");
}
}
}

View file

@ -2,3 +2,4 @@ name: 13DTL
version: 0.0.1 version: 0.0.1
main: gent.zeus.mc13dtl.MC13DTL main: gent.zeus.mc13dtl.MC13DTL
api-version: '1.21.1' api-version: '1.21.1'
load: STARTUP