使用 commandBlockOutput=false 強制列印消息記錄
我正在執行 Vanilla Minecraft: JE Server (v. 1.12.2),到目前為止一切順利。
我遇到的只有一個問題:griefers。我已經建立了一個系統,記錄玩家使用違禁物品(熔岩桶、TNT 等)的次數,在達到一定限制時警告他們,如果使用者繼續向這些塊發送垃圾郵件,則添加它們給一個被禁玩家的“團隊”,他們一直在被禁止,
/kill
直到我正確地禁止他們(這是最接近通過命令塊禁止的東西)。然而,一個人可以用打火石點燃一棵樹,隨著火勢的蔓延燒毀整片森林並逃脫懲罰。所以我想要一個命令塊或函式向伺服器控制台列印一條消息(因此它出現在日誌中),看起來像這樣:**PlayerName** used FlintAndSteel
顯然,我們談論的是服務/技術資訊,所以它根本不需要漂亮。考慮到每次執行的命令塊和函式的數量,我想要的是驗證哪個玩家在某個時間對伺服器感到不滿,而無需打開會在伺服器控制台中造成大量垃圾郵件的 commandBlockOutput。
這是一種可能的解決方案:
首先添加一個記分牌來跟踪打火石和鋼材的使用情況(您可能已經擁有):
/scoreboard objectives add flint stat.useItem.minecraft.flint_and_steel
然後在命令塊中使用這些命令在生成塊中放置一個滴答作響的命令鏈:
execute @a[score_flint_min=1] ~ ~ ~ gamerule logAdminCommands true gamerule logAdminCommands false scoreboard players set @p[score_flint_min=1] flint 0
鍊式命令塊(#2 和#3)可以是有條件的(並且它們應該是有條件的)。
如果“燧石”記分板上有一個得分為 1 的玩家(所以他使用了燧石物品),第一個命令塊會臨時啟用調試日誌,這已經是第一個向遊戲發送調試日誌輸出的東西日誌。並且因為它是從帶有分數的玩家執行的,所以日誌條目還包含該玩家的名稱。
然後第二個命令塊再次停用調試日誌記錄。這已經不會再次發送到日誌,因為調試日誌再次關閉。
第三個命令塊再次重置“燧石”分數。由於調試日誌記錄仍處於關閉狀態,因此不會向日誌發送消息。
因此,每次有人使用打火石時,您都會得到與此類似的日誌輸出:
17:30:08 net.minecraft.server.MinecraftServer [FaRo1: Game rule logAdminCommands has been updated to true]
這看起來就像管理員手動進入
/gamerule logAdminCommands true
聊天時一樣,但這不應該經常發生,因為您可能知道伺服器管理員的姓名,您可以通過名稱看到它不是手動輸入的(因為它會失敗) . 如果您可能會混淆這種情況,那麼只需交換命令塊行中的第二個和第三個命令,以獲得每次使用打火石的第二個輸出。您還可以在第一個和第二個命令塊之間放置更多命令塊,並提供額外的輸出。例如,您可以使用這樣的系統輸出玩家的座標。
歸功於臨時啟動調試日誌記錄並在之後再次將其關閉的想法:alex2003super