mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-19 15:09:15 +00:00
字符替换重构第一步
This commit is contained in:
@@ -75,7 +75,7 @@ repositories {
|
|||||||
```
|
```
|
||||||
```kotlin
|
```kotlin
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly("net.momirealms:craft-engine-core:0.0.61")
|
compileOnly("net.momirealms:craft-engine-core:0.0.63")
|
||||||
compileOnly("net.momirealms:craft-engine-bukkit:0.0.61")
|
compileOnly("net.momirealms:craft-engine-bukkit:0.0.63")
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
package net.momirealms.craftengine.bukkit.item;
|
package net.momirealms.craftengine.bukkit.item;
|
||||||
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||||
import net.momirealms.craftengine.core.entity.player.Player;
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
import net.momirealms.craftengine.core.item.CustomItem;
|
import net.momirealms.craftengine.core.item.CustomItem;
|
||||||
@@ -11,8 +10,11 @@ import net.momirealms.craftengine.core.item.modifier.ArgumentsModifier;
|
|||||||
import net.momirealms.craftengine.core.item.modifier.ItemDataModifier;
|
import net.momirealms.craftengine.core.item.modifier.ItemDataModifier;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.Context;
|
||||||
import net.momirealms.craftengine.core.plugin.context.ContextHolder;
|
import net.momirealms.craftengine.core.plugin.context.ContextHolder;
|
||||||
import net.momirealms.craftengine.core.plugin.context.ContextKey;
|
import net.momirealms.craftengine.core.plugin.context.ContextKey;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.NetworkTextReplaceContext;
|
||||||
|
import net.momirealms.craftengine.core.plugin.text.component.ComponentProvider;
|
||||||
import net.momirealms.craftengine.core.util.AdventureHelper;
|
import net.momirealms.craftengine.core.util.AdventureHelper;
|
||||||
import net.momirealms.sparrow.nbt.CompoundTag;
|
import net.momirealms.sparrow.nbt.CompoundTag;
|
||||||
import net.momirealms.sparrow.nbt.ListTag;
|
import net.momirealms.sparrow.nbt.ListTag;
|
||||||
@@ -61,7 +63,7 @@ public final class LegacyNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
Optional<CustomItem<ItemStack>> optionalCustomItem = wrapped.getCustomItem();
|
Optional<CustomItem<ItemStack>> optionalCustomItem = wrapped.getCustomItem();
|
||||||
if (optionalCustomItem.isEmpty()) {
|
if (optionalCustomItem.isEmpty()) {
|
||||||
if (!Config.interceptItem()) return Optional.empty();
|
if (!Config.interceptItem()) return Optional.empty();
|
||||||
return new OtherItem(wrapped, false).process();
|
return new OtherItem(wrapped, false).process(NetworkTextReplaceContext.of(player));
|
||||||
} else {
|
} else {
|
||||||
BukkitCustomItem customItem = (BukkitCustomItem) optionalCustomItem.get();
|
BukkitCustomItem customItem = (BukkitCustomItem) optionalCustomItem.get();
|
||||||
Object serverItem = FastNMS.INSTANCE.method$ItemStack$getItem(wrapped.getLiteralObject());
|
Object serverItem = FastNMS.INSTANCE.method$ItemStack$getItem(wrapped.getLiteralObject());
|
||||||
@@ -71,7 +73,7 @@ public final class LegacyNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
}
|
}
|
||||||
if (!customItem.hasClientBoundDataModifier()) {
|
if (!customItem.hasClientBoundDataModifier()) {
|
||||||
if (!Config.interceptItem() && !hasDifferentMaterial) return Optional.empty();
|
if (!Config.interceptItem() && !hasDifferentMaterial) return Optional.empty();
|
||||||
return new OtherItem(wrapped, hasDifferentMaterial).process();
|
return new OtherItem(wrapped, hasDifferentMaterial).process(NetworkTextReplaceContext.of(player));
|
||||||
} else {
|
} else {
|
||||||
CompoundTag tag = new CompoundTag();
|
CompoundTag tag = new CompoundTag();
|
||||||
Tag argumentTag = wrapped.getTag(ArgumentsModifier.ARGUMENTS_TAG);
|
Tag argumentTag = wrapped.getTag(ArgumentsModifier.ARGUMENTS_TAG);
|
||||||
@@ -93,10 +95,10 @@ public final class LegacyNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
}
|
}
|
||||||
if (Config.interceptItem()) {
|
if (Config.interceptItem()) {
|
||||||
if (!tag.containsKey("display.Name")) {
|
if (!tag.containsKey("display.Name")) {
|
||||||
processCustomName(wrapped, tag::put);
|
processCustomName(wrapped, tag::put, context);
|
||||||
}
|
}
|
||||||
if (!tag.containsKey("display.Lore")) {
|
if (!tag.containsKey("display.Lore")) {
|
||||||
processLore(wrapped, tag::put);
|
processLore(wrapped, tag::put, context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tag.isEmpty()) {
|
if (tag.isEmpty()) {
|
||||||
@@ -111,13 +113,13 @@ public final class LegacyNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean processCustomName(Item<ItemStack> item, BiConsumer<String, CompoundTag> callback) {
|
public static boolean processCustomName(Item<ItemStack> item, BiConsumer<String, CompoundTag> callback, Context context) {
|
||||||
Optional<String> optionalCustomName = item.customNameJson();
|
Optional<String> optionalCustomName = item.customNameJson();
|
||||||
if (optionalCustomName.isPresent()) {
|
if (optionalCustomName.isPresent()) {
|
||||||
String line = optionalCustomName.get();
|
String line = optionalCustomName.get();
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(line);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(line);
|
||||||
if (!tokens.isEmpty()) {
|
if (!tokens.isEmpty()) {
|
||||||
item.customNameJson(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(line), tokens)));
|
item.customNameJson(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(line), tokens, context)));
|
||||||
callback.accept("display.Name", NetworkItemHandler.pack(Operation.ADD, new StringTag(line)));
|
callback.accept("display.Name", NetworkItemHandler.pack(Operation.ADD, new StringTag(line)));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -125,18 +127,18 @@ public final class LegacyNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean processLore(Item<ItemStack> item, BiConsumer<String, CompoundTag> callback) {
|
private static boolean processLore(Item<ItemStack> item, BiConsumer<String, CompoundTag> callback, Context context) {
|
||||||
Optional<List<String>> optionalLore = item.loreJson();
|
Optional<List<String>> optionalLore = item.loreJson();
|
||||||
if (optionalLore.isPresent()) {
|
if (optionalLore.isPresent()) {
|
||||||
boolean changed = false;
|
boolean changed = false;
|
||||||
List<String> lore = optionalLore.get();
|
List<String> lore = optionalLore.get();
|
||||||
List<String> newLore = new ArrayList<>(lore.size());
|
List<String> newLore = new ArrayList<>(lore.size());
|
||||||
for (String line : lore) {
|
for (String line : lore) {
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(line);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(line);
|
||||||
if (tokens.isEmpty()) {
|
if (tokens.isEmpty()) {
|
||||||
newLore.add(line);
|
newLore.add(line);
|
||||||
} else {
|
} else {
|
||||||
newLore.add(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(line), tokens)));
|
newLore.add(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(line), tokens, context)));
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -164,11 +166,11 @@ public final class LegacyNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
this.forceReturn = forceReturn;
|
this.forceReturn = forceReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<Item<ItemStack>> process() {
|
public Optional<Item<ItemStack>> process(Context context) {
|
||||||
if (processLore(this.item, (s, c) -> networkTag().put(s, c))) {
|
if (processLore(this.item, (s, c) -> networkTag().put(s, c), context)) {
|
||||||
this.globalChanged = true;
|
this.globalChanged = true;
|
||||||
}
|
}
|
||||||
if (processCustomName(this.item, (s, c) -> networkTag().put(s, c))) {
|
if (processCustomName(this.item, (s, c) -> networkTag().put(s, c), context)) {
|
||||||
this.globalChanged = true;
|
this.globalChanged = true;
|
||||||
}
|
}
|
||||||
if (this.globalChanged) {
|
if (this.globalChanged) {
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package net.momirealms.craftengine.bukkit.item;
|
package net.momirealms.craftengine.bukkit.item;
|
||||||
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||||
import net.momirealms.craftengine.core.entity.player.Player;
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
import net.momirealms.craftengine.core.item.*;
|
import net.momirealms.craftengine.core.item.*;
|
||||||
@@ -8,8 +7,11 @@ import net.momirealms.craftengine.core.item.modifier.ArgumentsModifier;
|
|||||||
import net.momirealms.craftengine.core.item.modifier.ItemDataModifier;
|
import net.momirealms.craftengine.core.item.modifier.ItemDataModifier;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.Context;
|
||||||
import net.momirealms.craftengine.core.plugin.context.ContextHolder;
|
import net.momirealms.craftengine.core.plugin.context.ContextHolder;
|
||||||
import net.momirealms.craftengine.core.plugin.context.ContextKey;
|
import net.momirealms.craftengine.core.plugin.context.ContextKey;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.NetworkTextReplaceContext;
|
||||||
|
import net.momirealms.craftengine.core.plugin.text.component.ComponentProvider;
|
||||||
import net.momirealms.craftengine.core.util.AdventureHelper;
|
import net.momirealms.craftengine.core.util.AdventureHelper;
|
||||||
import net.momirealms.craftengine.core.util.VersionHelper;
|
import net.momirealms.craftengine.core.util.VersionHelper;
|
||||||
import net.momirealms.sparrow.nbt.CompoundTag;
|
import net.momirealms.sparrow.nbt.CompoundTag;
|
||||||
@@ -64,7 +66,7 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
Optional<CustomItem<ItemStack>> optionalCustomItem = wrapped.getCustomItem();
|
Optional<CustomItem<ItemStack>> optionalCustomItem = wrapped.getCustomItem();
|
||||||
if (optionalCustomItem.isEmpty()) {
|
if (optionalCustomItem.isEmpty()) {
|
||||||
if (!Config.interceptItem()) return Optional.empty();
|
if (!Config.interceptItem()) return Optional.empty();
|
||||||
return new OtherItem(wrapped, false).process();
|
return new OtherItem(wrapped, false).process(NetworkTextReplaceContext.of(player));
|
||||||
} else {
|
} else {
|
||||||
BukkitCustomItem customItem = (BukkitCustomItem) optionalCustomItem.get();
|
BukkitCustomItem customItem = (BukkitCustomItem) optionalCustomItem.get();
|
||||||
Object serverItem = FastNMS.INSTANCE.method$ItemStack$getItem(wrapped.getLiteralObject());
|
Object serverItem = FastNMS.INSTANCE.method$ItemStack$getItem(wrapped.getLiteralObject());
|
||||||
@@ -74,7 +76,7 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
}
|
}
|
||||||
if (!customItem.hasClientBoundDataModifier()) {
|
if (!customItem.hasClientBoundDataModifier()) {
|
||||||
if (!Config.interceptItem() && !hasDifferentMaterial) return Optional.empty();
|
if (!Config.interceptItem() && !hasDifferentMaterial) return Optional.empty();
|
||||||
return new OtherItem(wrapped, hasDifferentMaterial).process();
|
return new OtherItem(wrapped, hasDifferentMaterial).process(NetworkTextReplaceContext.of(player));
|
||||||
} else {
|
} else {
|
||||||
CompoundTag customData = Optional.ofNullable(wrapped.getSparrowNBTComponent(ComponentTypes.CUSTOM_DATA)).map(CompoundTag.class::cast).orElse(new CompoundTag());
|
CompoundTag customData = Optional.ofNullable(wrapped.getSparrowNBTComponent(ComponentTypes.CUSTOM_DATA)).map(CompoundTag.class::cast).orElse(new CompoundTag());
|
||||||
CompoundTag arguments = customData.getCompound(ArgumentsModifier.ARGUMENTS_TAG);
|
CompoundTag arguments = customData.getCompound(ArgumentsModifier.ARGUMENTS_TAG);
|
||||||
@@ -97,16 +99,16 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
}
|
}
|
||||||
if (Config.interceptItem()) {
|
if (Config.interceptItem()) {
|
||||||
if (!tag.containsKey(ComponentIds.ITEM_NAME)) {
|
if (!tag.containsKey(ComponentIds.ITEM_NAME)) {
|
||||||
if (VersionHelper.isOrAbove1_21_5()) processModernItemName(wrapped, () -> tag);
|
if (VersionHelper.isOrAbove1_21_5()) processModernItemName(wrapped, () -> tag, context);
|
||||||
else processLegacyItemName(wrapped, () -> tag);
|
else processLegacyItemName(wrapped, () -> tag, context);
|
||||||
}
|
}
|
||||||
if (!tag.containsKey(ComponentIds.CUSTOM_NAME)) {
|
if (!tag.containsKey(ComponentIds.CUSTOM_NAME)) {
|
||||||
if (VersionHelper.isOrAbove1_21_5()) processModernCustomName(wrapped, () -> tag);
|
if (VersionHelper.isOrAbove1_21_5()) processModernCustomName(wrapped, () -> tag, context);
|
||||||
else processLegacyCustomName(wrapped, () -> tag);
|
else processLegacyCustomName(wrapped, () -> tag, context);
|
||||||
}
|
}
|
||||||
if (!tag.containsKey(ComponentIds.LORE)) {
|
if (!tag.containsKey(ComponentIds.LORE)) {
|
||||||
if (VersionHelper.isOrAbove1_21_5()) processModernLore(wrapped, () -> tag);
|
if (VersionHelper.isOrAbove1_21_5()) processModernLore(wrapped, () -> tag, context);
|
||||||
else processLegacyLore(wrapped, () -> tag);
|
else processLegacyLore(wrapped, () -> tag, context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tag.isEmpty()) {
|
if (tag.isEmpty()) {
|
||||||
@@ -120,18 +122,18 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean processLegacyLore(Item<ItemStack> item, Supplier<CompoundTag> tag) {
|
public static boolean processLegacyLore(Item<ItemStack> item, Supplier<CompoundTag> tag, Context context) {
|
||||||
Optional<List<String>> optionalLore = item.loreJson();
|
Optional<List<String>> optionalLore = item.loreJson();
|
||||||
if (optionalLore.isPresent()) {
|
if (optionalLore.isPresent()) {
|
||||||
boolean changed = false;
|
boolean changed = false;
|
||||||
List<String> lore = optionalLore.get();
|
List<String> lore = optionalLore.get();
|
||||||
List<String> newLore = new ArrayList<>(lore.size());
|
List<String> newLore = new ArrayList<>(lore.size());
|
||||||
for (String line : lore) {
|
for (String line : lore) {
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(line);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(line);
|
||||||
if (tokens.isEmpty()) {
|
if (tokens.isEmpty()) {
|
||||||
newLore.add(line);
|
newLore.add(line);
|
||||||
} else {
|
} else {
|
||||||
newLore.add(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(line), tokens)));
|
newLore.add(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(line), tokens, context)));
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -148,13 +150,13 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean processLegacyCustomName(Item<ItemStack> item, Supplier<CompoundTag> tag) {
|
public static boolean processLegacyCustomName(Item<ItemStack> item, Supplier<CompoundTag> tag, Context context) {
|
||||||
Optional<String> optionalCustomName = item.customNameJson();
|
Optional<String> optionalCustomName = item.customNameJson();
|
||||||
if (optionalCustomName.isPresent()) {
|
if (optionalCustomName.isPresent()) {
|
||||||
String line = optionalCustomName.get();
|
String line = optionalCustomName.get();
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(line);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(line);
|
||||||
if (!tokens.isEmpty()) {
|
if (!tokens.isEmpty()) {
|
||||||
item.customNameJson(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(line), tokens)));
|
item.customNameJson(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(line), tokens, context)));
|
||||||
tag.get().put(ComponentIds.CUSTOM_NAME, NetworkItemHandler.pack(Operation.ADD, new StringTag(line)));
|
tag.get().put(ComponentIds.CUSTOM_NAME, NetworkItemHandler.pack(Operation.ADD, new StringTag(line)));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -162,13 +164,13 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean processLegacyItemName(Item<ItemStack> item, Supplier<CompoundTag> tag) {
|
public static boolean processLegacyItemName(Item<ItemStack> item, Supplier<CompoundTag> tag, Context context) {
|
||||||
Optional<String> optionalItemName = item.itemNameJson();
|
Optional<String> optionalItemName = item.itemNameJson();
|
||||||
if (optionalItemName.isPresent()) {
|
if (optionalItemName.isPresent()) {
|
||||||
String line = optionalItemName.get();
|
String line = optionalItemName.get();
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(line);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(line);
|
||||||
if (!tokens.isEmpty()) {
|
if (!tokens.isEmpty()) {
|
||||||
item.itemNameJson(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(line), tokens)));
|
item.itemNameJson(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(line), tokens, context)));
|
||||||
tag.get().put(ComponentIds.ITEM_NAME, NetworkItemHandler.pack(Operation.ADD, new StringTag(line)));
|
tag.get().put(ComponentIds.ITEM_NAME, NetworkItemHandler.pack(Operation.ADD, new StringTag(line)));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -176,33 +178,33 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean processModernItemName(Item<ItemStack> item, Supplier<CompoundTag> tag) {
|
public static boolean processModernItemName(Item<ItemStack> item, Supplier<CompoundTag> tag, Context context) {
|
||||||
Tag nameTag = item.getSparrowNBTComponent(ComponentTypes.ITEM_NAME);
|
Tag nameTag = item.getSparrowNBTComponent(ComponentTypes.ITEM_NAME);
|
||||||
if (nameTag == null) return false;
|
if (nameTag == null) return false;
|
||||||
String tagStr = nameTag.getAsString();
|
String tagStr = nameTag.getAsString();
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(tagStr);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(tagStr);
|
||||||
if (!tokens.isEmpty()) {
|
if (!tokens.isEmpty()) {
|
||||||
item.setNBTComponent(ComponentKeys.ITEM_NAME, AdventureHelper.componentToNbt(AdventureHelper.replaceText(AdventureHelper.nbtToComponent(nameTag), tokens)));
|
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));
|
tag.get().put(ComponentIds.ITEM_NAME, NetworkItemHandler.pack(Operation.ADD, nameTag));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean processModernCustomName(Item<ItemStack> item, Supplier<CompoundTag> tag) {
|
public static boolean processModernCustomName(Item<ItemStack> item, Supplier<CompoundTag> tag, Context context) {
|
||||||
Tag nameTag = item.getSparrowNBTComponent(ComponentTypes.CUSTOM_NAME);
|
Tag nameTag = item.getSparrowNBTComponent(ComponentTypes.CUSTOM_NAME);
|
||||||
if (nameTag == null) return false;
|
if (nameTag == null) return false;
|
||||||
String tagStr = nameTag.getAsString();
|
String tagStr = nameTag.getAsString();
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(tagStr);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(tagStr);
|
||||||
if (!tokens.isEmpty()) {
|
if (!tokens.isEmpty()) {
|
||||||
item.setNBTComponent(ComponentKeys.CUSTOM_NAME, AdventureHelper.componentToNbt(AdventureHelper.replaceText(AdventureHelper.nbtToComponent(nameTag), tokens)));
|
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));
|
tag.get().put(ComponentIds.CUSTOM_NAME, NetworkItemHandler.pack(Operation.ADD, nameTag));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean processModernLore(Item<ItemStack> item, Supplier<CompoundTag> tagSupplier) {
|
public static boolean processModernLore(Item<ItemStack> item, Supplier<CompoundTag> tagSupplier, Context context) {
|
||||||
Tag loreTag = item.getSparrowNBTComponent(ComponentTypes.LORE);
|
Tag loreTag = item.getSparrowNBTComponent(ComponentTypes.LORE);
|
||||||
boolean changed = false;
|
boolean changed = false;
|
||||||
if (!(loreTag instanceof ListTag listTag)) {
|
if (!(loreTag instanceof ListTag listTag)) {
|
||||||
@@ -211,11 +213,11 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
ListTag newLore = new ListTag();
|
ListTag newLore = new ListTag();
|
||||||
for (Tag tag : listTag) {
|
for (Tag tag : listTag) {
|
||||||
String tagStr = tag.getAsString();
|
String tagStr = tag.getAsString();
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(tagStr);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(tagStr);
|
||||||
if (tokens.isEmpty()) {
|
if (tokens.isEmpty()) {
|
||||||
newLore.add(tag);
|
newLore.add(tag);
|
||||||
} else {
|
} else {
|
||||||
newLore.add(AdventureHelper.componentToNbt(AdventureHelper.replaceText(AdventureHelper.nbtToComponent(tag), tokens)));
|
newLore.add(AdventureHelper.componentToNbt(AdventureHelper.replaceText(AdventureHelper.nbtToComponent(tag), tokens, context)));
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -238,20 +240,20 @@ public final class ModernNetworkItemHandler implements NetworkItemHandler<ItemSt
|
|||||||
this.forceReturn = forceReturn;
|
this.forceReturn = forceReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<Item<ItemStack>> process() {
|
public Optional<Item<ItemStack>> process(Context context) {
|
||||||
if (VersionHelper.isOrAbove1_21_5()) {
|
if (VersionHelper.isOrAbove1_21_5()) {
|
||||||
if (processModernLore(this.item, this::getOrCreateTag))
|
if (processModernLore(this.item, this::getOrCreateTag, context))
|
||||||
this.globalChanged = true;
|
this.globalChanged = true;
|
||||||
if (processModernCustomName(this.item, this::getOrCreateTag))
|
if (processModernCustomName(this.item, this::getOrCreateTag, context))
|
||||||
this.globalChanged = true;
|
this.globalChanged = true;
|
||||||
if (processModernItemName(this.item, this::getOrCreateTag))
|
if (processModernItemName(this.item, this::getOrCreateTag, context))
|
||||||
this.globalChanged = true;
|
this.globalChanged = true;
|
||||||
} else {
|
} else {
|
||||||
if (processLegacyLore(this.item, this::getOrCreateTag))
|
if (processLegacyLore(this.item, this::getOrCreateTag, context))
|
||||||
this.globalChanged = true;
|
this.globalChanged = true;
|
||||||
if (processLegacyCustomName(this.item, this::getOrCreateTag))
|
if (processLegacyCustomName(this.item, this::getOrCreateTag, context))
|
||||||
this.globalChanged = true;
|
this.globalChanged = true;
|
||||||
if (processLegacyItemName(this.item, this::getOrCreateTag))
|
if (processLegacyItemName(this.item, this::getOrCreateTag, context))
|
||||||
this.globalChanged = true;
|
this.globalChanged = true;
|
||||||
}
|
}
|
||||||
if (this.globalChanged) {
|
if (this.globalChanged) {
|
||||||
|
|||||||
@@ -56,11 +56,13 @@ import net.momirealms.craftengine.core.pack.host.ResourcePackHost;
|
|||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
import net.momirealms.craftengine.core.plugin.context.ContextHolder;
|
import net.momirealms.craftengine.core.plugin.context.ContextHolder;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.NetworkTextReplaceContext;
|
||||||
import net.momirealms.craftengine.core.plugin.context.PlayerOptionalContext;
|
import net.momirealms.craftengine.core.plugin.context.PlayerOptionalContext;
|
||||||
import net.momirealms.craftengine.core.plugin.context.event.EventTrigger;
|
import net.momirealms.craftengine.core.plugin.context.event.EventTrigger;
|
||||||
import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters;
|
import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters;
|
||||||
import net.momirealms.craftengine.core.plugin.logger.Debugger;
|
import net.momirealms.craftengine.core.plugin.logger.Debugger;
|
||||||
import net.momirealms.craftengine.core.plugin.network.*;
|
import net.momirealms.craftengine.core.plugin.network.*;
|
||||||
|
import net.momirealms.craftengine.core.plugin.text.component.ComponentProvider;
|
||||||
import net.momirealms.craftengine.core.util.*;
|
import net.momirealms.craftengine.core.util.*;
|
||||||
import net.momirealms.craftengine.core.world.BlockHitResult;
|
import net.momirealms.craftengine.core.world.BlockHitResult;
|
||||||
import net.momirealms.craftengine.core.world.BlockPos;
|
import net.momirealms.craftengine.core.world.BlockPos;
|
||||||
@@ -494,23 +496,24 @@ public class PacketConsumers {
|
|||||||
Tag suffix = buf.readNbt(false);
|
Tag suffix = buf.readNbt(false);
|
||||||
if (suffix == null) return;
|
if (suffix == null) return;
|
||||||
|
|
||||||
Map<String, Component> tokens1 = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
Map<String, ComponentProvider> tokens1 = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||||
Map<String, Component> tokens2 = CraftEngine.instance().fontManager().matchTags(prefix.getAsString());
|
Map<String, ComponentProvider> tokens2 = CraftEngine.instance().fontManager().matchTags(prefix.getAsString());
|
||||||
Map<String, Component> tokens3 = CraftEngine.instance().fontManager().matchTags(suffix.getAsString());
|
Map<String, ComponentProvider> tokens3 = CraftEngine.instance().fontManager().matchTags(suffix.getAsString());
|
||||||
if (tokens1.isEmpty() && tokens2.isEmpty() && tokens3.isEmpty()) return;
|
if (tokens1.isEmpty() && tokens2.isEmpty() && tokens3.isEmpty()) return;
|
||||||
|
NetworkTextReplaceContext context = NetworkTextReplaceContext.of((BukkitServerPlayer) user);
|
||||||
List<String> entities = method == 0 ? buf.readStringList() : null;
|
List<String> entities = method == 0 ? buf.readStringList() : null;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUtf(name);
|
buf.writeUtf(name);
|
||||||
buf.writeByte(method);
|
buf.writeByte(method);
|
||||||
buf.writeNbt(tokens1.isEmpty() ? displayName : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(displayName), tokens1)), false);
|
buf.writeNbt(tokens1.isEmpty() ? displayName : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(displayName), tokens1, context)), false);
|
||||||
buf.writeByte(friendlyFlags);
|
buf.writeByte(friendlyFlags);
|
||||||
eitherVisibility.ifLeft(buf::writeUtf).ifRight(buf::writeVarInt);
|
eitherVisibility.ifLeft(buf::writeUtf).ifRight(buf::writeVarInt);
|
||||||
eitherCollisionRule.ifLeft(buf::writeUtf).ifRight(buf::writeVarInt);
|
eitherCollisionRule.ifLeft(buf::writeUtf).ifRight(buf::writeVarInt);
|
||||||
buf.writeVarInt(color);
|
buf.writeVarInt(color);
|
||||||
buf.writeNbt(tokens2.isEmpty() ? prefix : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(prefix), tokens2)), false);
|
buf.writeNbt(tokens2.isEmpty() ? prefix : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(prefix), tokens2, context)), false);
|
||||||
buf.writeNbt(tokens3.isEmpty() ? suffix : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(suffix), tokens3)), false);
|
buf.writeNbt(tokens3.isEmpty() ? suffix : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(suffix), tokens3, context)), false);
|
||||||
if (entities != null) {
|
if (entities != null) {
|
||||||
buf.writeStringList(entities);
|
buf.writeStringList(entities);
|
||||||
}
|
}
|
||||||
@@ -544,11 +547,12 @@ public class PacketConsumers {
|
|||||||
newEntries.add(entry);
|
newEntries.add(entry);
|
||||||
} else {
|
} else {
|
||||||
String json = ComponentUtils.minecraftToJson(mcComponent);
|
String json = ComponentUtils.minecraftToJson(mcComponent);
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||||
if (tokens.isEmpty()) {
|
if (tokens.isEmpty()) {
|
||||||
newEntries.add(entry);
|
newEntries.add(entry);
|
||||||
} else {
|
} else {
|
||||||
Object newEntry = FastNMS.INSTANCE.constructor$ClientboundPlayerInfoUpdatePacket$Entry(entry, ComponentUtils.adventureToMinecraft(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens)));
|
Object newEntry = FastNMS.INSTANCE.constructor$ClientboundPlayerInfoUpdatePacket$Entry(entry,
|
||||||
|
ComponentUtils.adventureToMinecraft(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))));
|
||||||
newEntries.add(newEntry);
|
newEntries.add(newEntry);
|
||||||
isChanged = true;
|
isChanged = true;
|
||||||
}
|
}
|
||||||
@@ -578,24 +582,25 @@ public class PacketConsumers {
|
|||||||
String prefix = buf.readUtf();
|
String prefix = buf.readUtf();
|
||||||
String suffix = buf.readUtf();
|
String suffix = buf.readUtf();
|
||||||
|
|
||||||
Map<String, Component> tokens1 = CraftEngine.instance().fontManager().matchTags(displayName);
|
Map<String, ComponentProvider> tokens1 = CraftEngine.instance().fontManager().matchTags(displayName);
|
||||||
Map<String, Component> tokens2 = CraftEngine.instance().fontManager().matchTags(prefix);
|
Map<String, ComponentProvider> tokens2 = CraftEngine.instance().fontManager().matchTags(prefix);
|
||||||
Map<String, Component> tokens3 = CraftEngine.instance().fontManager().matchTags(suffix);
|
Map<String, ComponentProvider> tokens3 = CraftEngine.instance().fontManager().matchTags(suffix);
|
||||||
if (tokens1.isEmpty() && tokens2.isEmpty() && tokens3.isEmpty()) return;
|
if (tokens1.isEmpty() && tokens2.isEmpty() && tokens3.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
|
NetworkTextReplaceContext context = NetworkTextReplaceContext.of((BukkitServerPlayer) user);
|
||||||
|
|
||||||
List<String> entities = method == 0 ? buf.readStringList() : null;
|
List<String> entities = method == 0 ? buf.readStringList() : null;
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUtf(name);
|
buf.writeUtf(name);
|
||||||
buf.writeByte(method);
|
buf.writeByte(method);
|
||||||
buf.writeUtf(tokens1.isEmpty() ? displayName : AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(displayName), tokens1)));
|
buf.writeUtf(tokens1.isEmpty() ? displayName : AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(displayName), tokens1, context)));
|
||||||
buf.writeByte(friendlyFlags);
|
buf.writeByte(friendlyFlags);
|
||||||
buf.writeUtf(nameTagVisibility);
|
buf.writeUtf(nameTagVisibility);
|
||||||
buf.writeUtf(collisionRule);
|
buf.writeUtf(collisionRule);
|
||||||
buf.writeVarInt(color);
|
buf.writeVarInt(color);
|
||||||
buf.writeUtf(tokens2.isEmpty() ? prefix : AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(prefix), tokens2)));
|
buf.writeUtf(tokens2.isEmpty() ? prefix : AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(prefix), tokens2, context)));
|
||||||
buf.writeUtf(tokens3.isEmpty() ? suffix : AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(suffix), tokens3)));
|
buf.writeUtf(tokens3.isEmpty() ? suffix : AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(suffix), tokens3, context)));
|
||||||
if (entities != null) {
|
if (entities != null) {
|
||||||
buf.writeStringList(entities);
|
buf.writeStringList(entities);
|
||||||
}
|
}
|
||||||
@@ -612,7 +617,7 @@ public class PacketConsumers {
|
|||||||
int actionType = buf.readVarInt();
|
int actionType = buf.readVarInt();
|
||||||
if (actionType == 0) {
|
if (actionType == 0) {
|
||||||
String json = buf.readUtf();
|
String json = buf.readUtf();
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
float health = buf.readFloat();
|
float health = buf.readFloat();
|
||||||
int color = buf.readVarInt();
|
int color = buf.readVarInt();
|
||||||
@@ -623,21 +628,21 @@ public class PacketConsumers {
|
|||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUUID(uuid);
|
buf.writeUUID(uuid);
|
||||||
buf.writeVarInt(actionType);
|
buf.writeVarInt(actionType);
|
||||||
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens)));
|
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))));
|
||||||
buf.writeFloat(health);
|
buf.writeFloat(health);
|
||||||
buf.writeVarInt(color);
|
buf.writeVarInt(color);
|
||||||
buf.writeVarInt(division);
|
buf.writeVarInt(division);
|
||||||
buf.writeByte(flag);
|
buf.writeByte(flag);
|
||||||
} else if (actionType == 3) {
|
} else if (actionType == 3) {
|
||||||
String json = buf.readUtf();
|
String json = buf.readUtf();
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUUID(uuid);
|
buf.writeUUID(uuid);
|
||||||
buf.writeVarInt(actionType);
|
buf.writeVarInt(actionType);
|
||||||
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens)));
|
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundBossEventPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundBossEventPacket", e);
|
||||||
@@ -653,7 +658,7 @@ public class PacketConsumers {
|
|||||||
if (actionType == 0) {
|
if (actionType == 0) {
|
||||||
Tag nbt = buf.readNbt(false);
|
Tag nbt = buf.readNbt(false);
|
||||||
if (nbt == null) return;
|
if (nbt == null) return;
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
float health = buf.readFloat();
|
float health = buf.readFloat();
|
||||||
int color = buf.readVarInt();
|
int color = buf.readVarInt();
|
||||||
@@ -664,7 +669,7 @@ public class PacketConsumers {
|
|||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUUID(uuid);
|
buf.writeUUID(uuid);
|
||||||
buf.writeVarInt(actionType);
|
buf.writeVarInt(actionType);
|
||||||
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt), tokens)), false);
|
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))), false);
|
||||||
buf.writeFloat(health);
|
buf.writeFloat(health);
|
||||||
buf.writeVarInt(color);
|
buf.writeVarInt(color);
|
||||||
buf.writeVarInt(division);
|
buf.writeVarInt(division);
|
||||||
@@ -672,14 +677,14 @@ public class PacketConsumers {
|
|||||||
} else if (actionType == 3) {
|
} else if (actionType == 3) {
|
||||||
Tag nbt = buf.readNbt(false);
|
Tag nbt = buf.readNbt(false);
|
||||||
if (nbt == null) return;
|
if (nbt == null) return;
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUUID(uuid);
|
buf.writeUUID(uuid);
|
||||||
buf.writeVarInt(actionType);
|
buf.writeVarInt(actionType);
|
||||||
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt), tokens)), false);
|
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))), false);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundBossEventPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundBossEventPacket", e);
|
||||||
@@ -695,14 +700,14 @@ public class PacketConsumers {
|
|||||||
if (mode != 0 && mode != 2) return;
|
if (mode != 0 && mode != 2) return;
|
||||||
String displayName = buf.readUtf();
|
String displayName = buf.readUtf();
|
||||||
int renderType = buf.readVarInt();
|
int renderType = buf.readVarInt();
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(displayName);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(displayName);
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUtf(objective);
|
buf.writeUtf(objective);
|
||||||
buf.writeByte(mode);
|
buf.writeByte(mode);
|
||||||
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(displayName), tokens)));
|
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(displayName), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))));
|
||||||
buf.writeVarInt(renderType);
|
buf.writeVarInt(renderType);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetObjectivePacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetObjectivePacket", e);
|
||||||
@@ -723,19 +728,19 @@ public class PacketConsumers {
|
|||||||
if (optionalNumberFormat) {
|
if (optionalNumberFormat) {
|
||||||
int format = buf.readVarInt();
|
int format = buf.readVarInt();
|
||||||
if (format == 0) {
|
if (format == 0) {
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUtf(objective);
|
buf.writeUtf(objective);
|
||||||
buf.writeByte(mode);
|
buf.writeByte(mode);
|
||||||
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(displayName), tokens)), false);
|
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(displayName), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))), false);
|
||||||
buf.writeVarInt(renderType);
|
buf.writeVarInt(renderType);
|
||||||
buf.writeBoolean(true);
|
buf.writeBoolean(true);
|
||||||
buf.writeVarInt(0);
|
buf.writeVarInt(0);
|
||||||
} else if (format == 1) {
|
} else if (format == 1) {
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
Tag style = buf.readNbt(false);
|
Tag style = buf.readNbt(false);
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
@@ -743,7 +748,7 @@ public class PacketConsumers {
|
|||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUtf(objective);
|
buf.writeUtf(objective);
|
||||||
buf.writeByte(mode);
|
buf.writeByte(mode);
|
||||||
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(displayName), tokens)), false);
|
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(displayName), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))), false);
|
||||||
buf.writeVarInt(renderType);
|
buf.writeVarInt(renderType);
|
||||||
buf.writeBoolean(true);
|
buf.writeBoolean(true);
|
||||||
buf.writeVarInt(1);
|
buf.writeVarInt(1);
|
||||||
@@ -751,29 +756,29 @@ public class PacketConsumers {
|
|||||||
} else if (format == 2) {
|
} else if (format == 2) {
|
||||||
Tag fixed = buf.readNbt(false);
|
Tag fixed = buf.readNbt(false);
|
||||||
if (fixed == null) return;
|
if (fixed == null) return;
|
||||||
Map<String, Component> tokens1 = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
Map<String, ComponentProvider> tokens1 = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||||
Map<String, Component> tokens2 = CraftEngine.instance().fontManager().matchTags(fixed.getAsString());
|
Map<String, ComponentProvider> tokens2 = CraftEngine.instance().fontManager().matchTags(fixed.getAsString());
|
||||||
if (tokens1.isEmpty() && tokens2.isEmpty()) return;
|
if (tokens1.isEmpty() && tokens2.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUtf(objective);
|
buf.writeUtf(objective);
|
||||||
buf.writeByte(mode);
|
buf.writeByte(mode);
|
||||||
buf.writeNbt(tokens1.isEmpty() ? displayName : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(displayName), tokens1)), false);
|
buf.writeNbt(tokens1.isEmpty() ? displayName : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(displayName), tokens1, NetworkTextReplaceContext.of((BukkitServerPlayer) user))), false);
|
||||||
buf.writeVarInt(renderType);
|
buf.writeVarInt(renderType);
|
||||||
buf.writeBoolean(true);
|
buf.writeBoolean(true);
|
||||||
buf.writeVarInt(2);
|
buf.writeVarInt(2);
|
||||||
buf.writeNbt(tokens2.isEmpty() ? fixed : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(fixed), tokens2)), false);
|
buf.writeNbt(tokens2.isEmpty() ? fixed : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(fixed), tokens2, NetworkTextReplaceContext.of((BukkitServerPlayer) user))), false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUtf(objective);
|
buf.writeUtf(objective);
|
||||||
buf.writeByte(mode);
|
buf.writeByte(mode);
|
||||||
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(displayName), tokens)), false);
|
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(displayName), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))), false);
|
||||||
buf.writeVarInt(renderType);
|
buf.writeVarInt(renderType);
|
||||||
buf.writeBoolean(false);
|
buf.writeBoolean(false);
|
||||||
}
|
}
|
||||||
@@ -787,13 +792,13 @@ public class PacketConsumers {
|
|||||||
try {
|
try {
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
String jsonOrPlainString = buf.readUtf();
|
String jsonOrPlainString = buf.readUtf();
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(jsonOrPlainString);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(jsonOrPlainString);
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
boolean overlay = buf.readBoolean();
|
boolean overlay = buf.readBoolean();
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(jsonOrPlainString), tokens)));
|
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(jsonOrPlainString), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))));
|
||||||
buf.writeBoolean(overlay);
|
buf.writeBoolean(overlay);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundSystemChatPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundSystemChatPacket", e);
|
||||||
@@ -806,13 +811,13 @@ public class PacketConsumers {
|
|||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
Tag nbt = buf.readNbt(false);
|
Tag nbt = buf.readNbt(false);
|
||||||
if (nbt == null) return;
|
if (nbt == null) return;
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
boolean overlay = buf.readBoolean();
|
boolean overlay = buf.readBoolean();
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt), tokens)), false);
|
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))), false);
|
||||||
buf.writeBoolean(overlay);
|
buf.writeBoolean(overlay);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundSystemChatPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundSystemChatPacket", e);
|
||||||
@@ -824,12 +829,12 @@ public class PacketConsumers {
|
|||||||
try {
|
try {
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
String json = buf.readUtf();
|
String json = buf.readUtf();
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens)));
|
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetSubtitleTextPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetSubtitleTextPacket", e);
|
||||||
}
|
}
|
||||||
@@ -841,12 +846,12 @@ public class PacketConsumers {
|
|||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
Tag nbt = buf.readNbt(false);
|
Tag nbt = buf.readNbt(false);
|
||||||
if (nbt == null) return;
|
if (nbt == null) return;
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt), tokens)), false);
|
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))), false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetSubtitleTextPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetSubtitleTextPacket", e);
|
||||||
}
|
}
|
||||||
@@ -857,12 +862,12 @@ public class PacketConsumers {
|
|||||||
try {
|
try {
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
String json = buf.readUtf();
|
String json = buf.readUtf();
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens)));
|
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetTitleTextPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetTitleTextPacket", e);
|
||||||
}
|
}
|
||||||
@@ -874,12 +879,12 @@ public class PacketConsumers {
|
|||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
Tag nbt = buf.readNbt(false);
|
Tag nbt = buf.readNbt(false);
|
||||||
if (nbt == null) return;
|
if (nbt == null) return;
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt), tokens)), false);
|
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))), false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetTitleTextPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetTitleTextPacket", e);
|
||||||
}
|
}
|
||||||
@@ -890,12 +895,12 @@ public class PacketConsumers {
|
|||||||
try {
|
try {
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
String json = buf.readUtf();
|
String json = buf.readUtf();
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens)));
|
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetActionBarTextPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetActionBarTextPacket", e);
|
||||||
}
|
}
|
||||||
@@ -907,12 +912,12 @@ public class PacketConsumers {
|
|||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
Tag nbt = buf.readNbt(false);
|
Tag nbt = buf.readNbt(false);
|
||||||
if (nbt == null) return;
|
if (nbt == null) return;
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt), tokens)), false);
|
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))), false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetActionBarTextPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetActionBarTextPacket", e);
|
||||||
}
|
}
|
||||||
@@ -924,14 +929,15 @@ public class PacketConsumers {
|
|||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
String json1 = buf.readUtf();
|
String json1 = buf.readUtf();
|
||||||
String json2 = buf.readUtf();
|
String json2 = buf.readUtf();
|
||||||
Map<String, Component> tokens1 = CraftEngine.instance().fontManager().matchTags(json1);
|
Map<String, ComponentProvider> tokens1 = CraftEngine.instance().fontManager().matchTags(json1);
|
||||||
Map<String, Component> tokens2 = CraftEngine.instance().fontManager().matchTags(json2);
|
Map<String, ComponentProvider> tokens2 = CraftEngine.instance().fontManager().matchTags(json2);
|
||||||
if (tokens1.isEmpty() && tokens2.isEmpty()) return;
|
if (tokens1.isEmpty() && tokens2.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeUtf(tokens1.isEmpty() ? json1 : AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json1), tokens1)));
|
NetworkTextReplaceContext context = NetworkTextReplaceContext.of((BukkitServerPlayer) user);
|
||||||
buf.writeUtf(tokens2.isEmpty() ? json2 : AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json2), tokens2)));
|
buf.writeUtf(tokens1.isEmpty() ? json1 : AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json1), tokens1, context)));
|
||||||
|
buf.writeUtf(tokens2.isEmpty() ? json2 : AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json2), tokens2, context)));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundTabListPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundTabListPacket", e);
|
||||||
}
|
}
|
||||||
@@ -945,14 +951,15 @@ public class PacketConsumers {
|
|||||||
if (nbt1 == null) return;
|
if (nbt1 == null) return;
|
||||||
Tag nbt2 = buf.readNbt(false);
|
Tag nbt2 = buf.readNbt(false);
|
||||||
if (nbt2 == null) return;
|
if (nbt2 == null) return;
|
||||||
Map<String, Component> tokens1 = CraftEngine.instance().fontManager().matchTags(nbt1.getAsString());
|
Map<String, ComponentProvider> tokens1 = CraftEngine.instance().fontManager().matchTags(nbt1.getAsString());
|
||||||
Map<String, Component> tokens2 = CraftEngine.instance().fontManager().matchTags(nbt2.getAsString());
|
Map<String, ComponentProvider> tokens2 = CraftEngine.instance().fontManager().matchTags(nbt2.getAsString());
|
||||||
if (tokens1.isEmpty() && tokens2.isEmpty()) return;
|
if (tokens1.isEmpty() && tokens2.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeNbt(tokens1.isEmpty() ? nbt1 : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt1), tokens1)), false);
|
NetworkTextReplaceContext context = NetworkTextReplaceContext.of((BukkitServerPlayer) user);
|
||||||
buf.writeNbt(tokens2.isEmpty() ? nbt2 : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt2), tokens2)), false);
|
buf.writeNbt(tokens1.isEmpty() ? nbt1 : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt1), tokens1, context)), false);
|
||||||
|
buf.writeNbt(tokens2.isEmpty() ? nbt2 : AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt2), tokens2, context)), false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundTabListPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundTabListPacket", e);
|
||||||
}
|
}
|
||||||
@@ -965,14 +972,14 @@ public class PacketConsumers {
|
|||||||
int containerId = buf.readVarInt();
|
int containerId = buf.readVarInt();
|
||||||
int type = buf.readVarInt();
|
int type = buf.readVarInt();
|
||||||
String json = buf.readUtf();
|
String json = buf.readUtf();
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeVarInt(containerId);
|
buf.writeVarInt(containerId);
|
||||||
buf.writeVarInt(type);
|
buf.writeVarInt(type);
|
||||||
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens)));
|
buf.writeUtf(AdventureHelper.componentToJson(AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundOpenScreenPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundOpenScreenPacket", e);
|
||||||
}
|
}
|
||||||
@@ -986,13 +993,13 @@ public class PacketConsumers {
|
|||||||
int type = buf.readVarInt();
|
int type = buf.readVarInt();
|
||||||
Tag nbt = buf.readNbt(false);
|
Tag nbt = buf.readNbt(false);
|
||||||
if (nbt == null) return;
|
if (nbt == null) return;
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||||
if (tokens.isEmpty()) return;
|
if (tokens.isEmpty()) return;
|
||||||
buf.clear();
|
buf.clear();
|
||||||
buf.writeVarInt(event.packetID());
|
buf.writeVarInt(event.packetID());
|
||||||
buf.writeVarInt(containerId);
|
buf.writeVarInt(containerId);
|
||||||
buf.writeVarInt(type);
|
buf.writeVarInt(type);
|
||||||
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt), tokens)), false);
|
buf.writeNbt(AdventureHelper.componentToTag(AdventureHelper.replaceText(AdventureHelper.tagToComponent(nbt), tokens, NetworkTextReplaceContext.of((BukkitServerPlayer) user))), false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundOpenScreenPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundOpenScreenPacket", e);
|
||||||
}
|
}
|
||||||
@@ -1501,7 +1508,7 @@ public class PacketConsumers {
|
|||||||
int entityId = FastNMS.INSTANCE.method$ClientboundEntityPositionSyncPacket$id(packet);
|
int entityId = FastNMS.INSTANCE.method$ClientboundEntityPositionSyncPacket$id(packet);
|
||||||
EntityPacketHandler handler = user.entityPacketHandlers().get(entityId);
|
EntityPacketHandler handler = user.entityPacketHandlers().get(entityId);
|
||||||
if (handler != null) {
|
if (handler != null) {
|
||||||
handler.handleSyncEntityPosition(user, event, packet);
|
handler.handleSyncEntityPosition((BukkitServerPlayer) user, event, packet);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundEntityPositionSyncPacket", e);
|
CraftEngine.instance().logger().warn("Failed to handle ClientboundEntityPositionSyncPacket", e);
|
||||||
@@ -1940,11 +1947,12 @@ public class PacketConsumers {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> SET_ENTITY_DATA = (user, event) -> {
|
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> SET_ENTITY_DATA = (user, event) -> {
|
||||||
try {
|
try {
|
||||||
|
if (!(user instanceof BukkitServerPlayer serverPlayer)) return;
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
int id = buf.readVarInt();
|
int id = buf.readVarInt();
|
||||||
EntityPacketHandler handler = user.entityPacketHandlers().get(id);
|
EntityPacketHandler handler = user.entityPacketHandlers().get(id);
|
||||||
if (handler != null) {
|
if (handler != null) {
|
||||||
handler.handleSetEntityData(user, event);
|
handler.handleSetEntityData(serverPlayer, event);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Config.interceptEntityName()) {
|
if (Config.interceptEntityName()) {
|
||||||
@@ -1958,12 +1966,10 @@ public class PacketConsumers {
|
|||||||
if (optionalTextComponent.isEmpty()) continue;
|
if (optionalTextComponent.isEmpty()) continue;
|
||||||
Object textComponent = optionalTextComponent.get();
|
Object textComponent = optionalTextComponent.get();
|
||||||
String json = ComponentUtils.minecraftToJson(textComponent);
|
String json = ComponentUtils.minecraftToJson(textComponent);
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||||
if (tokens.isEmpty()) continue;
|
if (tokens.isEmpty()) continue;
|
||||||
Component component = AdventureHelper.jsonToComponent(json);
|
Component component = AdventureHelper.jsonToComponent(json);
|
||||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
component = AdventureHelper.replaceText(component, tokens, NetworkTextReplaceContext.of(serverPlayer));
|
||||||
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(token.getValue()));
|
|
||||||
}
|
|
||||||
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
||||||
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(entityDataId, serializer, Optional.of(ComponentUtils.adventureToMinecraft(component))));
|
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(entityDataId, serializer, Optional.of(ComponentUtils.adventureToMinecraft(component))));
|
||||||
isChanged = true;
|
isChanged = true;
|
||||||
@@ -1985,6 +1991,7 @@ public class PacketConsumers {
|
|||||||
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> SET_SCORE_1_20_3 = (user, event) -> {
|
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> SET_SCORE_1_20_3 = (user, event) -> {
|
||||||
try {
|
try {
|
||||||
if (!Config.interceptSetScore()) return;
|
if (!Config.interceptSetScore()) return;
|
||||||
|
if (!(user instanceof BukkitServerPlayer serverPlayer)) return;
|
||||||
boolean isChanged = false;
|
boolean isChanged = false;
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
String owner = buf.readUtf();
|
String owner = buf.readUtf();
|
||||||
@@ -1997,12 +2004,10 @@ public class PacketConsumers {
|
|||||||
}
|
}
|
||||||
outside:
|
outside:
|
||||||
if (displayName != null) {
|
if (displayName != null) {
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||||
if (tokens.isEmpty()) break outside;
|
if (tokens.isEmpty()) break outside;
|
||||||
Component component = AdventureHelper.tagToComponent(displayName);
|
Component component = AdventureHelper.tagToComponent(displayName);
|
||||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
component = AdventureHelper.replaceText(component, tokens, NetworkTextReplaceContext.of(serverPlayer));
|
||||||
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(token.getValue()));
|
|
||||||
}
|
|
||||||
displayName = AdventureHelper.componentToTag(component);
|
displayName = AdventureHelper.componentToTag(component);
|
||||||
isChanged = true;
|
isChanged = true;
|
||||||
}
|
}
|
||||||
@@ -2020,13 +2025,11 @@ public class PacketConsumers {
|
|||||||
} else if (format == 2) {
|
} else if (format == 2) {
|
||||||
fixed = buf.readNbt(false);
|
fixed = buf.readNbt(false);
|
||||||
if (fixed == null) return;
|
if (fixed == null) return;
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(fixed.getAsString());
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(fixed.getAsString());
|
||||||
if (tokens.isEmpty() && !isChanged) return;
|
if (tokens.isEmpty() && !isChanged) return;
|
||||||
if (!tokens.isEmpty()) {
|
if (!tokens.isEmpty()) {
|
||||||
Component component = AdventureHelper.tagToComponent(fixed);
|
Component component = AdventureHelper.tagToComponent(fixed);
|
||||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
component = AdventureHelper.replaceText(component, tokens, NetworkTextReplaceContext.of(serverPlayer));
|
||||||
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(token.getValue()));
|
|
||||||
}
|
|
||||||
fixed = AdventureHelper.componentToTag(component);
|
fixed = AdventureHelper.componentToTag(component);
|
||||||
isChanged = true;
|
isChanged = true;
|
||||||
}
|
}
|
||||||
@@ -2569,11 +2572,12 @@ public class PacketConsumers {
|
|||||||
|
|
||||||
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> UPDATE_ADVANCEMENTS = (user, event) -> {
|
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> UPDATE_ADVANCEMENTS = (user, event) -> {
|
||||||
try {
|
try {
|
||||||
|
if (!(user instanceof BukkitServerPlayer serverPlayer)) return;
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
boolean reset = buf.readBoolean();
|
boolean reset = buf.readBoolean();
|
||||||
List<AdvancementHolder> added = buf.readCollection(ArrayList::new, byteBuf -> {
|
List<AdvancementHolder> added = buf.readCollection(ArrayList::new, byteBuf -> {
|
||||||
AdvancementHolder holder = AdvancementHolder.read(byteBuf);
|
AdvancementHolder holder = AdvancementHolder.read(byteBuf);
|
||||||
holder.applyClientboundData((BukkitServerPlayer) user);
|
holder.applyClientboundData(serverPlayer);
|
||||||
return holder;
|
return holder;
|
||||||
});
|
});
|
||||||
Set<Key> removed = buf.readCollection(Sets::newLinkedHashSetWithExpectedSize, FriendlyByteBuf::readKey);
|
Set<Key> removed = buf.readCollection(Sets::newLinkedHashSetWithExpectedSize, FriendlyByteBuf::readKey);
|
||||||
|
|||||||
@@ -7,11 +7,14 @@ import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
|||||||
import net.momirealms.craftengine.bukkit.plugin.network.PacketConsumers;
|
import net.momirealms.craftengine.bukkit.plugin.network.PacketConsumers;
|
||||||
import net.momirealms.craftengine.bukkit.util.BlockStateUtils;
|
import net.momirealms.craftengine.bukkit.util.BlockStateUtils;
|
||||||
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
|
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
|
||||||
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.NetworkTextReplaceContext;
|
||||||
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
||||||
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
||||||
import net.momirealms.craftengine.core.plugin.network.NetWorkUser;
|
import net.momirealms.craftengine.core.plugin.network.NetWorkUser;
|
||||||
|
import net.momirealms.craftengine.core.plugin.text.component.ComponentProvider;
|
||||||
import net.momirealms.craftengine.core.util.AdventureHelper;
|
import net.momirealms.craftengine.core.util.AdventureHelper;
|
||||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||||
import net.momirealms.craftengine.core.util.VersionHelper;
|
import net.momirealms.craftengine.core.util.VersionHelper;
|
||||||
@@ -25,7 +28,7 @@ public class AbstractMinecartPacketHandler implements EntityPacketHandler {
|
|||||||
private static final BlockStateHandler HANDLER = VersionHelper.isOrAbove1_21_3() ? BlockStateHandler_1_21_3.INSTANCE : BlockStateHandler_1_20.INSTANCE;
|
private static final BlockStateHandler HANDLER = VersionHelper.isOrAbove1_21_3() ? BlockStateHandler_1_21_3.INSTANCE : BlockStateHandler_1_20.INSTANCE;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleSetEntityData(NetWorkUser user, ByteBufPacketEvent event) {
|
public void handleSetEntityData(Player user, ByteBufPacketEvent event) {
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
int id = buf.readVarInt();
|
int id = buf.readVarInt();
|
||||||
boolean isChanged = false;
|
boolean isChanged = false;
|
||||||
@@ -43,12 +46,9 @@ public class AbstractMinecartPacketHandler implements EntityPacketHandler {
|
|||||||
if (optionalTextComponent.isEmpty()) continue;
|
if (optionalTextComponent.isEmpty()) continue;
|
||||||
Object textComponent = optionalTextComponent.get();
|
Object textComponent = optionalTextComponent.get();
|
||||||
String json = ComponentUtils.minecraftToJson(textComponent);
|
String json = ComponentUtils.minecraftToJson(textComponent);
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||||
if (tokens.isEmpty()) continue;
|
if (tokens.isEmpty()) continue;
|
||||||
Component component = AdventureHelper.jsonToComponent(json);
|
Component component = AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens, NetworkTextReplaceContext.of(user));
|
||||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
|
||||||
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(token.getValue()));
|
|
||||||
}
|
|
||||||
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
||||||
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(
|
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(
|
||||||
entityDataId, serializer, Optional.of(ComponentUtils.adventureToMinecraft(component))
|
entityDataId, serializer, Optional.of(ComponentUtils.adventureToMinecraft(component))
|
||||||
|
|||||||
@@ -4,11 +4,13 @@ import net.kyori.adventure.text.Component;
|
|||||||
import net.momirealms.craftengine.bukkit.entity.data.BaseEntityData;
|
import net.momirealms.craftengine.bukkit.entity.data.BaseEntityData;
|
||||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||||
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
|
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
|
||||||
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.NetworkTextReplaceContext;
|
||||||
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
||||||
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
||||||
import net.momirealms.craftengine.core.plugin.network.NetWorkUser;
|
import net.momirealms.craftengine.core.plugin.text.component.ComponentProvider;
|
||||||
import net.momirealms.craftengine.core.util.AdventureHelper;
|
import net.momirealms.craftengine.core.util.AdventureHelper;
|
||||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||||
|
|
||||||
@@ -21,7 +23,7 @@ public class ArmorStandPacketHandler implements EntityPacketHandler {
|
|||||||
public static final ArmorStandPacketHandler INSTANCE = new ArmorStandPacketHandler();
|
public static final ArmorStandPacketHandler INSTANCE = new ArmorStandPacketHandler();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleSetEntityData(NetWorkUser user, ByteBufPacketEvent event) {
|
public void handleSetEntityData(Player user, ByteBufPacketEvent event) {
|
||||||
if (!Config.interceptArmorStand()) {
|
if (!Config.interceptArmorStand()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -38,12 +40,9 @@ public class ArmorStandPacketHandler implements EntityPacketHandler {
|
|||||||
if (optionalTextComponent.isEmpty()) continue;
|
if (optionalTextComponent.isEmpty()) continue;
|
||||||
Object textComponent = optionalTextComponent.get();
|
Object textComponent = optionalTextComponent.get();
|
||||||
String json = ComponentUtils.minecraftToJson(textComponent);
|
String json = ComponentUtils.minecraftToJson(textComponent);
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||||
if (tokens.isEmpty()) continue;
|
if (tokens.isEmpty()) continue;
|
||||||
Component component = AdventureHelper.jsonToComponent(json);
|
Component component = AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens, NetworkTextReplaceContext.of(user));
|
||||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
|
||||||
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(token.getValue()));
|
|
||||||
}
|
|
||||||
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
||||||
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(entityDataId, serializer, Optional.of(ComponentUtils.adventureToMinecraft(component))));
|
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(entityDataId, serializer, Optional.of(ComponentUtils.adventureToMinecraft(component))));
|
||||||
isChanged = true;
|
isChanged = true;
|
||||||
|
|||||||
@@ -7,11 +7,13 @@ import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
|||||||
import net.momirealms.craftengine.bukkit.plugin.network.PacketConsumers;
|
import net.momirealms.craftengine.bukkit.plugin.network.PacketConsumers;
|
||||||
import net.momirealms.craftengine.bukkit.util.BlockStateUtils;
|
import net.momirealms.craftengine.bukkit.util.BlockStateUtils;
|
||||||
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
|
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
|
||||||
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.NetworkTextReplaceContext;
|
||||||
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
||||||
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
||||||
import net.momirealms.craftengine.core.plugin.network.NetWorkUser;
|
import net.momirealms.craftengine.core.plugin.text.component.ComponentProvider;
|
||||||
import net.momirealms.craftengine.core.util.AdventureHelper;
|
import net.momirealms.craftengine.core.util.AdventureHelper;
|
||||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||||
|
|
||||||
@@ -23,7 +25,7 @@ public class BlockDisplayPacketHandler implements EntityPacketHandler {
|
|||||||
public static final BlockDisplayPacketHandler INSTANCE = new BlockDisplayPacketHandler();
|
public static final BlockDisplayPacketHandler INSTANCE = new BlockDisplayPacketHandler();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleSetEntityData(NetWorkUser user, ByteBufPacketEvent event) {
|
public void handleSetEntityData(Player user, ByteBufPacketEvent event) {
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
int id = buf.readVarInt();
|
int id = buf.readVarInt();
|
||||||
boolean isChanged = false;
|
boolean isChanged = false;
|
||||||
@@ -52,12 +54,9 @@ public class BlockDisplayPacketHandler implements EntityPacketHandler {
|
|||||||
if (optionalTextComponent.isEmpty()) continue;
|
if (optionalTextComponent.isEmpty()) continue;
|
||||||
Object textComponent = optionalTextComponent.get();
|
Object textComponent = optionalTextComponent.get();
|
||||||
String json = ComponentUtils.minecraftToJson(textComponent);
|
String json = ComponentUtils.minecraftToJson(textComponent);
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||||
if (tokens.isEmpty()) continue;
|
if (tokens.isEmpty()) continue;
|
||||||
Component component = AdventureHelper.jsonToComponent(json);
|
Component component = AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens, NetworkTextReplaceContext.of(user));
|
||||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
|
||||||
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(token.getValue()));
|
|
||||||
}
|
|
||||||
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
||||||
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(
|
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(
|
||||||
entityDataId, serializer, Optional.of(ComponentUtils.adventureToMinecraft(component))
|
entityDataId, serializer, Optional.of(ComponentUtils.adventureToMinecraft(component))
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
|||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
||||||
import net.momirealms.craftengine.bukkit.util.EntityDataUtils;
|
import net.momirealms.craftengine.bukkit.util.EntityDataUtils;
|
||||||
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
||||||
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
||||||
import net.momirealms.craftengine.core.plugin.network.NetWorkUser;
|
|
||||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ public class CommonItemPacketHandler implements EntityPacketHandler {
|
|||||||
private static long lastWarningTime = 0;
|
private static long lastWarningTime = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleSetEntityData(NetWorkUser user, ByteBufPacketEvent event) {
|
public void handleSetEntityData(Player user, ByteBufPacketEvent event) {
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
int id = buf.readVarInt();
|
int id = buf.readVarInt();
|
||||||
boolean isChanged = false;
|
boolean isChanged = false;
|
||||||
|
|||||||
@@ -7,11 +7,13 @@ import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
|||||||
import net.momirealms.craftengine.bukkit.plugin.network.PacketConsumers;
|
import net.momirealms.craftengine.bukkit.plugin.network.PacketConsumers;
|
||||||
import net.momirealms.craftengine.bukkit.util.BlockStateUtils;
|
import net.momirealms.craftengine.bukkit.util.BlockStateUtils;
|
||||||
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
|
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
|
||||||
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.NetworkTextReplaceContext;
|
||||||
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
||||||
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
||||||
import net.momirealms.craftengine.core.plugin.network.NetWorkUser;
|
import net.momirealms.craftengine.core.plugin.text.component.ComponentProvider;
|
||||||
import net.momirealms.craftengine.core.util.AdventureHelper;
|
import net.momirealms.craftengine.core.util.AdventureHelper;
|
||||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||||
|
|
||||||
@@ -23,7 +25,7 @@ public class EndermanPacketHandler implements EntityPacketHandler {
|
|||||||
public static final EndermanPacketHandler INSTANCE = new EndermanPacketHandler();
|
public static final EndermanPacketHandler INSTANCE = new EndermanPacketHandler();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleSetEntityData(NetWorkUser user, ByteBufPacketEvent event) {
|
public void handleSetEntityData(Player user, ByteBufPacketEvent event) {
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
int id = buf.readVarInt();
|
int id = buf.readVarInt();
|
||||||
boolean isChanged = false;
|
boolean isChanged = false;
|
||||||
@@ -54,12 +56,9 @@ public class EndermanPacketHandler implements EntityPacketHandler {
|
|||||||
if (optionalTextComponent.isEmpty()) continue;
|
if (optionalTextComponent.isEmpty()) continue;
|
||||||
Object textComponent = optionalTextComponent.get();
|
Object textComponent = optionalTextComponent.get();
|
||||||
String json = ComponentUtils.minecraftToJson(textComponent);
|
String json = ComponentUtils.minecraftToJson(textComponent);
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||||
if (tokens.isEmpty()) continue;
|
if (tokens.isEmpty()) continue;
|
||||||
Component component = AdventureHelper.jsonToComponent(json);
|
Component component = AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens, NetworkTextReplaceContext.of(user));
|
||||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
|
||||||
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(token.getValue()));
|
|
||||||
}
|
|
||||||
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
||||||
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(
|
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(
|
||||||
entityDataId, serializer, Optional.of(ComponentUtils.adventureToMinecraft(component))
|
entityDataId, serializer, Optional.of(ComponentUtils.adventureToMinecraft(component))
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ import net.momirealms.craftengine.bukkit.entity.data.ItemDisplayEntityData;
|
|||||||
import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
||||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
||||||
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
||||||
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
||||||
import net.momirealms.craftengine.core.plugin.network.NetWorkUser;
|
|
||||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ public class ItemDisplayPacketHandler implements EntityPacketHandler {
|
|||||||
public static final ItemDisplayPacketHandler INSTANCE = new ItemDisplayPacketHandler();
|
public static final ItemDisplayPacketHandler INSTANCE = new ItemDisplayPacketHandler();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleSetEntityData(NetWorkUser user, ByteBufPacketEvent event) {
|
public void handleSetEntityData(Player user, ByteBufPacketEvent event) {
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
int id = buf.readVarInt();
|
int id = buf.readVarInt();
|
||||||
boolean isChanged = false;
|
boolean isChanged = false;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
|||||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
||||||
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
||||||
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
||||||
@@ -20,7 +21,7 @@ public class ItemFramePacketHandler implements EntityPacketHandler {
|
|||||||
private static long lastWarningTime = 0;
|
private static long lastWarningTime = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleSetEntityData(NetWorkUser user, ByteBufPacketEvent event) {
|
public void handleSetEntityData(Player user, ByteBufPacketEvent event) {
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
int id = buf.readVarInt();
|
int id = buf.readVarInt();
|
||||||
boolean isChanged = false;
|
boolean isChanged = false;
|
||||||
@@ -41,7 +42,7 @@ public class ItemFramePacketHandler implements EntityPacketHandler {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ItemStack itemStack = FastNMS.INSTANCE.method$CraftItemStack$asCraftMirror(nmsItemStack);
|
ItemStack itemStack = FastNMS.INSTANCE.method$CraftItemStack$asCraftMirror(nmsItemStack);
|
||||||
Optional<ItemStack> optional = BukkitItemManager.instance().s2c(itemStack, (BukkitServerPlayer) user);
|
Optional<ItemStack> optional = BukkitItemManager.instance().s2c(itemStack, user);
|
||||||
if (optional.isEmpty()) continue;
|
if (optional.isEmpty()) continue;
|
||||||
isChanged = true;
|
isChanged = true;
|
||||||
itemStack = optional.get();
|
itemStack = optional.get();
|
||||||
|
|||||||
@@ -7,11 +7,13 @@ import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
|||||||
import net.momirealms.craftengine.bukkit.plugin.network.PacketConsumers;
|
import net.momirealms.craftengine.bukkit.plugin.network.PacketConsumers;
|
||||||
import net.momirealms.craftengine.bukkit.util.BlockStateUtils;
|
import net.momirealms.craftengine.bukkit.util.BlockStateUtils;
|
||||||
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
|
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
|
||||||
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.NetworkTextReplaceContext;
|
||||||
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
||||||
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
||||||
import net.momirealms.craftengine.core.plugin.network.NetWorkUser;
|
import net.momirealms.craftengine.core.plugin.text.component.ComponentProvider;
|
||||||
import net.momirealms.craftengine.core.util.AdventureHelper;
|
import net.momirealms.craftengine.core.util.AdventureHelper;
|
||||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||||
|
|
||||||
@@ -23,7 +25,7 @@ public class PrimedTNTPacketHandler implements EntityPacketHandler {
|
|||||||
public static final PrimedTNTPacketHandler INSTANCE = new PrimedTNTPacketHandler();
|
public static final PrimedTNTPacketHandler INSTANCE = new PrimedTNTPacketHandler();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleSetEntityData(NetWorkUser user, ByteBufPacketEvent event) {
|
public void handleSetEntityData(Player user, ByteBufPacketEvent event) {
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
int id = buf.readVarInt();
|
int id = buf.readVarInt();
|
||||||
boolean isChanged = false;
|
boolean isChanged = false;
|
||||||
@@ -52,12 +54,9 @@ public class PrimedTNTPacketHandler implements EntityPacketHandler {
|
|||||||
if (optionalTextComponent.isEmpty()) continue;
|
if (optionalTextComponent.isEmpty()) continue;
|
||||||
Object textComponent = optionalTextComponent.get();
|
Object textComponent = optionalTextComponent.get();
|
||||||
String json = ComponentUtils.minecraftToJson(textComponent);
|
String json = ComponentUtils.minecraftToJson(textComponent);
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||||
if (tokens.isEmpty()) continue;
|
if (tokens.isEmpty()) continue;
|
||||||
Component component = AdventureHelper.jsonToComponent(json);
|
Component component = AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens, NetworkTextReplaceContext.of(user));
|
||||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
|
||||||
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(token.getValue()));
|
|
||||||
}
|
|
||||||
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
||||||
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(
|
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(
|
||||||
entityDataId, serializer, Optional.of(ComponentUtils.adventureToMinecraft(component))
|
entityDataId, serializer, Optional.of(ComponentUtils.adventureToMinecraft(component))
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
|||||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.injector.ProtectedFieldVisitor;
|
import net.momirealms.craftengine.bukkit.plugin.injector.ProtectedFieldVisitor;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MEntityTypes;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MEntityTypes;
|
||||||
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
import net.momirealms.craftengine.core.entity.projectile.ProjectileMeta;
|
import net.momirealms.craftengine.core.entity.projectile.ProjectileMeta;
|
||||||
import net.momirealms.craftengine.core.item.CustomItem;
|
import net.momirealms.craftengine.core.item.CustomItem;
|
||||||
import net.momirealms.craftengine.core.item.Item;
|
import net.momirealms.craftengine.core.item.Item;
|
||||||
@@ -38,7 +39,7 @@ public class ProjectilePacketHandler implements EntityPacketHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleSetEntityData(NetWorkUser user, ByteBufPacketEvent event) {
|
public void handleSetEntityData(Player user, ByteBufPacketEvent event) {
|
||||||
FriendlyByteBuf buf = event.getBuffer();
|
FriendlyByteBuf buf = event.getBuffer();
|
||||||
int id = buf.readVarInt();
|
int id = buf.readVarInt();
|
||||||
event.setChanged(true);
|
event.setChanged(true);
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ import net.momirealms.craftengine.bukkit.entity.data.TextDisplayEntityData;
|
|||||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
||||||
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
|
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
|
||||||
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.NetworkTextReplaceContext;
|
||||||
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
import net.momirealms.craftengine.core.plugin.network.ByteBufPacketEvent;
|
||||||
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler;
|
||||||
import net.momirealms.craftengine.core.plugin.network.NetWorkUser;
|
import net.momirealms.craftengine.core.plugin.text.component.ComponentProvider;
|
||||||
import net.momirealms.craftengine.core.util.AdventureHelper;
|
import net.momirealms.craftengine.core.util.AdventureHelper;
|
||||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||||
|
|
||||||
@@ -20,7 +22,7 @@ public class TextDisplayPacketHandler implements EntityPacketHandler {
|
|||||||
public static final TextDisplayPacketHandler INSTANCE = new TextDisplayPacketHandler();
|
public static final TextDisplayPacketHandler INSTANCE = new TextDisplayPacketHandler();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleSetEntityData(NetWorkUser user, ByteBufPacketEvent event) {
|
public void handleSetEntityData(Player user, ByteBufPacketEvent event) {
|
||||||
if (!Config.interceptTextDisplay()) {
|
if (!Config.interceptTextDisplay()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -35,12 +37,9 @@ public class TextDisplayPacketHandler implements EntityPacketHandler {
|
|||||||
Object textComponent = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$value(packedItem);
|
Object textComponent = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$value(packedItem);
|
||||||
if (textComponent == CoreReflections.instance$Component$empty) break;
|
if (textComponent == CoreReflections.instance$Component$empty) break;
|
||||||
String json = ComponentUtils.minecraftToJson(textComponent);
|
String json = ComponentUtils.minecraftToJson(textComponent);
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
Map<String, ComponentProvider> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||||
if (tokens.isEmpty()) continue;
|
if (tokens.isEmpty()) continue;
|
||||||
Component component = AdventureHelper.jsonToComponent(json);
|
Component component = AdventureHelper.replaceText(AdventureHelper.jsonToComponent(json), tokens, NetworkTextReplaceContext.of(user));
|
||||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
|
||||||
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(token.getValue()));
|
|
||||||
}
|
|
||||||
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
Object serializer = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$serializer(packedItem);
|
||||||
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(entityDataId, serializer, ComponentUtils.adventureToMinecraft(component)));
|
packedItems.set(i, FastNMS.INSTANCE.constructor$SynchedEntityData$DataValue(entityDataId, serializer, ComponentUtils.adventureToMinecraft(component)));
|
||||||
isChanged = true;
|
isChanged = true;
|
||||||
|
|||||||
@@ -6,11 +6,11 @@ import net.momirealms.craftengine.core.entity.player.Player;
|
|||||||
import net.momirealms.craftengine.core.item.Item;
|
import net.momirealms.craftengine.core.item.Item;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.NetworkTextReplaceContext;
|
||||||
|
import net.momirealms.craftengine.core.plugin.text.component.ComponentProvider;
|
||||||
import net.momirealms.craftengine.core.util.AdventureHelper;
|
import net.momirealms.craftengine.core.util.AdventureHelper;
|
||||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||||
import net.momirealms.craftengine.core.util.Key;
|
import net.momirealms.craftengine.core.util.Key;
|
||||||
import net.momirealms.craftengine.core.util.VersionHelper;
|
|
||||||
import net.momirealms.sparrow.nbt.Tag;
|
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -51,6 +51,16 @@ public class AdvancementDisplay {
|
|||||||
|
|
||||||
public void applyClientboundData(Player player) {
|
public void applyClientboundData(Player player) {
|
||||||
this.icon = CraftEngine.instance().itemManager().s2c(this.icon, player);
|
this.icon = CraftEngine.instance().itemManager().s2c(this.icon, player);
|
||||||
|
if (Config.interceptAdvancement()) {
|
||||||
|
Map<String, ComponentProvider> tokens1 = CraftEngine.instance().fontManager().matchTags(AdventureHelper.componentToJson(this.title));
|
||||||
|
if (!tokens1.isEmpty()) {
|
||||||
|
this.title = AdventureHelper.replaceText(this.title, tokens1, NetworkTextReplaceContext.of(player));
|
||||||
|
}
|
||||||
|
Map<String, ComponentProvider> tokens2 = CraftEngine.instance().fontManager().matchTags(AdventureHelper.componentToJson(this.description));
|
||||||
|
if (!tokens2.isEmpty()) {
|
||||||
|
this.description = AdventureHelper.replaceText(this.description, tokens2, NetworkTextReplaceContext.of(player));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void write(FriendlyByteBuf buf) {
|
public void write(FriendlyByteBuf buf) {
|
||||||
@@ -75,8 +85,8 @@ public class AdvancementDisplay {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static AdvancementDisplay read(FriendlyByteBuf buf) {
|
public static AdvancementDisplay read(FriendlyByteBuf buf) {
|
||||||
Component title = readComponent(buf);
|
Component title = buf.readComponent();
|
||||||
Component description = readComponent(buf);
|
Component description = buf.readComponent();
|
||||||
Item<Object> icon = CraftEngine.instance().itemManager().decode(buf);
|
Item<Object> icon = CraftEngine.instance().itemManager().decode(buf);
|
||||||
AdvancementType type = AdvancementType.byId(buf.readVarInt());
|
AdvancementType type = AdvancementType.byId(buf.readVarInt());
|
||||||
int flags = buf.readInt();
|
int flags = buf.readInt();
|
||||||
@@ -88,28 +98,4 @@ public class AdvancementDisplay {
|
|||||||
float y = buf.readFloat();
|
float y = buf.readFloat();
|
||||||
return new AdvancementDisplay(title, description, icon, background, type, showToast, hidden, x, y);
|
return new AdvancementDisplay(title, description, icon, background, type, showToast, hidden, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Component readComponent(FriendlyByteBuf buf) {
|
|
||||||
if (Config.interceptAdvancement()) {
|
|
||||||
if (VersionHelper.isOrAbove1_20_3()) {
|
|
||||||
Tag nbt = buf.readNbt(false);
|
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
|
||||||
Component component = AdventureHelper.nbtToComponent(nbt);
|
|
||||||
if (!tokens.isEmpty()) {
|
|
||||||
component = AdventureHelper.replaceText(component, tokens);
|
|
||||||
}
|
|
||||||
return component;
|
|
||||||
} else {
|
|
||||||
String json = buf.readUtf();
|
|
||||||
Component component = AdventureHelper.jsonToComponent(json);
|
|
||||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
|
||||||
if (!tokens.isEmpty()) {
|
|
||||||
component = AdventureHelper.replaceText(component, tokens);
|
|
||||||
}
|
|
||||||
return component;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return buf.readComponent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import net.momirealms.craftengine.core.plugin.config.ConfigParser;
|
|||||||
import net.momirealms.craftengine.core.plugin.context.ContextHolder;
|
import net.momirealms.craftengine.core.plugin.context.ContextHolder;
|
||||||
import net.momirealms.craftengine.core.plugin.context.PlayerOptionalContext;
|
import net.momirealms.craftengine.core.plugin.context.PlayerOptionalContext;
|
||||||
import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
|
import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
|
||||||
|
import net.momirealms.craftengine.core.plugin.text.component.ComponentProvider;
|
||||||
import net.momirealms.craftengine.core.util.*;
|
import net.momirealms.craftengine.core.util.*;
|
||||||
import org.ahocorasick.trie.Token;
|
import org.ahocorasick.trie.Token;
|
||||||
import org.ahocorasick.trie.Trie;
|
import org.ahocorasick.trie.Trie;
|
||||||
@@ -41,7 +42,7 @@ public abstract class AbstractFontManager implements FontManager {
|
|||||||
|
|
||||||
protected Trie imageTagTrie;
|
protected Trie imageTagTrie;
|
||||||
protected Trie emojiKeywordTrie;
|
protected Trie emojiKeywordTrie;
|
||||||
protected Map<String, Component> tagMapper;
|
protected Map<String, ComponentProvider> tagMapper;
|
||||||
protected Map<String, Emoji> emojiMapper;
|
protected Map<String, Emoji> emojiMapper;
|
||||||
protected List<Emoji> emojiList;
|
protected List<Emoji> emojiList;
|
||||||
protected List<String> allEmojiSuggestions;
|
protected List<String> allEmojiSuggestions;
|
||||||
@@ -89,11 +90,11 @@ public abstract class AbstractFontManager implements FontManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Component> matchTags(String json) {
|
public Map<String, ComponentProvider> matchTags(String json) {
|
||||||
if (this.imageTagTrie == null) {
|
if (this.imageTagTrie == null) {
|
||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
Map<String, Component> tags = new HashMap<>();
|
Map<String, ComponentProvider> tags = new HashMap<>();
|
||||||
for (Token token : this.imageTagTrie.tokenize(json)) {
|
for (Token token : this.imageTagTrie.tokenize(json)) {
|
||||||
if (token.isMatch()) {
|
if (token.isMatch()) {
|
||||||
tags.put(token.getFragment(), this.tagMapper.get(token.getFragment()));
|
tags.put(token.getFragment(), this.tagMapper.get(token.getFragment()));
|
||||||
@@ -218,9 +219,9 @@ public abstract class AbstractFontManager implements FontManager {
|
|||||||
public IllegalCharacterProcessResult processIllegalCharacters(String raw, char replacement) {
|
public IllegalCharacterProcessResult processIllegalCharacters(String raw, char replacement) {
|
||||||
boolean hasIllegal = false;
|
boolean hasIllegal = false;
|
||||||
// replace illegal image usage
|
// replace illegal image usage
|
||||||
Map<String, Component> tokens = matchTags(raw);
|
Map<String, ComponentProvider> tokens = matchTags(raw);
|
||||||
if (!tokens.isEmpty()) {
|
if (!tokens.isEmpty()) {
|
||||||
for (Map.Entry<String, Component> entry : tokens.entrySet()) {
|
for (Map.Entry<String, ComponentProvider> entry : tokens.entrySet()) {
|
||||||
raw = raw.replace(entry.getKey(), String.valueOf(replacement));
|
raw = raw.replace(entry.getKey(), String.valueOf(replacement));
|
||||||
hasIllegal = true;
|
hasIllegal = true;
|
||||||
}
|
}
|
||||||
@@ -269,21 +270,21 @@ public abstract class AbstractFontManager implements FontManager {
|
|||||||
for (BitmapImage image : this.images.values()) {
|
for (BitmapImage image : this.images.values()) {
|
||||||
String id = image.id().toString();
|
String id = image.id().toString();
|
||||||
String simpleImageTag = imageTag(id);
|
String simpleImageTag = imageTag(id);
|
||||||
this.tagMapper.put(simpleImageTag, image.componentAt(0, 0));
|
this.tagMapper.put(simpleImageTag, ComponentProvider.constant(image.componentAt(0, 0)));
|
||||||
this.tagMapper.put("\\" + simpleImageTag, Component.text(simpleImageTag));
|
this.tagMapper.put("\\" + simpleImageTag, ComponentProvider.constant(Component.text(simpleImageTag)));
|
||||||
for (int i = 0; i < image.rows(); i++) {
|
for (int i = 0; i < image.rows(); i++) {
|
||||||
for (int j = 0; j < image.columns(); j++) {
|
for (int j = 0; j < image.columns(); j++) {
|
||||||
String imageArgs = id + ":" + i + ":" + j;
|
String imageArgs = id + ":" + i + ":" + j;
|
||||||
String imageTag = imageTag(imageArgs);
|
String imageTag = imageTag(imageArgs);
|
||||||
this.tagMapper.put(imageTag, image.componentAt(i, j));
|
this.tagMapper.put(imageTag, ComponentProvider.constant(image.componentAt(i, j)));
|
||||||
this.tagMapper.put("\\" + imageTag, Component.text(imageTag));
|
this.tagMapper.put("\\" + imageTag, ComponentProvider.constant(Component.text(imageTag)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int i = -256; i <= 256; i++) {
|
for (int i = -256; i <= 256; i++) {
|
||||||
String shiftTag = "<shift:" + i + ">";
|
String shiftTag = "<shift:" + i + ">";
|
||||||
this.tagMapper.put(shiftTag, this.offsetFont.createOffset(i));
|
this.tagMapper.put(shiftTag, ComponentProvider.constant(this.offsetFont.createOffset(i)));
|
||||||
this.tagMapper.put("\\" + shiftTag, Component.text(shiftTag));
|
this.tagMapper.put("\\" + shiftTag, ComponentProvider.constant(Component.text(shiftTag)));
|
||||||
}
|
}
|
||||||
this.imageTagTrie = Trie.builder()
|
this.imageTagTrie = Trie.builder()
|
||||||
.ignoreOverlaps()
|
.ignoreOverlaps()
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import net.momirealms.craftengine.core.entity.player.Player;
|
|||||||
import net.momirealms.craftengine.core.plugin.Manageable;
|
import net.momirealms.craftengine.core.plugin.Manageable;
|
||||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
import net.momirealms.craftengine.core.plugin.config.ConfigParser;
|
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.AdventureHelper;
|
||||||
import net.momirealms.craftengine.core.util.CharacterUtils;
|
import net.momirealms.craftengine.core.util.CharacterUtils;
|
||||||
import net.momirealms.craftengine.core.util.FormatUtils;
|
import net.momirealms.craftengine.core.util.FormatUtils;
|
||||||
@@ -103,7 +104,7 @@ public interface FontManager extends Manageable {
|
|||||||
return createOffsets(offset, (raw, font) -> raw);
|
return createOffsets(offset, (raw, font) -> raw);
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, Component> matchTags(String json);
|
Map<String, ComponentProvider> matchTags(String json);
|
||||||
|
|
||||||
void refreshEmojiSuggestions(UUID uuid);
|
void refreshEmojiSuggestions(UUID uuid);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import net.momirealms.craftengine.core.item.ItemDataModifierFactory;
|
|||||||
import net.momirealms.craftengine.core.plugin.context.number.NumberProvider;
|
import net.momirealms.craftengine.core.plugin.context.number.NumberProvider;
|
||||||
import net.momirealms.craftengine.core.plugin.context.number.NumberProviders;
|
import net.momirealms.craftengine.core.plugin.context.number.NumberProviders;
|
||||||
import net.momirealms.craftengine.core.util.Key;
|
import net.momirealms.craftengine.core.util.Key;
|
||||||
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public class MaxDamageModifier<I> implements SimpleNetworkItemDataModifier<I> {
|
public class MaxDamageModifier<I> implements SimpleNetworkItemDataModifier<I> {
|
||||||
|
|||||||
@@ -5,4 +5,8 @@ public class ResourcePackGenerationException extends RuntimeException {
|
|||||||
public ResourcePackGenerationException(String message) {
|
public ResourcePackGenerationException(String message) {
|
||||||
super(message);
|
super(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ResourcePackGenerationException(String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package net.momirealms.craftengine.core.plugin.context;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters;
|
||||||
|
import net.momirealms.craftengine.core.plugin.text.minimessage.*;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public final class NetworkTextReplaceContext extends AbstractChainParameterContext {
|
||||||
|
private final Player player;
|
||||||
|
|
||||||
|
public NetworkTextReplaceContext(Player player) {
|
||||||
|
super(new ContextHolder(Map.of(DirectContextParameters.PLAYER, () -> player)));
|
||||||
|
this.player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static NetworkTextReplaceContext of(Player player) {
|
||||||
|
return new NetworkTextReplaceContext(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player player() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TagResolver[] tagResolvers() {
|
||||||
|
if (this.tagResolvers == null) {
|
||||||
|
this.tagResolvers = new TagResolver[]{ShiftTag.INSTANCE, ImageTag.INSTANCE, new PlaceholderTag(this), new I18NTag(this),
|
||||||
|
new NamedArgumentTag(this), new ExpressionTag(this), new GlobalVariableTag(this)};
|
||||||
|
}
|
||||||
|
return this.tagResolvers;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package net.momirealms.craftengine.core.plugin.network;
|
package net.momirealms.craftengine.core.plugin.network;
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.ints.IntList;
|
import it.unimi.dsi.fastutil.ints.IntList;
|
||||||
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
|
|
||||||
public interface EntityPacketHandler {
|
public interface EntityPacketHandler {
|
||||||
|
|
||||||
@@ -8,7 +9,7 @@ public interface EntityPacketHandler {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
default void handleSetEntityData(NetWorkUser user, ByteBufPacketEvent event) {
|
default void handleSetEntityData(Player user, ByteBufPacketEvent event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
default void handleSyncEntityPosition(NetWorkUser user, NMSPacketEvent event, Object packet) {
|
default void handleSyncEntityPosition(NetWorkUser user, NMSPacketEvent event, Object packet) {
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package net.momirealms.craftengine.core.plugin.text.component;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.Context;
|
||||||
|
import net.momirealms.craftengine.core.util.AdventureHelper;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import static net.momirealms.craftengine.core.plugin.text.minimessage.FormattedLine.CUSTOM_RESOLVERS;
|
||||||
|
|
||||||
|
public sealed interface ComponentProvider extends Function<Context, Component>
|
||||||
|
permits ComponentProvider.Constant, ComponentProvider.MiniMessage {
|
||||||
|
|
||||||
|
static ComponentProvider constant(Component component) {
|
||||||
|
return new Constant(component);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ComponentProvider miniMessageOrConstant(String line) {
|
||||||
|
if (line.equals(AdventureHelper.customMiniMessage().stripTags(line, CUSTOM_RESOLVERS))) {
|
||||||
|
return constant(AdventureHelper.miniMessage().deserialize(line));
|
||||||
|
} else {
|
||||||
|
return new MiniMessage(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
non-sealed class Constant implements ComponentProvider {
|
||||||
|
private final Component value;
|
||||||
|
|
||||||
|
public Constant(final Component value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component apply(Context context) {
|
||||||
|
return this.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
non-sealed class MiniMessage implements ComponentProvider {
|
||||||
|
private final String value;
|
||||||
|
|
||||||
|
public MiniMessage(final String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component apply(Context context) {
|
||||||
|
return AdventureHelper.miniMessage().deserialize(this.value, context.tagResolvers());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,8 @@ import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|||||||
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||||
import net.kyori.adventure.text.serializer.json.JSONOptions;
|
import net.kyori.adventure.text.serializer.json.JSONOptions;
|
||||||
import net.kyori.adventure.text.serializer.json.legacyimpl.NBTLegacyHoverEventSerializer;
|
import net.kyori.adventure.text.serializer.json.legacyimpl.NBTLegacyHoverEventSerializer;
|
||||||
|
import net.momirealms.craftengine.core.plugin.context.Context;
|
||||||
|
import net.momirealms.craftengine.core.plugin.text.component.ComponentProvider;
|
||||||
import net.momirealms.sparrow.nbt.Tag;
|
import net.momirealms.sparrow.nbt.Tag;
|
||||||
import net.momirealms.sparrow.nbt.adventure.NBTComponentSerializer;
|
import net.momirealms.sparrow.nbt.adventure.NBTComponentSerializer;
|
||||||
import net.momirealms.sparrow.nbt.adventure.NBTSerializerOptions;
|
import net.momirealms.sparrow.nbt.adventure.NBTSerializerOptions;
|
||||||
@@ -356,12 +358,13 @@ public class AdventureHelper {
|
|||||||
return AdventureHelper.plainTextContent(resultComponent);
|
return AdventureHelper.plainTextContent(resultComponent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Component replaceText(Component text, Map<String, Component> replacements) {
|
public static Component replaceText(Component text, Map<String, ComponentProvider> replacements, Context context) {
|
||||||
String patternString = replacements.keySet().stream()
|
String patternString = replacements.keySet().stream()
|
||||||
.map(Pattern::quote)
|
.map(Pattern::quote)
|
||||||
.collect(Collectors.joining("|"));
|
.collect(Collectors.joining("|"));
|
||||||
return text.replaceText(builder ->
|
return text.replaceText(builder ->
|
||||||
builder.match(Pattern.compile(patternString))
|
builder.match(Pattern.compile(patternString))
|
||||||
.replacement((result, b) -> replacements.get(result.group())));
|
.replacement((result, b) ->
|
||||||
|
replacements.get(result.group()).apply(context)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G
|
|||||||
|
|
||||||
# Project settings
|
# Project settings
|
||||||
# Rule: [major update].[feature update].[bug fix]
|
# Rule: [major update].[feature update].[bug fix]
|
||||||
project_version=0.0.62.5
|
project_version=0.0.62.6
|
||||||
config_version=45
|
config_version=45
|
||||||
lang_version=25
|
lang_version=25
|
||||||
project_group=net.momirealms
|
project_group=net.momirealms
|
||||||
@@ -40,7 +40,7 @@ commons_io_version=2.18.0
|
|||||||
commons_imaging_version=1.0.0-alpha6
|
commons_imaging_version=1.0.0-alpha6
|
||||||
commons_lang3_version=3.17.0
|
commons_lang3_version=3.17.0
|
||||||
sparrow_nbt_version=0.9.4
|
sparrow_nbt_version=0.9.4
|
||||||
sparrow_util_version=0.50.9
|
sparrow_util_version=0.51
|
||||||
fastutil_version=8.5.15
|
fastutil_version=8.5.15
|
||||||
netty_version=4.1.124.Final
|
netty_version=4.1.124.Final
|
||||||
joml_version=1.10.8
|
joml_version=1.10.8
|
||||||
|
|||||||
Reference in New Issue
Block a user