1.12.2: all remaining packets

This commit is contained in:
Bixilon 2020-07-07 21:28:41 +02:00
parent db8b603eed
commit ab4bf090b3
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
8 changed files with 240 additions and 6 deletions

View File

@ -20,7 +20,7 @@ import de.bixilon.minosoft.protocol.packets.ClientboundPacket;
import de.bixilon.minosoft.protocol.protocol.InPacketBuffer;
import de.bixilon.minosoft.protocol.protocol.PacketHandler;
public class PacketChatMessage implements ClientboundPacket {
public class PacketChatMessageReceiving implements ClientboundPacket {
TextComponent c;
TextPosition position;

View File

@ -0,0 +1,81 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.protocol.packets.serverbound.play;
import de.bixilon.minosoft.logging.Log;
import de.bixilon.minosoft.protocol.packets.ServerboundPacket;
import de.bixilon.minosoft.protocol.protocol.OutPacketBuffer;
import de.bixilon.minosoft.protocol.protocol.Packets;
import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
public class PacketAdvancementTab implements ServerboundPacket {
final AdvancementTabStatus action;
final String tabToOpen;
public PacketAdvancementTab(AdvancementTabStatus action) {
this.action = action;
tabToOpen = null;
log();
}
public PacketAdvancementTab(AdvancementTabStatus action, String tabToOpen) {
this.action = action;
this.tabToOpen = tabToOpen;
log();
}
@Override
public OutPacketBuffer write(ProtocolVersion version) {
OutPacketBuffer buffer = new OutPacketBuffer(version, version.getPacketCommand(Packets.Serverbound.PLAY_ADVANCEMENT_TAB));
switch (version) {
case VERSION_1_12_2:
buffer.writeVarInt(action.getId());
if (action == AdvancementTabStatus.OPEN_TAB) {
buffer.writeString(tabToOpen);
}
}
return buffer;
}
@Override
public void log() {
Log.protocol(String.format("Sending advancement tab packet (action=%s, tabToOpen=%s)", action.name(), tabToOpen));
}
public enum AdvancementTabStatus {
OPEN_TAB(0),
CLOSE_TAB(1);
final int id;
AdvancementTabStatus(int id) {
this.id = id;
}
public static AdvancementTabStatus byId(int id) {
for (AdvancementTabStatus action : values()) {
if (action.getId() == id) {
return action;
}
}
return null;
}
public int getId() {
return id;
}
}
}

View File

@ -19,11 +19,11 @@ import de.bixilon.minosoft.protocol.protocol.OutPacketBuffer;
import de.bixilon.minosoft.protocol.protocol.Packets;
import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
public class PacketChatMessage implements ServerboundPacket {
public class PacketChatMessageSending implements ServerboundPacket {
final String message;
public PacketChatMessage(String message) {
public PacketChatMessageSending(String message) {
this.message = message;
log();
}

View File

@ -0,0 +1,102 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.protocol.packets.serverbound.play;
import de.bixilon.minosoft.logging.Log;
import de.bixilon.minosoft.protocol.packets.ServerboundPacket;
import de.bixilon.minosoft.protocol.protocol.OutPacketBuffer;
import de.bixilon.minosoft.protocol.protocol.Packets;
import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
public class PacketCraftingBookData implements ServerboundPacket {
final BookDataStatus action;
final int recipeId;
final boolean craftingBookOpen;
final boolean craftingFilter;
public PacketCraftingBookData(BookDataStatus action, int recipeId) {
this.action = action;
this.recipeId = recipeId;
craftingBookOpen = false;
craftingFilter = false;
log();
}
public PacketCraftingBookData(BookDataStatus action, boolean craftingBookOpen, boolean craftingFilter) {
this.action = action;
this.recipeId = 0;
this.craftingBookOpen = craftingBookOpen;
this.craftingFilter = craftingFilter;
log();
}
@Override
public OutPacketBuffer write(ProtocolVersion version) {
OutPacketBuffer buffer = new OutPacketBuffer(version, version.getPacketCommand(Packets.Serverbound.PLAY_RECIPE_BOOK_DATA));
switch (version) {
case VERSION_1_12_2:
buffer.writeVarInt(action.getId());
switch (action) {
case DISPLAY_RECIPE:
buffer.writeVarInt(recipeId);
break;
case CRAFTING_BOOK_STATUS:
buffer.writeBoolean(craftingBookOpen);
buffer.writeBoolean(craftingFilter);
break;
}
}
return buffer;
}
@Override
public void log() {
switch (action) {
case DISPLAY_RECIPE:
Log.protocol(String.format("Sending crafting book status (action=%s, recipeId=%d)", action.name(), recipeId));
break;
case CRAFTING_BOOK_STATUS:
Log.protocol(String.format("Sending crafting book status (action=%s, craftingBookOpen=%s, craftingFilter=%s)", action.name(), craftingBookOpen, craftingFilter));
break;
}
}
public enum BookDataStatus {
DISPLAY_RECIPE(0),
CRAFTING_BOOK_STATUS(1);
final int id;
BookDataStatus(int id) {
this.id = id;
}
public static BookDataStatus byId(int id) {
for (BookDataStatus action : values()) {
if (action.getId() == id) {
return action;
}
}
return null;
}
public int getId() {
return id;
}
}
}

View File

@ -0,0 +1,50 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.protocol.packets.serverbound.play;
import de.bixilon.minosoft.logging.Log;
import de.bixilon.minosoft.protocol.packets.ServerboundPacket;
import de.bixilon.minosoft.protocol.protocol.OutPacketBuffer;
import de.bixilon.minosoft.protocol.protocol.Packets;
import de.bixilon.minosoft.protocol.protocol.ProtocolVersion;
public class PacketCraftingRecipeRequest implements ServerboundPacket {
final byte windowId;
final int recipeId;
public PacketCraftingRecipeRequest(byte windowId, int recipeId) {
this.windowId = windowId;
this.recipeId = recipeId;
log();
}
@Override
public OutPacketBuffer write(ProtocolVersion version) {
OutPacketBuffer buffer = new OutPacketBuffer(version, version.getPacketCommand(Packets.Serverbound.PLAY_CRAFT_RECIPE_REQUEST));
switch (version) {
case VERSION_1_12_2:
buffer.writeByte(windowId);
buffer.writeVarInt(recipeId);
break;
}
return buffer;
}
@Override
public void log() {
Log.protocol(String.format("Sending entity action packet (windowId=%d, recipeId=%d)", windowId, recipeId));
}
}

View File

@ -181,7 +181,7 @@ public class PacketHandler {
connection.getPlayer().setSpawnLocation(pkg.getSpawnLocation());
}
public void handle(PacketChatMessage pkg) {
public void handle(PacketChatMessageReceiving pkg) {
}
public void handle(PacketDisconnect pkg) {
@ -574,4 +574,5 @@ public class PacketHandler {
public void handle(PacketAdvancements pkg) {
}
}

View File

@ -31,7 +31,7 @@ public class PacketSender {
}
public void sendChatMessage(String message) {
connection.sendPacket(new PacketChatMessage(message));
connection.sendPacket(new PacketChatMessageSending(message));
}
public void spectateEntity(UUID entityUUID) {

View File

@ -77,7 +77,7 @@ public abstract class Protocol implements ProtocolInterface {
packetClassMapping.put(Packets.Clientbound.PLAY_UPDATE_HEALTH, PacketUpdateHealth.class);
packetClassMapping.put(Packets.Clientbound.PLAY_PLUGIN_MESSAGE, PacketPluginMessageReceiving.class);
packetClassMapping.put(Packets.Clientbound.PLAY_SPAWN_POSITION, PacketSpawnLocation.class);
packetClassMapping.put(Packets.Clientbound.PLAY_CHAT_MESSAGE, PacketChatMessage.class);
packetClassMapping.put(Packets.Clientbound.PLAY_CHAT_MESSAGE, PacketChatMessageReceiving.class);
packetClassMapping.put(Packets.Clientbound.PLAY_DISCONNECT, PacketDisconnect.class);
packetClassMapping.put(Packets.Clientbound.PLAY_HELD_ITEM_CHANGE, PacketHeldItemChangeReceiving.class);
packetClassMapping.put(Packets.Clientbound.PLAY_SET_EXPERIENCE, PacketSetExperience.class);