跳转至

管理器

​ GUI管理器进行渲染、点击事件处理、菜单生成与展示等关键功能。关于具体用法请见教程页。

名称 GUI管理器
包路径 util2.develop.gui.manager
开发者 kunjinkao_xs

class GUIManager

  • 基类:object
  • GUI管理器,负责存储GUI控制器对象,从而存储临时数据和处理点击功能,并在GUI关闭时及时清理内存。每个脚本只需要构造一次。

构造函数

GUIManager()

方法

mark(player, controller)

  • 参数:
    • player: Player - 使用GUI控制器对象的玩家
    • controller: GUIController - 玩家使用的控制器对象
  • 标记玩家使用的控制器对象

remove(player)

  • 参数:
    • player: Player - 使用GUI控制器对象的玩家
  • 删除玩家使用的控制器对象。常与InventoryCloseEvent配合使用,防止内存泄露。

get(player, holderName=None)

  • 参数:
    • player: Player - 玩家
    • holderName: str | None - GUI构造时设置的名称,默认None为不判断名称
  • 返回:
    • GUIController: 当存在玩家使用的GUI控制器对象时返回
    • EmptyGUIController: 不存在玩家使用的GUI控制器对象时返回

class GUIController

  • 基类:GUIConstructor
  • GUI控制器,负责具体GUI渲染、打开和点击事件处理。开发的GUI应为本类的派生类。

构造函数

GUIController(player, data=None)

  • 参数:
    • player: Player - 使用GUI控制器对象的玩家
    • data: dict - 数据字典,默认None为空字典,仅供开发者选用
  • GUI控制器

方法

getHolderName()

  • 获取GUI名称
  • 返回:str - GUI构造时设置的名称

setTitle(title)

  • 参数:
    • title: str - GUI标题
  • 设置GUI标题

setGUIManager(guiManager)

  • 参数:
    • guiManager: GUIManager - 本脚本的GUI管理器
  • 在GUIManager的对象标记本GUI控制器对象,以便处理点击事件等,需在派生类构造时标记

setInfo(holderName, title, size=0)

  • 参数:
    • holderName: str - GUI名称,建议为形如script.a.b
    • title: str - GUI标题
    • size: int - 菜单大小,为不超过54的9的整数倍,默认0为根据内容尺寸的最小值
  • 设置GUI的基本信息,需在派生类构造时标记

getPlayer()

  • 获取GUI控制器对象的玩家
  • 返回:Player - 使用GUI控制器对象的玩家

toInventory()

  • 转为Inventory,常用于GUI创建完成准备展示给玩家时,注意setInfo和尺寸
  • 返回:Inventory - 生成的GUI

render()

  • 渲染器,用于打开GUI前运行以渲染内容,需要开发者在派生类自行实现
  • 抛出:NotImplementedError

onClick(e)

  • 参数:
  • 点击处理,需要开发者在派生类自定义功能,不重写时仅取消事件

openWithRender()

  • 异步渲染后打开。打开GUI的一般方法,减少复杂GUI渲染对性能的影响

openWithRenderSync()

  • 同步渲染后打开。建议优先选用异步,除非调试时查看具体报错信息(异步情况下报错不直接)

open()

  • 打开已渲染的GUI。一般无需使用,谨慎直接使用,用时充分测试是否能够触发事件

update()

  • 刷新已打开的GUI。一般用于重新覆盖界面后,刷新GUI来展示给玩家

class EmptyGUIController

  • 空的GUIController。用于未给玩家设置GUIController时处理点击事件等的“鸭子类型”,避免漏洞扩大化,并报错提示开发者

构造函数

EmptyGUIController(player)

  • 参数:
    • player: Player - 使用GUI控制器对象的玩家
  • 出于安全性设计的空GUIController

getHolderName()

  • 获取GUI名称
  • 返回:str - 仅会返回EmptyGUIController

onClick(e)

  • 参数:
  • 点击处理,直接取消事件,发送消息提醒玩家,并抛出错误提醒开发者
  • 抛出:KeyError

openWithRender()

  • 返回:None

openWithRenderSync()

  • 返回:None

open()

  • 返回:None

class RadarGUIController

  • 基类:GUIController
  • 雷达GUIController。用于显示玩家附近的位置,详见/dcpt中查找附近邮电设施

构造函数

RadarGUIController(player, contents, zoom)

  • 参数:
    • player: Player - 使用GUI控制器对象的玩家
    • contents: iterable - 要展示的内容们,每个对象必须有.getLocation()方法
    • zoom: float - 缩放等级,GUI中的每格代表实际的zoom格,可设为“0.01”
  • 雷达GUIController

方法

spawnIcon(item)

  • 参数:
    • item: Any - 玩家输入contents的元素
  • 根据元素生成图标ItemStack需要开发者在派生类自行实现
  • 抛出:NotImplementedError

spawnRadar()

  • 生成雷达图。距离较近的数个位置,显示最近位置,并标注“..临项已折叠..”

vectorToIndex(vec, zoom, mx=8, mz=5, forceMiddle=True)

  • 参数:
    • vec: Vector - 从原点指向点位的向量
    • zoom: float - 缩放等级,同上
    • mx: int - 界面内x轴长上限,默认8
    • mz: int - 界面内z轴长上限,默认5
    • forceMiddle: bool - 是否强制绕开原点,默认是(绕开)
  • 向量转为位置,一般无需自行使用本方法
  • 返回:
    • int - 在GUI内的位置索引
    • None - 超过限界不予显示