Skip to content

Commit e9c7840

Browse files
committed
feat(mobile): fix annoying issues with box and foods usage on screen hold
1 parent 52c0c75 commit e9c7840

File tree

4 files changed

+28
-14
lines changed

4 files changed

+28
-14
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@
156156
"mc-assets": "^0.2.62",
157157
"minecraft-inventory-gui": "github:zardoy/minecraft-inventory-gui#next",
158158
"mineflayer": "github:zardoy/mineflayer#gen-the-master",
159-
"mineflayer-mouse": "^0.1.11",
159+
"mineflayer-mouse": "^0.1.14",
160160
"mineflayer-pathfinder": "^2.4.4",
161161
"npm-run-all": "^4.1.5",
162162
"os-browserify": "^0.3.0",

pnpm-lock.yaml

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/react/GameInteractionOverlay.tsx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { useRef, useEffect } from 'react'
22
import { subscribe, useSnapshot } from 'valtio'
33
import { useUtilsEffect } from '@zardoy/react-util'
44
import { getThreeJsRendererMethods } from 'renderer/viewer/three/threeJsMethods'
5+
import { isItemActivatableMobile } from 'mineflayer-mouse/dist/activatableItemsMobile'
56
import { options } from '../optionsStorage'
67
import { activeModalStack, isGameActive, miscUiState } from '../globalState'
78
import { onCameraMove, CameraMoveEvent } from '../cameraRotationControls'
@@ -77,7 +78,10 @@ function GameInteractionOverlayInner ({
7778
if (options.touchInteractionType === 'classic') {
7879
virtualClickTimeout ??= setTimeout(() => {
7980
virtualClickActive = true
80-
document.dispatchEvent(new MouseEvent('mousedown', { button: 0 }))
81+
// If held item is activatable, use right click instead of left
82+
const heldItemName = bot?.heldItem?.name
83+
const isOnlyActivatable = heldItemName && isItemActivatableMobile(heldItemName, loadedData)
84+
document.dispatchEvent(new MouseEvent('mousedown', { button: isOnlyActivatable ? 2 : 0 }))
8185
}, touchStartBreakingBlockMs)
8286
}
8387
}
@@ -150,16 +154,23 @@ function GameInteractionOverlayInner ({
150154

151155
if (virtualClickActive) {
152156
// button 0 is left click
153-
document.dispatchEvent(new MouseEvent('mouseup', { button: 0 }))
157+
// If held item is activatable, use right click instead of left
158+
const heldItemName = bot?.heldItem?.name
159+
const isOnlyActivatable = heldItemName && isItemActivatableMobile(heldItemName, loadedData)
160+
document.dispatchEvent(new MouseEvent('mouseup', { button: isOnlyActivatable ? 2 : 0 }))
154161
virtualClickActive = false
155162
} else if (!capturedPointer.active.activateCameraMove && (Date.now() - capturedPointer.active.time < touchStartBreakingBlockMs)) {
156163
// single click action
157164
const MOUSE_BUTTON_RIGHT = 2
158165
const MOUSE_BUTTON_LEFT = 0
166+
const heldItemName = bot?.heldItem?.name
167+
const isOnlyActivatable = heldItemName && isItemActivatableMobile(heldItemName, loadedData)
159168
const gonnaAttack = !!bot.mouse.getCursorState().entity || !!videoCursorInteraction()
160-
document.dispatchEvent(new MouseEvent('mousedown', { button: gonnaAttack ? MOUSE_BUTTON_LEFT : MOUSE_BUTTON_RIGHT }))
169+
// If not attacking entity and item is activatable, use right click for breaking
170+
const useButton = !gonnaAttack && isOnlyActivatable ? MOUSE_BUTTON_RIGHT : (gonnaAttack ? MOUSE_BUTTON_LEFT : MOUSE_BUTTON_RIGHT)
171+
document.dispatchEvent(new MouseEvent('mousedown', { button: useButton }))
161172
bot.mouse.update()
162-
document.dispatchEvent(new MouseEvent('mouseup', { button: gonnaAttack ? MOUSE_BUTTON_LEFT : MOUSE_BUTTON_RIGHT }))
173+
document.dispatchEvent(new MouseEvent('mouseup', { button: useButton }))
163174
}
164175

165176
if (screenTouches > 0) {

src/react/TouchAreasControls.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { CSSProperties, PointerEvent, useEffect, useRef, useState } from 'react'
22
import { proxy, ref, useSnapshot } from 'valtio'
3+
import activatableItemsMobile from 'mineflayer-mouse/dist/activatableItemsMobile'
34
import { contro } from '../controls'
45
import { options } from '../optionsStorage'
56
import PixelartIcon from './PixelartIcon'
@@ -72,10 +73,12 @@ export default ({ setupActive, closeButtonsSetup, foregroundGameActive }: Props)
7273
break: false,
7374
jump: bot?.getControlState('jump'),
7475
}[name]
76+
const RIGHT_MOUSE_BUTTON = 2
77+
const LEFT_MOUSE_BUTTON = 0
7578
const holdDown = {
7679
action () {
7780
if (!bot) return
78-
document.dispatchEvent(new MouseEvent('mousedown', { button: 2 }))
81+
document.dispatchEvent(new MouseEvent('mousedown', { button: RIGHT_MOUSE_BUTTON }))
7982
bot.mouse.update()
8083
},
8184
sneak () {
@@ -87,7 +90,7 @@ export default ({ setupActive, closeButtonsSetup, foregroundGameActive }: Props)
8790
},
8891
break () {
8992
if (!bot) return
90-
document.dispatchEvent(new MouseEvent('mousedown', { button: 0 }))
93+
document.dispatchEvent(new MouseEvent('mousedown', { button: LEFT_MOUSE_BUTTON }))
9194
bot.mouse.update()
9295
active = true
9396
},
@@ -101,7 +104,7 @@ export default ({ setupActive, closeButtonsSetup, foregroundGameActive }: Props)
101104
}
102105
const holdUp = {
103106
action () {
104-
document.dispatchEvent(new MouseEvent('mouseup', { button: 2 }))
107+
document.dispatchEvent(new MouseEvent('mouseup', { button: RIGHT_MOUSE_BUTTON }))
105108
},
106109
sneak () {
107110
void contro.emit('release', {
@@ -112,7 +115,7 @@ export default ({ setupActive, closeButtonsSetup, foregroundGameActive }: Props)
112115
},
113116
break () {
114117
if (!bot) return
115-
document.dispatchEvent(new MouseEvent('mouseup', { button: 0 }))
118+
document.dispatchEvent(new MouseEvent('mouseup', { button: LEFT_MOUSE_BUTTON }))
116119
bot.mouse.update()
117120
active = false
118121
},

0 commit comments

Comments
 (0)