Change book clone ID to be dynamic, rename boolean

This commit is contained in:
YHDiamond 2024-07-09 08:46:28 -04:00
parent 2e3416025b
commit 9ff6c7da5d
5 changed files with 15 additions and 10 deletions

View file

@ -62,17 +62,17 @@ public final class ClickPlan {
/** /**
* The recipe for cloning books requires special handling, this dictates whether that handling should be performed * The recipe for cloning books requires special handling, this dictates whether that handling should be performed
*/ */
private final boolean cloneBookRecipe; private final boolean handleBookCloneRecipe;
public ClickPlan(GeyserSession session, InventoryTranslator translator, Inventory inventory) { public ClickPlan(GeyserSession session, InventoryTranslator translator, Inventory inventory) {
this(session, translator, inventory, false); this(session, translator, inventory, false);
} }
public ClickPlan(GeyserSession session, InventoryTranslator translator, Inventory inventory, boolean cloneBookRecipe) { public ClickPlan(GeyserSession session, InventoryTranslator translator, Inventory inventory, boolean handleBookCloneRecipe) {
this.session = session; this.session = session;
this.translator = translator; this.translator = translator;
this.inventory = inventory; this.inventory = inventory;
this.cloneBookRecipe = cloneBookRecipe; this.handleBookCloneRecipe = handleBookCloneRecipe;
this.simulatedItems = new Int2ObjectOpenHashMap<>(inventory.getSize()); this.simulatedItems = new Int2ObjectOpenHashMap<>(inventory.getSize());
this.changedItems = null; this.changedItems = null;
@ -386,7 +386,7 @@ public final class ClickPlan {
for (int i = 0; i < gridSize; i++) { for (int i = 0; i < gridSize; i++) {
final int slot = i + 1; final int slot = i + 1;
GeyserItemStack item = getItem(slot); GeyserItemStack item = getItem(slot);
if (!item.isEmpty() && item.asItem() == Items.WRITTEN_BOOK) { if (!item.isEmpty() && (!handleBookCloneRecipe || item.asItem() == Items.WRITTEN_BOOK)) {
// These changes should be broadcasted to the server // These changes should be broadcasted to the server
sub(slot, item, crafted); sub(slot, item, crafted);
} }

View file

@ -370,6 +370,13 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
@Setter @Setter
private Int2ObjectMap<GeyserStonecutterData> stonecutterRecipes; private Int2ObjectMap<GeyserStonecutterData> stonecutterRecipes;
/**
* Saves the ID for cloning books through the crafting table, as these need different handling
*/
@Setter
private int bookCloningID;
/** /**
* Whether to work around 1.13's different behavior in villager trading menus. * Whether to work around 1.13's different behavior in villager trading menus.
*/ */

View file

@ -463,7 +463,7 @@ public abstract class InventoryTranslator {
} }
craftState = CraftState.RECIPE_ID; craftState = CraftState.RECIPE_ID;
if (((RecipeItemStackRequestAction) action).getRecipeNetworkId() == InventoryUtils.BOOK_CLONING_RECIPE_ID) { if (((RecipeItemStackRequestAction) action).getRecipeNetworkId() == session.getBookCloningID()) {
// Book copying needs to be handled differently // Book copying needs to be handled differently
// The original written book is leftover in the crafting grid // The original written book is leftover in the crafting grid
return translateBookCopyCraftingRequest(session, inventory, request); return translateBookCopyCraftingRequest(session, inventory, request);

View file

@ -180,7 +180,9 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd
craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("685a742a-c42e-4a4e-88ea-5eb83fc98e5b"), context.getAndIncrementNetId())); craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("685a742a-c42e-4a4e-88ea-5eb83fc98e5b"), context.getAndIncrementNetId()));
} }
case CRAFTING_SPECIAL_BOOKCLONING -> { case CRAFTING_SPECIAL_BOOKCLONING -> {
craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("d1ca6b84-338e-4f2f-9c6b-76cc8b4bd98d"), context.getAndIncrementNetId())); int bookCloningID = context.getAndIncrementNetId();
session.setBookCloningID(bookCloningID);
craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("d1ca6b84-338e-4f2f-9c6b-76cc8b4bd98d"), bookCloningID));
} }
case CRAFTING_SPECIAL_REPAIRITEM -> { case CRAFTING_SPECIAL_REPAIRITEM -> {
craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("00000000-0000-0000-0000-000000000001"), context.getAndIncrementNetId())); craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("00000000-0000-0000-0000-000000000001"), context.getAndIncrementNetId()));

View file

@ -74,10 +74,6 @@ public class InventoryUtils {
* each recipe needs a unique network ID (or else in .200 the client crashes). * each recipe needs a unique network ID (or else in .200 the client crashes).
*/ */
public static int LAST_RECIPE_NET_ID; public static int LAST_RECIPE_NET_ID;
/**
* Book cloning recipe ID; stored separately as its recipe works differently from others.
*/
public static final int BOOK_CLONING_RECIPE_ID = 278;
public static final ItemStack REFRESH_ITEM = new ItemStack(1, 127, new DataComponents(new HashMap<>())); public static final ItemStack REFRESH_ITEM = new ItemStack(1, 127, new DataComponents(new HashMap<>()));