Fix portal event cancel error (#455)
This commit is contained in:
parent
5061aa5b6c
commit
df6f31d605
|
@ -431,12 +431,13 @@ public abstract class ServerPlayerMixin extends PlayerMixin implements ServerPla
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
@Overwrite
|
@Overwrite
|
||||||
protected PortalInfo findDimensionEntryPoint(ServerLevel p_241829_1_) {
|
protected PortalInfo findDimensionEntryPoint(ServerLevel level) {
|
||||||
PortalInfo portalinfo = super.findDimensionEntryPoint(p_241829_1_);
|
PortalInfo portalinfo = super.findDimensionEntryPoint(level);
|
||||||
if (portalinfo != null && ((WorldBridge) this.level).bridge$getTypeKey() == LevelStem.OVERWORLD && ((WorldBridge) p_241829_1_).bridge$getTypeKey() == LevelStem.END) {
|
level = portalinfo == null || ((PortalInfoBridge) portalinfo).bridge$getWorld() == null ? level : ((PortalInfoBridge) portalinfo).bridge$getWorld();
|
||||||
|
if (portalinfo != null && ((WorldBridge) this.level).bridge$getTypeKey() == LevelStem.OVERWORLD && ((WorldBridge) level).bridge$getTypeKey() == LevelStem.END) {
|
||||||
Vec3 vector3d = portalinfo.pos.add(0.0D, -1.0D, 0.0D);
|
Vec3 vector3d = portalinfo.pos.add(0.0D, -1.0D, 0.0D);
|
||||||
PortalInfo newInfo = new PortalInfo(vector3d, Vec3.ZERO, 90.0F, 0.0F);
|
PortalInfo newInfo = new PortalInfo(vector3d, Vec3.ZERO, 90.0F, 0.0F);
|
||||||
((PortalInfoBridge) newInfo).bridge$setWorld(p_241829_1_);
|
((PortalInfoBridge) newInfo).bridge$setWorld(level);
|
||||||
((PortalInfoBridge) newInfo).bridge$setPortalEventInfo(((PortalInfoBridge) portalinfo).bridge$getPortalEventInfo());
|
((PortalInfoBridge) newInfo).bridge$setPortalEventInfo(((PortalInfoBridge) portalinfo).bridge$getPortalEventInfo());
|
||||||
return newInfo;
|
return newInfo;
|
||||||
} else {
|
} else {
|
||||||
|
@ -482,24 +483,23 @@ public abstract class ServerPlayerMixin extends PlayerMixin implements ServerPla
|
||||||
|
|
||||||
return (ServerPlayer) (Object) this;
|
return (ServerPlayer) (Object) this;
|
||||||
} else {
|
} else {
|
||||||
LevelData iworldinfo = server.getLevelData();
|
|
||||||
this.connection.send(new ClientboundRespawnPacket(server.dimensionType(), server.dimension(), BiomeManager.obfuscateSeed(server.getSeed()), this.gameMode.getGameModeForPlayer(), this.gameMode.getPreviousGameModeForPlayer(), server.isDebug(), server.isFlat(), true));
|
|
||||||
this.connection.send(new ClientboundChangeDifficultyPacket(iworldinfo.getDifficulty(), iworldinfo.isDifficultyLocked()));
|
|
||||||
PlayerList playerlist = this.server.getPlayerList();
|
|
||||||
playerlist.sendPlayerPermissionLevel((ServerPlayer) (Object) this);
|
|
||||||
serverworld.removeEntity((ServerPlayer) (Object) this, true); //Forge: the player entity is moved to the new world, NOT cloned. So keep the data alive with no matching invalidate call.
|
|
||||||
this.revive();
|
|
||||||
PortalInfo portalinfo = teleporter.getPortalInfo((ServerPlayer) (Object) this, server, this::findDimensionEntryPoint);
|
PortalInfo portalinfo = teleporter.getPortalInfo((ServerPlayer) (Object) this, server, this::findDimensionEntryPoint);
|
||||||
ServerLevel[] exitWorld = new ServerLevel[]{server};
|
|
||||||
if (portalinfo != null) {
|
if (portalinfo != null) {
|
||||||
|
if (((PortalInfoBridge) portalinfo).bridge$getWorld() != null) {
|
||||||
|
server = ((PortalInfoBridge) portalinfo).bridge$getWorld();
|
||||||
|
}
|
||||||
|
ServerLevel[] exitWorld = new ServerLevel[]{server};
|
||||||
|
LevelData iworldinfo = server.getLevelData();
|
||||||
|
this.connection.send(new ClientboundRespawnPacket(server.dimensionType(), server.dimension(), BiomeManager.obfuscateSeed(server.getSeed()), this.gameMode.getGameModeForPlayer(), this.gameMode.getPreviousGameModeForPlayer(), server.isDebug(), server.isFlat(), true));
|
||||||
|
this.connection.send(new ClientboundChangeDifficultyPacket(iworldinfo.getDifficulty(), iworldinfo.isDifficultyLocked()));
|
||||||
|
PlayerList playerlist = this.server.getPlayerList();
|
||||||
|
playerlist.sendPlayerPermissionLevel((ServerPlayer) (Object) this);
|
||||||
|
serverworld.removeEntity((ServerPlayer) (Object) this, true); //Forge: the player entity is moved to the new world, NOT cloned. So keep the data alive with no matching invalidate call.
|
||||||
|
this.revive();
|
||||||
Entity e = teleporter.placeEntity((ServerPlayer) (Object) this, serverworld, exitWorld[0], this.getYRot(), spawnPortal -> {//Forge: Start vanilla logic
|
Entity e = teleporter.placeEntity((ServerPlayer) (Object) this, serverworld, exitWorld[0], this.getYRot(), spawnPortal -> {//Forge: Start vanilla logic
|
||||||
serverworld.getProfiler().push("moving");
|
serverworld.getProfiler().push("moving");
|
||||||
|
|
||||||
if (((PortalInfoBridge) portalinfo).bridge$getWorld() != null) {
|
|
||||||
exitWorld[0] = ((PortalInfoBridge) portalinfo).bridge$getWorld();
|
|
||||||
}
|
|
||||||
if (exitWorld[0] != null) {
|
if (exitWorld[0] != null) {
|
||||||
if (registrykey ==LevelStem.OVERWORLD&& ((WorldBridge) exitWorld[0]).bridge$getTypeKey() == LevelStem.NETHER) {
|
if (registrykey == LevelStem.OVERWORLD && ((WorldBridge) exitWorld[0]).bridge$getTypeKey() == LevelStem.NETHER) {
|
||||||
this.enteredNetherPosition = this.position();
|
this.enteredNetherPosition = this.position();
|
||||||
} else if (spawnPortal && ((WorldBridge) exitWorld[0]).bridge$getTypeKey() == LevelStem.END
|
} else if (spawnPortal && ((WorldBridge) exitWorld[0]).bridge$getTypeKey() == LevelStem.END
|
||||||
&& (((PortalInfoBridge) portalinfo).bridge$getPortalEventInfo() == null || ((PortalInfoBridge) portalinfo).bridge$getPortalEventInfo().getCanCreatePortal())) {
|
&& (((PortalInfoBridge) portalinfo).bridge$getPortalEventInfo() == null || ((PortalInfoBridge) portalinfo).bridge$getPortalEventInfo().getCanCreatePortal())) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user