You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让玩家仅对特定队伍/组用户半隐身且同隐身玩家可互相可见

实现方案

以下分别提供插件开发和原版命令两种实现路径,适配不同的服务端环境:

基于Spigot/Paper插件的实现(灵活度最高,推荐自定义功能使用)

核心思路是通过协议层拦截实体数据包,分对象自定义可见状态,不依赖原版隐身效果的全局规则:

  • 首先给需要启用自定义隐身的玩家添加专属状态标记,同时维护好两个映射关系:隐身玩家的专属分组、可查看半透状态的队伍/用户组白名单
  • 拦截服务端发送给客户端的实体元数据包,按优先级判断查看者的身份做不同处理:
    • 若查看者本身处于自定义隐身状态,不修改任何数据包,双方互看保持完全正常的显示效果
    • 若查看者在该隐身玩家设置的可见白名单组内,修改实体透明度字段为你需要的半透明数值(例如0.5对应50%透明度)
    • 若查看者不在白名单内,直接拦截实体生成/元数据更新包,实现对组外玩家完全隐身的效果
  • 参考代码片段(基于ProtocolLib实现):
// 注册实体元数据发包监听器
ProtocolLibrary.getProtocolManager().addPacketListener(
  new PacketAdapter(yourPluginInstance, PacketType.Play.Server.ENTITY_METADATA) {
    @Override
    public void onPacketSending(PacketEvent event) {
      Player viewer = event.getPlayer();
      Entity targetEntity = event.getPacket().getEntityModifier(event).read(0);
      // 仅处理玩家实体的自定义隐身逻辑
      if (!(targetEntity instanceof Player hiddenPlayer) || !isCustomHidden(hiddenPlayer)) {
        return;
      }
      // 隐身玩家互看正常,不修改数据包
      if (isCustomHidden(viewer)) {
        return;
      }
      // 白名单内玩家可见半透效果
      if (isInVisibleGroup(viewer, hiddenPlayer.getAllowGroups())) {
        List<MetadataValue> meta = event.getPacket().getMetadataModifier().read(0);
        // 修改实体透明度为半透
        meta.set(EntityMetaIndex.ALPHA, MetadataValue.of(0.5f));
        event.getPacket().getMetadataModifier().write(0, meta);
      } else {
        // 非白名单玩家完全看不到隐身玩家
        event.setCancelled(true);
      }
    }
  }
);

基于原版命令/数据包的实现(无需额外插件,适合原版服务端)

通过原版队伍规则和隐身效果组合实现,适配1.13+版本的服务端:

  • 首先创建两个专属队伍:custom_hidden(存放处于隐身状态的玩家)、visible_group(存放可查看半透效果的玩家)
  • 配置队伍规则:给custom_hidden队伍开启seeFriendlyInvisibles规则,确保同队的隐身玩家可以互相看到完整状态
  • 给custom_hidden队伍的玩家添加1级隐身效果(原版1级隐身默认显示半透明,关闭粒子效果)
  • 配置两个队伍的友好关系,让visible_group内的玩家可以看到custom_hidden玩家的半透状态,其他玩家看不到隐身玩家
  • 参考命令:
# 创建两个队伍
team add custom_hidden
team add visible_group

# 配置隐身玩家队伍规则:同队可见隐身状态,关闭友伤
team modify custom_hidden seeFriendlyInvisibles true
team modify custom_hidden friendlyFire false
team modify visible_group friendlyFire false

# 给隐身玩家添加永久1级隐身效果,隐藏粒子
effect give @a[team=custom_hidden] minecraft:invisibility 999999 0 true

# 加入队伍示例
team join custom_hidden <隐身玩家ID>
team join visible_group <可查看半透效果的玩家ID>

内容的提问来源于stack exchange,提问作者Quivii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:09:02