function UIItem:onDragEnter(mousePos) if self:isVirtual() then return false end local item = self:getItem() if not item then return false end self:setBorderWidth(1) self.currentDragThing = item Mouse.setTargetCursor() return true end function UIItem:onDragLeave(droppedWidget, mousePos) if self:isVirtual() then return false end self.currentDragThing = nil Mouse.restoreCursor() self:setBorderWidth(0) return true end function UIItem:onDrop(widget, mousePos) if self:isVirtual() then return false end if not widget or not widget.currentDragThing then return false end local item = widget.currentDragThing local toPos = self.position if item:isStackable() and item:getCount() > 1 then GameInterface.moveStackableItem(item, toPos) else g_game.move(item, toPos, 1) end self:setBorderWidth(0) return true end function UIItem:onHoverChange(hovered) if self:isVirtual() then return end local draggingWidget = g_ui.getDraggingWidget() if draggingWidget and self ~= draggingWidget then local gotMap = draggingWidget:getClassName() == 'UIMap' local gotItem = draggingWidget:getClassName() == 'UIItem' and not draggingWidget:isVirtual() if hovered and (gotItem or gotMap) then self:setBorderWidth(1) else self:setBorderWidth(0) end end end function UIItem:onMouseRelease(mousePosition, mouseButton) if self:isVirtual() then return false end local item = self:getItem() if not item or not self:containsPoint(mousePosition) then return false end return GameInterface.processMouseAction(mousePosition, mouseButton, nil, item, item, nil, item) end