Introspection module voids items when player is offline
lexi-the-cute opened this issue ยท 8 comments
When logging off on a server, items from the introspected chest inventory slot get voided
Reproduce:
-
download debug-server.zip
-
install fabric, etc...
-
fill up the chest inventory to full after filling up the player inventory
-
drop an item from the introspected player inventory slot on the floor
-
log off
-
after about 30 seconds to 5 minutes, log onto the server
-
check the chest inventory
Server Info:
- Minecraft: 1.20.1
- Fabric Loader: 0.15.4
Mods:
- CC: Tweaked (https://modrinth.com/mod/gu7yAYhd) [1.109.3] by Daniel Ratcliffe, Aaron Mills, SquidDev
- Fabric Language Kotlin (https://modrinth.com/mod/Ha28R6CL) [1.10.17+kotlin.1.9.22] by FabricMC
- Mod Menu (https://modrinth.com/mod/mOgUt4GM) [7.2.2] by Prospector, haykam821, TerraformersMC
- Plethora (https://modrinth.com/mod/LDfFdCXe) [1.9.3] by SquidDev, Lemmmy
- Fabric API (https://modrinth.com/mod/P7dR8mSH) [0.91.0+1.20.1] by FabricMC
- Trinkets (https://modrinth.com/mod/5aaWibi9) [3.7.1] by Emi, C4
Relevant Information (also included in debug-server.zip):
function main()
-- todo: implement way of detecting existing slots to top up
-- todo: implement multi user support
term.clear()
print('"Item Shadowing" Running...')
status, inv = xpcall(getInventory, errorHandler)
while not status do
status, inv = xpcall(getInventory, errorHandler)
sleep(1)
end
while true do
-- call function with error handler
status = xpcall(shadowItems, errorHandler)
-- sleep for 1 second
sleep(1)
end
end
function getInventory()
local introspector = peripheral.wrap("top")
return introspector.getInventory()
end
function shadowItems()
-- chicken
inv.pullItems("left", 1, 64, 9)
-- rockets
--inv.pullItems("right", 1, 64, 8)
end
function errorHandler(err)
-- most likely the player went offline
-- print("Error: " .. err)
end
main()
Update from conversation on Discord: still no luck with the above program. Also tried ender storages, rebooting the computer instead of pcalling, far away chunks that weren't spawn loaded, partial slots (having half a stack before logging off)
This test program:
startup.lua
while true do
parallel.waitForAny(function() shell.run("main.lua") end)
sleep(2)
end
main.lua
local chest = peripheral.wrap("right")
local manip = peripheral.wrap("left")
local inv = manip.getInventory()
while true do
sleep(0.5)
local lst = inv.list()
if not lst[18] or lst[18].count < 64 then
inv.pullItems("right", 1, 64, 18)
end
end
I know that a few players have run into this on SwitchCraft (especially recently), but I still can't reproduce this at all. Your world download isn't working for me, can you think of any other steps that might be involved?
This is the code I'm testing with:
local chest = peripheral.wrap("right")
local manip = peripheral.wrap("left")
sleep(5)
local status, inv = pcall(manip.getInventory)
while not status do
status, inv = pcall(manip.getInventory)
sleep(1)
end
while true do
local ok, count = pcall(inv.pullItems, "right", 1, 64, 1)
print("transferred", ok, count)
sleep(1)
end
I've tried following your steps exactly. I've also tried logging off before getInventory
is called, I've tried logging off after getInventory
is called, I've tried logging off at different times, I've tried not dropping an item, I've tried having an empty inventory, I've tried saving after dropping but before logging off, I've tried saving after logging off.
In all my test cases, the game is correctly throwing "The entity is no longer there" when the player is offline, and not transferring/voiding any items.
if you could send me the file, I'll cut out anything that isn't related to my autofeeder. I wiped the computer before installing hopper.lua
If you have a backup of my computer before I made the fix, you can use the program for that. it is known to trigger the bug
local function handleBaseSlot()
while true do
sleep(0.5)
local lst = inv.list()
--if lst[36] then
-- inv.pushItems("left",36)
--end
if not lst[18] or lst[18].count < 64 then
inv.pullItems("ender_storage_6461",1,64,18)
end
end
end
is the code, make sure the chunk this is running on is loaded
Duplicate/regression of #31