generated from NeoForgeMDKs/MDK-1.21-ModDevGradle
-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
📋 升级概述
基于 MITE_Research Issue #13 中的深度分析,对现有的 RunePortalBlock 进行全面升级,实现完整的符文门传送系统。
🎯 核心功能升级
1. 🌐 多维度传送系统
- 维度检测: 智能检测传送门所在维度
- 跨维度传送: 支持主世界 ↔ 地狱 ↔ 末地的完整传送
- 传送方向记录: 实现
teleportDirection变量保存传送历史 - 返回机制: 支持传送历史回溯和"返回上一个位置"功能
2. 🎨 视觉反馈系统(基于MITE GuiIngame分析)
- 维度颜色编码:
- 主世界: RGB(53,159,255) - 清爽蓝色调
- 地狱: RGB(228,123,78) - 炽热橙红调
- 末地: RGB(68,1,180) - 神秘紫色调
- 20帧渐变动画: 标准化的1秒传送过渡效果
- 全屏沉浸效果: Z深度-90.0F的最前层渲染
- runegate_counter机制: 客户端传送状态计时器
3. 🛡️ 玩家状态检查系统
- 环境安全检测:
- 地面稳定性验证
- 液体环境检测
- 障碍物扫描(蜘蛛网等)
- 玩家状态验证:
- 生理条件检查
- 装备兼容性验证
- 载具状态处理
- 权限管理: 特殊状态下的传送权限控制
4. 📊 数据追踪与成就系统
- 使用统计: 客户端-服务端双重记录
- 传送距离追踪: 用于成就解锁
- 世界级数据: 按维度分别记录使用数据
- 成就集成: 多人环境下的成就协调
🔧 技术实现方案
A. 核心类扩展
1. RunePortalBlock 升级
// 新增字段
private static final Map<UUID, Vec3> TELEPORT_DIRECTION = new HashMap<>();
private static final Map<UUID, ResourceKey<Level>> LAST_DIMENSION = new HashMap<>();
private static final Map<UUID, Long> TELEPORT_STATISTICS = new HashMap<>();
// 维度颜色定义
public static final Map<ResourceKey<Level>, DustParticleOptions> DIMENSION_PARTICLES = Map.of(
Level.OVERWORLD, new DustParticleOptions(new Vector3f(53/255f, 159/255f, 255/255f), 1.0F),
Level.NETHER, new DustParticleOptions(new Vector3f(228/255f, 123/255f, 78/255f), 1.0F),
Level.END, new DustParticleOptions(new Vector3f(68/255f, 1/255f, 180/255f), 1.0F)
);2. 新增客户端渲染类
public class RunePortalRenderer {
private static int runegate_counter = 0;
public static void renderRunegateEffect(GuiGraphics guiGraphics, Player player) {
if (runegate_counter > 0) {
ResourceKey<Level> dimension = player.level().dimension();
Vector3f color = getDimensionColor(dimension);
float alpha = Math.min(runegate_counter / 20.0F, 1.0F);
renderFullscreenOverlay(guiGraphics, color, alpha);
runegate_counter--;
}
}
}B. 传送逻辑重构
1. 智能目标选择
private BlockPos calculateTeleportDestination(ServerPlayer player, ServerLevel currentLevel) {
ResourceKey<Level> currentDim = currentLevel.dimension();
ResourceKey<Level> targetDim = getTargetDimension(currentDim);
// 记录传送方向
TELEPORT_DIRECTION.put(player.getUUID(), player.position());
LAST_DIMENSION.put(player.getUUID(), currentDim);
return findSafeDestination(player.server.getLevel(targetDim), player);
}2. 安全传送验证
private boolean canPlayerTeleport(ServerPlayer player, BlockPos destination) {
// 环境安全检查
if (!isGroundStable(player.level(), destination)) return false;
if (isInLiquid(player.level(), destination)) return false;
if (hasObstacles(player.level(), destination)) return false;
// 玩家状态检查
if (player.isInBed()) return false;
if (player.isSpectator()) return false;
return true;
}C. 客户端集成
1. Mixin注入GUI渲染
@Mixin(Gui.class)
public class GuiMixin {
@Inject(method = "render", at = @At("TAIL"))
private void renderRunePortalEffects(GuiGraphics guiGraphics, float partialTick, CallbackInfo ci) {
RunePortalRenderer.renderRunegateEffect(guiGraphics, Minecraft.getInstance().player);
}
}2. 网络数据包
public class RunePortalPacket {
public static void sendTeleportStart(ServerPlayer player, ResourceKey<Level> targetDim) {
// 发送客户端开始传送效果
}
public static void sendTeleportComplete(ServerPlayer player) {
// 发送传送完成,重置效果
}
}📁 文件结构
新增文件
src/main/java/huix/infinity/
├── common/world/block/
│ └── RunePortalBlock.java (升级)
├── common/client/
│ ├── renderer/RunePortalRenderer.java (新增)
│ └── gui/RunePortalOverlay.java (新增)
├── common/network/
│ └── packet/RunePortalPacket.java (新增)
├── mixin/client/
│ └── GuiMixin.java (新增)
└── common/util/
└── TeleportUtil.java (新增)
资源文件
src/main/resources/
├── assets/infinityway/
│ ├── textures/gui/
│ │ └── rune_portal_overlay.png (新增)
│ └── sounds/
│ ├── rune_portal_activate.ogg (新增)
│ └── rune_portal_complete.ogg (新增)
└── data/infinityway/
└── advancements/
└── rune_portal_explorer.json (新增)
🎮 用户体验升级
1. 传送过程
- 激活检测: 玩家进入传送门 → 安全检查 → 开始传送序列
- 视觉反馈: 维度色彩覆盖屏幕 → 20帧渐变动画 → 沉浸式体验
- 传送执行: 记录方向 → 跨维度传送 → 安全着陆验证
- 完成效果: 到达特效 → 统计更新 → 成就检查
2. 多维度支持
- 主世界 → 地狱: 蓝色 → 橙红色过渡,火焰粒子效果
- 地狱 → 末地: 橙红色 → 紫色过渡,虚空粒子效果
- 末地 → 主世界: 紫色 → 蓝色过渡,星光粒子效果
3. 返回机制
- 传送历史: 自动记录最近3次传送位置
- 快速返回: 潜行+右键传送门可返回上一位置
- 方向指示: 传送门会显示指向上次传送方向的粒子
🏆 成就系统
新增成就
- 🌟 初次传送: 首次使用符文门传送
- 🌍 维度旅行者: 使用符文门访问所有三个维度
- 🔄 归途: 使用返回功能回到起始位置
- 📏 远征: 单次传送距离超过10000格
- ⏱️ 频繁旅行者: 24小时内传送50次
📊 兼容性保证
现有功能保留
- ✅ 保持现有的传送门结构检测
- ✅ 兼容现有的粒子效果系统
- ✅ 保留传送延迟和冷却机制
- ✅ 保持与PortalInterceptHandler的集成
配置选项
public class RunePortalConfig {
public static boolean ENABLE_DIMENSION_COLORS = true;
public static boolean ENABLE_FULLSCREEN_EFFECTS = true;
public static boolean ENABLE_TELEPORT_HISTORY = true;
public static int MAX_TELEPORT_HISTORY = 3;
public static int TELEPORT_COOLDOWN_TICKS = 60;
}🔮 未来扩展
计划功能
- 符文组合: 不同符文石组合影响传送目标
- 传送网络: 多个传送门之间的连接网络
- 能量系统: 传送消耗特定资源或经验
- 坐标绑定: 绑定特定坐标的精确传送
这个升级将把简单的传送门系统转变为一个功能完整、视觉震撼的跨维度传送网络,为玩家提供沉浸式的传送体验。
Metadata
Metadata
Assignees
Labels
No labels