mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-24 17:39:30 +00:00
优化visitor
This commit is contained in:
@@ -227,8 +227,7 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler<ItemSt
|
||||
public static boolean processModernItemName(Item<ItemStack> item, Supplier<CompoundTag> tag, Context context) {
|
||||
Tag nameTag = item.getSparrowNBTComponent(ComponentTypes.ITEM_NAME);
|
||||
if (nameTag == null) return false;
|
||||
String tagStr = nameTag.getAsString();
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(tagStr);
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nameTag);
|
||||
if (!tokens.isEmpty()) {
|
||||
item.setNBTComponent(ComponentKeys.ITEM_NAME, AdventureHelper.componentToNbt(AdventureHelper.replaceText(AdventureHelper.nbtToComponent(nameTag), tokens, context)));
|
||||
tag.get().put(ComponentIds.ITEM_NAME, NetworkItemHandler.pack(Operation.ADD, nameTag));
|
||||
@@ -240,8 +239,7 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler<ItemSt
|
||||
public static boolean processModernCustomName(Item<ItemStack> item, Supplier<CompoundTag> tag, Context context) {
|
||||
Tag nameTag = item.getSparrowNBTComponent(ComponentTypes.CUSTOM_NAME);
|
||||
if (nameTag == null) return false;
|
||||
String tagStr = nameTag.getAsString();
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(tagStr);
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nameTag);
|
||||
if (!tokens.isEmpty()) {
|
||||
item.setNBTComponent(ComponentKeys.CUSTOM_NAME, AdventureHelper.componentToNbt(AdventureHelper.replaceText(AdventureHelper.nbtToComponent(nameTag), tokens, context)));
|
||||
tag.get().put(ComponentIds.CUSTOM_NAME, NetworkItemHandler.pack(Operation.ADD, nameTag));
|
||||
@@ -258,8 +256,7 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler<ItemSt
|
||||
}
|
||||
ListTag newLore = new ListTag();
|
||||
for (Tag tag : listTag) {
|
||||
String tagStr = tag.getAsString();
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(tagStr);
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(tag);
|
||||
if (tokens.isEmpty()) {
|
||||
newLore.add(tag);
|
||||
} else {
|
||||
|
||||
@@ -2509,7 +2509,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
buf.writeVarInt(event.packetID());
|
||||
Component component = AdventureHelper.tagToComponent(nbt);
|
||||
if (Config.interceptSystemChat()) {
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt);
|
||||
if (!tokens.isEmpty()) {
|
||||
component = AdventureHelper.replaceText(component, tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user));
|
||||
}
|
||||
@@ -2552,8 +2552,8 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
if (nbt1 == null) return;
|
||||
Tag nbt2 = buf.readNbt(false);
|
||||
if (nbt2 == null) return;
|
||||
Map<String, ComponentProvider> tokens1 = CraftEngine.instance().fontManager().matchTags(nbt1.getAsString());
|
||||
Map<String, ComponentProvider> tokens2 = CraftEngine.instance().fontManager().matchTags(nbt2.getAsString());
|
||||
Map<String, ComponentProvider> tokens1 = CraftEngine.instance().fontManager().matchTags(nbt1);
|
||||
Map<String, ComponentProvider> tokens2 = CraftEngine.instance().fontManager().matchTags(nbt2);
|
||||
if (tokens1.isEmpty() && tokens2.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
buf.clear();
|
||||
@@ -2588,7 +2588,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
Tag nbt = buf.readNbt(false);
|
||||
if (nbt == null) return;
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt);
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
buf.clear();
|
||||
@@ -2621,7 +2621,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
Tag nbt = buf.readNbt(false);
|
||||
if (nbt == null) return;
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt);
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
buf.clear();
|
||||
@@ -2654,7 +2654,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
Tag nbt = buf.readNbt(false);
|
||||
if (nbt == null) return;
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt);
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
buf.clear();
|
||||
@@ -2714,7 +2714,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
if (actionType == 0) {
|
||||
Tag nbt = buf.readNbt(false);
|
||||
if (nbt == null) return;
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt);
|
||||
if (tokens.isEmpty()) return;
|
||||
float health = buf.readFloat();
|
||||
int color = buf.readVarInt();
|
||||
@@ -2733,7 +2733,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
} else if (actionType == 3) {
|
||||
Tag nbt = buf.readNbt(false);
|
||||
if (nbt == null) return;
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt);
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
buf.clear();
|
||||
@@ -2807,9 +2807,9 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
if (prefix == null) return;
|
||||
Tag suffix = buf.readNbt(false);
|
||||
if (suffix == null) return;
|
||||
Map<String, ComponentProvider> tokens1 = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||
Map<String, ComponentProvider> tokens2 = CraftEngine.instance().fontManager().matchTags(prefix.getAsString());
|
||||
Map<String, ComponentProvider> tokens3 = CraftEngine.instance().fontManager().matchTags(suffix.getAsString());
|
||||
Map<String, ComponentProvider> tokens1 = CraftEngine.instance().fontManager().matchTags(displayName);
|
||||
Map<String, ComponentProvider> tokens2 = CraftEngine.instance().fontManager().matchTags(prefix);
|
||||
Map<String, ComponentProvider> tokens3 = CraftEngine.instance().fontManager().matchTags(suffix);
|
||||
if (tokens1.isEmpty() && tokens2.isEmpty() && tokens3.isEmpty()) return;
|
||||
NetworkTextReplaceContext context = NetworkTextReplaceContext.of((BukkitServerPlayer) user);
|
||||
List<String> entities = method == 0 ? buf.readStringList() : null;
|
||||
@@ -2870,7 +2870,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
if (optionalNumberFormat) {
|
||||
int format = buf.readVarInt();
|
||||
if (format == 0) {
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(displayName);
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
buf.clear();
|
||||
@@ -2882,7 +2882,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
buf.writeBoolean(true);
|
||||
buf.writeVarInt(0);
|
||||
} else if (format == 1) {
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(displayName);
|
||||
if (tokens.isEmpty()) return;
|
||||
Tag style = buf.readNbt(false);
|
||||
event.setChanged(true);
|
||||
@@ -2898,8 +2898,8 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
} else if (format == 2) {
|
||||
Tag fixed = buf.readNbt(false);
|
||||
if (fixed == null) return;
|
||||
Map<String, ComponentProvider> tokens1 = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||
Map<String, ComponentProvider> tokens2 = CraftEngine.instance().fontManager().matchTags(fixed.getAsString());
|
||||
Map<String, ComponentProvider> tokens1 = CraftEngine.instance().fontManager().matchTags(displayName);
|
||||
Map<String, ComponentProvider> tokens2 = CraftEngine.instance().fontManager().matchTags(fixed);
|
||||
if (tokens1.isEmpty() && tokens2.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
buf.clear();
|
||||
@@ -2913,7 +2913,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
buf.writeNbt(tokens2.isEmpty() ? fixed : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(fixed), tokens2, NetworkTextReplaceContext.of((BukkitServerPlayer) user))), false);
|
||||
}
|
||||
} else {
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(displayName);
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
buf.clear();
|
||||
@@ -2945,7 +2945,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
}
|
||||
outside:
|
||||
if (displayName != null) {
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(displayName);
|
||||
if (tokens.isEmpty()) break outside;
|
||||
Component component = AdventureHelper.tagToComponent(displayName);
|
||||
component = AdventureHelper.replaceText(component, tokens, NetworkTextReplaceContext.of(serverPlayer));
|
||||
@@ -2966,7 +2966,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
} else if (format == 2) {
|
||||
fixed = buf.readNbt(false);
|
||||
if (fixed == null) return;
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(fixed.getAsString());
|
||||
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(fixed);
|
||||
if (tokens.isEmpty() && !isChanged) return;
|
||||
if (!tokens.isEmpty()) {
|
||||
Component component = AdventureHelper.tagToComponent(fixed);
|
||||
|
||||
@@ -170,12 +170,12 @@ public abstract class AbstractFontManager implements FontManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, ComponentProvider> matchTags(String json) {
|
||||
public Map<String, ComponentProvider> matchTags(String text) {
|
||||
if (this.networkTagTrie == null) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
Map<String, ComponentProvider> tags = new HashMap<>();
|
||||
for (Token token : this.networkTagTrie.tokenize(json)) {
|
||||
for (Token token : this.networkTagTrie.tokenize(text)) {
|
||||
if (token.isMatch()) {
|
||||
tags.put(token.getFragment(), this.networkTagMapper.get(token.getFragment()));
|
||||
}
|
||||
|
||||
@@ -6,10 +6,8 @@ import net.momirealms.craftengine.core.plugin.Manageable;
|
||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||
import net.momirealms.craftengine.core.plugin.config.ConfigParser;
|
||||
import net.momirealms.craftengine.core.plugin.text.component.ComponentProvider;
|
||||
import net.momirealms.craftengine.core.util.AdventureHelper;
|
||||
import net.momirealms.craftengine.core.util.CharacterUtils;
|
||||
import net.momirealms.craftengine.core.util.FormatUtils;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import net.momirealms.craftengine.core.util.*;
|
||||
import net.momirealms.sparrow.nbt.Tag;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -110,7 +108,11 @@ public interface FontManager extends Manageable {
|
||||
return createOffsets(offset, (raw, font) -> raw);
|
||||
}
|
||||
|
||||
Map<String, ComponentProvider> matchTags(String json);
|
||||
Map<String, ComponentProvider> matchTags(String text);
|
||||
|
||||
default Map<String, ComponentProvider> matchTags(Tag nbt) {
|
||||
return matchTags(new StringValueOnlyTagVisitor().visit(nbt));
|
||||
}
|
||||
|
||||
void refreshEmojiSuggestions(UUID uuid);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
package net.momirealms.craftengine.core.util;
|
||||
|
||||
import net.momirealms.sparrow.nbt.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class StringValueOnlyTagVisitor implements TagVisitor {
|
||||
protected final StringBuilder builder = new StringBuilder();
|
||||
|
||||
public String visit(Tag element) {
|
||||
element.accept(this);
|
||||
return this.builder.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitString(StringTag element) {
|
||||
this.builder.append(element.getAsString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitByte(ByteTag element) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitShort(ShortTag element) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitInt(IntTag element) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitLong(LongTag element) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitFloat(FloatTag element) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitDouble(DoubleTag element) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitByteArray(ByteArrayTag element) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitIntArray(IntArrayTag element) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitLongArray(LongArrayTag element) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitList(ListTag element) {
|
||||
for (Tag tag : element) {
|
||||
this.builder.append((new StringValueOnlyTagVisitor()).visit(tag));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitCompound(CompoundTag compound) {
|
||||
for (Map.Entry<String, Tag> entry : compound.entrySet()) {
|
||||
this.builder.append((new StringValueOnlyTagVisitor()).visit(entry.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitEnd(EndTag element) {
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G
|
||||
|
||||
# Project settings
|
||||
# Rule: [major update].[feature update].[bug fix]
|
||||
project_version=0.0.64.7
|
||||
project_version=0.0.64.8
|
||||
config_version=49
|
||||
lang_version=34
|
||||
project_group=net.momirealms
|
||||
@@ -39,7 +39,7 @@ zstd_version=1.5.7-4
|
||||
commons_io_version=2.20.0
|
||||
commons_imaging_version=1.0.0-alpha6
|
||||
commons_lang3_version=3.19.0
|
||||
sparrow_nbt_version=0.10.5
|
||||
sparrow_nbt_version=0.10.6
|
||||
sparrow_util_version=0.52
|
||||
fastutil_version=8.5.16
|
||||
netty_version=4.1.127.Final
|
||||
|
||||
Reference in New Issue
Block a user