mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-14 09:56:37 -04:00
player health, food and saturation, support for incoming plugin messages, fix for chat component
This commit is contained in:
parent
db4a970d23
commit
9b360bc500
@ -1,13 +1,20 @@
|
||||
package de.bixilon.minosoft.game.datatypes;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class ChatComponent {
|
||||
final JSONObject json;
|
||||
JSONObject json;
|
||||
|
||||
public ChatComponent(String raw) {
|
||||
this.json = new JSONObject(raw);
|
||||
try {
|
||||
this.json = new JSONObject(raw);
|
||||
} catch (JSONException e) {
|
||||
// not a text component, is a legacy string
|
||||
this.json = new JSONObject();
|
||||
this.json.put("text", raw);
|
||||
}
|
||||
}
|
||||
|
||||
public ChatComponent(JSONObject json) {
|
||||
@ -16,10 +23,10 @@ public class ChatComponent {
|
||||
|
||||
//ToDo
|
||||
public String getRawMessage() {
|
||||
if (json.getString("text").length() != 0) {
|
||||
if (json.has("text") && json.getString("text").length() != 0) {
|
||||
return json.getString("text");
|
||||
}
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
JSONArray arr = json.getJSONArray("extra");
|
||||
for (int i = 0; i < arr.length(); i++) {
|
||||
buffer.append(arr.getJSONObject(i).getString("text"));
|
||||
|
@ -153,6 +153,10 @@ public class Network {
|
||||
try {
|
||||
ClientboundPacket packet = clazz.getConstructor().newInstance();
|
||||
packet.read(inPacketBuffer, connection.getVersion());
|
||||
if (inPacketBuffer.getBytesLeft() > 0) {
|
||||
// warn not all data used
|
||||
Log.protocol(String.format("[IN] Packet %s did not used all bytes sent", ((p != null) ? p.name() : "UNKNOWN")));
|
||||
}
|
||||
|
||||
if (packet instanceof PacketLoginSuccess) {
|
||||
// login was okay, setting play status to avoid miss timing issues
|
||||
|
@ -1,5 +1,6 @@
|
||||
package de.bixilon.minosoft.protocol.packets.clientbound.login;
|
||||
|
||||
import de.bixilon.minosoft.game.datatypes.ChatComponent;
|
||||
import de.bixilon.minosoft.logging.Log;
|
||||
import de.bixilon.minosoft.protocol.packets.ClientboundPacket;
|
||||
import de.bixilon.minosoft.protocol.protocol.InPacketBuffer;
|
||||
@ -7,17 +8,17 @@ import de.bixilon.minosoft.protocol.protocol.PacketHandler;
|
||||
import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
|
||||
|
||||
public class PacketLoginDisconnect implements ClientboundPacket {
|
||||
String reason;
|
||||
ChatComponent reason;
|
||||
|
||||
@Override
|
||||
public void read(InPacketBuffer buffer, ProtocolVersion v) {
|
||||
reason = buffer.readString();
|
||||
reason = buffer.readChatComponent();
|
||||
log();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void log() {
|
||||
Log.protocol(String.format("Receiving login disconnect packet (%s)", reason));
|
||||
Log.protocol(String.format("Receiving login disconnect packet (%s)", reason.getRawMessage()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -25,7 +26,7 @@ public class PacketLoginDisconnect implements ClientboundPacket {
|
||||
h.handle(this);
|
||||
}
|
||||
|
||||
public String getReason() {
|
||||
public ChatComponent getReason() {
|
||||
return reason;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package de.bixilon.minosoft.protocol.packets.clientbound.play;
|
||||
|
||||
import de.bixilon.minosoft.game.datatypes.ChatComponent;
|
||||
import de.bixilon.minosoft.logging.Log;
|
||||
import de.bixilon.minosoft.protocol.packets.ClientboundPacket;
|
||||
import de.bixilon.minosoft.protocol.protocol.InPacketBuffer;
|
||||
@ -7,14 +8,14 @@ import de.bixilon.minosoft.protocol.protocol.PacketHandler;
|
||||
import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
|
||||
|
||||
public class PacketDisconnect implements ClientboundPacket {
|
||||
String reason;
|
||||
ChatComponent reason;
|
||||
|
||||
|
||||
@Override
|
||||
public void read(InPacketBuffer buffer, ProtocolVersion v) {
|
||||
switch (v) {
|
||||
case VERSION_1_7_10:
|
||||
reason = buffer.readString();
|
||||
reason = buffer.readChatComponent();
|
||||
break;
|
||||
}
|
||||
log();
|
||||
@ -22,10 +23,10 @@ public class PacketDisconnect implements ClientboundPacket {
|
||||
|
||||
@Override
|
||||
public void log() {
|
||||
Log.game(String.format("Disconnected: %s", reason));
|
||||
Log.game(String.format("Disconnected: %s", reason.getRawMessage()));
|
||||
}
|
||||
|
||||
public String getReason() {
|
||||
public ChatComponent getReason() {
|
||||
return reason;
|
||||
}
|
||||
|
||||
|
@ -16,9 +16,9 @@ public class PacketUpdateHealth implements ClientboundPacket {
|
||||
public void read(InPacketBuffer buffer, ProtocolVersion v) {
|
||||
switch (v) {
|
||||
case VERSION_1_7_10:
|
||||
health = buffer.readFloat();
|
||||
health = (float) (Math.round(buffer.readFloat() * 10) / 10.0);
|
||||
food = buffer.readShort();
|
||||
saturation = buffer.readFloat();
|
||||
saturation = (float) (Math.round(buffer.readFloat() * 10) / 10.0);
|
||||
break;
|
||||
}
|
||||
log();
|
||||
|
@ -143,6 +143,18 @@ public class InByteBuffer {
|
||||
}
|
||||
|
||||
public ChatComponent readChatComponent() {
|
||||
return new ChatComponent(readJson());
|
||||
return new ChatComponent(readString());
|
||||
}
|
||||
|
||||
public int getPos() {
|
||||
return this.pos;
|
||||
}
|
||||
|
||||
public int getLength() {
|
||||
return bytes.length;
|
||||
}
|
||||
|
||||
public int getBytesLeft() {
|
||||
return bytes.length - pos;
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ public interface Protocol {
|
||||
packetClassMapping.put(Packets.Clientbound.PLAY_KEEP_ALIVE, PacketKeepAlive.class);
|
||||
packetClassMapping.put(Packets.Clientbound.PLAY_CHUNK_BULK, PacketChunkBulk.class);
|
||||
packetClassMapping.put(Packets.Clientbound.PLAY_UPDATE_HEALTH, PacketUpdateHealth.class);
|
||||
packetClassMapping.put(Packets.Clientbound.PLAY_PLUGIN_MESSAGE, PacketUpdateHealth.class);
|
||||
packetClassMapping.put(Packets.Clientbound.PLAY_PLUGIN_MESSAGE, PacketPluginMessageReceived.class);
|
||||
packetClassMapping.put(Packets.Clientbound.PLAY_SPAWN_POSITION, PacketSpawnLocation.class);
|
||||
packetClassMapping.put(Packets.Clientbound.PLAY_CHAT_MESSAGE, PacketChatMessage.class);
|
||||
packetClassMapping.put(Packets.Clientbound.PLAY_DISCONNECT, PacketDisconnect.class);
|
||||
|
Loading…
x
Reference in New Issue
Block a user