2.2.0-1.20.4

将生命方块由玩家头换为其他原版多颜色方块
This commit is contained in:
xiaobai
2026-02-16 17:43:39 +08:00
parent 3bfa81f94f
commit ad5cdf1c64
136 changed files with 9850 additions and 686 deletions

View File

@@ -6,22 +6,25 @@ import org.bukkit.plugin.java.JavaPlugin;
import java.util.logging.Level;
/**
* PlayerBlockLife插件主类 - 玩家生命方块系统的核心控制器
* PlayerBlockLife插件主类 - PlayerBlockLife生存游戏模式的核心控制器
*
* <p>这个插件为Minecraft服务器添加了一个独特的游戏机制:每个玩家拥有一定数量的生命方块,
* 这些方块使用玩家的皮肤作为材质。当其他玩家挖光某个玩家的所有生命方块时,该玩家会被淘汰。</p>
* <p>这个插件为Minecraft服务器添加了一个独特的生存游戏模式每个非OP玩家拥有一定数量的生命方块,
* 这些方块使用不同颜色的羊毛、玻璃或水泥方块表示。当其他玩家挖光某个玩家的所有生命方块时,该玩家会被淘汰。
* 游戏需要管理员使用/pbl start命令开始支持限时模式最后存活的玩家获胜。</p>
*
* <p>主要功能:
* <p>主要功能:</p>
* <ul>
* <li>管理玩家生命方块的生成和销毁</li>
* <li>处理玩家皮肤的获取和应用</li>
* <li>监控玩家生命值状态</li>
* <li>提供完整的命令和权限系统</li>
* <li>支持配置热重载和数据持久化</li>
* <li>管理PlayerBlockLife游戏的完整生命周期等待、进行、结束</li>
* <li>为非OP玩家分配独特的颜色生命方块</li>
* <li>处理生命方块的生成和销毁</li>
* <li>监控游戏状态和玩家存活情况</li>
* <li>提供PlayerBlockLife专用命令系统/pbl start, /pbl rstgm</li>
* <li>支持游戏计分板显示</li>
* <li>管理员可使用传统命令进行管理</li>
* </ul>
*
* @author xiaobai
* @version 3.0.0-experimental-1.20.4
* @version 2.2.0-1.20.4
* @since 1.0.0
*/
public class PlayerBlockLife extends JavaPlugin {
@@ -31,6 +34,7 @@ public class PlayerBlockLife extends JavaPlugin {
private LifeSystem lifeSystem;
private ConfigManager configManager;
private MessageManager messageManager;
private GameStateManager gameStateManager;
/**
* 插件启用时调用,执行初始化操作
@@ -78,12 +82,16 @@ public class PlayerBlockLife extends JavaPlugin {
getCommand("pbldelete").setExecutor(new AdminCommands(this));
getCommand("pblrevive").setExecutor(new AdminCommands(this));
getCommand("pblstats").setExecutor(new AdminCommands(this));
getCommand("pbl").setExecutor(new PBLCommands(this));
// 第六步:加载其他数据
blockManager.loadData();
skinManager.loadAllSkins();
// 第六步:初始化游戏状态管理器(先于其他数据加载)
this.gameStateManager = new GameStateManager(this);
// 第七步:启动定时任务
// 第七步:加载其他数据
// 注意在新模式下我们不再使用原有的blockManager和skinManager
// 因此不再调用blockManager.loadData()和skinManager.loadAllSkins()
// 第八步:启动定时任务
startScheduler();
getLogger().info("§a========================================");
@@ -172,6 +180,10 @@ public class PlayerBlockLife extends JavaPlugin {
if (lifeSystem != null) {
lifeSystem.checkAllPlayers();
}
// 每10秒检查游戏结束条件
if (gameStateManager != null) {
gameStateManager.checkGameEnd();
}
}, 200L, 200L);
// 每分钟清理一次过期缓存
@@ -180,6 +192,13 @@ public class PlayerBlockLife extends JavaPlugin {
skinManager.cleanupOldCache();
}
}, 1200L, 1200L);
// 每秒更新计分板
getServer().getScheduler().runTaskTimer(this, () -> {
if (gameStateManager != null) {
gameStateManager.updateScoreboard();
}
}, 20L, 20L);
}
/**
@@ -194,34 +213,84 @@ public class PlayerBlockLife extends JavaPlugin {
return instance;
}
/**
* 获取方块管理器
*
* @return 方块管理器实例
*/
public PlayerBlockManager getBlockManager() {
return blockManager;
}
/**
* 获取皮肤管理器
*
* @return 皮肤管理器实例
*/
public SkinManager getSkinManager() {
return skinManager;
}
/**
* 获取生命值系统
*
* @return 生命值系统实例
*/
public LifeSystem getLifeSystem() {
return lifeSystem;
}
/**
* 获取配置管理器
*
* @return 配置管理器实例
*/
public ConfigManager getConfigManager() {
return configManager;
}
/**
* 获取消息管理器
*
* @return 消息管理器实例
*/
public MessageManager getMessageManager() {
return messageManager;
}
/**
* 获取游戏状态管理器
*
* @return 游戏状态管理器实例
*/
public GameStateManager getGameStateManager() {
return gameStateManager;
}
/**
* 记录信息级别日志
*
* @param message 日志消息
*/
public void logInfo(String message) {
getLogger().info(message);
}
/**
* 记录警告级别日志
*
* @param message 日志消息
*/
public void logWarning(String message) {
getLogger().warning(message);
}
/**
* 记录错误级别日志
*
* @param message 日志消息
* @param throwable 异常对象
*/
public void logError(String message, Throwable throwable) {
getLogger().log(Level.SEVERE, message, throwable);
}