Compare commits

...

2 Commits

Author SHA1 Message Date
LOOHP 38f3c41bf5
Update README.md 2025-09-30 22:26:02 +01:00
LOOHP d8d7307fcb Minecraft 1.21.9 2025-09-30 22:24:32 +01:00
17 changed files with 57906 additions and 40297 deletions

View File

@ -1,6 +1,6 @@
# Limbo # Limbo
[![Build Status](http://ci.loohpjames.com/job/Limbo/badge/icon)](http://ci.loohpjames.com/job/Limbo/) [![Build Status](http://ci.loohpjames.com/job/Limbo/badge/icon)](http://ci.loohpjames.com/job/Limbo/)
## Standalone Limbo Minecraft Server (Currently 1.21.8) ## Standalone Limbo Minecraft Server (Currently 1.21.9)
https://www.spigotmc.org/resources/82468/ https://www.spigotmc.org/resources/82468/
@ -18,7 +18,7 @@ IP: mc.loohpjames.com
``` ```
![Server Banner](https://api.loohpjames.com/serverbanner.png?ip=mc.loohpjames.com&width=918&name=IP:%20mc.loohpjames.com) ![Server Banner](https://api.loohpjames.com/serverbanner.png?ip=mc.loohpjames.com&width=918&name=IP:%20mc.loohpjames.com)
*** ***
### Downloads (1.17.1-1.21.8) ### Downloads (1.17.1-1.21.9)
- [Jenkins](http://ci.loohpjames.com/job/Limbo/) - [Jenkins](http://ci.loohpjames.com/job/Limbo/)
*** ***
### Offical Plugins ### Offical Plugins

View File

@ -136,7 +136,7 @@
</executions> </executions>
</plugin> </plugin>
</plugins> </plugins>
<finalName>${project.artifactId}-${project.version}-1.21.8</finalName> <finalName>${project.artifactId}-${project.version}-1.21.9</finalName>
</build> </build>
<profiles> <profiles>

View File

@ -132,8 +132,8 @@ public final class Limbo {
//=========================== //===========================
public final String SERVER_IMPLEMENTATION_VERSION = "1.21.8"; public final String SERVER_IMPLEMENTATION_VERSION = "1.21.9";
public final int SERVER_IMPLEMENTATION_PROTOCOL = 772; public final int SERVER_IMPLEMENTATION_PROTOCOL = 773;
public final String LIMBO_IMPLEMENTATION_VERSION; public final String LIMBO_IMPLEMENTATION_VERSION;
private final AtomicBoolean isRunning; private final AtomicBoolean isRunning;

View File

@ -0,0 +1,46 @@
/*
* This file is part of Limbo.
*
* Copyright (C) 2025. LoohpJames <jamesloohp@gmail.com>
* Copyright (C) 2025. Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.loohp.limbo.location;
import com.loohp.limbo.world.BlockPosition;
import com.loohp.limbo.world.World;
public class GlobalPos {
private final World world;
private final BlockPosition pos;
public GlobalPos(World world, BlockPosition pos) {
this.world = world;
this.pos = pos;
}
public World getWorld() {
return world;
}
public BlockPosition getPos() {
return pos;
}
public static GlobalPos from(Location location) {
return new GlobalPos(location.getWorld(), BlockPosition.from(location));
}
}

View File

@ -40,8 +40,10 @@ import com.loohp.limbo.file.ServerProperties;
import com.loohp.limbo.inventory.AnvilInventory; import com.loohp.limbo.inventory.AnvilInventory;
import com.loohp.limbo.inventory.Inventory; import com.loohp.limbo.inventory.Inventory;
import com.loohp.limbo.inventory.ItemStack; import com.loohp.limbo.inventory.ItemStack;
import com.loohp.limbo.location.GlobalPos;
import com.loohp.limbo.location.Location; import com.loohp.limbo.location.Location;
import com.loohp.limbo.network.protocol.packets.ClientboundFinishConfigurationPacket; import com.loohp.limbo.network.protocol.packets.ClientboundFinishConfigurationPacket;
import com.loohp.limbo.network.protocol.packets.ClientboundLevelChunkWithLightPacket;
import com.loohp.limbo.network.protocol.packets.ClientboundRegistryDataPacket; import com.loohp.limbo.network.protocol.packets.ClientboundRegistryDataPacket;
import com.loohp.limbo.network.protocol.packets.PacketHandshakingIn; import com.loohp.limbo.network.protocol.packets.PacketHandshakingIn;
import com.loohp.limbo.network.protocol.packets.PacketIn; import com.loohp.limbo.network.protocol.packets.PacketIn;
@ -609,7 +611,7 @@ public class ClientConnection extends Thread {
sendPacket(declare); sendPacket(declare);
} }
PacketPlayOutSpawnPosition spawnPos = new PacketPlayOutSpawnPosition(BlockPosition.from(worldSpawn), worldSpawn.getPitch()); PacketPlayOutSpawnPosition spawnPos = new PacketPlayOutSpawnPosition(GlobalPos.from(worldSpawn), worldSpawn.getYaw(), worldSpawn.getPitch());
sendPacket(spawnPos); sendPacket(spawnPos);
PacketPlayOutPositionAndLook positionLook = new PacketPlayOutPositionAndLook(worldSpawn.getX(), worldSpawn.getY(), worldSpawn.getZ(), worldSpawn.getYaw(), worldSpawn.getPitch(), 1); PacketPlayOutPositionAndLook positionLook = new PacketPlayOutPositionAndLook(worldSpawn.getX(), worldSpawn.getY(), worldSpawn.getZ(), worldSpawn.getYaw(), worldSpawn.getPitch(), 1);

View File

@ -20,6 +20,7 @@
package com.loohp.limbo.network.protocol.packets; package com.loohp.limbo.network.protocol.packets;
import com.loohp.limbo.entity.EntityType; import com.loohp.limbo.entity.EntityType;
import com.loohp.limbo.location.Vector;
import com.loohp.limbo.registry.PacketRegistry; import com.loohp.limbo.registry.PacketRegistry;
import com.loohp.limbo.utils.DataTypeIO; import com.loohp.limbo.utils.DataTypeIO;
@ -40,11 +41,9 @@ public class PacketPlayOutSpawnEntity extends PacketOut {
private final float yaw; private final float yaw;
private final float headYaw; private final float headYaw;
private final int data; private final int data;
private final short velocityX; private final Vector movement;
private final short velocityY;
private final short velocityZ;
public PacketPlayOutSpawnEntity(int entityId, UUID uuid, EntityType type, double x, double y, double z, float pitch, float yaw, float headYaw, int data, short velocityX, short velocityY, short velocityZ) { public PacketPlayOutSpawnEntity(int entityId, UUID uuid, EntityType type, double x, double y, double z, float pitch, float yaw, float headYaw, int data, Vector movement) {
this.entityId = entityId; this.entityId = entityId;
this.uuid = uuid; this.uuid = uuid;
this.type = type; this.type = type;
@ -55,9 +54,7 @@ public class PacketPlayOutSpawnEntity extends PacketOut {
this.yaw = yaw; this.yaw = yaw;
this.headYaw = headYaw; this.headYaw = headYaw;
this.data = data; this.data = data;
this.velocityX = velocityX; this.movement = movement.clone();
this.velocityY = velocityY;
this.velocityZ = velocityZ;
} }
public int getEntityId() { public int getEntityId() {
@ -100,16 +97,8 @@ public class PacketPlayOutSpawnEntity extends PacketOut {
return data; return data;
} }
public short getVelocityX() { public Vector getMovement() {
return velocityX; return movement.clone();
}
public short getVelocityY() {
return velocityY;
}
public short getVelocityZ() {
return velocityZ;
} }
@Override @Override
@ -124,13 +113,11 @@ public class PacketPlayOutSpawnEntity extends PacketOut {
output.writeDouble(x); output.writeDouble(x);
output.writeDouble(y); output.writeDouble(y);
output.writeDouble(z); output.writeDouble(z);
DataTypeIO.writeLpVec3(output, movement);
output.writeByte((byte) (int) (pitch * 256.0F / 360.0F)); output.writeByte((byte) (int) (pitch * 256.0F / 360.0F));
output.writeByte((byte) (int) (yaw * 256.0F / 360.0F)); output.writeByte((byte) (int) (yaw * 256.0F / 360.0F));
output.writeByte((byte) (int) (headYaw * 256.0F / 360.0F)); output.writeByte((byte) (int) (headYaw * 256.0F / 360.0F));
DataTypeIO.writeVarInt(output, data); DataTypeIO.writeVarInt(output, data);
output.writeShort(velocityX * 8000);
output.writeShort(velocityY * 8000);
output.writeShort(velocityZ * 8000);
return buffer.toByteArray(); return buffer.toByteArray();
} }

View File

@ -19,30 +19,38 @@
package com.loohp.limbo.network.protocol.packets; package com.loohp.limbo.network.protocol.packets;
import com.loohp.limbo.location.GlobalPos;
import com.loohp.limbo.registry.PacketRegistry; import com.loohp.limbo.registry.PacketRegistry;
import com.loohp.limbo.utils.DataTypeIO; import com.loohp.limbo.utils.DataTypeIO;
import com.loohp.limbo.world.BlockPosition; import net.kyori.adventure.key.Key;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class PacketPlayOutSpawnPosition extends PacketOut { public class PacketPlayOutSpawnPosition extends PacketOut {
private final BlockPosition position; private final GlobalPos position;
private final float angle; private final float yaw;
private final float pitch;
public PacketPlayOutSpawnPosition(BlockPosition position, float angle) { public PacketPlayOutSpawnPosition(GlobalPos position, float yaw, float pitch) {
this.position = position; this.position = position;
this.angle = angle; this.yaw = yaw;
this.pitch = pitch;
} }
public BlockPosition getPosition() { public GlobalPos getPosition() {
return position; return position;
} }
public float getAngle() { public float getYaw() {
return angle; return yaw;
}
public float getPitch() {
return pitch;
} }
public byte[] serializePacket() throws IOException { public byte[] serializePacket() throws IOException {
@ -50,8 +58,10 @@ public class PacketPlayOutSpawnPosition extends PacketOut {
DataOutputStream output = new DataOutputStream(buffer); DataOutputStream output = new DataOutputStream(buffer);
output.writeByte(PacketRegistry.getPacketId(getClass())); output.writeByte(PacketRegistry.getPacketId(getClass()));
DataTypeIO.writeBlockPosition(output, position); DataTypeIO.writeString(output, Key.key(position.getWorld().getName()).toString(), StandardCharsets.UTF_8);
output.writeFloat(angle); DataTypeIO.writeBlockPosition(output, position.getPos());
output.writeFloat(yaw);
output.writeFloat(pitch);
return buffer.toByteArray(); return buffer.toByteArray();
} }

View File

@ -97,14 +97,14 @@ public class Player extends LivingEntity implements CommandSender, InventoryHold
protected final InventoryView inventoryView; protected final InventoryView inventoryView;
private final AtomicInteger containerIdCounter; private final AtomicInteger containerIdCounter;
@WatchableField(MetadataIndex = 15, WatchableObjectType = WatchableObjectType.FLOAT) @WatchableField(MetadataIndex = 15, WatchableObjectType = WatchableObjectType.BYTE)
protected float additionalHearts = 0.0F;
@WatchableField(MetadataIndex = 16, WatchableObjectType = WatchableObjectType.VARINT)
protected int score = 0;
@WatchableField(MetadataIndex = 17, WatchableObjectType = WatchableObjectType.BYTE)
protected byte skinLayers = 0;
@WatchableField(MetadataIndex = 18, WatchableObjectType = WatchableObjectType.BYTE)
protected byte mainHand = 1; protected byte mainHand = 1;
@WatchableField(MetadataIndex = 16, WatchableObjectType = WatchableObjectType.BYTE)
protected byte skinLayers = 0;
@WatchableField(MetadataIndex = 17, WatchableObjectType = WatchableObjectType.FLOAT)
protected float additionalHearts = 0.0F;
@WatchableField(MetadataIndex = 18, WatchableObjectType = WatchableObjectType.VARINT)
protected int score = 0;
//@WatchableField(MetadataIndex = 19, WatchableObjectType = WatchableObjectType.NBT) //@WatchableField(MetadataIndex = 19, WatchableObjectType = WatchableObjectType.NBT)
//protected Entity leftShoulder = null; //protected Entity leftShoulder = null;
//@WatchableField(MetadataIndex = 20, WatchableObjectType = WatchableObjectType.NBT) //@WatchableField(MetadataIndex = 20, WatchableObjectType = WatchableObjectType.NBT)

View File

@ -22,6 +22,7 @@ package com.loohp.limbo.player;
import com.loohp.limbo.Limbo; import com.loohp.limbo.Limbo;
import com.loohp.limbo.entity.Entity; import com.loohp.limbo.entity.Entity;
import com.loohp.limbo.location.Location; import com.loohp.limbo.location.Location;
import com.loohp.limbo.location.Vector;
import com.loohp.limbo.network.ClientConnection; import com.loohp.limbo.network.ClientConnection;
import com.loohp.limbo.network.protocol.packets.ClientboundChunkBatchFinishedPacket; import com.loohp.limbo.network.protocol.packets.ClientboundChunkBatchFinishedPacket;
import com.loohp.limbo.network.protocol.packets.ClientboundChunkBatchStartPacket; import com.loohp.limbo.network.protocol.packets.ClientboundChunkBatchStartPacket;
@ -81,7 +82,7 @@ public class PlayerInteractManager {
Set<Entity> entitiesInRange = player.getWorld().getEntities().stream().filter(each -> each.getLocation().distanceSquared(location) < viewDistanceBlocks * viewDistanceBlocks).collect(Collectors.toSet()); Set<Entity> entitiesInRange = player.getWorld().getEntities().stream().filter(each -> each.getLocation().distanceSquared(location) < viewDistanceBlocks * viewDistanceBlocks).collect(Collectors.toSet());
for (Entity entity : entitiesInRange) { for (Entity entity : entitiesInRange) {
if (!entities.contains(entity)) { if (!entities.contains(entity)) {
PacketPlayOutSpawnEntity packet = new PacketPlayOutSpawnEntity(entity.getEntityId(), entity.getUniqueId(), entity.getType(), entity.getX(), entity.getY(), entity.getZ(), entity.getYaw(), entity.getPitch(), entity.getPitch(), 0, (short) 0, (short) 0, (short) 0); PacketPlayOutSpawnEntity packet = new PacketPlayOutSpawnEntity(entity.getEntityId(), entity.getUniqueId(), entity.getType(), entity.getX(), entity.getY(), entity.getZ(), entity.getYaw(), entity.getPitch(), entity.getPitch(), 0, new Vector(0, 0, 0));
player.clientConnection.sendPacket(packet); player.clientConnection.sendPacket(packet);
PacketPlayOutEntityMetadata meta = new PacketPlayOutEntityMetadata(entity); PacketPlayOutEntityMetadata meta = new PacketPlayOutEntityMetadata(entity);

View File

@ -351,4 +351,38 @@ public class DataTypeIO {
} }
} }
private static double sanitize(double d0) {
return Double.isNaN(d0) ? 0.0D : Math.min(Math.max(d0, -1.7179869183E10D), 1.7179869183E10D);
}
private static long pack(double d0) {
return Math.round((d0 * 0.5D + 0.5D) * 32766.0D);
}
public static void writeLpVec3(DataOutputStream out, Vector vec3d) throws IOException {
double d0 = sanitize(vec3d.getX());
double d1 = sanitize(vec3d.getY());
double d2 = sanitize(vec3d.getZ());
double d3 = Math.max(Math.abs(d0), Math.max(Math.abs(d1), Math.abs(d2)));
if (d3 < 3.051944088384301E-5D) {
out.writeByte(0);
} else {
long i = (long) Math.ceil(d3);
boolean flag = (i & 3L) != i;
long j = flag ? i & 3L | 4L : i;
long k = pack(d0 / (double) i) << 3;
long l = pack(d1 / (double) i) << 18;
long i1 = pack(d2 / (double) i) << 33;
long j1 = j | k | l | i1;
out.writeByte((byte) ((int) j1));
out.writeByte((byte) ((int) (j1 >> 8)));
out.writeInt((int) (j1 >> 16));
if (flag) {
writeVarInt(out, (int) (i >> 2));
}
}
}
} }

View File

@ -94,7 +94,7 @@ public class MojangAPIUtils {
connection.addRequestProperty("Cache-Control", "no-cache, no-store, must-revalidate"); connection.addRequestProperty("Cache-Control", "no-cache, no-store, must-revalidate");
connection.addRequestProperty("Pragma", "no-cache"); connection.addRequestProperty("Pragma", "no-cache");
if (connection.getResponseCode() == HttpsURLConnection.HTTP_OK) { if (connection.getResponseCode() == HttpsURLConnection.HTTP_OK) {
String reply = String.join("", new BufferedReader(new InputStreamReader(connection.getInputStream())).lines().collect(Collectors.toList())).replace(" ", ""); String reply = new BufferedReader(new InputStreamReader(connection.getInputStream())).lines().collect(Collectors.joining("")).replace(" ", "");
String skin = reply.split("\"value\":\"")[1].split("\"")[0]; String skin = reply.split("\"value\":\"")[1].split("\"")[0];
String signature = reply.split("\"signature\":\"")[1].split("\"")[0]; String signature = reply.split("\"signature\":\"")[1].split("\"")[0];
return new SkinResponse(skin, signature); return new SkinResponse(skin, signature);

View File

@ -1,22 +1,18 @@
{ {
"ambient_light": 0.0, "ambient_light": 0.25,
"bed_works": false, "bed_works": false,
"coordinate_scale": 1.0, "coordinate_scale": 1.0,
"effects": "minecraft:the_end", "effects": "minecraft:the_end",
"fixed_time": 6000, "fixed_time": 6000,
"has_ceiling": false, "has_ceiling": false,
"has_raids": true, "has_raids": true,
"has_skylight": false, "has_skylight": true,
"height": 256, "height": 256,
"infiniburn": "#minecraft:infiniburn_end", "infiniburn": "#minecraft:infiniburn_end",
"logical_height": 256, "logical_height": 256,
"min_y": 0, "min_y": 0,
"monster_spawn_block_light_limit": 0, "monster_spawn_block_light_limit": 0,
"monster_spawn_light_level": { "monster_spawn_light_level": 15,
"type": "minecraft:uniform",
"max_inclusive": 7,
"min_inclusive": 0
},
"natural": false, "natural": false,
"piglin_safe": false, "piglin_safe": false,
"respawn_anchor_works": false, "respawn_anchor_works": false,

View File

@ -74,7 +74,6 @@
"minecraft:mushroom_island_vegetation", "minecraft:mushroom_island_vegetation",
"minecraft:brown_mushroom_taiga", "minecraft:brown_mushroom_taiga",
"minecraft:red_mushroom_taiga", "minecraft:red_mushroom_taiga",
"minecraft:patch_pumpkin",
"minecraft:patch_sugar_cane", "minecraft:patch_sugar_cane",
"minecraft:patch_firefly_bush_near_water" "minecraft:patch_firefly_bush_near_water"
], ],

File diff suppressed because it is too large Load Diff

View File

@ -4,6 +4,9 @@
"minecraft:clear_dialog": { "minecraft:clear_dialog": {
"protocol_id": 17 "protocol_id": 17
}, },
"minecraft:code_of_conduct": {
"protocol_id": 19
},
"minecraft:cookie_request": { "minecraft:cookie_request": {
"protocol_id": 0 "protocol_id": 0
}, },
@ -60,6 +63,9 @@
} }
}, },
"serverbound": { "serverbound": {
"minecraft:accept_code_of_conduct": {
"protocol_id": 9
},
"minecraft:client_information": { "minecraft:client_information": {
"protocol_id": 0 "protocol_id": 0
}, },
@ -180,7 +186,7 @@
"protocol_id": 13 "protocol_id": 13
}, },
"minecraft:clear_dialog": { "minecraft:clear_dialog": {
"protocol_id": 132 "protocol_id": 137
}, },
"minecraft:clear_titles": { "minecraft:clear_titles": {
"protocol_id": 14 "protocol_id": 14
@ -216,328 +222,343 @@
"protocol_id": 24 "protocol_id": 24
}, },
"minecraft:custom_report_details": { "minecraft:custom_report_details": {
"protocol_id": 129 "protocol_id": 134
}, },
"minecraft:damage_event": { "minecraft:damage_event": {
"protocol_id": 25 "protocol_id": 25
}, },
"minecraft:debug_sample": { "minecraft:debug/block_value": {
"protocol_id": 26 "protocol_id": 26
}, },
"minecraft:delete_chat": { "minecraft:debug/chunk_value": {
"protocol_id": 27 "protocol_id": 27
}, },
"minecraft:disconnect": { "minecraft:debug/entity_value": {
"protocol_id": 28 "protocol_id": 28
}, },
"minecraft:disguised_chat": { "minecraft:debug/event": {
"protocol_id": 29 "protocol_id": 29
}, },
"minecraft:entity_event": { "minecraft:debug_sample": {
"protocol_id": 30 "protocol_id": 30
}, },
"minecraft:entity_position_sync": { "minecraft:delete_chat": {
"protocol_id": 31 "protocol_id": 31
}, },
"minecraft:explode": { "minecraft:disconnect": {
"protocol_id": 32 "protocol_id": 32
}, },
"minecraft:forget_level_chunk": { "minecraft:disguised_chat": {
"protocol_id": 33 "protocol_id": 33
}, },
"minecraft:game_event": { "minecraft:entity_event": {
"protocol_id": 34 "protocol_id": 34
}, },
"minecraft:horse_screen_open": { "minecraft:entity_position_sync": {
"protocol_id": 35 "protocol_id": 35
}, },
"minecraft:hurt_animation": { "minecraft:explode": {
"protocol_id": 36 "protocol_id": 36
}, },
"minecraft:initialize_border": { "minecraft:forget_level_chunk": {
"protocol_id": 37 "protocol_id": 37
}, },
"minecraft:keep_alive": { "minecraft:game_event": {
"protocol_id": 38 "protocol_id": 38
}, },
"minecraft:level_chunk_with_light": { "minecraft:game_test_highlight_pos": {
"protocol_id": 39 "protocol_id": 39
}, },
"minecraft:level_event": { "minecraft:horse_screen_open": {
"protocol_id": 40 "protocol_id": 40
}, },
"minecraft:level_particles": { "minecraft:hurt_animation": {
"protocol_id": 41 "protocol_id": 41
}, },
"minecraft:light_update": { "minecraft:initialize_border": {
"protocol_id": 42 "protocol_id": 42
}, },
"minecraft:login": { "minecraft:keep_alive": {
"protocol_id": 43 "protocol_id": 43
}, },
"minecraft:map_item_data": { "minecraft:level_chunk_with_light": {
"protocol_id": 44 "protocol_id": 44
}, },
"minecraft:merchant_offers": { "minecraft:level_event": {
"protocol_id": 45 "protocol_id": 45
}, },
"minecraft:move_entity_pos": { "minecraft:level_particles": {
"protocol_id": 46 "protocol_id": 46
}, },
"minecraft:move_entity_pos_rot": { "minecraft:light_update": {
"protocol_id": 47 "protocol_id": 47
}, },
"minecraft:move_entity_rot": { "minecraft:login": {
"protocol_id": 49
},
"minecraft:move_minecart_along_track": {
"protocol_id": 48 "protocol_id": 48
}, },
"minecraft:move_vehicle": { "minecraft:map_item_data": {
"protocol_id": 49
},
"minecraft:merchant_offers": {
"protocol_id": 50 "protocol_id": 50
}, },
"minecraft:open_book": { "minecraft:move_entity_pos": {
"protocol_id": 51 "protocol_id": 51
}, },
"minecraft:open_screen": { "minecraft:move_entity_pos_rot": {
"protocol_id": 52 "protocol_id": 52
}, },
"minecraft:open_sign_editor": { "minecraft:move_entity_rot": {
"protocol_id": 53
},
"minecraft:ping": {
"protocol_id": 54 "protocol_id": 54
}, },
"minecraft:place_ghost_recipe": { "minecraft:move_minecart_along_track": {
"protocol_id": 56 "protocol_id": 53
}, },
"minecraft:player_abilities": { "minecraft:move_vehicle": {
"protocol_id": 57
},
"minecraft:player_chat": {
"protocol_id": 58
},
"minecraft:player_combat_end": {
"protocol_id": 59
},
"minecraft:player_combat_enter": {
"protocol_id": 60
},
"minecraft:player_combat_kill": {
"protocol_id": 61
},
"minecraft:player_info_remove": {
"protocol_id": 62
},
"minecraft:player_info_update": {
"protocol_id": 63
},
"minecraft:player_look_at": {
"protocol_id": 64
},
"minecraft:player_position": {
"protocol_id": 65
},
"minecraft:player_rotation": {
"protocol_id": 66
},
"minecraft:pong_response": {
"protocol_id": 55 "protocol_id": 55
}, },
"minecraft:projectile_power": { "minecraft:open_book": {
"protocol_id": 128 "protocol_id": 56
}, },
"minecraft:recipe_book_add": { "minecraft:open_screen": {
"protocol_id": 57
},
"minecraft:open_sign_editor": {
"protocol_id": 58
},
"minecraft:ping": {
"protocol_id": 59
},
"minecraft:place_ghost_recipe": {
"protocol_id": 61
},
"minecraft:player_abilities": {
"protocol_id": 62
},
"minecraft:player_chat": {
"protocol_id": 63
},
"minecraft:player_combat_end": {
"protocol_id": 64
},
"minecraft:player_combat_enter": {
"protocol_id": 65
},
"minecraft:player_combat_kill": {
"protocol_id": 66
},
"minecraft:player_info_remove": {
"protocol_id": 67 "protocol_id": 67
}, },
"minecraft:recipe_book_remove": { "minecraft:player_info_update": {
"protocol_id": 68 "protocol_id": 68
}, },
"minecraft:recipe_book_settings": { "minecraft:player_look_at": {
"protocol_id": 69 "protocol_id": 69
}, },
"minecraft:remove_entities": { "minecraft:player_position": {
"protocol_id": 70 "protocol_id": 70
}, },
"minecraft:remove_mob_effect": { "minecraft:player_rotation": {
"protocol_id": 71 "protocol_id": 71
}, },
"minecraft:reset_score": { "minecraft:pong_response": {
"protocol_id": 72 "protocol_id": 60
}, },
"minecraft:resource_pack_pop": { "minecraft:projectile_power": {
"protocol_id": 73
},
"minecraft:resource_pack_push": {
"protocol_id": 74
},
"minecraft:respawn": {
"protocol_id": 75
},
"minecraft:rotate_head": {
"protocol_id": 76
},
"minecraft:section_blocks_update": {
"protocol_id": 77
},
"minecraft:select_advancements_tab": {
"protocol_id": 78
},
"minecraft:server_data": {
"protocol_id": 79
},
"minecraft:server_links": {
"protocol_id": 130
},
"minecraft:set_action_bar_text": {
"protocol_id": 80
},
"minecraft:set_border_center": {
"protocol_id": 81
},
"minecraft:set_border_lerp_size": {
"protocol_id": 82
},
"minecraft:set_border_size": {
"protocol_id": 83
},
"minecraft:set_border_warning_delay": {
"protocol_id": 84
},
"minecraft:set_border_warning_distance": {
"protocol_id": 85
},
"minecraft:set_camera": {
"protocol_id": 86
},
"minecraft:set_chunk_cache_center": {
"protocol_id": 87
},
"minecraft:set_chunk_cache_radius": {
"protocol_id": 88
},
"minecraft:set_cursor_item": {
"protocol_id": 89
},
"minecraft:set_default_spawn_position": {
"protocol_id": 90
},
"minecraft:set_display_objective": {
"protocol_id": 91
},
"minecraft:set_entity_data": {
"protocol_id": 92
},
"minecraft:set_entity_link": {
"protocol_id": 93
},
"minecraft:set_entity_motion": {
"protocol_id": 94
},
"minecraft:set_equipment": {
"protocol_id": 95
},
"minecraft:set_experience": {
"protocol_id": 96
},
"minecraft:set_health": {
"protocol_id": 97
},
"minecraft:set_held_slot": {
"protocol_id": 98
},
"minecraft:set_objective": {
"protocol_id": 99
},
"minecraft:set_passengers": {
"protocol_id": 100
},
"minecraft:set_player_inventory": {
"protocol_id": 101
},
"minecraft:set_player_team": {
"protocol_id": 102
},
"minecraft:set_score": {
"protocol_id": 103
},
"minecraft:set_simulation_distance": {
"protocol_id": 104
},
"minecraft:set_subtitle_text": {
"protocol_id": 105
},
"minecraft:set_time": {
"protocol_id": 106
},
"minecraft:set_title_text": {
"protocol_id": 107
},
"minecraft:set_titles_animation": {
"protocol_id": 108
},
"minecraft:show_dialog": {
"protocol_id": 133 "protocol_id": 133
}, },
"minecraft:sound": { "minecraft:recipe_book_add": {
"protocol_id": 110 "protocol_id": 72
}, },
"minecraft:sound_entity": { "minecraft:recipe_book_remove": {
"protocol_id": 73
},
"minecraft:recipe_book_settings": {
"protocol_id": 74
},
"minecraft:remove_entities": {
"protocol_id": 75
},
"minecraft:remove_mob_effect": {
"protocol_id": 76
},
"minecraft:reset_score": {
"protocol_id": 77
},
"minecraft:resource_pack_pop": {
"protocol_id": 78
},
"minecraft:resource_pack_push": {
"protocol_id": 79
},
"minecraft:respawn": {
"protocol_id": 80
},
"minecraft:rotate_head": {
"protocol_id": 81
},
"minecraft:section_blocks_update": {
"protocol_id": 82
},
"minecraft:select_advancements_tab": {
"protocol_id": 83
},
"minecraft:server_data": {
"protocol_id": 84
},
"minecraft:server_links": {
"protocol_id": 135
},
"minecraft:set_action_bar_text": {
"protocol_id": 85
},
"minecraft:set_border_center": {
"protocol_id": 86
},
"minecraft:set_border_lerp_size": {
"protocol_id": 87
},
"minecraft:set_border_size": {
"protocol_id": 88
},
"minecraft:set_border_warning_delay": {
"protocol_id": 89
},
"minecraft:set_border_warning_distance": {
"protocol_id": 90
},
"minecraft:set_camera": {
"protocol_id": 91
},
"minecraft:set_chunk_cache_center": {
"protocol_id": 92
},
"minecraft:set_chunk_cache_radius": {
"protocol_id": 93
},
"minecraft:set_cursor_item": {
"protocol_id": 94
},
"minecraft:set_default_spawn_position": {
"protocol_id": 95
},
"minecraft:set_display_objective": {
"protocol_id": 96
},
"minecraft:set_entity_data": {
"protocol_id": 97
},
"minecraft:set_entity_link": {
"protocol_id": 98
},
"minecraft:set_entity_motion": {
"protocol_id": 99
},
"minecraft:set_equipment": {
"protocol_id": 100
},
"minecraft:set_experience": {
"protocol_id": 101
},
"minecraft:set_health": {
"protocol_id": 102
},
"minecraft:set_held_slot": {
"protocol_id": 103
},
"minecraft:set_objective": {
"protocol_id": 104
},
"minecraft:set_passengers": {
"protocol_id": 105
},
"minecraft:set_player_inventory": {
"protocol_id": 106
},
"minecraft:set_player_team": {
"protocol_id": 107
},
"minecraft:set_score": {
"protocol_id": 108
},
"minecraft:set_simulation_distance": {
"protocol_id": 109 "protocol_id": 109
}, },
"minecraft:start_configuration": { "minecraft:set_subtitle_text": {
"protocol_id": 110
},
"minecraft:set_time": {
"protocol_id": 111 "protocol_id": 111
}, },
"minecraft:stop_sound": { "minecraft:set_title_text": {
"protocol_id": 112 "protocol_id": 112
}, },
"minecraft:store_cookie": { "minecraft:set_titles_animation": {
"protocol_id": 113 "protocol_id": 113
}, },
"minecraft:system_chat": { "minecraft:show_dialog": {
"protocol_id": 114 "protocol_id": 138
}, },
"minecraft:tab_list": { "minecraft:sound": {
"protocol_id": 115 "protocol_id": 115
}, },
"minecraft:tag_query": { "minecraft:sound_entity": {
"protocol_id": 114
},
"minecraft:start_configuration": {
"protocol_id": 116 "protocol_id": 116
}, },
"minecraft:take_item_entity": { "minecraft:stop_sound": {
"protocol_id": 117 "protocol_id": 117
}, },
"minecraft:teleport_entity": { "minecraft:store_cookie": {
"protocol_id": 118 "protocol_id": 118
}, },
"minecraft:test_instance_block_status": { "minecraft:system_chat": {
"protocol_id": 119 "protocol_id": 119
}, },
"minecraft:ticking_state": { "minecraft:tab_list": {
"protocol_id": 120 "protocol_id": 120
}, },
"minecraft:ticking_step": { "minecraft:tag_query": {
"protocol_id": 121 "protocol_id": 121
}, },
"minecraft:transfer": { "minecraft:take_item_entity": {
"protocol_id": 122 "protocol_id": 122
}, },
"minecraft:update_advancements": { "minecraft:teleport_entity": {
"protocol_id": 123 "protocol_id": 123
}, },
"minecraft:update_attributes": { "minecraft:test_instance_block_status": {
"protocol_id": 124 "protocol_id": 124
}, },
"minecraft:update_mob_effect": { "minecraft:ticking_state": {
"protocol_id": 125 "protocol_id": 125
}, },
"minecraft:update_recipes": { "minecraft:ticking_step": {
"protocol_id": 126 "protocol_id": 126
}, },
"minecraft:update_tags": { "minecraft:transfer": {
"protocol_id": 127 "protocol_id": 127
}, },
"minecraft:waypoint": { "minecraft:update_advancements": {
"protocol_id": 128
},
"minecraft:update_attributes": {
"protocol_id": 129
},
"minecraft:update_mob_effect": {
"protocol_id": 130
},
"minecraft:update_recipes": {
"protocol_id": 131 "protocol_id": 131
},
"minecraft:update_tags": {
"protocol_id": 132
},
"minecraft:waypoint": {
"protocol_id": 136
} }
}, },
"serverbound": { "serverbound": {
@ -610,7 +631,7 @@
"minecraft:custom_payload": { "minecraft:custom_payload": {
"protocol_id": 21 "protocol_id": 21
}, },
"minecraft:debug_sample_subscription": { "minecraft:debug_subscription_request": {
"protocol_id": 22 "protocol_id": 22
}, },
"minecraft:edit_book": { "minecraft:edit_book": {

File diff suppressed because it is too large Load Diff