LAN World Plug-n-Play

LAN World Plug-n-Play

859k Downloads

允许作弊选项和其他玩家作弊选项似乎是一样的效果

rikka0w0 opened this issue · 3 comments

commented

image
如题。他俩都是调用了同一个PlayerList的setAllowCommandsForAllPlayers方法。
image

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里一些你这边没有的功能加进来,比如这个:
image
点进去之后可以在已经开启服务器的情况下方便修改除了端口之外的所有设置。
我还顺便修了一些bug,等弄好发个pr在这

commented

【其他玩家作弊】专门控制其他玩家

这个没毛病

【允许作弊】可用作为控制自己选项

似乎并不是这样的,主机能否作弊还取决于世界的选项(在创建世界的时候就决定了)。这是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上做下手脚就行。如果发现服主本身的世界已经启用了指令,那右上角的按钮就显示“始终允许服主作弊”。如果服主本身世界没有启动指令,那右上角的按钮就是可以编辑的,可以选择服主在开服之后是否可以用指令。

此外,这里的“游戏模式”也是只影响新加入玩家的状态。所以我感觉它应该加入“对其他玩家的设置”

PS:
界面我做了些改进,现在是这样了
image

刚发现一个bug
MCWifiPnPUnit里的configMap只put没有remove,会越来越大,感觉会导致内存泄漏

commented

【允许作弊】可用作为控制自己选项
【其他玩家作弊】专门控制其他玩家

【允许作弊】【其他玩家作弊】不拆分开有时候做不到下面这样
主机启用+其他玩家禁用
2024-12-16_212530

主机禁用+其他玩家启用
2024-12-16_212036

commented

Fixed in #47