mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-28 19:39:11 +00:00
fix some bugs
This commit is contained in:
@@ -74,7 +74,6 @@ public class FurnitureEventListener implements Listener {
|
||||
this.manager.handleEntityUnload(event.getEntity());
|
||||
}
|
||||
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
@@ -81,6 +81,7 @@ public class LoadedFurniture {
|
||||
for (int i = 0; i < interactionEntityIds.size(); ++i) {
|
||||
this.interactionEntityIds[i] = interactionEntityIds.get(i);
|
||||
}
|
||||
this.resetSpawnPackets();
|
||||
}
|
||||
|
||||
private void resetSpawnPackets() {
|
||||
@@ -148,13 +149,6 @@ public class LoadedFurniture {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
public Object spawnPacket() {
|
||||
if (this.cachedSpawnPacket == null) {
|
||||
this.resetSpawnPackets();
|
||||
}
|
||||
return this.cachedSpawnPacket;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Entity baseEntity() {
|
||||
Entity entity = baseEntity.get();
|
||||
@@ -286,4 +280,8 @@ public class LoadedFurniture {
|
||||
this.addSeatEntity(seatEntity);
|
||||
seatEntity.addPassenger(player);
|
||||
}
|
||||
|
||||
public @NotNull Object spawnPacket() {
|
||||
return cachedSpawnPacket;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -314,6 +314,7 @@ public class ComponentItemFactory extends BukkitItemFactory {
|
||||
|
||||
@Override
|
||||
protected void merge(ItemWrapper<ItemStack> item1, ItemWrapper<ItemStack> item2) {
|
||||
// load previous changes on nms items
|
||||
item1.load();
|
||||
Object itemStack1 = item1.getLiteralObject();
|
||||
Object itemStack2 = item2.getLiteralObject();
|
||||
|
||||
@@ -244,6 +244,7 @@ public class UniversalItemFactory extends BukkitItemFactory {
|
||||
|
||||
@Override
|
||||
protected void merge(ItemWrapper<ItemStack> item1, ItemWrapper<ItemStack> item2) {
|
||||
// load previous changes on nms items
|
||||
item1.load();
|
||||
TagCompound.merge(ItemObject.getCustomDataTag(item1.getLiteralObject()), ItemObject.getCustomDataTag(item2.getLiteralObject()), true, true);
|
||||
}
|
||||
|
||||
@@ -3,8 +3,6 @@ package net.momirealms.craftengine.bukkit.plugin.network;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import it.unimi.dsi.fastutil.ints.IntList;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.momirealms.craftengine.bukkit.api.CraftEngineFurniture;
|
||||
import net.momirealms.craftengine.bukkit.api.event.FurnitureBreakEvent;
|
||||
import net.momirealms.craftengine.bukkit.api.event.FurnitureInteractEvent;
|
||||
@@ -35,9 +33,11 @@ import org.bukkit.util.RayTraceResult;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.time.Instant;
|
||||
import java.util.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class PacketConsumers {
|
||||
private static int[] mappings;
|
||||
@@ -671,19 +671,21 @@ public class PacketConsumers {
|
||||
if (message != null && !message.isEmpty()) {
|
||||
ImageManager manager = CraftEngine.instance().imageManager();
|
||||
if (!manager.isDefaultFontInUse()) return;
|
||||
try {
|
||||
String str = replaceIllegalString(message, manager);
|
||||
if (message.equals(str)) return;
|
||||
runIfContainsIllegalCharacter(message, manager, (s) -> {
|
||||
event.setCancelled(true);
|
||||
Object newPacket = Reflections.constructor$ServerboundChatPacket.newInstance(
|
||||
str,
|
||||
Reflections.field$ServerboundChatPacket$timeStamp.get(packet),
|
||||
Reflections.field$ServerboundChatPacket$salt.get(packet),
|
||||
Reflections.field$ServerboundChatPacket$signature.get(packet),
|
||||
Reflections.field$ServerboundChatPacket$lastSeenMessages.get(packet)
|
||||
);
|
||||
user.receivePacket(newPacket);
|
||||
} catch (Exception ignore) {}
|
||||
try {
|
||||
Object newPacket = Reflections.constructor$ServerboundChatPacket.newInstance(
|
||||
s,
|
||||
Reflections.field$ServerboundChatPacket$timeStamp.get(packet),
|
||||
Reflections.field$ServerboundChatPacket$salt.get(packet),
|
||||
Reflections.field$ServerboundChatPacket$signature.get(packet),
|
||||
Reflections.field$ServerboundChatPacket$lastSeenMessages.get(packet)
|
||||
);
|
||||
user.receivePacket(newPacket);
|
||||
} catch (Exception e) {
|
||||
CraftEngine.instance().logger().warn("Failed to create replaced chat packet", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (Exception e) {
|
||||
CraftEngine.instance().logger().warn("Failed to handle ServerboundChatPacket", e);
|
||||
@@ -697,10 +699,13 @@ public class PacketConsumers {
|
||||
if (message != null && !message.isEmpty()) {
|
||||
ImageManager manager = CraftEngine.instance().imageManager();
|
||||
if (!manager.isDefaultFontInUse()) return;
|
||||
try {
|
||||
String str = replaceIllegalString(message, manager);
|
||||
Reflections.field$ServerboundRenameItemPacket$name.set(packet, str);
|
||||
} catch (Exception ignore) {}
|
||||
runIfContainsIllegalCharacter(message, manager, (s) -> {
|
||||
try {
|
||||
Reflections.field$ServerboundRenameItemPacket$name.set(packet, s);
|
||||
} catch (ReflectiveOperationException e) {
|
||||
CraftEngine.instance().logger().warn("Failed to replace chat", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (Exception e) {
|
||||
CraftEngine.instance().logger().warn("Failed to handle ServerboundRenameItemPacket", e);
|
||||
@@ -712,15 +717,15 @@ public class PacketConsumers {
|
||||
try {
|
||||
String[] lines = (String[]) Reflections.field$ServerboundSignUpdatePacket$lines.get(packet);
|
||||
ImageManager manager = CraftEngine.instance().imageManager();
|
||||
if (!manager.isDefaultFontInUse()) return;
|
||||
for (int i = 0; i < lines.length; i++) {
|
||||
String line = lines[i];
|
||||
if (line != null && !line.isEmpty()) {
|
||||
if (!manager.isDefaultFontInUse()) return;
|
||||
try {
|
||||
String str = replaceIllegalString(line, manager);
|
||||
if (line.equals(str)) continue;
|
||||
lines[i] = str;
|
||||
} catch (Exception ignore){}
|
||||
int lineIndex = i;
|
||||
runIfContainsIllegalCharacter(line, manager, (s) -> lines[lineIndex] = s);
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
@@ -728,18 +733,22 @@ public class PacketConsumers {
|
||||
}
|
||||
};
|
||||
|
||||
private static String replaceIllegalString(String string, ImageManager manager) {
|
||||
private static void runIfContainsIllegalCharacter(String string, ImageManager manager, Consumer<String> callback) {
|
||||
char[] chars = string.toCharArray();
|
||||
int[] codepoints = CharacterUtils.charsToCodePoints(chars);
|
||||
int[] newCodepoints = new int[codepoints.length];
|
||||
boolean hasIllegal = false;
|
||||
for (int i = 0; i < codepoints.length; i++) {
|
||||
int codepoint = codepoints[i];
|
||||
if (!manager.isIllegalCharacter(codepoint)) {
|
||||
newCodepoints[i] = codepoint;
|
||||
} else {
|
||||
newCodepoints[i] = '*';
|
||||
hasIllegal = true;
|
||||
}
|
||||
}
|
||||
return new String(newCodepoints, 0, newCodepoints.length);
|
||||
if (hasIllegal) {
|
||||
callback.accept(new String(newCodepoints, 0, newCodepoints.length));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -136,9 +136,7 @@ public class Reflections {
|
||||
);
|
||||
|
||||
public static final Constructor<?> constructor$ClientboundSystemChatPacket = requireNonNull(
|
||||
VersionHelper.isVersionNewerThan1_20_4()
|
||||
? ReflectionUtils.getConstructor(clazz$ClientboundSystemChatPacket, clazz$Component, boolean.class)
|
||||
: ReflectionUtils.getConstructor(clazz$ClientboundSystemChatPacket, Component.class, String.class, boolean.class)
|
||||
ReflectionUtils.getConstructor(clazz$ClientboundSystemChatPacket, clazz$Component, boolean.class)
|
||||
);
|
||||
|
||||
public static final Field field$ClientboundSystemChatPacket$overlay = requireNonNull(
|
||||
|
||||
Reference in New Issue
Block a user