feat: HoloRemoveAllDuplicatesCommand

This commit is contained in:
bridge 2024-11-28 18:47:56 +01:00
parent bbb9099452
commit 86202954f6
2 changed files with 64 additions and 1 deletions

View file

@ -333,7 +333,8 @@ public class ZNpcsPlus {
.addSubcommand("setitem", new HoloSetItemCommand(npcRegistry))
.addSubcommand("offset", new HoloOffsetCommand(npcRegistry))
.addSubcommand("refreshdelay", new HoloRefreshDelayCommand(npcRegistry))
.addSubcommand("removeduplicate", new HoloRemoveDuplicateCommand(npcRegistry)))
.addSubcommand("removeduplicate", new HoloRemoveDuplicateCommand(npcRegistry))
.addSubcommand("removeallduplicates", new holoRemoveAllDuplicatesCommand(npcRegistry)))
.addSubcommand("action", new MultiCommand(bootstrap.loadHelpMessage("action"))
.addSubcommand("add", new ActionAddCommand(npcRegistry, actionRegistry))
.addSubcommand("clear", new ActionClearCommand(npcRegistry))

View file

@ -0,0 +1,62 @@
package lol.pyr.znpcsplus.commands.hologram;
import lol.pyr.director.adventure.command.CommandContext;
import lol.pyr.director.adventure.command.CommandHandler;
import lol.pyr.director.common.command.CommandExecutionException;
import lol.pyr.znpcsplus.hologram.HologramImpl;
import lol.pyr.znpcsplus.hologram.HologramLine;
import lol.pyr.znpcsplus.hologram.HologramText;
import lol.pyr.znpcsplus.npc.NpcEntryImpl;
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class holoRemoveAllDuplicatesCommand implements CommandHandler {
private final NpcRegistryImpl registry;
public holoRemoveAllDuplicatesCommand(NpcRegistryImpl registry) {
this.registry = registry;
}
@Override
public void run(CommandContext context) throws CommandExecutionException {
context.setUsage(context.getLabel() + " holo removeallduplicates <id>");
for (NpcEntryImpl npcEntry : registry.getAll()) {
HologramImpl hologram = npcEntry.getNpc().getHologram();
List<HologramLine<?>> lines = new ArrayList<>(hologram.getLines());
List<HologramText> textLines = new ArrayList<>();
Iterator<HologramLine<?>> iterator = lines.iterator();
while (iterator.hasNext()) {
HologramLine<?> line = iterator.next();
if (line instanceof HologramText textLine
&& !textLine.getValue().equals(Component.empty())
&& textLines.contains(textLine)) {
iterator.remove();
continue;
}
if (line instanceof HologramText textLine) {
textLines.add(textLine);
}
}
hologram.clearLines();
hologram.addLines(lines);
}
context.send(Component.text("NPCs fixed!", NamedTextColor.GREEN));
}
@Override
public List<String> suggest(CommandContext context) throws CommandExecutionException {
if (context.argSize() == 1) return context.suggestCollection(registry.getModifiableIds());
return Collections.emptyList();
}
}