This commit is contained in:
YuTian 2024-08-10 18:46:13 +08:00
parent 9e1a8f0298
commit e20a708e89
7 changed files with 50 additions and 16 deletions

View File

@ -52,15 +52,13 @@ public final class TheWarDungeon extends JavaPlugin {
CommandManager.unregisterAll(); CommandManager.unregisterAll();
/*
for (Dungeon dungeon : DungeonManager.getDungeons()) { for (Dungeon dungeon : DungeonManager.getDungeons()) {
for (DungeonInstance dungeonInstance : dungeon.getQueue().getAllDungeonInstance()) { for (DungeonInstance dungeonInstance : dungeon.getQueue().getAllDungeonInstance()) {
dungeonInstance.getWorldInstance().remove(); dungeonInstance.getWorldInstance().remove();
} }
} }
*/
checkWorldFile(); //checkWorldFile();
} }

View File

@ -6,6 +6,7 @@ import com.io.yutian.thewardungeon.dungeon.queue.DungeonQueue;
import com.io.yutian.thewardungeon.dungeon.world.WorldInstance; import com.io.yutian.thewardungeon.dungeon.world.WorldInstance;
import com.io.yutian.thewardungeon.util.Log; import com.io.yutian.thewardungeon.util.Log;
import com.io.yutian.thewarskyblocklib.util.FileUtil; import com.io.yutian.thewarskyblocklib.util.FileUtil;
import org.bukkit.GameRule;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.WorldCreator; import org.bukkit.WorldCreator;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -87,8 +88,7 @@ public class Dungeon {
WorldCreator dungeonWorldCreator = new WorldCreator(worldName); WorldCreator dungeonWorldCreator = new WorldCreator(worldName);
try { try {
world = dungeonWorldCreator.createWorld(); world = dungeonWorldCreator.createWorld();
world.setKeepSpawnInMemory(false); initWorld(world);
world.setAutoSave(false);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return null; return null;
@ -98,6 +98,16 @@ public class Dungeon {
return worldInstance; return worldInstance;
} }
private void initWorld(World world) {
world.setGameRule(GameRule.KEEP_INVENTORY, true);
world.setGameRule(GameRule.MOB_GRIEFING, false);
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false);
world.setGameRule(GameRule.DO_WEATHER_CYCLE, false);
world.setGameRule(GameRule.DO_MOB_SPAWNING, false);
world.setKeepSpawnInMemory(false);
world.setAutoSave(false);
}
@Nullable @Nullable
public DungeonInstance newInstance() { public DungeonInstance newInstance() {
if (!hasFreeInstance()) { if (!hasFreeInstance()) {

View File

@ -12,6 +12,7 @@ import com.io.yutian.thewardungeon.dungeon.world.WorldInstance;
import com.io.yutian.thewardungeon.lang.Lang; import com.io.yutian.thewardungeon.lang.Lang;
import com.io.yutian.thewardungeon.manager.DungeonManager; import com.io.yutian.thewardungeon.manager.DungeonManager;
import com.io.yutian.thewardungeon.script.ScriptGourp; import com.io.yutian.thewardungeon.script.ScriptGourp;
import com.io.yutian.thewardungeon.util.BossBarUtil;
import com.io.yutian.thewardungeon.util.LogUtil; import com.io.yutian.thewardungeon.util.LogUtil;
import com.io.yutian.thewarskyblocklib.math.Point; import com.io.yutian.thewarskyblocklib.math.Point;
import io.lumine.mythic.bukkit.BukkitAdapter; import io.lumine.mythic.bukkit.BukkitAdapter;
@ -21,6 +22,9 @@ import io.lumine.mythic.core.mobs.MobRegistry;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarStyle;
import org.bukkit.boss.BossBar;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
@ -38,6 +42,8 @@ public class DungeonInstance {
private DungeonState state = DungeonState.WAITING; private DungeonState state = DungeonState.WAITING;
private BossBar bossBar;
private DungeonLobby dungeonLobby; private DungeonLobby dungeonLobby;
private Point spawnPoint; private Point spawnPoint;
@ -60,12 +66,14 @@ public class DungeonInstance {
this.uuid = uuid; this.uuid = uuid;
this.dungeon = dungeon; this.dungeon = dungeon;
this.worldInstance = worldInstance; this.worldInstance = worldInstance;
this.bossBar = Bukkit.createBossBar("倒计时", BarColor.WHITE, BarStyle.SOLID);
} }
public void join(Player player, boolean start) { public void join(Player player, boolean start) {
if (!canJoin(player)) { if (!canJoin(player)) {
return; return;
} }
this.bossBar.addPlayer(player);
addPlayer(player); addPlayer(player);
if (start && players.size() == 1) { if (start && players.size() == 1) {
player.teleport(dungeon.getConfig().getLobbyPoint().toLocation(worldInstance.getWorld())); player.teleport(dungeon.getConfig().getLobbyPoint().toLocation(worldInstance.getWorld()));
@ -93,6 +101,7 @@ public class DungeonInstance {
} }
public void leave(Player player) { public void leave(Player player) {
this.bossBar.removePlayer(player);
if (dungeonLobby != null && state.equals(DungeonState.WAITING)) { if (dungeonLobby != null && state.equals(DungeonState.WAITING)) {
dungeonLobby.removeBossBar(player); dungeonLobby.removeBossBar(player);
} }
@ -256,6 +265,7 @@ public class DungeonInstance {
cancel(); cancel();
} }
} }
updateBossBar();
} }
}.runTaskTimer(TheWarDungeon.inst(), 20L, 20L)); }.runTaskTimer(TheWarDungeon.inst(), 20L, 20L));
tasks.add(new BukkitRunnable() { tasks.add(new BukkitRunnable() {
@ -293,6 +303,13 @@ public class DungeonInstance {
} }
} }
private void updateBossBar() {
bossBar.setTitle("倒计时: " + countdown + "/" + dungeon.getConfig().getOption().getCountdown());
float progress = (float) countdown / (float) dungeon.getConfig().getOption().getCountdown();
bossBar.setProgress(progress);
bossBar.setColor(BossBarUtil.getBarColor(progress));
}
private boolean isWorldLoaded() { private boolean isWorldLoaded() {
try { try {
BukkitAdapter.adapt(worldInstance.getWorld()); BukkitAdapter.adapt(worldInstance.getWorld());

View File

@ -1,12 +1,9 @@
package com.io.yutian.thewardungeon.dungeon.world; package com.io.yutian.thewardungeon.dungeon.world;
import com.io.yutian.thewardungeon.TheWarDungeon;
import org.apache.commons.io.FileUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.UUID; import java.util.UUID;
public class WorldInstance { public class WorldInstance {
@ -52,6 +49,7 @@ public class WorldInstance {
} }
destroyed = true; destroyed = true;
unloadWorld(); unloadWorld();
/*
Bukkit.getScheduler().runTaskLater(TheWarDungeon.inst(), ()->{ Bukkit.getScheduler().runTaskLater(TheWarDungeon.inst(), ()->{
try { try {
FileUtils.deleteDirectory(folder); FileUtils.deleteDirectory(folder);
@ -59,6 +57,7 @@ public class WorldInstance {
e.printStackTrace(); e.printStackTrace();
} }
}, 10L); }, 10L);
*/
} }
private void unloadWorld() { private void unloadWorld() {

View File

@ -1,7 +0,0 @@
package com.io.yutian.thewardungeon.event;
public class Event {
}

View File

@ -27,7 +27,7 @@ public class TitleScript extends Script {
@Override @Override
public void execute(DungeonInstance dungeonInstance) { public void execute(DungeonInstance dungeonInstance) {
dungeonInstance.getPlayers().forEach(player -> player.getPlayer().showTitle(Title.title(Component.text(title), Component.text(subtitle), Title.Times.times(Duration.ofMillis(fadeIn), Duration.ofMillis(stay), Duration.ofMillis(fadeOut))))); dungeonInstance.getPlayers().forEach(player -> player.getPlayer().showTitle(Title.title(Component.text(title), Component.text(subtitle), Title.Times.times(Duration.ofMillis(fadeIn * 50), Duration.ofMillis(stay * 50), Duration.ofMillis(fadeOut * 50)))));
} }
} }

View File

@ -0,0 +1,17 @@
package com.io.yutian.thewardungeon.util;
import org.bukkit.boss.BarColor;
public class BossBarUtil {
public static BarColor getBarColor(double d) {
if (d >= 0 && d <= 0.3333) {
return BarColor.RED;
} else if (d <= 0.6666) {
return BarColor.YELLOW;
} else {
return BarColor.GREEN;
}
}
}