本帖最后由 炼药锅 于 2021-12-4 21:37 编辑 
 
 
选自RarityEG的教程。我好奇为什么不使用getInventory()呢?
选自RarityEG的教程。我好奇为什么不使用getInventory()呢?
说句实话,我觉得e.getView()可能是合适的
复制代码
为什么采用getOpenInventory我觉得不如问问本人 @RarityEG
- /**
 
-      * Gets the view object itself
 
-      *
 
-      * [url=home.php?mod=space&uid=491268]@Return[/url] InventoryView
 
-      */
 
-     @NotNull
 
-     public InventoryView getView() {
 
-         return transaction;
 
- }
为什么采用getOpenInventory我觉得不如问问本人 @RarityEG
洞穴夜莺 发表于 2021-12-4 18:56
说句实话,我觉得e.getView()可能是合适的
(是可以啊,没问题(
选用 getOpenInventory 只是确保这个 GUI 已经被玩家打开并且正在操作(当然是我猜的
@炼药锅 getInventory 的返回值类型不对
RarityEG 发表于 2021-12-4 20:35
(是可以啊,没问题(
选用 getOpenInventory 只是确保这个 GUI 已经被玩家打开并且正在操作(当然是我猜 ...
getOpenInventory返回的是玩家当前打开的GUI
但是在这个例子使用玩家点击的GUI(即使已经关闭)不是更合理吗?(试想原本玩家在操作一个GUI,然后另一个插件在处理事件时打开了你的GUI,然后按你这个逻辑玩家对那个已经关闭的GUI的操作就变成了对你的GUI的操作?)
没太明白
洞穴夜莺 发表于 2021-12-4 21:04
getOpenInventory返回的是玩家当前打开的GUI
但是在这个例子使用玩家点击的GUI(即使已经关闭)不是更合 ...
参考:
https://bdn.tdiant.net/#/unit/3-1
(那时候我才刚学插件开发,后来这个写法就成习惯了(
getInventory()方法的返回值是Inventory getOpenInventory()方法的返回值是InventoryView 用途决定了使用什么方法
 本帖最后由 炼药锅 于 2021-12-4 22:28 编辑 
@Override
public void onEnable() {
Inventory inv = Bukkit.createInventory(Bukkit.getPlayer("RarityEG"), 3 * 9, "GUI 标题");
Bukkit.getPluginManager().registerEvents(new Listener() {
@EventHandler
public void onPlayerJoinEvent(PlayerJoinEvent e) {
e.getPlayer().openInventory(inv);
}
@EventHandler
public void onInventoryClickEvent(InventoryClickEvent e) {
if (inv.equals(e.getInventory())) {
e.setCancelled(true);
}
}
}, this);
}
1.这样也可以吧?2.Inventory和InventoryView有什么区别?
@RarityEG
RarityEG 发表于 2021-12-4 20:35
(是可以啊,没问题(
选用 getOpenInventory 只是确保这个 GUI 已经被玩家打开并且正在操作(当然是我猜 ...
@Override
public void onEnable() {
Inventory inv = Bukkit.createInventory(Bukkit.getPlayer("RarityEG"), 3 * 9, "GUI 标题");
Bukkit.getPluginManager().registerEvents(new Listener() {
@EventHandler
public void onPlayerJoinEvent(PlayerJoinEvent e) {
e.getPlayer().openInventory(inv);
}
@EventHandler
public void onInventoryClickEvent(InventoryClickEvent e) {
if (inv.equals(e.getInventory())) {
e.setCancelled(true);
}
}
}, this);
}
1.这样也可以吧?2.Inventory和InventoryView有什么区别?
@RarityEG
炼药锅 发表于 2021-12-4 22:23
@Override
public void onEnable() {
Inventory inv = Bukkit.createInventory(Bukkit.getPlayer("Rar ...
1. 你可以试试啊(
2.
Inventory:
Interface to the various inventories.
比如一个箱子里面的 27 格就是一个 Inventory,表示物品栏内容
InventoryView:
Represents a view linking two inventories and a single player (whose inventory may or may not be one of the two).
当你打开箱子时,上方箱子的 27 格,玩家的 36 格背包合起来显示给玩家的那个可见窗口就是 InventoryView
所以 Inventory 是没有 Title 的,InventoryView 才有
(说法本身可能不很正确,但基本上是这样