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();
/*
for (Dungeon dungeon : DungeonManager.getDungeons()) {
for (DungeonInstance dungeonInstance : dungeon.getQueue().getAllDungeonInstance()) {
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.util.Log;
import com.io.yutian.thewarskyblocklib.util.FileUtil;
import org.bukkit.GameRule;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.jetbrains.annotations.Nullable;
@ -87,8 +88,7 @@ public class Dungeon {
WorldCreator dungeonWorldCreator = new WorldCreator(worldName);
try {
world = dungeonWorldCreator.createWorld();
world.setKeepSpawnInMemory(false);
world.setAutoSave(false);
initWorld(world);
} catch (Exception e) {
e.printStackTrace();
return null;
@ -98,6 +98,16 @@ public class Dungeon {
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
public DungeonInstance newInstance() {
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.manager.DungeonManager;
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.thewarskyblocklib.math.Point;
import io.lumine.mythic.bukkit.BukkitAdapter;
@ -21,6 +22,9 @@ import io.lumine.mythic.core.mobs.MobRegistry;
import org.bukkit.Bukkit;
import org.bukkit.Location;
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.Player;
import org.bukkit.scheduler.BukkitRunnable;
@ -38,6 +42,8 @@ public class DungeonInstance {
private DungeonState state = DungeonState.WAITING;
private BossBar bossBar;
private DungeonLobby dungeonLobby;
private Point spawnPoint;
@ -60,12 +66,14 @@ public class DungeonInstance {
this.uuid = uuid;
this.dungeon = dungeon;
this.worldInstance = worldInstance;
this.bossBar = Bukkit.createBossBar("倒计时", BarColor.WHITE, BarStyle.SOLID);
}
public void join(Player player, boolean start) {
if (!canJoin(player)) {
return;
}
this.bossBar.addPlayer(player);
addPlayer(player);
if (start && players.size() == 1) {
player.teleport(dungeon.getConfig().getLobbyPoint().toLocation(worldInstance.getWorld()));
@ -93,6 +101,7 @@ public class DungeonInstance {
}
public void leave(Player player) {
this.bossBar.removePlayer(player);
if (dungeonLobby != null && state.equals(DungeonState.WAITING)) {
dungeonLobby.removeBossBar(player);
}
@ -256,6 +265,7 @@ public class DungeonInstance {
cancel();
}
}
updateBossBar();
}
}.runTaskTimer(TheWarDungeon.inst(), 20L, 20L));
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() {
try {
BukkitAdapter.adapt(worldInstance.getWorld());

View File

@ -1,12 +1,9 @@
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.World;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
public class WorldInstance {
@ -52,6 +49,7 @@ public class WorldInstance {
}
destroyed = true;
unloadWorld();
/*
Bukkit.getScheduler().runTaskLater(TheWarDungeon.inst(), ()->{
try {
FileUtils.deleteDirectory(folder);
@ -59,6 +57,7 @@ public class WorldInstance {
e.printStackTrace();
}
}, 10L);
*/
}
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
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;
}
}
}