mirror of https://github.com/Minestom/Minestom.git
91 lines
3.1 KiB
Java
91 lines
3.1 KiB
Java
package fr.themode.minestom.net.packet.client.play;
|
|
|
|
import fr.adamaq01.ozao.net.Buffer;
|
|
import fr.themode.minestom.entity.Player;
|
|
import fr.themode.minestom.inventory.Inventory;
|
|
import fr.themode.minestom.item.ItemStack;
|
|
import fr.themode.minestom.net.packet.client.ClientPlayPacket;
|
|
import fr.themode.minestom.net.packet.server.play.ConfirmTransactionPacket;
|
|
import fr.themode.minestom.net.packet.server.play.SetSlotPacket;
|
|
import fr.themode.minestom.utils.Utils;
|
|
|
|
public class ClientClickWindowPacket implements ClientPlayPacket {
|
|
|
|
public byte windowId;
|
|
public short slot;
|
|
public byte button;
|
|
public short actionNumber;
|
|
public int mode;
|
|
// TODO clicked item
|
|
|
|
@Override
|
|
public void process(Player player) {
|
|
Inventory inventory = player.getOpenInventory();
|
|
System.out.println("Window id: " + windowId + " | slot: " + slot + " | button: " + button + " | mode: " + mode);
|
|
|
|
ConfirmTransactionPacket confirmTransactionPacket = new ConfirmTransactionPacket();
|
|
confirmTransactionPacket.windowId = windowId;
|
|
confirmTransactionPacket.actionNumber = actionNumber;
|
|
confirmTransactionPacket.accepted = true; // Change depending on output
|
|
|
|
switch (mode) {
|
|
case 0:
|
|
switch (button) {
|
|
case 0:
|
|
// Left click
|
|
inventory.leftClick(player, slot);
|
|
break;
|
|
case 1:
|
|
// Right click
|
|
inventory.rightClick(player, slot);
|
|
break;
|
|
}
|
|
break;
|
|
case 1:
|
|
switch (button) {
|
|
case 0:
|
|
// Shift + left click
|
|
break;
|
|
case 1:
|
|
// Shift + right click
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
inventory.changeHeld(player, slot, button);
|
|
break;
|
|
case 3:
|
|
// Middle click (only creative players in non-player inventories)
|
|
break;
|
|
case 4:
|
|
// Dropping functions
|
|
break;
|
|
case 5:
|
|
// Dragging
|
|
break;
|
|
case 6:
|
|
// Double click (merge similar items)
|
|
break;
|
|
}
|
|
|
|
ItemStack cursorItem = inventory.getCursorItem(player);
|
|
SetSlotPacket setSlotPacket = new SetSlotPacket();
|
|
setSlotPacket.windowId = -1;
|
|
setSlotPacket.slot = -1;
|
|
setSlotPacket.itemStack = cursorItem;
|
|
|
|
player.getPlayerConnection().sendPacket(setSlotPacket);
|
|
player.getPlayerConnection().sendPacket(confirmTransactionPacket);
|
|
}
|
|
|
|
@Override
|
|
public void read(Buffer buffer) {
|
|
this.windowId = buffer.getByte();
|
|
this.slot = buffer.getShort();
|
|
this.button = buffer.getByte();
|
|
this.actionNumber = buffer.getShort();
|
|
this.mode = Utils.readVarInt(buffer);
|
|
// TODO read clicked item
|
|
}
|
|
}
|