Fix vanilla bug caused by unremovable entities in the entityList of ClientWorld (fixes #29)
This commit is contained in:
@@ -0,0 +1,31 @@
|
|||||||
|
package com.replaymod.replay.mixin;
|
||||||
|
|
||||||
|
import net.minecraft.client.multiplayer.WorldClient;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@Mixin(WorldClient.class)
|
||||||
|
public abstract class MixinWorldClient {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fixes a bug in vanilla Minecraft that leaves entities remaining in the entityList even after respawn.
|
||||||
|
* The entityList in WorldClient is a Set that assumes that the entity ID of its entities does not change.
|
||||||
|
* However in {@link WorldClient#addEntityToWorld(int, Entity)}, the entity passed in is first added to the
|
||||||
|
* set and subsequently its id is changed, leaving it stuck in he Set. That is the buggy method.
|
||||||
|
* This wouldn't be too much of a problem if the entity had the correct id to begin with, however the handler for
|
||||||
|
* the spawn player packet creates an EntityOtherPlayerMP which takes its id from a counter and then passes it to
|
||||||
|
* this method with the wrong id.
|
||||||
|
* This mixin fixes the id of the entity before it is added to the set instead of right after.
|
||||||
|
* The original id change right after is not changed, however it should not have any effect.
|
||||||
|
* @param entityId The id to be set for the entity
|
||||||
|
* @param entity The entity to be added
|
||||||
|
* @param ci Callback info
|
||||||
|
*/
|
||||||
|
@Inject(method = "addEntityToWorld", at=@At("HEAD"))
|
||||||
|
public void replayModReplay_fix_addEntityToWorld(int entityId, Entity entity, CallbackInfo ci) {
|
||||||
|
entity.setEntityId(entityId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,7 +10,8 @@
|
|||||||
"MixinRenderItem",
|
"MixinRenderItem",
|
||||||
"MixinRenderManager",
|
"MixinRenderManager",
|
||||||
"MixinTileEntityEndPortalRenderer",
|
"MixinTileEntityEndPortalRenderer",
|
||||||
"MixinViewFrustum"
|
"MixinViewFrustum",
|
||||||
|
"MixinWorldClient"
|
||||||
],
|
],
|
||||||
"server": [],
|
"server": [],
|
||||||
"client": [],
|
"client": [],
|
||||||
|
|||||||
Reference in New Issue
Block a user