mohuang521
写了一个简单的GUI界面,玩家放入物品后点击确认时候会跳到另一个GUI界面,但是这相当于之前的GUI界面关闭了,因为之前防止GUI界面吞物品所以写了一个关闭事件如果关闭了这个特定的GUI界面物品会还给玩家,有没有办法暂时保存那些物品等第二个GUI界面操作执行完了再回到第一个GUI界面
流程如下
玩家打开GUI-A放入物品,点击确定跳到GUI-B(GUI-A中的物品不会还给玩家),玩家在GUI-B中点击确认的话会执行一些东西(例如清空GUI-A物品并执行某些操作),如果点击GUI-B中的取消的话会回到GUI-A并且GUI-A中的物品完好摆放

q549365815
把这些数据放到一个Map中  任何后续操作都修改这个Map

Dante_7
都跟你说了就是不听, 创建一个类, 包含两个 Inventory 对象, 然后在这个类里单独写一个监听器, 这个监听器只关心这两个 Inv 对象的动作, 不关心别的. 然后在类中弄一个变量, 用作控制监听器的行为, 监听器通过读写这个变量来决定保存与否, 关闭还是退回上一个界面.

用箱子界面搞 GUI 最不能把 Inventory 当成界面来操作, 因为你根本无法往 inv 里添加字段, 也无法让它和其他的 inv 产生关系, 而且没有包装的类你监听器只能堆在一起, 界面多了就得 equals 一个一个判断界面名字, 可读性极差, 可维护性=0.

你要是非不愿意创建一个统一的 GUI 类也行, 弄个公共变量也能存数据. 不过就是代码看着比较烂而已

Dante_7
http://www.mcbbs.net/thread-693784-1-1.html
我在第三点说的就非常明确, 要单独的监听器, 不要统一的监听器, 好好读帖

创建一个新的类又不麻烦, 你在里面写一个数组, 保存数据, 爱怎么折腾怎么折腾, 愿意持久化保存直接在类里面些方法就行了, 这么好的解决方案你怎么就是不听呢

而且你今年二战, 别写插件了, 耽误时间. 别指望这些人能感谢你


q549365815
http://www.mcbbs.net/thread-774705-1-1.html

mohuang521
q549365815 发表于 2019-5-24 15:50
http://www.mcbbs.net/thread-774705-1-1.html

这个可以看源码嘛?

mohuang521
q549365815 发表于 2019-5-24 15:50
http://www.mcbbs.net/thread-774705-1-1.html

感觉这还不是我现在的技术可以结合的= =!

roj234
Map<Integer,ItemStack> .....
= new HashMap<>();
// onInit
for(int slotId=0;slotId<inv.size();slotId++){
    map.put(slotId, inv.getStackInSlot(slotId));
}
每个GUI都创建一次
如果你就是不愿意也可以这样:
Map<Player,Map<Integer,ItemStack>>
不过会麻烦许多就是了

mohuang521
roj234 发表于 2019-5-24 18:01
Map .....
= new HashMap();
// onInit

但是依然有个问题是你切换到GUI-B得时候GUI-A的物品会回到玩家背包,因为背包关闭事件写的关闭GUI-A会自动还给玩家物品

mohuang521
q549365815 发表于 2019-5-24 15:43
把这些数据放到一个Map中  任何后续操作都修改这个Map

但是依然有个问题是你切换到GUI-B得时候GUI-A的物品会回到玩家背包,因为背包关闭事件写的关闭GUI-A会自动还给玩家物品

q549365815
mohuang521 发表于 2019-5-24 18:36
但是依然有个问题是你切换到GUI-B得时候GUI-A的物品会回到玩家背包,因为背包关闭事件写的关闭GUI-A会自动 ...

你这设计模式都错了 建议重构

roj234
mohuang521 发表于 2019-5-24 18:36
但是依然有个问题是你切换到GUI-B得时候GUI-A的物品会回到玩家背包,因为背包关闭事件写的关闭GUI-A会自动 ...

new GuiB(guiA)

mohuang521
q549365815 发表于 2019-5-24 18:47
你这设计模式都错了 建议重构

难道要点击的时候重新画一遍GUI的方法来绕过关闭GUI重新打开嘛= =!

q549365815
mohuang521 发表于 2019-5-24 18:58
难道要点击的时候重新画一遍GUI的方法来绕过关闭GUI重新打开嘛= =!

你说之前写了个关于 在玩家关闭Inventory的时候 会把 Inventory 里面的 Item 返回给玩家
那么给 这个方法添加个开关器


q549365815
建议还是重新写吧  

mohuang521
q549365815 发表于 2019-5-24 19:01
你说之前写了个关于 在玩家关闭Inventory的时候 会把 Inventory 里面的 Item 返回给玩家
那么给 这个方法 ...

我有设置过一个全局变量来做,比如点击GUI-A要跳转到B的时候将静态变量stats设置为+1,但是发现如果同时有一个玩家也跳转了就会再+1,才知道这里的全局变量是真的全局变量,全游戏通用只要不重启

第一页 上一页 下一页 最后一页