Skip to content

Commit 12eae97

Browse files
committed
Attempt 3
1 parent ec68a93 commit 12eae97

1 file changed

Lines changed: 23 additions & 1 deletion

File tree

src/main/java/wearblackallday/dimthread/mixin/EntityMixin.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
import net.minecraft.server.world.ServerWorld;
66
import org.spongepowered.asm.mixin.Final;
77
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.Overwrite;
89
import org.spongepowered.asm.mixin.Shadow;
910
import org.spongepowered.asm.mixin.injection.At;
1011
import org.spongepowered.asm.mixin.injection.Inject;
1112
import org.spongepowered.asm.mixin.injection.Redirect;
13+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1214
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
1315
import wearblackallday.dimthread.DimThread;
1416

@@ -17,6 +19,11 @@
1719
@Mixin(Entity.class)
1820
public abstract class EntityMixin implements Cloneable {
1921

22+
public boolean isCloned = false;
23+
24+
@Shadow @Final
25+
abstract void setRemoved(Entity.RemovalReason reason);
26+
2027
/**
2128
* Schedules moving entities between dimensions to the server thread. Once all
2229
* the world finish ticking, {@code moveToWorld()} is processed in a safe manner
@@ -42,11 +49,26 @@ public void moveToWorld(ServerWorld destination, CallbackInfoReturnable<Entity>
4249
destination.getServer().execute(
4350
() -> finalSnapshot.moveToWorld(destination)
4451
);
52+
this.removeFromDimension();
4553
ci.setReturnValue(null);
4654
}
4755
}
4856

57+
/**
58+
* @author xiaoyu2006
59+
* @reason If this is a cloned entity, it should not execute removeFromDimension.
60+
*/
61+
@Overwrite
62+
public void removeFromDimension() {
63+
if (this.isCloned) {
64+
return;
65+
}
66+
this.setRemoved(Entity.RemovalReason.CHANGED_DIMENSION);
67+
}
68+
4969
protected Object clone() throws CloneNotSupportedException {
50-
return super.clone();
70+
EntityMixin cloned = (EntityMixin) super.clone();
71+
cloned.isCloned = true;
72+
return cloned;
5173
}
5274
}

0 commit comments

Comments
 (0)