首页 > 其他分享 >关于Minecraft bukkit开发的随笔 (玩家/实体带颜色发光机制简谈)

关于Minecraft bukkit开发的随笔 (玩家/实体带颜色发光机制简谈)

时间:2023-05-08 18:37:09浏览次数:62  
标签:bukkit 简谈 实体 玩家 Bukkit Team 发光 Minecraft 记分板

Bukkit(原版同理)的玩家/实体带颜色发光机制简谈

众所周知,在 Bukkit 的代表实体的 org.bukkit.entity.Entity 对象中有 setGlowing(boolean flag) 这么一个方法,根据 Javadoc 中的描述:

点击查看代码
Entity entity = ...

Scoreboard sb = Bukkit.getScoreboardManager().getMainScoreboard();

Team team = sb.registerNewTeam("Team_Name");

team.setColor(ChatColor.RED)

team.addEntry(entity.getUniqueId().toString())

我们可以很容易的得知,这个方法是通过设置实体的 Glowing 属性,来实现让实体发光的效果。

但是我们发现,这样设置的实体发光,其发光颜色是白色的,但并没有在类似的位置找到设置实体发光颜色的方法。因此,该如何让一个实体发出其他颜色的光呢。

其实这就要借助 Minecraft 的记分板(ScoreBoard)功能了。众所周知,ScoreBoard 可以将玩家划分成不同的队伍,然后为队伍设置不同的颜色,此时,当玩家发光时,发光颜色就会变为队伍颜色。所以,我们需要为实体设置计分板队伍。

在过去的版本中,Bukkit 仅支持 OfflinePlayer 作为 Team 对象的成员,但现在,Bukkit 将成员的类型设置成了 String 而不是 OfflinePlayer,这就允许非玩家对象被加入 Team中。

那么,我们应该传入什么样的 String 来代表一个实体呢?很容易联想到就是实体的 UUID 了。

因此,键入以下代码:

点击查看代码
Entity entity = ...

Scoreboard sb = Bukkit.getScoreboardManager().getMainScoreboard();

Team team = sb.registerNewTeam("Team_Name");

team.setColor(ChatColor.RED)

team.addEntry(entity.getUniqueId().toString())

此时,当为 entity 设置 setGlowing(true) 后,就会看到实体产生红色的光芒了。

使用这种方式设置的实体发光,支持诸如动物(Animal),怪物(Monster),掉落物(Item)等等一众的自然实体,除了…玩家。

这是一个令人疑惑的设计:当我们查看 Bukkit 已经弃用的 addPlayer 方法(而不是 addEntry )时,我们看到实现是这样的:

点击查看代码

public void addPlayer(OfflinePlayer player) throws IllegalStateException, IllegalArgumentException {

        Validate.notNull(player, "OfflinePlayer cannot be null");

        this.addEntry(player.getName());

    }

这也就意味着,对于记分板而言,需要用玩家的游戏 ID 来表示这个玩家,而非这个玩家的 UUID,这是需要注意的一点。

同时,还需要注意的一些事情是:对于 ScoreboardManager,Bukkit 还提供了一个 getNewScoreboard() 方法用来产生一个新的子记分板,用以区分主记分板,但 使用这个计分板创建的队伍并不能(通过setColor方法)改变实体颜色。另外,由于 getMainScoreboard() 返回的记分板对象代表的是游戏世界的主记分板,因此,这些计分板数据 不仅可以被 /scoreboard 指令操控,所有修改还将随着世界一齐被保存,因此,当创建 Team 时,请务必检查上一次是否已经创建过一个同名的 Team,避免引发异常。

取自HikariLan's Blog的个人博客 链接:https://my.minecraft.kim/tech/336/bukkit(原版同理)的玩家-实体带颜色发光机制简谈/

标签:bukkit,简谈,实体,玩家,Bukkit,Team,发光,Minecraft,记分板
From: https://www.cnblogs.com/lijiawei18/p/17382773.html

相关文章

  • Minecraft基岩版编辑器已加入预览版,离正式更新指日可待
    Minecraft基岩版编辑器已加入预览版,离正式更新指日可待StarmoeのBlog[TLSD]最近更新了Minecraft的基岩预览版,出了不少新东西,而最受人瞩目的,就是大名鼎鼎的原生世界编......
  • minecraft
    1#include<iostream>2#include"minecraft.h"3TxMinecraftmc;4usingnamespacestd;5intmain(intargc,char**argv){6boolcon=mc.ConnectMi......
  • Minecraft 兴趣开发 | 指令笔记
    运行之后会自动创建一个名字为namespace的存储空间,存入:a:1b /datamergestorageminecraft:namespace{a:1b}  创建挖掘榜计分板,id是dig,显示名称是'ABC挖掘榜'......
  • 简谈源码-Picasso(v2.71828)
    概述:设计模式用到单例和建造者;网络请求使用OkHttp3;缓存算法使用LRU;线程切换使用Handler​​Picasso官网​​Picasso.get().load(url).into(iv);Picasso的常见使用步骤很简单......
  • minecraft mods descrip
    1.【AdvancedFinders】矿物探测器mod显示玩家周围附近矿石的方向(指针显示水平面上可到达的矿石)探测地下深部矿脉(箭头显示最近矿脉的方向(上/下))发现大型矿床时发出信......
  • mysql索引简谈
                           mysql索引简谈 一、什么是索引就好比我们在看一本书的时候,有目录的话,我们可以快速定位到想看......
  • IntellIJ开发简单Minecraft插件(利用paper API)
    有的时候想实现服务器里的一些简单的功能,但是网上又找不到,这个时候可以尝试写一个出来。例如,在游戏里想要实现这样一个功能,玩家噶了之后在聊天栏处显示死亡坐标,这样可以方......
  • Linux搭建minecraft paper服务器
    前置:我的世界java版需要提前搞好java环境,但是一般机器里边要么没有装java,要么装了个java8,在运行时会因为缺乏java环境报错,为了验证你的服务器是否有java环境,输入java-ver......
  • 微软发现跨平台僵尸网络:对Minecraft服务器发起DDoS攻击!
    微软周四标记了一个跨平台僵尸网络,该僵尸网络主要用于对私人Minecraft服务器发起分布式拒绝服务(DDoS)攻击。该僵尸网络称为MCCrash,其特点是具有独特的传播机制,允许其传播到......
  • 自用_Minecraft Java Server配置、指令等等提示
    尚未写完gamemode=(模式)//adventure冒险模式、creative创造模式、survival生存模式、spectator旁观者模式。online-mode=//用于验证玩家是否“在线”,也就是是否是正版......