Re-enable crafter inventory

This commit is contained in:
Camotoy 2024-06-14 19:36:10 -04:00
parent 7e87af718b
commit be83fe7220
No known key found for this signature in database
GPG key ID: 7EEFB66FE798081F
5 changed files with 43 additions and 6 deletions

View file

@ -38,7 +38,7 @@ import org.jetbrains.annotations.Range;
*/
@Getter
public class Container extends Inventory {
private final PlayerInventory playerInventory;
protected final PlayerInventory playerInventory;
private final int containerSize;
/**

View file

@ -25,13 +25,19 @@
package org.geysermc.geyser.inventory;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.translator.inventory.CrafterInventoryTranslator;
import org.geysermc.geyser.translator.inventory.InventoryTranslator;
import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType;
import lombok.Getter;
import lombok.Setter;
import org.geysermc.geyser.GeyserImpl;
import org.jetbrains.annotations.Range;
@Getter
public class CrafterContainer extends Container {
private GeyserItemStack resultItem = GeyserItemStack.EMPTY;
@Setter
private boolean triggered = false;
@ -46,8 +52,36 @@ public class CrafterContainer extends Container {
super(title, id, size, containerType, playerInventory);
}
@Override
public GeyserItemStack getItem(int slot) {
if (slot == CrafterInventoryTranslator.JAVA_RESULT_SLOT) {
return this.resultItem;
} else if (isCraftingGrid(slot)) {
return super.getItem(slot);
} else {
return playerInventory.getItem(slot - CrafterInventoryTranslator.GRID_SIZE + InventoryTranslator.PLAYER_INVENTORY_OFFSET);
}
}
@Override
public int getOffsetForHotbar(@Range(from = 0, to = 8) int slot) {
return playerInventory.getOffsetForHotbar(slot) - InventoryTranslator.PLAYER_INVENTORY_OFFSET + CrafterInventoryTranslator.GRID_SIZE;
}
@Override
public void setItem(int slot, @NonNull GeyserItemStack newItem, GeyserSession session) {
if (slot == CrafterInventoryTranslator.JAVA_RESULT_SLOT) {
// Result item probably won't be an item that needs to worry about net ID or lodestone compasses
this.resultItem = newItem;
} else if (isCraftingGrid(slot)) {
super.setItem(slot, newItem, session);
} else {
playerInventory.setItem(slot - CrafterInventoryTranslator.GRID_SIZE + InventoryTranslator.PLAYER_INVENTORY_OFFSET, newItem, session);
}
}
public void setSlot(int slot, boolean enabled) {
if (slot < 0 || slot > 8) {
if (!isCraftingGrid(slot)) {
GeyserImpl.getInstance().getLogger().warning("Crafter slot out of bounds: " + slot);
return;
}
@ -58,4 +92,8 @@ public class CrafterContainer extends Container {
disabledSlotsMask = (short) (disabledSlotsMask | (1 << slot));
}
}
private static boolean isCraftingGrid(int slot) {
return slot >= 0 && slot <= 8;
}
}

View file

@ -86,7 +86,7 @@ public abstract class InventoryTranslator {
put(ContainerType.BEACON, new BeaconInventoryTranslator());
put(ContainerType.BREWING_STAND, new BrewingInventoryTranslator());
put(ContainerType.CARTOGRAPHY, new CartographyInventoryTranslator());
//put(ContainerType.CRAFTER_3x3, new CrafterInventoryTranslator()); todo Output slot is currently broken
put(ContainerType.CRAFTER_3x3, new CrafterInventoryTranslator());
put(ContainerType.CRAFTING, new CraftingInventoryTranslator());
put(ContainerType.ENCHANTMENT, new EnchantingInventoryTranslator());
put(ContainerType.HOPPER, new HopperInventoryTranslator());

View file

@ -25,8 +25,6 @@
package org.geysermc.geyser.translator.protocol.java.inventory;
import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.inventory.ClientboundContainerSetContentPacket;
import org.geysermc.geyser.GeyserImpl;
import org.geysermc.geyser.GeyserLogger;
import org.geysermc.geyser.inventory.GeyserItemStack;
import org.geysermc.geyser.inventory.Inventory;
@ -36,6 +34,7 @@ import org.geysermc.geyser.translator.inventory.PlayerInventoryTranslator;
import org.geysermc.geyser.translator.protocol.PacketTranslator;
import org.geysermc.geyser.translator.protocol.Translator;
import org.geysermc.geyser.util.InventoryUtils;
import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.inventory.ClientboundContainerSetContentPacket;
@Translator(packet = ClientboundContainerSetContentPacket.class)
public class JavaContainerSetContentTranslator extends PacketTranslator<ClientboundContainerSetContentPacket> {

@ -1 +1 @@
Subproject commit 5f892d04d2212a13fad3f517b3f516d6526833f2
Subproject commit 2ac0c1415cb9063c405dbd7e14f2d426a0ba1180