2019-12-27 11:29:46 +00:00
|
|
|
package org.geysermc.connector.utils;
|
|
|
|
|
|
|
|
import com.nukkitx.math.vector.Vector3i;
|
|
|
|
import com.nukkitx.protocol.bedrock.packet.*;
|
|
|
|
import org.geysermc.connector.entity.Entity;
|
|
|
|
import org.geysermc.connector.network.session.GeyserSession;
|
2019-12-27 12:03:12 +00:00
|
|
|
|
2019-12-27 11:29:46 +00:00
|
|
|
public class DimensionUtils {
|
2019-12-29 08:20:48 +00:00
|
|
|
public static void switchDimension(GeyserSession session, int javaDimension, boolean fake) {
|
2019-12-27 11:29:46 +00:00
|
|
|
int bedrockDimension = javaToBedrock(javaDimension);
|
|
|
|
Entity player = session.getPlayerEntity();
|
|
|
|
if (bedrockDimension == player.getDimension())
|
|
|
|
return;
|
2019-12-28 13:35:21 +00:00
|
|
|
Vector3i pos = Vector3i.from(0, Short.MAX_VALUE, 0);
|
2019-12-27 11:29:46 +00:00
|
|
|
|
2019-12-28 13:35:21 +00:00
|
|
|
session.getEntityCache().removeAllEntities();
|
2019-12-27 11:29:46 +00:00
|
|
|
|
|
|
|
ChangeDimensionPacket changeDimensionPacket = new ChangeDimensionPacket();
|
|
|
|
changeDimensionPacket.setDimension(bedrockDimension);
|
|
|
|
changeDimensionPacket.setRespawn(true);
|
|
|
|
changeDimensionPacket.setPosition(pos.toFloat());
|
|
|
|
session.getUpstream().sendPacket(changeDimensionPacket);
|
|
|
|
player.setDimension(bedrockDimension);
|
|
|
|
|
|
|
|
//let java server handle portal travel sound
|
|
|
|
StopSoundPacket stopSoundPacket = new StopSoundPacket();
|
|
|
|
stopSoundPacket.setStoppingAllSound(true);
|
|
|
|
stopSoundPacket.setSoundName("");
|
|
|
|
session.getUpstream().sendPacket(stopSoundPacket);
|
|
|
|
|
2019-12-29 08:20:48 +00:00
|
|
|
if (fake) {
|
|
|
|
ChunkUtils.sendEmptyChunks(session, pos, 2, true);
|
|
|
|
}
|
|
|
|
|
2019-12-27 11:29:46 +00:00
|
|
|
session.setSpawned(false);
|
2019-12-28 13:35:21 +00:00
|
|
|
session.setSwitchingDimension(true);
|
2019-12-27 11:29:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public static int javaToBedrock(int javaDimension) {
|
|
|
|
switch (javaDimension) {
|
|
|
|
case -1:
|
|
|
|
return 1;
|
|
|
|
case 1:
|
|
|
|
return 2;
|
|
|
|
default:
|
|
|
|
return javaDimension;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|