use of net.minecraft.entity.player.ServerPlayer in project StationAPI by ModificationStation.
the class ServerVanillaChecker method registerMessages.
@EventListener(priority = ListenerPriority.HIGH)
private static void registerMessages(MessageListenerRegistryEvent event) {
event.registry.register(of(MODID, "modlist"), (player, message) -> {
if (!CLIENT_REQUIRED_MODS.isEmpty()) {
LOGGER.info("Received a list of mods from player \"" + player.name + "\", verifying...");
ServerPlayer serverPlayer = (ServerPlayer) player;
String version = message.strings[0];
String serverStationVersion = MODID.getVersion().getFriendlyString();
if (!version.equals(serverStationVersion)) {
LOGGER.error("Player \"" + player.name + "\" has a mismatching " + MODID.getName() + " version \"" + version + "\", disconnecting.");
serverPlayer.packetHandler.kick(I18n.translate("disconnect.stationapi:station_version_mismatch", serverStationVersion, version));
return;
}
Map<String, String> clientMods = new HashMap<>();
for (int i = 1; i < message.strings.length; i += 2) clientMods.put(message.strings[i], message.strings[i + 1]);
LOGGER.info("Player \"" + player.name + "\"'s mods: " + clientMods.entrySet().stream().map(stringStringEntry -> "modid=" + stringStringEntry.getKey() + " version=" + stringStringEntry.getValue()).collect(Collectors.joining(", ", "[", "]")));
String modid;
String clientVersion;
String serverVersion;
for (ModContainer serverMod : CLIENT_REQUIRED_MODS) {
ModMetadata modMetadata = serverMod.getMetadata();
modid = modMetadata.getId();
serverVersion = modMetadata.getVersion().getFriendlyString();
if (clientMods.containsKey(modid)) {
clientVersion = clientMods.get(modid);
if (clientVersion == null || !clientVersion.equals(serverVersion)) {
LOGGER.error("Player \"" + player.name + "\" has a mismatching " + modMetadata.getName() + " (" + modid + ")" + " version \"" + clientVersion + "\", disconnecting.");
serverPlayer.packetHandler.kick(I18n.translate("disconnect.stationapi:mod_version_mismatch", modMetadata.getName(), modid, serverVersion, clientVersion == null ? "null" : clientVersion));
return;
}
} else {
LOGGER.error("Player \"" + player.name + "\" has a missing mod " + modMetadata.getName() + " (" + modid + "), disconnecting.");
serverPlayer.packetHandler.kick(I18n.translate("disconnect.stationapi:missing_mod", modMetadata.getName(), modid, serverVersion));
return;
}
}
LOGGER.info("Player \"" + player.name + "\"'s mods have passed verification.");
}
});
}
use of net.minecraft.entity.player.ServerPlayer in project StationAPI by ModificationStation.
the class DimensionHelperServerImpl method switchDimension.
@Override
public void switchDimension(PlayerBase player, Identifier destination, double scale, class_467 travelAgent) {
// noinspection deprecation
MinecraftServer server = (MinecraftServer) FabricLoader.getInstance().getGameInstance();
ServerPlayer serverPlayer = (ServerPlayer) player;
ServerLevel var2 = server.getLevel(serverPlayer.dimensionId);
DimensionRegistry dimensions = DimensionRegistry.INSTANCE;
int overworldSerial = dimensions.getSerialID(OVERWORLD).orElseThrow(() -> new IllegalStateException("Overworld not found!"));
int destinationSerial = dimensions.getSerialID(destination).orElseThrow(() -> new IllegalArgumentException("Unknown dimension: " + destination + "!"));
player.dimensionId = player.dimensionId == destinationSerial ? overworldSerial : destinationSerial;
ServerLevel var4 = server.getLevel(serverPlayer.dimensionId);
serverPlayer.packetHandler.send(new Respawn0x9C2SPacket((byte) serverPlayer.dimensionId));
var2.removeEntityServer(serverPlayer);
serverPlayer.removed = false;
double var5 = serverPlayer.x;
double var7 = serverPlayer.z;
if (serverPlayer.dimensionId == destinationSerial) {
var5 *= scale;
var7 *= scale;
} else {
var5 /= scale;
var7 /= scale;
}
serverPlayer.setPositionAndAngles(var5, serverPlayer.y, var7, serverPlayer.yaw, serverPlayer.pitch);
if (serverPlayer.isAlive())
var2.method_193(serverPlayer, false);
if (serverPlayer.isAlive()) {
var4.spawnEntity(serverPlayer);
serverPlayer.setPositionAndAngles(var5, serverPlayer.y, var7, serverPlayer.yaw, serverPlayer.pitch);
var4.method_193(serverPlayer, false);
var4.serverLevelSource.field_933 = true;
travelAgent.method_1530(var4, serverPlayer);
var4.serverLevelSource.field_933 = false;
}
server.serverPlayerConnectionManager.method_554(serverPlayer);
serverPlayer.packetHandler.method_832(serverPlayer.x, serverPlayer.y, serverPlayer.z, serverPlayer.yaw, serverPlayer.pitch);
serverPlayer.setLevel(var4);
server.serverPlayerConnectionManager.sendPlayerTime(serverPlayer, var4);
server.serverPlayerConnectionManager.method_581(serverPlayer);
}
Aggregations