mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-27 10:59:07 +00:00
@@ -51,7 +51,7 @@ public class ImageExpansion extends PlaceholderExpansion {
|
||||
plugin.logger().warn("Invalid image namespaced key: " + param[0] + ":" + param[1]);
|
||||
return null;
|
||||
}
|
||||
Optional<BitmapImage> optional = plugin.imageManager().bitmapImageByImageId(key);
|
||||
Optional<BitmapImage> optional = plugin.fontManager().bitmapImageByImageId(key);
|
||||
if (optional.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ public class ShiftExpansion extends PlaceholderExpansion {
|
||||
case "mini", "minimessage", "mm" -> {
|
||||
if (split.length != 2) return null;
|
||||
try {
|
||||
return plugin.imageManager().createMiniMessageOffsets(Integer.parseInt(split[1]));
|
||||
return plugin.fontManager().createMiniMessageOffsets(Integer.parseInt(split[1]));
|
||||
} catch (NumberFormatException e) {
|
||||
return null;
|
||||
}
|
||||
@@ -48,7 +48,7 @@ public class ShiftExpansion extends PlaceholderExpansion {
|
||||
case "md", "minedown" -> {
|
||||
if (split.length != 2) return null;
|
||||
try {
|
||||
return plugin.imageManager().createMineDownOffsets(Integer.parseInt(split[1]));
|
||||
return plugin.fontManager().createMineDownOffsets(Integer.parseInt(split[1]));
|
||||
} catch (NumberFormatException e) {
|
||||
return null;
|
||||
}
|
||||
@@ -56,7 +56,7 @@ public class ShiftExpansion extends PlaceholderExpansion {
|
||||
case "raw" -> {
|
||||
if (split.length != 2) return null;
|
||||
try {
|
||||
return plugin.imageManager().createRawOffsets(Integer.parseInt(split[1]));
|
||||
return plugin.fontManager().createRawOffsets(Integer.parseInt(split[1]));
|
||||
} catch (NumberFormatException e) {
|
||||
return null;
|
||||
}
|
||||
@@ -64,7 +64,7 @@ public class ShiftExpansion extends PlaceholderExpansion {
|
||||
default -> {
|
||||
if (split.length != 1) return null;
|
||||
try {
|
||||
return plugin.imageManager().createMiniMessageOffsets(Integer.parseInt(split[0]));
|
||||
return plugin.fontManager().createMiniMessageOffsets(Integer.parseInt(split[0]));
|
||||
} catch (NumberFormatException e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -158,6 +158,7 @@ image:
|
||||
system-chat: true
|
||||
tab-list: true # Tab list header and footer
|
||||
player-info: true # User list in tab
|
||||
set-score: true
|
||||
actionbar: true
|
||||
title: true
|
||||
bossbar: true
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
templates:
|
||||
default:emoji/basic:
|
||||
content: "<hover:show_text:'<i18n:emoji.tip>'><white><arg:emoji></white></hover>"
|
||||
content: "<hover:show_text:'<i18n:emoji.tip>'><!shadow><white><arg:emoji></white></!shadow></hover>"
|
||||
default:emoji/addition_info:
|
||||
content: "<hover:show_text:'<i18n:emoji.tip>'>{text}<white><arg:emoji></white></hover>"
|
||||
content: "<hover:show_text:'<i18n:emoji.tip>'><!shadow><white><arg:emoji></white></!shadow>{text}</hover>"
|
||||
|
||||
emoji:
|
||||
default:emoji_location:
|
||||
@@ -23,4 +23,131 @@ emoji:
|
||||
image: "default:icons:0:1"
|
||||
permission: emoji.time
|
||||
keywords:
|
||||
- ":time:"
|
||||
- ":time:"
|
||||
|
||||
default:emoji_smiley:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:0:0"
|
||||
permission: emoji.smile
|
||||
keywords:
|
||||
- ":)"
|
||||
- ":smiley:"
|
||||
- ":smile:"
|
||||
default:emoji_angry:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:0:1"
|
||||
permission: emoji.angry
|
||||
keywords:
|
||||
- ":angry:"
|
||||
default:emoji_grin:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:0:2"
|
||||
permission: emoji.grin
|
||||
keywords:
|
||||
- ":grin:"
|
||||
default:emoji_sob:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:0:3"
|
||||
permission: emoji.sob
|
||||
keywords:
|
||||
- ":sob:"
|
||||
default:emoji_sweat_smile:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:1:0"
|
||||
permission: emoji.sweat_smile
|
||||
keywords:
|
||||
- ":sweat_smile:"
|
||||
default:emoji_blush:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:1:1"
|
||||
permission: emoji.blush
|
||||
keywords:
|
||||
- ":blush:"
|
||||
default:emoji_joy:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:1:2"
|
||||
permission: emoji.joy
|
||||
keywords:
|
||||
- ":joy:"
|
||||
default:emoji_slight_frown:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:1:3"
|
||||
permission: emoji.slight_frown
|
||||
keywords:
|
||||
- ":slight_frown:"
|
||||
default:emoji_unamused:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:2:0"
|
||||
permission: emoji.unamused
|
||||
keywords:
|
||||
- ":unamused:"
|
||||
default:emoji_laughing:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:2:1"
|
||||
permission: emoji.laughing
|
||||
keywords:
|
||||
- ":laughing:"
|
||||
default:emoji_sunglasses:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:2:2"
|
||||
permission: emoji.sunglasses
|
||||
keywords:
|
||||
- ":sunglasses:"
|
||||
default:emoji_innocent:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:2:3"
|
||||
permission: emoji.innocent
|
||||
keywords:
|
||||
- ":innocent:"
|
||||
default:emoji_face_vomiting:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:3:0"
|
||||
permission: emoji.face_vomiting
|
||||
keywords:
|
||||
- ":face_vomiting:"
|
||||
default:emoji_rolling_eyes:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:3:1"
|
||||
permission: emoji.rolling_eyes
|
||||
keywords:
|
||||
- ":rolling_eyes:"
|
||||
default:emoji_yum:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:3:2"
|
||||
permission: emoji.yum
|
||||
keywords:
|
||||
- ":yum:"
|
||||
default:emoji_confounded:
|
||||
template: "default:emoji/basic"
|
||||
overrides:
|
||||
image: "default:emojis:3:2"
|
||||
permission: emoji.confounded
|
||||
keywords:
|
||||
- ":confounded:"
|
||||
|
||||
images:
|
||||
default:emojis:
|
||||
height: 11
|
||||
ascent: 9
|
||||
font: minecraft:emoji
|
||||
file: minecraft:font/image/emojis.png
|
||||
chars:
|
||||
- '\ub000\ub001\ub002\ub003'
|
||||
- '\ub004\ub005\ub006\ub007'
|
||||
- '\ub008\ub009\ub00a\ub00b'
|
||||
- '\ub00c\ub00d\ub00e\ub00f'
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
@@ -16,6 +16,7 @@ import net.momirealms.craftengine.core.loot.LootTable;
|
||||
import net.momirealms.craftengine.core.loot.parameter.LootParameters;
|
||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import net.momirealms.craftengine.core.util.VersionHelper;
|
||||
import net.momirealms.craftengine.core.util.context.ContextHolder;
|
||||
import net.momirealms.craftengine.core.world.BlockPos;
|
||||
import net.momirealms.craftengine.core.world.Vec3d;
|
||||
@@ -294,11 +295,17 @@ public class BlockEventListener implements Listener {
|
||||
|
||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
|
||||
public void onEntityExplode(EntityExplodeEvent event) {
|
||||
if (VersionHelper.isVersionNewerThan1_21()) {
|
||||
if (!ExplosionUtils.isDroppingItems(event)) return;
|
||||
}
|
||||
handleExplodeEvent(event.blockList(), new BukkitWorld(event.getEntity().getWorld()), event.getYield());
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
|
||||
public void onBlockExplode(BlockExplodeEvent event) {
|
||||
if (VersionHelper.isVersionNewerThan1_21()) {
|
||||
if (!ExplosionUtils.isDroppingItems(event)) return;
|
||||
}
|
||||
handleExplodeEvent(event.blockList(), new BukkitWorld(event.getBlock().getWorld()), event.getYield());
|
||||
}
|
||||
|
||||
|
||||
@@ -103,14 +103,14 @@ public class BukkitFontManager extends AbstractFontManager implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
public void onChat(AsyncChatDecorateEvent event) {
|
||||
if (!Config.filterChat()) return;
|
||||
this.processChatEvent(event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
public void onChatCommand(AsyncChatCommandDecorateEvent event) {
|
||||
if (!Config.filterChat()) return;
|
||||
|
||||
@@ -343,6 +343,7 @@ public class RecipeEventListener implements Listener {
|
||||
ItemStack itemStack = event.getItem();
|
||||
if (ItemUtils.isEmpty(itemStack)) return;
|
||||
try {
|
||||
@SuppressWarnings("unchecked")
|
||||
Optional<Object> optionalMCRecipe = FastNMS.INSTANCE.method$RecipeManager$getRecipeFor(
|
||||
BukkitRecipeManager.nmsRecipeManager(),
|
||||
Reflections.instance$RecipeType$CAMPFIRE_COOKING,
|
||||
|
||||
@@ -157,6 +157,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
registerByteBufPacketConsumer(VersionHelper.isVersionNewerThan1_20_3() ? PacketConsumers.TAB_LIST_1_20_3 : PacketConsumers.TAB_LIST_1_20, this.packetIds.clientboundTabListPacket());
|
||||
registerByteBufPacketConsumer(VersionHelper.isVersionNewerThan1_20_3() ? PacketConsumers.TEAM_1_20_3 : PacketConsumers.TEAM_1_20, this.packetIds.clientboundSetPlayerTeamPacket());
|
||||
registerByteBufPacketConsumer(VersionHelper.isVersionNewerThan1_20_3() ? PacketConsumers.SET_OBJECTIVE_1_20_3 : PacketConsumers.SET_OBJECTIVE_1_20, this.packetIds.clientboundSetObjectivePacket());
|
||||
registerByteBufPacketConsumer(PacketConsumers.SET_SCORE_1_20_3, VersionHelper.isVersionNewerThan1_20_3() ? this.packetIds.clientboundSetScorePacket() : -1);
|
||||
registerByteBufPacketConsumer(PacketConsumers.REMOVE_ENTITY, this.packetIds.clientboundRemoveEntitiesPacket());
|
||||
registerByteBufPacketConsumer(PacketConsumers.ADD_ENTITY_BYTEBUFFER, this.packetIds.clientboundAddEntityPacket());
|
||||
registerByteBufPacketConsumer(PacketConsumers.SOUND, this.packetIds.clientboundSoundPacket());
|
||||
|
||||
@@ -33,6 +33,7 @@ import net.momirealms.craftengine.core.world.chunk.PalettedContainer;
|
||||
import net.momirealms.craftengine.core.world.chunk.packet.MCSection;
|
||||
import net.momirealms.sparrow.nbt.Tag;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@@ -260,9 +261,9 @@ public class PacketConsumers {
|
||||
Tag suffix = buf.readNbt(false);
|
||||
if (suffix == null) return;
|
||||
|
||||
Map<String, Component> tokens1 = CraftEngine.instance().imageManager().matchTags(displayName.getAsString());
|
||||
Map<String, Component> tokens2 = CraftEngine.instance().imageManager().matchTags(prefix.getAsString());
|
||||
Map<String, Component> tokens3 = CraftEngine.instance().imageManager().matchTags(suffix.getAsString());
|
||||
Map<String, Component> tokens1 = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||
Map<String, Component> tokens2 = CraftEngine.instance().fontManager().matchTags(prefix.getAsString());
|
||||
Map<String, Component> tokens3 = CraftEngine.instance().fontManager().matchTags(suffix.getAsString());
|
||||
if (tokens1.isEmpty() && tokens2.isEmpty() && tokens3.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
|
||||
@@ -348,7 +349,7 @@ public class PacketConsumers {
|
||||
continue;
|
||||
}
|
||||
String json = ComponentUtils.minecraftToJson(mcComponent);
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(json);
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||
if (tokens.isEmpty()) {
|
||||
newEntries.add(entry);
|
||||
continue;
|
||||
@@ -386,9 +387,9 @@ public class PacketConsumers {
|
||||
String prefix = buf.readUtf();
|
||||
String suffix = buf.readUtf();
|
||||
|
||||
Map<String, Component> tokens1 = CraftEngine.instance().imageManager().matchTags(displayName);
|
||||
Map<String, Component> tokens2 = CraftEngine.instance().imageManager().matchTags(prefix);
|
||||
Map<String, Component> tokens3 = CraftEngine.instance().imageManager().matchTags(suffix);
|
||||
Map<String, Component> tokens1 = CraftEngine.instance().fontManager().matchTags(displayName);
|
||||
Map<String, Component> tokens2 = CraftEngine.instance().fontManager().matchTags(prefix);
|
||||
Map<String, Component> tokens3 = CraftEngine.instance().fontManager().matchTags(suffix);
|
||||
if (tokens1.isEmpty() && tokens2.isEmpty() && tokens3.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
|
||||
@@ -455,7 +456,7 @@ public class PacketConsumers {
|
||||
int actionType = buf.readVarInt();
|
||||
if (actionType == 0) {
|
||||
String json = buf.readUtf();
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(json);
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||
if (tokens.isEmpty()) return;
|
||||
Component component = AdventureHelper.jsonToComponent(json);
|
||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
||||
@@ -477,7 +478,7 @@ public class PacketConsumers {
|
||||
buf.writeByte(flag);
|
||||
} else if (actionType == 3) {
|
||||
String json = buf.readUtf();
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(json);
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
Component component = AdventureHelper.jsonToComponent(json);
|
||||
@@ -504,7 +505,7 @@ public class PacketConsumers {
|
||||
if (actionType == 0) {
|
||||
Tag nbt = buf.readNbt(false);
|
||||
if (nbt == null) return;
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(nbt.getAsString());
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||
if (tokens.isEmpty()) return;
|
||||
Component component = AdventureHelper.tagToComponent(nbt);
|
||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
||||
@@ -527,7 +528,7 @@ public class PacketConsumers {
|
||||
} else if (actionType == 3) {
|
||||
Tag nbt = buf.readNbt(false);
|
||||
if (nbt == null) return;
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(nbt.getAsString());
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
Component component = AdventureHelper.tagToComponent(nbt);
|
||||
@@ -554,7 +555,7 @@ public class PacketConsumers {
|
||||
if (mode != 0 && mode != 2) return;
|
||||
String displayName = buf.readUtf();
|
||||
int renderType = buf.readVarInt();
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(displayName);
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(displayName);
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
Component component = AdventureHelper.jsonToComponent(displayName);
|
||||
@@ -586,7 +587,7 @@ public class PacketConsumers {
|
||||
if (optionalNumberFormat) {
|
||||
int format = buf.readVarInt();
|
||||
if (format == 0) {
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(displayName.getAsString());
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
Component component = AdventureHelper.tagToComponent(displayName);
|
||||
@@ -602,7 +603,7 @@ public class PacketConsumers {
|
||||
buf.writeBoolean(true);
|
||||
buf.writeVarInt(0);
|
||||
} else if (format == 1) {
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(displayName.getAsString());
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||
if (tokens.isEmpty()) return;
|
||||
Tag style = buf.readNbt(false);
|
||||
event.setChanged(true);
|
||||
@@ -622,8 +623,8 @@ public class PacketConsumers {
|
||||
} else if (format == 2) {
|
||||
Tag fixed = buf.readNbt(false);
|
||||
if (fixed == null) return;
|
||||
Map<String, Component> tokens1 = CraftEngine.instance().imageManager().matchTags(displayName.getAsString());
|
||||
Map<String, Component> tokens2 = CraftEngine.instance().imageManager().matchTags(fixed.getAsString());
|
||||
Map<String, Component> tokens1 = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||
Map<String, Component> tokens2 = CraftEngine.instance().fontManager().matchTags(fixed.getAsString());
|
||||
if (tokens1.isEmpty() && tokens2.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
buf.clear();
|
||||
@@ -653,7 +654,7 @@ public class PacketConsumers {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(displayName.getAsString());
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
Component component = AdventureHelper.tagToComponent(displayName);
|
||||
@@ -678,7 +679,7 @@ public class PacketConsumers {
|
||||
try {
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
String jsonOrPlainString = buf.readUtf();
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(jsonOrPlainString);
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(jsonOrPlainString);
|
||||
if (tokens.isEmpty()) return;
|
||||
boolean overlay = buf.readBoolean();
|
||||
event.setChanged(true);
|
||||
@@ -701,7 +702,7 @@ public class PacketConsumers {
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
Tag nbt = buf.readNbt(false);
|
||||
if (nbt == null) return;
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(nbt.getAsString());
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||
if (tokens.isEmpty()) return;
|
||||
boolean overlay = buf.readBoolean();
|
||||
event.setChanged(true);
|
||||
@@ -723,7 +724,7 @@ public class PacketConsumers {
|
||||
try {
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
String json = buf.readUtf();
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(json);
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
Component component = AdventureHelper.jsonToComponent(json);
|
||||
@@ -744,7 +745,7 @@ public class PacketConsumers {
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
Tag nbt = buf.readNbt(false);
|
||||
if (nbt == null) return;
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(nbt.getAsString());
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
Component component = AdventureHelper.tagToComponent(nbt);
|
||||
@@ -764,7 +765,7 @@ public class PacketConsumers {
|
||||
try {
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
String json = buf.readUtf();
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(json);
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
Component component = AdventureHelper.jsonToComponent(json);
|
||||
@@ -785,7 +786,7 @@ public class PacketConsumers {
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
Tag nbt = buf.readNbt(false);
|
||||
if (nbt == null) return;
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(nbt.getAsString());
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
Component component = AdventureHelper.tagToComponent(nbt);
|
||||
@@ -805,7 +806,7 @@ public class PacketConsumers {
|
||||
try {
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
String json = buf.readUtf();
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(json);
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
Component component = AdventureHelper.jsonToComponent(json);
|
||||
@@ -826,7 +827,7 @@ public class PacketConsumers {
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
Tag nbt = buf.readNbt(false);
|
||||
if (nbt == null) return;
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(nbt.getAsString());
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
Component component = AdventureHelper.tagToComponent(nbt);
|
||||
@@ -847,8 +848,8 @@ public class PacketConsumers {
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
String json1 = buf.readUtf();
|
||||
String json2 = buf.readUtf();
|
||||
Map<String, Component> tokens1 = CraftEngine.instance().imageManager().matchTags(json1);
|
||||
Map<String, Component> tokens2 = CraftEngine.instance().imageManager().matchTags(json2);
|
||||
Map<String, Component> tokens1 = CraftEngine.instance().fontManager().matchTags(json1);
|
||||
Map<String, Component> tokens2 = CraftEngine.instance().fontManager().matchTags(json2);
|
||||
if (tokens1.isEmpty() && tokens2.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
buf.clear();
|
||||
@@ -884,8 +885,8 @@ public class PacketConsumers {
|
||||
if (nbt1 == null) return;
|
||||
Tag nbt2 = buf.readNbt(false);
|
||||
if (nbt2 == null) return;
|
||||
Map<String, Component> tokens1 = CraftEngine.instance().imageManager().matchTags(nbt1.getAsString());
|
||||
Map<String, Component> tokens2 = CraftEngine.instance().imageManager().matchTags(nbt2.getAsString());
|
||||
Map<String, Component> tokens1 = CraftEngine.instance().fontManager().matchTags(nbt1.getAsString());
|
||||
Map<String, Component> tokens2 = CraftEngine.instance().fontManager().matchTags(nbt2.getAsString());
|
||||
if (tokens1.isEmpty() && tokens2.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
buf.clear();
|
||||
@@ -920,7 +921,7 @@ public class PacketConsumers {
|
||||
int containerId = buf.readVarInt();
|
||||
int type = buf.readVarInt();
|
||||
String json = buf.readUtf();
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(json);
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||
if (tokens.isEmpty()) return;
|
||||
event.setChanged(true);
|
||||
Component component = AdventureHelper.jsonToComponent(json);
|
||||
@@ -945,7 +946,7 @@ public class PacketConsumers {
|
||||
int type = buf.readVarInt();
|
||||
Tag nbt = buf.readNbt(false);
|
||||
if (nbt == null) return;
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(nbt.getAsString());
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(nbt.getAsString());
|
||||
if (tokens.isEmpty()) return;
|
||||
Component component = AdventureHelper.tagToComponent(nbt);
|
||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
||||
@@ -1275,7 +1276,7 @@ public class PacketConsumers {
|
||||
// do ray trace to get current block
|
||||
RayTraceResult result = bukkitPlayer.rayTraceBlocks(interactionRange, FluidCollisionMode.NEVER);
|
||||
if (result == null) return;
|
||||
org.bukkit.block.Block hitBlock = result.getHitBlock();
|
||||
Block hitBlock = result.getHitBlock();
|
||||
if (hitBlock == null) return;
|
||||
ImmutableBlockState state = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockDataToId(hitBlock.getBlockData()));
|
||||
// not a custom block
|
||||
@@ -1694,7 +1695,7 @@ public class PacketConsumers {
|
||||
String message = (String) Reflections.field$ServerboundRenameItemPacket$name.get(packet);
|
||||
if (message != null && !message.isEmpty()) {
|
||||
// check bypass
|
||||
FontManager manager = CraftEngine.instance().imageManager();
|
||||
FontManager manager = CraftEngine.instance().fontManager();
|
||||
IllegalCharacterProcessResult result = manager.processIllegalCharacters(message);
|
||||
if (result.has()) {
|
||||
try {
|
||||
@@ -1718,7 +1719,7 @@ public class PacketConsumers {
|
||||
return;
|
||||
}
|
||||
String[] lines = (String[]) Reflections.field$ServerboundSignUpdatePacket$lines.get(packet);
|
||||
FontManager manager = CraftEngine.instance().imageManager();
|
||||
FontManager manager = CraftEngine.instance().fontManager();
|
||||
if (!manager.isDefaultFontInUse()) return;
|
||||
for (int i = 0; i < lines.length; i++) {
|
||||
String line = lines[i];
|
||||
@@ -1739,7 +1740,7 @@ public class PacketConsumers {
|
||||
public static final TriConsumer<NetWorkUser, NMSPacketEvent, Object> EDIT_BOOK = (user, event, packet) -> {
|
||||
try {
|
||||
if (!Config.filterBook()) return;
|
||||
FontManager manager = CraftEngine.instance().imageManager();
|
||||
FontManager manager = CraftEngine.instance().fontManager();
|
||||
if (!manager.isDefaultFontInUse()) return;
|
||||
// check bypass
|
||||
if (((BukkitServerPlayer) user).hasPermission(FontManager.BYPASS_BOOK)) {
|
||||
@@ -1881,7 +1882,7 @@ public class PacketConsumers {
|
||||
if (optionalTextComponent.isPresent()) {
|
||||
Object textComponent = optionalTextComponent.get();
|
||||
String json = ComponentUtils.minecraftToJson(textComponent);
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(json);
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||
if (!tokens.isEmpty()) {
|
||||
Component component = AdventureHelper.jsonToComponent(json);
|
||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
||||
@@ -1914,7 +1915,7 @@ public class PacketConsumers {
|
||||
Object textComponent = FastNMS.INSTANCE.field$SynchedEntityData$DataValue$value(packedItem);
|
||||
if (textComponent == Reflections.instance$Component$empty) break;
|
||||
String json = ComponentUtils.minecraftToJson(textComponent);
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(json);
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||
if (!tokens.isEmpty()) {
|
||||
Component component = AdventureHelper.jsonToComponent(json);
|
||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
||||
@@ -1947,7 +1948,7 @@ public class PacketConsumers {
|
||||
if (optionalTextComponent.isPresent()) {
|
||||
Object textComponent = optionalTextComponent.get();
|
||||
String json = ComponentUtils.minecraftToJson(textComponent);
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(json);
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||
if (!tokens.isEmpty()) {
|
||||
Component component = AdventureHelper.jsonToComponent(json);
|
||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
||||
@@ -1980,7 +1981,7 @@ public class PacketConsumers {
|
||||
if (optionalTextComponent.isPresent()) {
|
||||
Object textComponent = optionalTextComponent.get();
|
||||
String json = ComponentUtils.minecraftToJson(textComponent);
|
||||
Map<String, Component> tokens = CraftEngine.instance().imageManager().matchTags(json);
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(json);
|
||||
if (!tokens.isEmpty()) {
|
||||
Component component = AdventureHelper.jsonToComponent(json);
|
||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
||||
@@ -2006,4 +2007,83 @@ public class PacketConsumers {
|
||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetEntityDataPacket", e);
|
||||
}
|
||||
};
|
||||
|
||||
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> SET_SCORE_1_20_3 = (user, event) -> {
|
||||
try {
|
||||
if (!Config.interceptSetScore()) return;
|
||||
boolean isChanged = false;
|
||||
FriendlyByteBuf buf = event.getBuffer();
|
||||
String owner = buf.readUtf();
|
||||
String objectiveName = buf.readUtf();
|
||||
int score = buf.readVarInt();
|
||||
boolean hasDisplay = buf.readBoolean();
|
||||
Tag displayName = null;
|
||||
if (hasDisplay) {
|
||||
displayName = buf.readNbt(false);
|
||||
}
|
||||
outside : if (displayName != null) {
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(displayName.getAsString());
|
||||
if (tokens.isEmpty()) break outside;
|
||||
Component component = AdventureHelper.tagToComponent(displayName);
|
||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
||||
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(token.getValue()));
|
||||
}
|
||||
displayName = AdventureHelper.componentToTag(component);
|
||||
isChanged = true;
|
||||
}
|
||||
boolean hasNumberFormat = buf.readBoolean();
|
||||
int format = -1;
|
||||
Tag style = null;
|
||||
Tag fixed = null;
|
||||
if (hasNumberFormat) {
|
||||
format = buf.readVarInt();
|
||||
if (format == 0) {
|
||||
if (displayName == null) return;
|
||||
} else if (format == 1) {
|
||||
if (displayName == null) return;
|
||||
style = buf.readNbt(false);
|
||||
} else if (format == 2) {
|
||||
fixed = buf.readNbt(false);
|
||||
if (fixed == null) return;
|
||||
Map<String, Component> tokens = CraftEngine.instance().fontManager().matchTags(fixed.getAsString());
|
||||
if (tokens.isEmpty() && !isChanged) return;
|
||||
if (!tokens.isEmpty()) {
|
||||
Component component = AdventureHelper.tagToComponent(fixed);
|
||||
for (Map.Entry<String, Component> token : tokens.entrySet()) {
|
||||
component = component.replaceText(b -> b.matchLiteral(token.getKey()).replacement(token.getValue()));
|
||||
}
|
||||
fixed = AdventureHelper.componentToTag(component);
|
||||
isChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isChanged) {
|
||||
event.setChanged(true);
|
||||
buf.clear();
|
||||
buf.writeVarInt(event.packetID());
|
||||
buf.writeUtf(owner);
|
||||
buf.writeUtf(objectiveName);
|
||||
buf.writeVarInt(score);
|
||||
if (hasDisplay) {
|
||||
buf.writeBoolean(true);
|
||||
buf.writeNbt(displayName, false);
|
||||
} else {
|
||||
buf.writeBoolean(false);
|
||||
}
|
||||
if (hasNumberFormat) {
|
||||
buf.writeBoolean(true);
|
||||
buf.writeVarInt(format);
|
||||
if (format == 1) {
|
||||
buf.writeNbt(style, false);
|
||||
} else if (format == 2) {
|
||||
buf.writeNbt(fixed, false);
|
||||
}
|
||||
} else {
|
||||
buf.writeBoolean(false);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetScorePacket", e);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -39,4 +39,6 @@ public interface PacketIds {
|
||||
int clientboundLevelChunkWithLightPacket();
|
||||
|
||||
int clientboundPlayerInfoUpdatePacket();
|
||||
|
||||
int clientboundSetScorePacket();
|
||||
}
|
||||
|
||||
@@ -99,4 +99,9 @@ public class PacketIds1_20 implements PacketIds {
|
||||
public int clientboundPlayerInfoUpdatePacket() {
|
||||
return PacketIdFinder.clientboundByClazz(Reflections.clazz$ClientboundPlayerInfoUpdatePacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int clientboundSetScorePacket() {
|
||||
return PacketIdFinder.clientboundByClazz(Reflections.clazz$ClientboundSetScorePacket);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,4 +98,9 @@ public class PacketIds1_20_5 implements PacketIds {
|
||||
public int clientboundPlayerInfoUpdatePacket() {
|
||||
return PacketIdFinder.clientboundByName("minecraft:player_info_update");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int clientboundSetScorePacket() {
|
||||
return PacketIdFinder.clientboundByName("minecraft:set_score");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package net.momirealms.craftengine.bukkit.util;
|
||||
|
||||
import org.bukkit.ExplosionResult;
|
||||
import org.bukkit.event.block.BlockExplodeEvent;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
public class ExplosionUtils {
|
||||
|
||||
public static boolean isDroppingItems(BlockExplodeEvent event) {
|
||||
return event.getExplosionResult() != ExplosionResult.KEEP && event.getExplosionResult() != ExplosionResult.TRIGGER_BLOCK;
|
||||
}
|
||||
|
||||
public static boolean isDroppingItems(EntityExplodeEvent event) {
|
||||
return event.getExplosionResult() != ExplosionResult.KEEP && event.getExplosionResult() != ExplosionResult.TRIGGER_BLOCK;
|
||||
}
|
||||
}
|
||||
@@ -6425,4 +6425,11 @@ public class Reflections {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static final Class<?> clazz$ClientboundSetScorePacket = requireNonNull(
|
||||
ReflectionUtils.getClazz(
|
||||
BukkitReflectionUtils.assembleMCClass("network.protocol.game.ClientboundSetScorePacket"),
|
||||
BukkitReflectionUtils.assembleMCClass("network.protocol.game.PacketPlayOutScoreboardScore")
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -302,6 +302,7 @@ public abstract class AbstractPackManager implements PackManager {
|
||||
plugin.saveResource("resources/default/configuration/templates.yml");
|
||||
// emoji
|
||||
plugin.saveResource("resources/default/configuration/emoji.yml");
|
||||
plugin.saveResource("resources/default/resourcepack/assets/minecraft/textures/font/image/emojis.png");
|
||||
// i18n
|
||||
plugin.saveResource("resources/default/configuration/i18n.yml");
|
||||
// block_name
|
||||
@@ -1071,7 +1072,7 @@ public abstract class AbstractPackManager implements PackManager {
|
||||
|
||||
private void generateFonts(Path generatedPackPath) {
|
||||
// generate image font json
|
||||
for (Font font : plugin.imageManager().fonts()) {
|
||||
for (Font font : plugin.fontManager().fonts()) {
|
||||
Key namespacedKey = font.key();
|
||||
Path fontPath = generatedPackPath.resolve("assets")
|
||||
.resolve(namespacedKey.namespace())
|
||||
|
||||
@@ -344,7 +344,7 @@ public abstract class CraftEngine implements Plugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public FontManager imageManager() {
|
||||
public FontManager fontManager() {
|
||||
return fontManager;
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ public interface Plugin {
|
||||
|
||||
NetworkManager networkManager();
|
||||
|
||||
FontManager imageManager();
|
||||
FontManager fontManager();
|
||||
|
||||
Config config();
|
||||
|
||||
|
||||
@@ -135,6 +135,7 @@ public class Config {
|
||||
protected boolean image$intercept_packets$text_display;
|
||||
protected boolean image$intercept_packets$armor_stand;
|
||||
protected boolean image$intercept_packets$player_info;
|
||||
protected boolean image$intercept_packets$set_score;
|
||||
|
||||
public Config(CraftEngine plugin) {
|
||||
this.plugin = plugin;
|
||||
@@ -304,6 +305,7 @@ public class Config {
|
||||
image$intercept_packets$text_display = config.getBoolean("image.intercept-packets.text-display", true);
|
||||
image$intercept_packets$armor_stand = config.getBoolean("image.intercept-packets.armor-stand", true);
|
||||
image$intercept_packets$player_info = config.getBoolean("image.intercept-packets.player-info", true);
|
||||
image$intercept_packets$set_score = config.getBoolean("image.intercept-packets.set-score", true);
|
||||
|
||||
Class<?> modClazz = ReflectionUtils.getClazz(CraftEngine.MOD_CLASS);
|
||||
if (modClazz != null) {
|
||||
@@ -656,6 +658,10 @@ public class Config {
|
||||
return instance.image$intercept_packets$player_info;
|
||||
}
|
||||
|
||||
public static boolean interceptSetScore() {
|
||||
return instance.image$intercept_packets$set_score;
|
||||
}
|
||||
|
||||
public YamlDocument loadOrCreateYamlData(String fileName) {
|
||||
File file = new File(this.plugin.dataFolderFile(), fileName);
|
||||
if (!file.exists()) {
|
||||
|
||||
@@ -29,7 +29,7 @@ public class ImageTag implements TagResolver {
|
||||
}
|
||||
String namespace = arguments.popOr("No argument namespace provided").toString();
|
||||
String id = arguments.popOr("No argument id provided").toString();
|
||||
Optional<BitmapImage> optional = CraftEngine.instance().imageManager().bitmapImageByImageId(Key.of(namespace, id));
|
||||
Optional<BitmapImage> optional = CraftEngine.instance().fontManager().bitmapImageByImageId(Key.of(namespace, id));
|
||||
if (optional.isPresent()) {
|
||||
if (arguments.hasNext()) {
|
||||
int row = arguments.popOr("No argument row provided").asInt().orElseThrow(() -> ctx.newException("Invalid argument number", arguments));
|
||||
|
||||
@@ -25,7 +25,7 @@ public class ShiftTag implements TagResolver {
|
||||
String shiftAmount = arguments.popOr("No argument shift provided").toString();
|
||||
try {
|
||||
int shift = Integer.parseInt(shiftAmount);
|
||||
return Tag.inserting(AdventureHelper.miniMessage().deserialize(CraftEngine.instance().imageManager().createMiniMessageOffsets(shift)));
|
||||
return Tag.inserting(AdventureHelper.miniMessage().deserialize(CraftEngine.instance().fontManager().createMiniMessageOffsets(shift)));
|
||||
} catch (NumberFormatException e) {
|
||||
throw ctx.newException("Invalid shift value", arguments);
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@ org.gradle.jvmargs=-Xmx1G
|
||||
|
||||
# Project settings
|
||||
# Rule: [major update].[feature update].[bug fix]
|
||||
project_version=0.0.46.3
|
||||
config_version=24
|
||||
project_version=0.0.47.1
|
||||
config_version=25
|
||||
lang_version=4
|
||||
project_group=net.momirealms
|
||||
latest_supported_version=1.21.5
|
||||
|
||||
Reference in New Issue
Block a user