diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Arrow.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Arrow.java
index 12de2e613..355a2b6ec 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Arrow.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Arrow.java
@@ -27,10 +27,9 @@ public class Arrow extends EntityObject implements ObjectInterface {
this.shooter = additionalInt;
}
- public Arrow(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public Arrow(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
this.shooter = additionalInt;
- this.metaData = (ArrowMetaData) metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Boat.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Boat.java
index c74844fad..dce844d98 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Boat.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Boat.java
@@ -26,9 +26,8 @@ public class Boat extends EntityObject implements ObjectInterface {
// boat does not have any additional info
}
- public Boat(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public Boat(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
- this.metaData = (BoatMetaData) metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Egg.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Egg.java
index 611559664..644592446 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Egg.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Egg.java
@@ -26,10 +26,9 @@ public class Egg extends EntityObject implements ObjectInterface {
this.thrower = additionalInt;
}
- public Egg(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public Egg(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
this.thrower = additionalInt;
- this.metaData = metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/EnderCrystal.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/EnderCrystal.java
index a8e5a2811..d5d238cc2 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/EnderCrystal.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/EnderCrystal.java
@@ -25,9 +25,8 @@ public class EnderCrystal extends EntityObject implements ObjectInterface {
// objects do not spawn with metadata... reading additional info from the following int
}
- public EnderCrystal(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public EnderCrystal(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
- this.metaData = (EnderCrystalMetaData) metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Enderpearl.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Enderpearl.java
index b5d6ca2ad..5a7d817af 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Enderpearl.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Enderpearl.java
@@ -24,9 +24,8 @@ public class Enderpearl extends EntityObject implements ObjectInterface {
// objects do not spawn with metadata... reading additional info from the following int
}
- public Enderpearl(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public Enderpearl(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
- this.metaData = metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/EyeOfEnder.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/EyeOfEnder.java
index 2fbf14580..541047523 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/EyeOfEnder.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/EyeOfEnder.java
@@ -24,9 +24,8 @@ public class EyeOfEnder extends EntityObject implements ObjectInterface {
// objects do not spawn with metadata... reading additional info from the following int
}
- public EyeOfEnder(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public EyeOfEnder(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
- this.metaData = metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FallingBlock.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FallingBlock.java
index 7531e6cba..8f6238a97 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FallingBlock.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FallingBlock.java
@@ -27,10 +27,9 @@ public class FallingBlock extends EntityObject implements ObjectInterface {
block = Blocks.byLegacy(additionalInt & 0xFFF, additionalInt >> 12);
}
- public FallingBlock(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public FallingBlock(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
block = Blocks.byLegacy(additionalInt & 0xFFF, additionalInt >> 12);
- this.metaData = metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FallingDragonEgg.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FallingDragonEgg.java
index 43911e728..0c3ea1283 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FallingDragonEgg.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FallingDragonEgg.java
@@ -24,9 +24,8 @@ public class FallingDragonEgg extends EntityObject implements ObjectInterface {
// objects do not spawn with metadata... reading additional info from the following int
}
- public FallingDragonEgg(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public FallingDragonEgg(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
- this.metaData = metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FireBall.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FireBall.java
index 33abf94b8..af192bfd0 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FireBall.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FireBall.java
@@ -26,10 +26,9 @@ public class FireBall extends EntityObject implements ObjectInterface {
this.thrower = additionalInt;
}
- public FireBall(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public FireBall(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
this.thrower = additionalInt;
- this.metaData = metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FireCharge.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FireCharge.java
index 4f5e1cd25..92c2f3569 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FireCharge.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FireCharge.java
@@ -26,10 +26,9 @@ public class FireCharge extends EntityObject implements ObjectInterface {
this.thrower = additionalInt;
}
- public FireCharge(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public FireCharge(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
this.thrower = additionalInt;
- this.metaData = metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Firework.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Firework.java
index 7ee5ee4c7..2b5cce017 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Firework.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Firework.java
@@ -25,9 +25,8 @@ public class Firework extends EntityObject implements ObjectInterface {
// objects do not spawn with metadata... reading additional info from the following int
}
- public Firework(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public Firework(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
- this.metaData = (FireworkMetaData) metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FishingFloat.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FishingFloat.java
index 2aa3b9e0a..1df950a39 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FishingFloat.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/FishingFloat.java
@@ -26,10 +26,9 @@ public class FishingFloat extends EntityObject implements ObjectInterface {
this.owner = additionalInt;
}
- public FishingFloat(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public FishingFloat(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
this.owner = additionalInt;
- this.metaData = metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ItemFrame.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ItemFrame.java
index d0b6c4f52..fdfbbc007 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ItemFrame.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ItemFrame.java
@@ -27,10 +27,9 @@ public class ItemFrame extends EntityObject implements ObjectInterface {
direction = FrameDirection.byId(additionalInt);
}
- public ItemFrame(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public ItemFrame(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
direction = FrameDirection.byId(additionalInt);
- this.metaData = (ItemFrameMetaData) metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ItemStack.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ItemStack.java
index 6654e51a9..bb89bb417 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ItemStack.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ItemStack.java
@@ -25,9 +25,8 @@ public class ItemStack extends EntityObject implements ObjectInterface {
// objects do not spawn with metadata... reading additional info from the following int
}
- public ItemStack(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public ItemStack(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
- this.metaData = (ItemMetaData) metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/LeashKnot.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/LeashKnot.java
index 75c7f70a6..9d85f018b 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/LeashKnot.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/LeashKnot.java
@@ -24,9 +24,8 @@ public class LeashKnot extends EntityObject implements ObjectInterface {
// objects do not spawn with metadata... reading additional info from the following int
}
- public LeashKnot(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public LeashKnot(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
- this.metaData = metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Minecart.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Minecart.java
index f2cb26684..495dc4078 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Minecart.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Minecart.java
@@ -26,10 +26,9 @@ public class Minecart extends EntityObject implements ObjectInterface {
type = MinecartType.byType(additionalInt);
}
- public Minecart(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public Minecart(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
type = MinecartType.byType(additionalInt);
- this.metaData = (MinecartMetaData) metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/PrimedTNT.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/PrimedTNT.java
index 3f8818575..333108f01 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/PrimedTNT.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/PrimedTNT.java
@@ -24,9 +24,8 @@ public class PrimedTNT extends EntityObject implements ObjectInterface {
// objects do not spawn with metadata... reading additional info from the following int
}
- public PrimedTNT(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public PrimedTNT(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
- this.metaData = metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Snowball.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Snowball.java
index cf379f49f..e10cb0f86 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Snowball.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/Snowball.java
@@ -26,10 +26,9 @@ public class Snowball extends EntityObject implements ObjectInterface {
this.thrower = additionalInt;
}
- public Snowball(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public Snowball(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
this.thrower = additionalInt;
- this.metaData = metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ThrownExpBottle.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ThrownExpBottle.java
index 583e8fc82..f1efb118c 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ThrownExpBottle.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ThrownExpBottle.java
@@ -24,9 +24,8 @@ public class ThrownExpBottle extends EntityObject implements ObjectInterface {
// objects do not spawn with metadata... reading additional info from the following int
}
- public ThrownExpBottle(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public ThrownExpBottle(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
- this.metaData = metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ThrownPotion.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ThrownPotion.java
index 2dcd2645f..bde36cba7 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ThrownPotion.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/ThrownPotion.java
@@ -26,10 +26,9 @@ public class ThrownPotion extends EntityObject implements ObjectInterface {
this.potion = additionalInt;
}
- public ThrownPotion(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public ThrownPotion(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
this.potion = additionalInt;
- this.metaData = metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/WitherSkull.java b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/WitherSkull.java
index 14c2511c5..d1e0cb33a 100644
--- a/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/WitherSkull.java
+++ b/src/main/java/de/bixilon/minosoft/game/datatypes/entities/objects/WitherSkull.java
@@ -26,10 +26,9 @@ public class WitherSkull extends EntityObject implements ObjectInterface {
this.thrower = additionalInt;
}
- public WitherSkull(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity, EntityMetaData metaData) {
+ public WitherSkull(int id, Location location, short yaw, short pitch, int additionalInt, Velocity velocity) {
super(id, location, yaw, pitch, velocity);
this.thrower = additionalInt;
- this.metaData = metaData;
}
@Override
diff --git a/src/main/java/de/bixilon/minosoft/protocol/modding/channels/PluginChannelHandler.java b/src/main/java/de/bixilon/minosoft/protocol/modding/channels/PluginChannelHandler.java
index 1906fabec..38f8fe039 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/modding/channels/PluginChannelHandler.java
+++ b/src/main/java/de/bixilon/minosoft/protocol/modding/channels/PluginChannelHandler.java
@@ -17,6 +17,7 @@ import de.bixilon.minosoft.logging.Log;
import de.bixilon.minosoft.protocol.network.Connection;
import de.bixilon.minosoft.protocol.packets.serverbound.play.PacketPluginMessageSending;
import de.bixilon.minosoft.protocol.protocol.InByteBuffer;
+import de.bixilon.minosoft.protocol.protocol.OutByteBuffer;
import java.util.ArrayList;
import java.util.HashMap;
@@ -91,6 +92,10 @@ public class PluginChannelHandler {
connection.sendPacket(new PacketPluginMessageSending(channel, data));
}
+ public void sendRawData(String channel, OutByteBuffer buffer) {
+ connection.sendPacket(new PacketPluginMessageSending(channel, buffer.getOutBytes()));
+ }
+
public void registerServerChannel(String name) {
if (DefaultPluginChannels.byName(name) != null) {
// channel is a default channel, can not register
diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/Connection.java b/src/main/java/de/bixilon/minosoft/protocol/network/Connection.java
index eb471e0bb..cd520ed67 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/network/Connection.java
+++ b/src/main/java/de/bixilon/minosoft/protocol/network/Connection.java
@@ -26,10 +26,7 @@ import de.bixilon.minosoft.protocol.packets.serverbound.login.PacketLoginStart;
import de.bixilon.minosoft.protocol.packets.serverbound.play.PacketChatMessage;
import de.bixilon.minosoft.protocol.packets.serverbound.status.PacketStatusPing;
import de.bixilon.minosoft.protocol.packets.serverbound.status.PacketStatusRequest;
-import de.bixilon.minosoft.protocol.protocol.ConnectionReason;
-import de.bixilon.minosoft.protocol.protocol.ConnectionState;
-import de.bixilon.minosoft.protocol.protocol.PacketHandler;
-import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
+import de.bixilon.minosoft.protocol.protocol.*;
import java.util.ArrayList;
@@ -192,9 +189,21 @@ public class Connection {
public void registerDefaultChannels() {
// MC|Brand
getPluginChannelHandler().registerClientHandler(DefaultPluginChannels.MC_BRAND.getName(), (handler, buffer) -> {
- Log.info(String.format("Server is running %s on version %s", new String(buffer.readBytes(buffer.getBytesLeft())), getVersion().getName()));
+ String serverVersion;
+ String clientVersion = (Minosoft.getConfig().getBoolean(GameConfiguration.NETWORK_FAKE_CLIENT_BRAND) ? "vanilla" : "Minosoft");
+ OutByteBuffer toSend = new OutByteBuffer();
+ if (getVersion() == ProtocolVersion.VERSION_1_7_10) {
+ // no length prefix
+ serverVersion = new String(buffer.readBytes(buffer.getBytesLeft()));
+ toSend.writeBytes(clientVersion.getBytes());
+ } else {
+ // length prefix
+ serverVersion = buffer.readString();
+ toSend.writeString(clientVersion);
+ }
+ Log.info(String.format("Server is running %s, connected with %s", serverVersion, getVersion().getName()));
- getPluginChannelHandler().sendRawData(DefaultPluginChannels.MC_BRAND.getName(), (Minosoft.getConfig().getBoolean(GameConfiguration.NETWORK_FAKE_CLIENT_BRAND) ? "vanilla" : "Minosoft").getBytes());
+ getPluginChannelHandler().sendRawData(DefaultPluginChannels.MC_BRAND.getName(), toSend);
});
}
diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/Network.java b/src/main/java/de/bixilon/minosoft/protocol/network/Network.java
index ad4017aa7..78db95731 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/network/Network.java
+++ b/src/main/java/de/bixilon/minosoft/protocol/network/Network.java
@@ -155,7 +155,12 @@ public class Network {
outRawBuffer.writeBytes(data);
}
data = outRawBuffer.getOutBytes();
-
+ } else {
+ // append packet length
+ OutByteBuffer bufferWithLengthPrefix = new OutByteBuffer();
+ bufferWithLengthPrefix.writeVarInt(data.length);
+ bufferWithLengthPrefix.writeBytes(data);
+ data = bufferWithLengthPrefix.getOutBytes();
}
diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketPlayerAbilitiesReceiving.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketPlayerAbilitiesReceiving.java
index ce34e8daf..54af412a7 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketPlayerAbilitiesReceiving.java
+++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketPlayerAbilitiesReceiving.java
@@ -32,7 +32,7 @@ public class PacketPlayerAbilitiesReceiving implements ClientboundPacket {
@Override
public void read(InPacketBuffer buffer, ProtocolVersion v) {
switch (v) {
- case VERSION_1_7_10:
+ case VERSION_1_7_10: {
byte flags = buffer.readByte();
creative = BitByte.isBitSet(flags, 0);
flying = BitByte.isBitSet(flags, 1);
@@ -41,9 +41,17 @@ public class PacketPlayerAbilitiesReceiving implements ClientboundPacket {
flyingSpeed = buffer.readFloat();
walkingSpeed = buffer.readFloat();
break;
- case VERSION_1_8:
- //ToDo
+ }
+ case VERSION_1_8: {
+ byte flags = buffer.readByte();
+ godMode = BitByte.isBitSet(flags, 0);
+ flying = BitByte.isBitSet(flags, 1);
+ canFly = BitByte.isBitSet(flags, 2);
+ creative = BitByte.isBitSet(flags, 3);
+ flyingSpeed = buffer.readFloat();
+ // ToDo Entity Properties
break;
+ }
}
}
diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketScoreboardTeams.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketScoreboardTeams.java
index 775bb05a9..c4c0de3d2 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketScoreboardTeams.java
+++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketScoreboardTeams.java
@@ -44,15 +44,9 @@ public class PacketScoreboardTeams implements ClientboundPacket {
prefix = buffer.readString();
suffix = buffer.readString();
friendlyFire = ScoreboardFriendlyFire.byId(buffer.readByte());
- if (v.getVersion() >= ProtocolVersion.VERSION_1_8.getVersion()) {
- // color and nametag
- nameTagVisibility = ScoreboardNameTagVisibility.byName(buffer.readString());
- color = TextComponent.ChatAttributes.byColor(ChatColor.byId(buffer.readByte()));
- } else {
- // default values
- nameTagVisibility = ScoreboardNameTagVisibility.ALWAYS;
- color = TextComponent.ChatAttributes.WHITE;
- }
+ // default values
+ nameTagVisibility = ScoreboardNameTagVisibility.ALWAYS;
+ color = TextComponent.ChatAttributes.WHITE;
}
if (action == ScoreboardTeamAction.CREATE || action == ScoreboardTeamAction.PLAYER_ADD || action == ScoreboardTeamAction.PLAYER_REMOVE) {
short playerCount = buffer.readShort();
@@ -62,6 +56,25 @@ public class PacketScoreboardTeams implements ClientboundPacket {
}
}
break;
+ case VERSION_1_8:
+ name = buffer.readString();
+ action = ScoreboardTeamAction.byId(buffer.readByte());
+ if (action == ScoreboardTeamAction.CREATE || action == ScoreboardTeamAction.INFORMATION_UPDATE) {
+ displayName = buffer.readString();
+ prefix = buffer.readString();
+ suffix = buffer.readString();
+ friendlyFire = ScoreboardFriendlyFire.byId(buffer.readByte());
+ nameTagVisibility = ScoreboardNameTagVisibility.byName(buffer.readString());
+ color = TextComponent.ChatAttributes.byColor(ChatColor.byId(buffer.readByte()));
+ }
+ if (action == ScoreboardTeamAction.CREATE || action == ScoreboardTeamAction.PLAYER_ADD || action == ScoreboardTeamAction.PLAYER_REMOVE) {
+ int playerCount = buffer.readVarInt();
+ playerNames = new String[playerCount];
+ for (int i = 0; i < playerCount; i++) {
+ playerNames[i] = buffer.readString();
+ }
+ }
+ break;
}
}
diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketServerDifficulty.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketServerDifficulty.java
new file mode 100644
index 000000000..8ae85f317
--- /dev/null
+++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketServerDifficulty.java
@@ -0,0 +1,49 @@
+/*
+ * Codename Minosoft
+ * Copyright (C) 2020 Moritz Zwerger
+ *
+ * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with this program. If not, see .
+ *
+ * This software is not affiliated with Mojang AB, the original developer of Minecraft.
+ */
+
+package de.bixilon.minosoft.protocol.packets.clientbound.play;
+
+import de.bixilon.minosoft.game.datatypes.Difficulty;
+import de.bixilon.minosoft.logging.Log;
+import de.bixilon.minosoft.protocol.packets.ClientboundPacket;
+import de.bixilon.minosoft.protocol.protocol.InPacketBuffer;
+import de.bixilon.minosoft.protocol.protocol.PacketHandler;
+import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
+
+public class PacketServerDifficulty implements ClientboundPacket {
+ Difficulty difficulty;
+
+
+ @Override
+ public void read(InPacketBuffer buffer, ProtocolVersion v) {
+ switch (v) {
+ case VERSION_1_8:
+ difficulty = Difficulty.byId(buffer.readByte());
+ break;
+ }
+ }
+
+ @Override
+ public void log() {
+ Log.protocol(String.format("Received server difficulty (difficulty=%s)", difficulty.name()));
+ }
+
+ @Override
+ public void handle(PacketHandler h) {
+ h.handle(this);
+ }
+
+ public Difficulty getDifficulty() {
+ return difficulty;
+ }
+}
diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnObject.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnObject.java
index f6eac79e6..6686d746e 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnObject.java
+++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnObject.java
@@ -57,21 +57,26 @@ public class PacketSpawnObject implements ClientboundPacket {
public void read(InPacketBuffer buffer, ProtocolVersion v) {
switch (v) {
case VERSION_1_7_10:
+ case VERSION_1_8:
int entityId = buffer.readVarInt();
Objects type = Objects.byType(buffer.readByte());
Location location = new Location(buffer.readFixedPointNumberInteger(), buffer.readFixedPointNumberInteger(), buffer.readFixedPointNumberInteger());
short pitch = buffer.readAngle();
short yaw = buffer.readAngle();
+ int data = buffer.readInteger();
try {
if (v.getVersion() >= ProtocolVersion.VERSION_1_8.getVersion()) {
// velocity present AND metadata
- Velocity velocity = new Velocity(buffer.readShort(), buffer.readShort(), buffer.readShort());
- EntityMetaData metaData = getEntityData(object.getMetaDataClass(), buffer, v);
- object = type.getClazz().getConstructor(int.class, Location.class, short.class, short.class, int.class, Velocity.class, EntityMetaData.class).newInstance(entityId, location, yaw, pitch, buffer.readInteger(), velocity, metaData);
+
+ Velocity velocity = null;
+ if (data != 0) {
+ velocity = new Velocity(buffer.readShort(), buffer.readShort(), buffer.readShort());
+ }
+ object = type.getClazz().getConstructor(int.class, Location.class, short.class, short.class, int.class, Velocity.class).newInstance(entityId, location, yaw, pitch, data, velocity);
} else {
- object = type.getClazz().getConstructor(int.class, Location.class, short.class, short.class, int.class).newInstance(entityId, location, yaw, pitch, buffer.readInteger());
+ object = type.getClazz().getConstructor(int.class, Location.class, short.class, short.class, int.class).newInstance(entityId, location, yaw, pitch, data);
}
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
e.printStackTrace();
diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerAbilitiesSending.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerAbilitiesSending.java
index c538c73a1..9a527c172 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerAbilitiesSending.java
+++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerAbilitiesSending.java
@@ -44,13 +44,14 @@ public class PacketPlayerAbilitiesSending implements ServerboundPacket {
this.godMode = false;
this.flyingSpeed = 0.05F;
this.walkingSpeed = 0.1F;
+ log();
}
@Override
public OutPacketBuffer write(ProtocolVersion v) {
- OutPacketBuffer buffer = new OutPacketBuffer(v.getPacketCommand(Packets.Serverbound.PLAY_CLIENT_SETTINGS));
+ OutPacketBuffer buffer = new OutPacketBuffer(v.getPacketCommand(Packets.Serverbound.PLAY_PLAYER_ABILITIES));
switch (v) {
case VERSION_1_7_10:
case VERSION_1_8:
diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/OutPacketBuffer.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/OutPacketBuffer.java
index 2ce7f883b..0c11894f8 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/protocol/OutPacketBuffer.java
+++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/OutPacketBuffer.java
@@ -30,19 +30,15 @@ public class OutPacketBuffer extends OutByteBuffer {
@Override
public byte[] getOutBytes() {
- // ToDo: compression
List before = getBytes();
List after = new ArrayList<>();
- List last = new ArrayList<>();
writeVarInt(getCommand(), after); // second: command
after.addAll(before); // rest ist raw data
- writeVarInt(after.size(), last); // first var int: length
- last.addAll(after); // rest ist raw data
- byte[] ret = new byte[last.size()];
- for (int i = 0; i < last.size(); i++) {
- ret[i] = last.get(i);
+ byte[] ret = new byte[after.size()];
+ for (int i = 0; i < after.size(); i++) {
+ ret[i] = after.get(i);
}
return ret;
}
diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java
index bb5f1e02f..c7632c453 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java
+++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java
@@ -436,4 +436,7 @@ public class PacketHandler {
public void handle(PacketLoginSetCompression pkg) {
}
+
+ public void handle(PacketServerDifficulty pkg) {
+ }
}
diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.java
index 1073ec610..8ebf35ad2 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.java
+++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.java
@@ -113,6 +113,7 @@ public abstract class Protocol implements ProtocolInterface {
packetClassMapping.put(Packets.Clientbound.PLAY_TEAMS, PacketScoreboardTeams.class);
packetClassMapping.put(Packets.Clientbound.PLAY_DISPLAY_SCOREBOARD, PacketScoreboardDisplayScoreboard.class);
packetClassMapping.put(Packets.Clientbound.PLAY_MAP_DATA, PacketMapData.class);
+ packetClassMapping.put(Packets.Clientbound.PLAY_SERVER_DIFFICULTY, PacketServerDifficulty.class);
}
public static ProtocolVersion getLowestVersionSupported() {