From ec27ec67f71d6513a89a368cdeb1d69926bc6935 Mon Sep 17 00:00:00 2001 From: Erkam Date: Wed, 20 Dec 2023 15:29:49 +0100 Subject: [PATCH 1/3] Implemented handleDestroy event --- server/item/inventory/handler.go | 9 ++++++--- server/session/handler_item_stack_request.go | 4 ++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/server/item/inventory/handler.go b/server/item/inventory/handler.go index 041f66c26..53e891149 100644 --- a/server/item/inventory/handler.go +++ b/server/item/inventory/handler.go @@ -15,6 +15,8 @@ type Handler interface { HandlePlace(ctx *event.Context, slot int, it item.Stack) // HandleDrop handles the dropping of an item.Stack in a slot out of the inventory. HandleDrop(ctx *event.Context, slot int, it item.Stack) + // HandleDestroy handles the destroying of an item.Stack in a creative inventory. + HandleDestroy(ctx *event.Context, slot int, it item.Stack) } // Check to make sure NopHandler implements Handler. @@ -24,6 +26,7 @@ var _ Handler = NopHandler{} // Handler of an Inventory. type NopHandler struct{} -func (NopHandler) HandleTake(*event.Context, int, item.Stack) {} -func (NopHandler) HandlePlace(*event.Context, int, item.Stack) {} -func (NopHandler) HandleDrop(*event.Context, int, item.Stack) {} +func (NopHandler) HandleTake(*event.Context, int, item.Stack) {} +func (NopHandler) HandlePlace(*event.Context, int, item.Stack) {} +func (NopHandler) HandleDrop(*event.Context, int, item.Stack) {} +func (NopHandler) HandleDestroy(*event.Context, int, item.Stack) {} diff --git a/server/session/handler_item_stack_request.go b/server/session/handler_item_stack_request.go index 79b40e447..2ed5c4eba 100644 --- a/server/session/handler_item_stack_request.go +++ b/server/session/handler_item_stack_request.go @@ -234,6 +234,10 @@ func (h *ItemStackRequestHandler) handleDestroy(a *protocol.DestroyStackRequestA return fmt.Errorf("client attempted to destroy %v items, but only %v present", a.Count, i.Count()) } + if err := call(event.C(), int(a.Source.Slot), i.Grow(int(a.Count)-i.Count()), s.inv.Handler().HandleDestroy); err != nil { + return err + } + h.setItemInSlot(a.Source, i.Grow(-int(a.Count)), s) return nil } From f06197aad1044e9c6d8128cc7f3ea6c7048a90ff Mon Sep 17 00:00:00 2001 From: Erkam Date: Wed, 20 Dec 2023 15:52:16 +0100 Subject: [PATCH 2/3] return -1 when its from the cursor inventory --- server/session/handler_item_stack_request.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/server/session/handler_item_stack_request.go b/server/session/handler_item_stack_request.go index 2ed5c4eba..ab18ae444 100644 --- a/server/session/handler_item_stack_request.go +++ b/server/session/handler_item_stack_request.go @@ -233,8 +233,14 @@ func (h *ItemStackRequestHandler) handleDestroy(a *protocol.DestroyStackRequestA if i.Count() < int(a.Count) { return fmt.Errorf("client attempted to destroy %v items, but only %v present", a.Count, i.Count()) } + slot := func() int { + if a.Source.ContainerID == protocol.ContainerCursor { + return -1 + } - if err := call(event.C(), int(a.Source.Slot), i.Grow(int(a.Count)-i.Count()), s.inv.Handler().HandleDestroy); err != nil { + return int(a.Source.Slot) + } + if err := call(event.C(), slot(), i.Grow(int(a.Count)-i.Count()), s.inv.Handler().HandleDestroy); err != nil { return err } From ea2e2fd92c45280d41c021eb631b23c8d645794a Mon Sep 17 00:00:00 2001 From: Erkam Date: Sun, 24 Mar 2024 13:45:58 +0100 Subject: [PATCH 3/3] Update handler.go --- server/item/inventory/handler.go | 1 + 1 file changed, 1 insertion(+) diff --git a/server/item/inventory/handler.go b/server/item/inventory/handler.go index 53e891149..b95bb4b96 100644 --- a/server/item/inventory/handler.go +++ b/server/item/inventory/handler.go @@ -16,6 +16,7 @@ type Handler interface { // HandleDrop handles the dropping of an item.Stack in a slot out of the inventory. HandleDrop(ctx *event.Context, slot int, it item.Stack) // HandleDestroy handles the destroying of an item.Stack in a creative inventory. + // slot will return -1 when it comes from the cursor inventory otherwise the correct inventory slot. HandleDestroy(ctx *event.Context, slot int, it item.Stack) }