fix: shaped recipe protocol reorder

(cherry picked from commit 9d6752c86f)
This commit is contained in:
mworzala 2024-01-30 07:35:12 -05:00 committed by Matt Worzala
parent f80d11d719
commit a14dbf5cdd
4 changed files with 37 additions and 15 deletions

View File

@ -10,15 +10,23 @@ import net.minestom.demo.block.placement.DripstonePlacementRule;
import net.minestom.demo.commands.*;
import net.minestom.server.MinecraftServer;
import net.minestom.server.command.CommandManager;
import net.minestom.server.entity.Player;
import net.minestom.server.event.server.ServerListPingEvent;
import net.minestom.server.extras.lan.OpenToLAN;
import net.minestom.server.extras.lan.OpenToLANConfig;
import net.minestom.server.instance.block.BlockManager;
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
import net.minestom.server.network.packet.server.play.DeclareRecipesPacket;
import net.minestom.server.ping.ResponseData;
import net.minestom.server.recipe.RecipeCategory;
import net.minestom.server.recipe.ShapedRecipe;
import net.minestom.server.utils.identity.NamedAndIdentified;
import net.minestom.server.utils.time.TimeUnit;
import org.jetbrains.annotations.NotNull;
import java.time.Duration;
import java.util.List;
public class Main {
@ -105,6 +113,22 @@ public class Main {
//responseData.setPlayersHidden(true);
});
var ironBlockRecipe = new ShapedRecipe(
"minestom:test", 2, 2, "",
RecipeCategory.Crafting.MISC,
List.of(
new DeclareRecipesPacket.Ingredient(List.of(ItemStack.of(Material.IRON_INGOT))),
new DeclareRecipesPacket.Ingredient(List.of(ItemStack.of(Material.IRON_INGOT))),
new DeclareRecipesPacket.Ingredient(List.of(ItemStack.of(Material.IRON_INGOT))),
new DeclareRecipesPacket.Ingredient(List.of(ItemStack.of(Material.IRON_INGOT)))
), ItemStack.of(Material.IRON_BLOCK), true) {
@Override
public boolean shouldShow(@NotNull Player player) {
return true;
}
};
MinecraftServer.getRecipeManager().addRecipe(ironBlockRecipe);
PlayerInit.init();
// VelocityProxy.enable("abcdef");

View File

@ -89,16 +89,16 @@ public record DeclareRecipesPacket(@NotNull List<DeclaredRecipe> recipes) implem
}
}
public record DeclaredShapedCraftingRecipe(@NotNull String recipeId, int width, int height,
public record DeclaredShapedCraftingRecipe(@NotNull String recipeId,
@NotNull String group, @NotNull RecipeCategory.Crafting category,
@NotNull List<Ingredient> ingredients,
int width, int height, @NotNull List<Ingredient> ingredients,
@NotNull ItemStack result, boolean showNotification) implements DeclaredRecipe {
public DeclaredShapedCraftingRecipe {
ingredients = List.copyOf(ingredients);
}
private DeclaredShapedCraftingRecipe(DeclaredShapedCraftingRecipe packet) {
this(packet.recipeId, packet.width, packet.height, packet.group, packet.category, packet.ingredients, packet.result, packet.showNotification);
this(packet.recipeId, packet.group, packet.category, packet.width, packet.height, packet.ingredients, packet.result, packet.showNotification);
}
public DeclaredShapedCraftingRecipe(@NotNull NetworkBuffer reader) {
@ -108,25 +108,25 @@ public record DeclareRecipesPacket(@NotNull List<DeclaredRecipe> recipes) implem
private static DeclaredShapedCraftingRecipe read(@NotNull NetworkBuffer reader) {
String recipeId = reader.read(STRING);
int width = reader.read(VAR_INT);
int height = reader.read(VAR_INT);
String group = reader.read(STRING);
RecipeCategory.Crafting category = reader.readEnum(RecipeCategory.Crafting.class);
int width = reader.read(VAR_INT);
int height = reader.read(VAR_INT);
List<Ingredient> ingredients = new ArrayList<>();
for (int slot = 0; slot < width * height; slot++) {
ingredients.add(new Ingredient(reader));
}
ItemStack result = reader.read(ITEM);
boolean showNotification = reader.read(BOOLEAN);
return new DeclaredShapedCraftingRecipe(recipeId, width, height, group, category, ingredients, result, showNotification);
return new DeclaredShapedCraftingRecipe(recipeId, group, category, width, height, ingredients, result, showNotification);
}
@Override
public void write(@NotNull NetworkBuffer writer) {
writer.write(VAR_INT, width);
writer.write(VAR_INT, height);
writer.write(STRING, group);
writer.writeEnum(RecipeCategory.Crafting.class, category);
writer.write(VAR_INT, width);
writer.write(VAR_INT, height);
for (Ingredient ingredient : ingredients) {
ingredient.write(writer);
}

View File

@ -59,10 +59,10 @@ public class RecipeManager {
recipesCache.add(
new DeclareRecipesPacket.DeclaredShapedCraftingRecipe(
shapedRecipe.getRecipeId(),
shapedRecipe.getWidth(),
shapedRecipe.getHeight(),
shapedRecipe.getGroup(),
shapedRecipe.getCategory(),
shapedRecipe.getWidth(),
shapedRecipe.getHeight(),
shapedRecipe.getIngredients(),
shapedRecipe.getResult(),
shapedRecipe.getShowNotification()));

View File

@ -18,16 +18,14 @@ import net.minestom.server.network.packet.client.ClientPacket;
import net.minestom.server.network.packet.client.handshake.ClientHandshakePacket;
import net.minestom.server.network.packet.server.ServerPacket;
import net.minestom.server.network.packet.server.common.DisconnectPacket;
import net.minestom.server.network.packet.server.status.ResponsePacket;
import net.minestom.server.network.packet.server.login.LoginDisconnectPacket;
import net.minestom.server.network.packet.server.login.LoginSuccessPacket;
import net.minestom.server.network.packet.server.login.SetCompressionPacket;
import net.minestom.server.network.packet.server.play.*;
import net.minestom.server.network.packet.server.play.DeclareRecipesPacket.Ingredient;
import net.minestom.server.network.packet.server.status.PongPacket;
import net.minestom.server.network.packet.server.status.ResponsePacket;
import net.minestom.server.recipe.RecipeCategory;
import net.minestom.server.utils.crypto.KeyUtils;
import org.apache.commons.net.util.Base64;
import org.jglrxavpok.hephaistos.nbt.NBT;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@ -96,10 +94,10 @@ public class PacketWriteReadTest {
),
new DeclareRecipesPacket.DeclaredShapedCraftingRecipe(
"minecraft:torch",
1,
2,
"",
RecipeCategory.Crafting.MISC,
1,
2,
List.of(new Ingredient(List.of(ItemStack.of(Material.COAL))),
new Ingredient(List.of(ItemStack.of(Material.STICK)))),
ItemStack.of(Material.TORCH),