Skip to content
This repository has been archived by the owner on Feb 24, 2024. It is now read-only.

Commit

Permalink
fix: shaped recipe protocol reorder
Browse files Browse the repository at this point in the history
  • Loading branch information
mworzala committed Jan 30, 2024
1 parent da46d07 commit 9d6752c
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 15 deletions.
24 changes: 24 additions & 0 deletions demo/src/main/java/net/minestom/demo/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,23 @@
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 {

Expand Down Expand Up @@ -104,6 +112,22 @@ public static void main(String[] args) {
//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");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,16 +89,16 @@ public void write(@NotNull NetworkBuffer writer) {
}
}

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) {
Expand All @@ -108,25 +108,25 @@ public DeclaredShapedCraftingRecipe(@NotNull NetworkBuffer reader) {
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);
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/net/minestom/server/recipe/RecipeManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@ private void refreshRecipesPacket() {
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()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,14 @@
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;
Expand Down Expand Up @@ -92,10 +90,10 @@ public static void setupServer() {
),
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),
Expand Down

0 comments on commit 9d6752c

Please sign in to comment.