feat: HoloRemoveDuplicateCommand
This commit is contained in:
parent
b09a6f0c2e
commit
bbb9099452
5 changed files with 81 additions and 6 deletions
|
@ -8,7 +8,7 @@ runServer {
|
||||||
javaLauncher = javaToolchains.launcherFor {
|
javaLauncher = javaToolchains.launcherFor {
|
||||||
languageVersion = JavaLanguageVersion.of(21)
|
languageVersion = JavaLanguageVersion.of(21)
|
||||||
}
|
}
|
||||||
minecraftVersion "1.20.6"
|
minecraftVersion "1.21.3"
|
||||||
}
|
}
|
||||||
|
|
||||||
processResources {
|
processResources {
|
||||||
|
@ -17,9 +17,9 @@ processResources {
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly "me.clip:placeholderapi:2.11.6" // Placeholder support
|
compileOnly "me.clip:placeholderapi:2.11.6" // Placeholder support
|
||||||
compileOnly "com.github.retrooper:packetevents-spigot:2.6.1-SNAPSHOT" // Packets
|
implementation "com.google.code.gson:gson:2.10.1" // JSON parsing
|
||||||
implementation "com.google.code.gson:gson:2.11.0" // JSON parsing
|
|
||||||
implementation "org.bstats:bstats-bukkit:3.0.2" // Plugin stats
|
implementation "org.bstats:bstats-bukkit:3.0.2" // Plugin stats
|
||||||
|
implementation "com.github.retrooper:packetevents-spigot:2.6.0" // Packets
|
||||||
implementation "space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.1" // Configs
|
implementation "space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.1" // Configs
|
||||||
implementation "lol.pyr:director-adventure:2.1.2" // Commands
|
implementation "lol.pyr:director-adventure:2.1.2" // Commands
|
||||||
|
|
||||||
|
@ -37,10 +37,12 @@ shadowJar {
|
||||||
relocate "org.objectweb.asm", "lol.pyr.znpcsplus.libraries.asm"
|
relocate "org.objectweb.asm", "lol.pyr.znpcsplus.libraries.asm"
|
||||||
relocate "me.lucko.jarrelocator", "lol.pyr.znpcsplus.libraries.jarrelocator"
|
relocate "me.lucko.jarrelocator", "lol.pyr.znpcsplus.libraries.jarrelocator"
|
||||||
|
|
||||||
// When changing anything here remember to also update the bootstrap
|
|
||||||
relocate "org.bstats", "lol.pyr.znpcsplus.libraries.bstats"
|
relocate "org.bstats", "lol.pyr.znpcsplus.libraries.bstats"
|
||||||
|
relocate "net.kyori", "lol.pyr.znpcsplus.libraries.kyori"
|
||||||
relocate "org.checkerframework", "lol.pyr.znpcsplus.libraries.checkerframework"
|
relocate "org.checkerframework", "lol.pyr.znpcsplus.libraries.checkerframework"
|
||||||
relocate "com.google.gson", "lol.pyr.znpcsplus.libraries.gson"
|
relocate "com.google.gson", "lol.pyr.znpcsplus.libraries.gson"
|
||||||
|
relocate "com.github.retrooper.packetevents", "lol.pyr.znpcsplus.libraries.packetevents.api"
|
||||||
|
relocate "io.github.retrooper.packetevents", "lol.pyr.znpcsplus.libraries.packetevents.impl"
|
||||||
relocate "org.yaml.snakeyaml", "lol.pyr.znpcsplus.libraries.snakeyaml"
|
relocate "org.yaml.snakeyaml", "lol.pyr.znpcsplus.libraries.snakeyaml"
|
||||||
relocate "space.arim.dazzleconf", "lol.pyr.znpcsplus.libraries.dazzleconf"
|
relocate "space.arim.dazzleconf", "lol.pyr.znpcsplus.libraries.dazzleconf"
|
||||||
relocate "lol.pyr.director", "lol.pyr.znpcsplus.libraries.command"
|
relocate "lol.pyr.director", "lol.pyr.znpcsplus.libraries.command"
|
||||||
|
@ -48,4 +50,4 @@ shadowJar {
|
||||||
minimize()
|
minimize()
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.assemble.dependsOn shadowJar
|
tasks.assemble.dependsOn shadowJar
|
|
@ -332,7 +332,8 @@ public class ZNpcsPlus {
|
||||||
.addSubcommand("set", new HoloSetCommand(npcRegistry))
|
.addSubcommand("set", new HoloSetCommand(npcRegistry))
|
||||||
.addSubcommand("setitem", new HoloSetItemCommand(npcRegistry))
|
.addSubcommand("setitem", new HoloSetItemCommand(npcRegistry))
|
||||||
.addSubcommand("offset", new HoloOffsetCommand(npcRegistry))
|
.addSubcommand("offset", new HoloOffsetCommand(npcRegistry))
|
||||||
.addSubcommand("refreshdelay", new HoloRefreshDelayCommand(npcRegistry)))
|
.addSubcommand("refreshdelay", new HoloRefreshDelayCommand(npcRegistry))
|
||||||
|
.addSubcommand("removeduplicate", new HoloRemoveDuplicateCommand(npcRegistry)))
|
||||||
.addSubcommand("action", new MultiCommand(bootstrap.loadHelpMessage("action"))
|
.addSubcommand("action", new MultiCommand(bootstrap.loadHelpMessage("action"))
|
||||||
.addSubcommand("add", new ActionAddCommand(npcRegistry, actionRegistry))
|
.addSubcommand("add", new ActionAddCommand(npcRegistry, actionRegistry))
|
||||||
.addSubcommand("clear", new ActionClearCommand(npcRegistry))
|
.addSubcommand("clear", new ActionClearCommand(npcRegistry))
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
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 HoloRemoveDuplicateCommand implements CommandHandler {
|
||||||
|
private final NpcRegistryImpl registry;
|
||||||
|
|
||||||
|
public HoloRemoveDuplicateCommand(NpcRegistryImpl registry) {
|
||||||
|
this.registry = registry;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(CommandContext context) throws CommandExecutionException {
|
||||||
|
context.setUsage(context.getLabel() + " holo removeduplicates <id>");
|
||||||
|
HologramImpl hologram = context.parse(NpcEntryImpl.class).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("NPC lines fixed!", NamedTextColor.GREEN));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> suggest(CommandContext context) throws CommandExecutionException {
|
||||||
|
if (context.argSize() == 1) return context.suggestCollection(registry.getModifiableIds());
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
}
|
|
@ -98,6 +98,12 @@ public class HologramImpl extends Viewable implements Hologram {
|
||||||
lines.clear();
|
lines.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addLines(List<HologramLine<?>> lines) {
|
||||||
|
this.lines.addAll(lines);
|
||||||
|
relocateLines();
|
||||||
|
for (Player viewer : getViewers()) for (HologramLine<?> line : lines) line.show(viewer);
|
||||||
|
}
|
||||||
|
|
||||||
public void insertTextLineComponent(int index, Component line) {
|
public void insertTextLineComponent(int index, Component line) {
|
||||||
HologramText newLine = new HologramText(propertyRegistry, packetFactory, null, line);
|
HologramText newLine = new HologramText(propertyRegistry, packetFactory, null, line);
|
||||||
lines.add(index, newLine);
|
lines.add(index, newLine);
|
||||||
|
|
|
@ -37,4 +37,12 @@ public class HologramText extends HologramLine<Component> {
|
||||||
public boolean hasProperty(EntityProperty<?> key) {
|
public boolean hasProperty(EntityProperty<?> key) {
|
||||||
return key.getName().equalsIgnoreCase("name") || key.getName().equalsIgnoreCase("invisible");
|
return key.getName().equalsIgnoreCase("name") || key.getName().equalsIgnoreCase("invisible");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj) return true;
|
||||||
|
if (obj == null || getClass() != obj.getClass()) return false;
|
||||||
|
HologramText that = (HologramText) obj;
|
||||||
|
return getValue().equals(that.getValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue