9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-30 04:19:27 +00:00

完成高版本配方映射

This commit is contained in:
XiaoMoMi
2025-07-10 04:09:10 +08:00
parent 225d0f90a1
commit b77e6a42be
30 changed files with 388 additions and 36 deletions

View File

@@ -100,6 +100,21 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
return instance;
}
@Override
public Item<ItemStack> s2c(Item<ItemStack> item, Player player) {
return this.networkItemHandler.s2c(item, player).map(it -> {
System.out.println("有变化");
System.out.println(item.getItem());
System.out.println(it.getItem());
return it;
}).orElse(item);
}
@Override
public Item<ItemStack> c2s(Item<ItemStack> item) {
return this.networkItemHandler.c2s(item).orElse(item);
}
public Optional<ItemStack> s2c(ItemStack itemStack, Player player) {
try {
Item<ItemStack> wrapped = wrap(itemStack);

View File

@@ -173,6 +173,8 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
registerS2CByteBufPacketConsumer(VersionHelper.isOrAbove1_20_3() ? PacketConsumers.TEAM_1_20_3 : PacketConsumers.TEAM_1_20, this.packetIds.clientboundSetPlayerTeamPacket());
registerS2CByteBufPacketConsumer(VersionHelper.isOrAbove1_20_3() ? PacketConsumers.SET_OBJECTIVE_1_20_3 : PacketConsumers.SET_OBJECTIVE_1_20, this.packetIds.clientboundSetObjectivePacket());
registerS2CByteBufPacketConsumer(PacketConsumers.SET_SCORE_1_20_3, VersionHelper.isOrAbove1_20_3() ? this.packetIds.clientboundSetScorePacket() : -1);
registerS2CByteBufPacketConsumer(PacketConsumers.ADD_RECIPE_BOOK, this.packetIds.clientboundRecipeBookAddPacket());
registerS2CByteBufPacketConsumer(PacketConsumers.PLACE_GHOST_RECIPE, this.packetIds.clientboundPlaceGhostRecipePacket());
registerS2CByteBufPacketConsumer(PacketConsumers.REMOVE_ENTITY, this.packetIds.clientboundRemoveEntitiesPacket());
registerS2CByteBufPacketConsumer(PacketConsumers.ADD_ENTITY, this.packetIds.clientboundAddEntityPacket());
registerS2CByteBufPacketConsumer(PacketConsumers.SOUND, this.packetIds.clientboundSoundPacket());

View File

@@ -42,6 +42,9 @@ import net.momirealms.craftengine.core.item.CustomItem;
import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.behavior.ItemBehavior;
import net.momirealms.craftengine.core.item.context.UseOnContext;
import net.momirealms.craftengine.core.item.recipe.network.RecipeBookDisplayEntry;
import net.momirealms.craftengine.core.item.recipe.network.RecipeBookEntry;
import net.momirealms.craftengine.core.item.recipe.network.display.RecipeDisplay;
import net.momirealms.craftengine.core.pack.host.ResourcePackDownloadData;
import net.momirealms.craftengine.core.pack.host.ResourcePackHost;
import net.momirealms.craftengine.core.plugin.CraftEngine;
@@ -2477,4 +2480,40 @@ public class PacketConsumers {
CraftEngine.instance().logger().warn("Failed to handle ClientboundLoginFinishedPacket", e);
}
};
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> ADD_RECIPE_BOOK = (user, event) -> {
try {
FriendlyByteBuf buf = event.getBuffer();
List<RecipeBookEntry> entries = buf.readCollection(ArrayList::new, byteBuf -> {
RecipeBookEntry entry = RecipeBookEntry.read(byteBuf);
entry.applyClientboundData((BukkitServerPlayer) user);
return entry;
});
boolean replace = buf.readBoolean();
event.setChanged(true);
buf.clear();
buf.writeVarInt(event.packetID());
buf.writeCollection(entries, ((byteBuf, recipeBookEntry) -> recipeBookEntry.write(byteBuf)));
buf.writeBoolean(replace);
} catch (Exception e) {
CraftEngine.instance().logger().warn("Failed to handle ClientboundRecipeBookAddPacket", e);
}
};
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> PLACE_GHOST_RECIPE = (user, event) -> {
try {
if (!VersionHelper.isOrAbove1_21_2()) return;
FriendlyByteBuf buf = event.getBuffer();
int containerId = buf.readContainerId();
RecipeDisplay display = RecipeDisplay.read(buf);
display.applyClientboundData((BukkitServerPlayer) user);
event.setChanged(true);
buf.clear();
buf.writeVarInt(event.packetID());
buf.writeContainerId(containerId);
display.write(buf);
} catch (Exception e) {
CraftEngine.instance().logger().warn("Failed to handle ClientboundPlaceGhostRecipePacket", e);
}
};
}

View File

@@ -54,6 +54,10 @@ public interface PacketIds {
int clientboundBlockEventPacket();
int clientboundRecipeBookAddPacket();
int clientboundPlaceGhostRecipePacket();
int serverboundContainerClickPacket();
int serverboundSetCreativeModeSlotPacket();

View File

@@ -149,4 +149,14 @@ public class PacketIds1_20 implements PacketIds {
public int serverboundInteractPacket() {
return PacketIdFinder.serverboundByClazz(NetworkReflections.clazz$ServerboundInteractPacket);
}
@Override
public int clientboundRecipeBookAddPacket() {
return PacketIdFinder.serverboundByClazz(NetworkReflections.clazz$ClientboundRecipeBookAddPacket);
}
@Override
public int clientboundPlaceGhostRecipePacket() {
return PacketIdFinder.serverboundByClazz(NetworkReflections.clazz$ClientboundPlaceGhostRecipePacket);
}
}

View File

@@ -134,6 +134,16 @@ public class PacketIds1_20_5 implements PacketIds {
return PacketIdFinder.clientboundByName("minecraft:block_event");
}
@Override
public int clientboundRecipeBookAddPacket() {
return PacketIdFinder.clientboundByName("minecraft:recipe_book_add");
}
@Override
public int clientboundPlaceGhostRecipePacket() {
return PacketIdFinder.clientboundByName("minecraft:place_ghost_recipe");
}
@Override
public int serverboundContainerClickPacket() {
return PacketIdFinder.serverboundByName("minecraft:container_click");

View File

@@ -1566,4 +1566,11 @@ public final class NetworkReflections {
"network.protocol.game.ClientboundRecipeBookAddPacket",
"network.protocol.game.ClientboundRecipeBookAddPacket"
), VersionHelper.isOrAbove1_21_2());
public static final Class<?> clazz$ClientboundPlaceGhostRecipePacket = requireNonNull(
BukkitReflectionUtils.findReobfOrMojmapClass(
"network.protocol.game.ClientboundPlaceGhostRecipePacket",
"network.protocol.game.ClientboundPlaceGhostRecipePacket"
)
);
}