From cd44d98365ea90da6453fd921a7bb50dd3474bfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AD=B1=E5=82=91?= Date: Fri, 13 Oct 2023 23:22:26 +0800 Subject: [PATCH 1/2] Add reset scene tag subcommand --- .../command/commands/SetSceneTagCommand.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/java/emu/grasscutter/command/commands/SetSceneTagCommand.java b/src/main/java/emu/grasscutter/command/commands/SetSceneTagCommand.java index 3406cce66e8..e6cd76a357e 100644 --- a/src/main/java/emu/grasscutter/command/commands/SetSceneTagCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/SetSceneTagCommand.java @@ -12,7 +12,7 @@ @Command( label = "setSceneTag", aliases = {"tag"}, - usage = {" "}, + usage = {" "}, permission = "player.setscenetag", permissionTargeted = "player.setscenetag.others") public final class SetSceneTagCommand implements CommandHandler { @@ -20,7 +20,7 @@ public final class SetSceneTagCommand implements CommandHandler { @Override public void execute(Player sender, Player targetPlayer, List args) { - if (args.size() == 0) { + if (args.isEmpty()) { sendUsageMessage(sender); return; } @@ -39,6 +39,8 @@ public void execute(Player sender, Player targetPlayer, List args) { if (actionStr.equals("unlockall")) { unlockAllSceneTags(targetPlayer); return; + } else if (actionStr.equals("reset")) { + resetAllSceneTags(targetPlayer); } else { CommandHandler.sendTranslatedMessage(sender, "commands.execution.argument_error"); return; @@ -49,7 +51,7 @@ public void execute(Player sender, Player targetPlayer, List args) { var sceneData = sceneTagData.values().stream().filter(sceneTag -> sceneTag.getId() == userVal).findFirst(); - if (sceneData == null) { + if (sceneData.isEmpty()) { CommandHandler.sendTranslatedMessage(sender, "commands.generic.invalid.id"); return; } @@ -80,15 +82,13 @@ private void unlockAllSceneTags(Player targetPlayer) { .toList() .forEach( sceneTag -> { - if (targetPlayer.getSceneTags().get(sceneTag.getSceneId()) == null) { - targetPlayer.getSceneTags().put(sceneTag.getSceneId(), new HashSet<>()); - } + targetPlayer.getSceneTags().computeIfAbsent(sceneTag.getSceneId(), k -> new HashSet<>()); targetPlayer.getSceneTags().get(sceneTag.getSceneId()).add(sceneTag.getId()); }); // Remove default SceneTags, as most are "before" or "locked" states allData.stream() - .filter(sceneTag -> sceneTag.isDefaultValid()) + .filter(SceneTagData::isDefaultValid) // Only remove for big world as some other scenes only have defaults .filter(sceneTag -> sceneTag.getSceneId() == 3) .forEach( @@ -99,6 +99,17 @@ private void unlockAllSceneTags(Player targetPlayer) { this.setSceneTags(targetPlayer); } + private void resetAllSceneTags(Player targetPlayer) { + targetPlayer.getSceneTags().clear(); + // targetPlayer.applyStartingSceneTags(); // private + GameData.getSceneTagDataMap().values().stream() + .filter(SceneTagData::isDefaultValid) + .forEach(sceneTag -> { + targetPlayer.getSceneTags().computeIfAbsent(sceneTag.getSceneId(), k -> new HashSet<>()); + targetPlayer.getSceneTags().get(sceneTag.getSceneId()).add(sceneTag.getId()); + }); + } + private void setSceneTags(Player targetPlayer) { targetPlayer.sendPacket(new PacketPlayerWorldSceneInfoListNotify(targetPlayer)); } From bc2e6b46afa33c19b21b53e580e2c224bd4648ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AD=B1=E5=82=91?= Date: Fri, 13 Oct 2023 23:30:17 +0800 Subject: [PATCH 2/2] Fix Control Flow --- .../emu/grasscutter/command/commands/SetSceneTagCommand.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/emu/grasscutter/command/commands/SetSceneTagCommand.java b/src/main/java/emu/grasscutter/command/commands/SetSceneTagCommand.java index e6cd76a357e..26da2b8f129 100644 --- a/src/main/java/emu/grasscutter/command/commands/SetSceneTagCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/SetSceneTagCommand.java @@ -39,8 +39,9 @@ public void execute(Player sender, Player targetPlayer, List args) { if (actionStr.equals("unlockall")) { unlockAllSceneTags(targetPlayer); return; - } else if (actionStr.equals("reset")) { + } else if (actionStr.equals("reset") || actionStr.equals("restore")) { resetAllSceneTags(targetPlayer); + return; } else { CommandHandler.sendTranslatedMessage(sender, "commands.execution.argument_error"); return;