From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Lumine1909 <3556577839@qq.com> Date: Fri, 12 Apr 2024 20:12:33 -0400 Subject: [PATCH] Bytebuf API diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java index 7e92a652d47042dec050e4be08b57e2121ccd0bb..4adddf3695de8e18088a206ffcc077017f69839c 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -2897,6 +2897,14 @@ public final class Bukkit { return server.getPhotographerManager(); } // Leaves end - Photographer API + // Leaves start - Bytebuf API + public static @NotNull org.leavesmc.leaves.packet.bytebuf.Bytebuf newByteBuf() { + return server.newByteBuf(); + } + public static @NotNull org.leavesmc.leaves.packet.bytebuf.Bytebuf newByteBuf(int initalCapability) { + return server.newByteBuf(initalCapability); + } + // Leaves end - Bytebuf API @NotNull public static Server.Spigot spigot() { diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java index d465633aab75def37a2b4a9f2a034071970c1dfa..cf9d17b68f27d08a6a6f6c564874370a9788f72e 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2540,4 +2540,9 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi // Leaves start - Photographer API @NotNull PhotographerManager getPhotographerManager(); // Leaves end - Photographer API + // Leaves start - Bytebuf API + @NotNull org.leavesmc.leaves.packet.bytebuf.Bytebuf newByteBuf(); + @NotNull org.leavesmc.leaves.packet.bytebuf.Bytebuf newByteBuf(int initalCapability); + + // Leaves end - Bytebuf API } diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java index d048ae07cc33fd77d128cc1ebf88b0804969fa3c..adc61a3046dba8d236a0c12d109b0f8183b89880 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -3706,6 +3706,10 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM */ void resetIdleDuration(); // Paper end + // Leaves start - Bytebuf API + void sendPacket(org.leavesmc.leaves.packet.Packet packet); + void sendPacket(org.leavesmc.leaves.packet.bytebuf.Bytebuf buf, org.leavesmc.leaves.packet.PacketType packetType); + // Leaves end - Bytebuf API // Paper start - Add chunk view API /** diff --git a/src/main/java/org/leavesmc/leaves/packet/Packet.java b/src/main/java/org/leavesmc/leaves/packet/Packet.java new file mode 100644 index 0000000000000000000000000000000000000000..0ea5069b994eb3da2952f696c1fd1bc0e81e281a --- /dev/null +++ b/src/main/java/org/leavesmc/leaves/packet/Packet.java @@ -0,0 +1,8 @@ +package org.leavesmc.leaves.packet; + +import org.leavesmc.leaves.packet.bytebuf.Bytebuf; + +public interface Packet { + PacketType getType(); + Bytebuf getBytebuf(); +} diff --git a/src/main/java/org/leavesmc/leaves/packet/PacketType.java b/src/main/java/org/leavesmc/leaves/packet/PacketType.java new file mode 100644 index 0000000000000000000000000000000000000000..3cf5792ddb7aa52580c4d91c2ddef593a43212af --- /dev/null +++ b/src/main/java/org/leavesmc/leaves/packet/PacketType.java @@ -0,0 +1,115 @@ +package org.leavesmc.leaves.packet; + +/*** + * TODO: API comment + */ +public enum PacketType { + ClientboundAddEntity, + ClientboundAddExperienceOrb, + ClientboundAnimate, + ClientboundAwardStats, + ClientboundBlockChangedAck, + ClientboundBlockDestruction, + ClientboundBlockEntityData, + ClientboundBlockEvent, + ClientboundBlockUpdate, + ClientboundBossEvent, + // ClientboundBundle, Not a regular packet, see https://wiki.vg/Protocol#Bundle_Delimiter + ClientboundChangeDifficulty, + ClientboundChunkBatchFinished, + ClientboundChunkBatchStart, + ClientboundChunksBiomes, + ClientboundClearTitles, + ClientboundCommands, + ClientboundCommandSuggestions, + ClientboundContainerClose, + ClientboundContainerSetContent, + ClientboundContainerSetData, + ClientboundContainerSetSlot, + ClientboundCooldown, + ClientboundCustomChatCompletions, + ClientboundDamageEvent, + ClientboundDeleteChat, + ClientboundDisguisedChat, + ClientboundEntityEvent, + ClientboundExplode, + ClientboundForgetLevelChunk, + ClientboundGameEvent, + ClientboundHorseScreenOpen, + ClientboundHurtAnimation, + ClientboundInitializeBorder, + ClientboundLevelChunkWithLight, + ClientboundLevelEvent, + ClientboundLevelParticles, + ClientboundLightUpdate, + ClientboundLightUpdatePack, + ClientboundLogin, + ClientboundMapItemData, + ClientboundMerchantOffers, + // ClientboundMoveEntity, Abstract class + ClientboundMoveVehicle, + ClientboundOpenBook, + ClientboundOpenScreen, + ClientboundOpenSignEditor, + ClientboundPlaceGhostRecipe, + ClientboundPlayerAbilities, + ClientboundPlayerChat, + ClientboundPlayerCombatEnd, + ClientboundPlayerCombatEnter, + ClientboundPlayerCombatKill, + ClientboundPlayerInfoRemove, + ClientboundPlayerInfoUpdate, + ClientboundPlayerLookAt, + ClientboundPlayerPosition, + ClientboundRecipe, + ClientboundRemoveEntities, + ClientboundRemoveMobEffect, + ClientboundResetScore, + ClientboundRespawn, + ClientboundRotateHead, + ClientboundSectionBlocksUpdate, + ClientboundSelectAdvancementsTab, + ClientboundServerData, + ClientboundSetActionBarText, + ClientboundSetBorderCenter, + ClientboundSetBorderLerpSize, + ClientboundSetBorderSize, + ClientboundSetBorderWarningDelay, + ClientboundSetBorderWarningDistance, + ClientboundSetCamera, + ClientboundSetCarriedItem, + ClientboundSetChunkCacheCenter, + ClientboundSetChunkCacheRadius, + ClientboundSetDefaultSpawnPosition, + ClientboundSetDisplayObjective, + ClientboundSetEntityData, + ClientboundSetEntityLink, + ClientboundSetEntityMotion, + ClientboundSetEquipment, + ClientboundSetExperience, + ClientboundSetHealth, + ClientboundSetObjective, + ClientboundSetPassengers, + ClientboundSetPlayerTeam, + ClientboundSetScore, + ClientboundSetSimulationDistance, + ClientboundSetSubtitleText, + ClientboundSetTime, + ClientboundSetTitlesAnimation, + ClientboundSetTitleText, + ClientboundSoundEntity, + ClientboundSound, + ClientboundStartConfiguration, + ClientboundStopSound, + ClientboundSystemChat, + ClientboundTabList, + ClientboundTagQuery, + ClientboundTakeItemEntity, + ClientboundTeleportEntity, + ClientboundTickingState, + ClientboundTickingStep, + ClientboundUpdateAdvancements, + ClientboundUpdateAttributes, + ClientboundUpdateMobEffect, + ClientboundUpdateRecipes +} diff --git a/src/main/java/org/leavesmc/leaves/packet/bytebuf/Bytebuf.java b/src/main/java/org/leavesmc/leaves/packet/bytebuf/Bytebuf.java new file mode 100644 index 0000000000000000000000000000000000000000..78a49c0d86742bc98f6b1434cba00a735982fd7a --- /dev/null +++ b/src/main/java/org/leavesmc/leaves/packet/bytebuf/Bytebuf.java @@ -0,0 +1,29 @@ +package org.leavesmc.leaves.packet.bytebuf; + +import org.bukkit.inventory.ItemStack; +import org.leavesmc.leaves.packet.Packet; +import org.leavesmc.leaves.packet.PacketType; + +import java.util.UUID; + +public interface Bytebuf { + Packet toPacket(PacketType type); + Bytebuf writeByte(int i); + Bytebuf writeBoolean(boolean flag); + Bytebuf writeFloat(float f); + Bytebuf writeInt(int i); + Bytebuf writeShort(int i); + Bytebuf writeLong(long i); + Bytebuf writeVarInt(int value); + Bytebuf writeUUID(UUID uuid); + Bytebuf writeVarLong(long value); + + /* + In order to bypass NMS in the API, use deserialization of Object here. + In the future, it may be adjusted to use API encapsulated content (workload++). + */ + Bytebuf writeStringNbt(String nbt); + Bytebuf writeStringComponent(String component); + Bytebuf writeItem(ItemStack itemStack); + +}