允许作弊选项和其他玩家作弊选项似乎是一样的效果
rikka0w0 opened this issue · 3 comments
如题。他俩都是调用了同一个PlayerList的setAllowCommandsForAllPlayers方法。
cfg.AllPlayersCheats
:
playerList.setAllowCommandsForAllPlayers(cfg.AllPlayersCheats);
cfg.AllowCommands
:
server.publishServer(cfg.GameMode, cfg.AllowCommands, cfg.port)
public boolean publishServer(@Nullable GameType p_120041_, boolean allowCheats, int p_120043_) {
....
this.getPlayerList().setAllowCommandsForAllPlayers(allowCheats);
....
}
他俩重复了,我感觉把其他玩家作弊这个给去掉就行。原版那个"允许作弊"的效果是,当非服主的玩家加入时,会根据"允许作弊"的值来判断他能不能使用指令。假如说一个玩家已经加入,此时修改"允许作弊"选项不会影响已加入的玩家。
我在把LanServerProperties里一些你这边没有的功能加进来,比如这个:
点进去之后可以在已经开启服务器的情况下方便修改除了端口之外的所有设置。
我还顺便修了一些bug,等弄好发个pr在这
【其他玩家作弊】专门控制其他玩家
这个没毛病
【允许作弊】可用作为控制自己选项
似乎并不是这样的,主机能否作弊还取决于世界的选项(在创建世界的时候就决定了)。这是mc用来判断一个玩家是否可作弊的代码:
public boolean isOp(GameProfile p_11304_) {
return this.ops.contains(p_11304_)
|| this.server.isSingleplayerOwner(p_11304_) && this.server.getWorldData().isAllowCommands()
|| this.allowCommandsForAllPlayers;
}
当服主创建世界的时候如果启用了指令(this.server.getWorldData().isAllowCommands()
返回true),那cfg.AllowCommands
控制的this.allowCommandsForAllPlayers
将被短路掉,表现为服主一直都可以用指令,其他玩家能否用指令取决于他们在进服的时候allowCommandsForAllPlayers
的值(cfg.AllPlayersCheats
)
这个改起来也简单,在ui上做下手脚就行。如果发现服主本身的世界已经启用了指令,那右上角的按钮就显示“始终允许服主作弊”。如果服主本身世界没有启动指令,那右上角的按钮就是可以编辑的,可以选择服主在开服之后是否可以用指令。
此外,这里的“游戏模式”也是只影响新加入玩家的状态。所以我感觉它应该加入“对其他玩家的设置”
刚发现一个bug
MCWifiPnPUnit里的configMap只put没有remove,会越来越大,感觉会导致内存泄漏
Fixed in #47