use of net.glowstone.net.message.play.game.JoinGameMessage in project Glowstone by GlowstoneMC.
the class GlowPlayer method join.
/**
* Loads the player's state and sends the messages that are necessary on login.
*
* @param session the player's session
* @param reader the source of the player's saved state
*/
public void join(GlowSession session, PlayerReader reader) {
String type = world.getWorldType().getName().toLowerCase();
reader.readData(this);
reader.close();
int gameMode = getGameMode().getValue();
session.send(new JoinGameMessage(getEntityId(), world.isHardcore(), gameMode, // TODO: determine previous gamemode
-1, server.getWorlds().stream().map(World::getName).toArray(String[]::new), world.getName(), world.getSeedHash(), server.getMaxPlayers(), world.getViewDistance(), world.getGameRuleMap().getBoolean(GameRules.REDUCED_DEBUG_INFO), !world.getGameRuleMap().getBoolean(GameRules.DO_IMMEDIATE_RESPAWN), // TODO: Debug worlds
false, world.getWorldType() == WorldType.FLAT));
// send server brand and supported plugin channels
Message pluginMessage = PluginMessage.fromString("minecraft:brand", server.getName());
if (pluginMessage != null) {
session.send(pluginMessage);
}
sendSupportedChannels();
joinTime = System.currentTimeMillis();
// Add player to list of online players
getServer().setPlayerOnline(this, true);
// save data back out
saveData();
// stream the initial set of blocks
streamBlocks();
sendWeather();
sendRainDensity();
sendSkyDarkness();
getServer().sendPlayerAbilities(this);
// send initial location
session.send(new PositionRotationMessage(location));
// send initial velocity
session.send(new EntityVelocityMessage(getEntityId(), velocity));
// send initial health
sendHealth();
// send gamemode defaults
setGameModeDefaults();
// send held item
getSession().send(new HeldItemMessage(getInventory().getHeldItemSlot()));
// send xp bar
sendExperience();
session.send(world.getWorldBorder().createMessage());
sendTime();
// set our compass target
setCompassTarget(world.getSpawnLocation());
scoreboard = server.getScoreboardManager().getMainScoreboard();
scoreboard.subscribe(this);
invMonitor = new InventoryMonitor(getOpenInventory());
// send inventory contents
updateInventory();
session.send(recipeMonitor.createInitMessage());
if (!server.getResourcePackUrl().isEmpty()) {
setResourcePack(server.getResourcePackUrl(), server.getResourcePackHash());
}
}
use of net.glowstone.net.message.play.game.JoinGameMessage in project Glowstone by GlowstoneMC.
the class JoinGameCodec method decode.
@Override
public JoinGameMessage decode(ByteBuf buffer) throws IOException {
int id = buffer.readInt();
boolean hardcore = buffer.readBoolean();
int mode = buffer.readByte();
int previousMode = buffer.readByte();
String[] worlds = new String[readVarInt(buffer)];
for (int i = 0; i < worlds.length; i++) {
worlds[i] = readUTF8(buffer);
}
// TODO: Decode dimension info from NBT
CompoundTag dimensionCodec = readCompound(buffer);
CompoundTag dimension = readCompound(buffer);
String currentWorld = readUTF8(buffer);
byte[] seedHash = buffer.readBytes(8).array();
int maxPlayers = readVarInt(buffer);
int viewDistance = readVarInt(buffer);
boolean reducedDebugInfo = buffer.readBoolean();
boolean enableRespawnScreen = buffer.readBoolean();
boolean debug = buffer.readBoolean();
boolean flat = buffer.readBoolean();
return new JoinGameMessage(id, hardcore, mode, previousMode, worlds, currentWorld, seedHash, maxPlayers, viewDistance, reducedDebugInfo, enableRespawnScreen, debug, flat);
}
Aggregations