MagiTechNetwork / MagiHandlers

An ASM mod powered by Mixin!
GNU Affero General Public License v3.0
7 stars 4 forks source link

Entity Tracker #122

Closed Eufranio closed 6 years ago

Eufranio commented 7 years ago

No momento, só temos um tracker para TileEntities. Entidades também deveriam ser rastreadas, bem como seus donos.

Eufranio commented 6 years ago

Update: EntityThrowables estão sendo devidamente checados, mas entidades normais não (ovos de spawn, ovos jogados, etc)

Eufranio commented 6 years ago

Update: todas as entidades estão sendo checadas e com o dono correto, mas algumas vezes o tracker simplesmente para: entidades spawnadas pelo player em si passam a spawnar sem dono. Isso acontece só depois de um tempo:

> [23:39:13 WARN]: [MagiHandlers] Unknown owner, dump:
> [23:39:13 WARN]: java.lang.Exception: Stack trace
> [23:39:13 WARN]: at java.lang.Thread.dumpStack(Thread.java:1336)
> [23:39:13 WARN]: at net.minecraft.world.World.handler$onEntitySpawn1$zzd000(World.java:50642)
> [23:39:13 WARN]: at net.minecraft.world.World.func_72923_a(World.java)
> [23:39:13 WARN]: at net.minecraft.world.WorldServer.func_72923_a(WorldServer.java:1126)
> [23:39:13 WARN]: at net.minecraft.world.World.addEntity(World.java:1877)
> [23:39:13 WARN]: at net.minecraft.world.World.func_72838_d(World.java:1768)
> [23:39:13 WARN]: at net.minecraft.item.ItemEgg.func_77659_a(SourceFile:19)
> [23:39:13 WARN]: at net.minecraft.item.ItemStack.func_77957_a(ItemStack.java:185)
> [23:39:13 WARN]: at net.minecraft.server.management.ItemInWorldManager.func_73085_a(ItemInWorldManager.java:385)
> [23:39:13 WARN]: at net.minecraft.network.NetHandlerPlayServer.func_147346_a(NetHandlerPlayServer.java:833)
> [23:39:13 WARN]: at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.func_148833_a(SourceFile:60)
> [23:39:13 WARN]: at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.func_148833_a(SourceFile:9)
> [23:39:13 WARN]: at net.minecraft.network.NetworkManager.redirect$onProcessPacket$zzo000(NetworkManager.java:525)
> [23:39:13 WARN]: at net.minecraft.network.NetworkManager.func_74428_b(NetworkManager.java:245)
> [23:39:13 WARN]: at net.minecraft.network.NetworkSystem.func_151269_c(NetworkSystem.java:181)
> [23:39:13 WARN]: at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:1023)
> [23:39:13 WARN]: at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:432)
> [23:39:13 WARN]: at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:841)
> [23:39:13 WARN]: at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:693)
> [23:39:13 WARN]: at java.lang.Thread.run(Thread.java:748)

Acho que em algum momento o MagiHandlers tenta adicionar um player à stack e já tem um lá, mas como ela não aceita itens repetidos, não adiciona. Depois de processar a ação, a stack não está mais 1:1, e o MagiHandlers remove o player duas vezes, tirando o original dela.

Eufranio commented 6 years ago

Aparentemente, havia mais de um lugar onde dávamos push na PhaseStack, com o mesmo player. Substituí todos (ou a maioria) dos hooks do tracker por apenas um, em NetworkManager.processPacket, que é o princípio de todos os eventos causados por um player em um servidor num único tick. Isso apenas capta players reais, mas FakePlayers já estão sendo monitorados pelo tracker das TileEntitirs/Entities, que é onde eles estão.