diff --git a/apps/amethyst/lib/apps/connection_handler.ex b/apps/amethyst/lib/apps/connection_handler.ex index b0f9b94..47371ae 100644 --- a/apps/amethyst/lib/apps/connection_handler.ex +++ b/apps/amethyst/lib/apps/connection_handler.ex @@ -81,7 +81,7 @@ alias ElixirSense.Log :ok -> state {:error, reason} -> Logger.error("Error handling packet with ID #{id} in state #{connstate}: #{reason}") - send(self(), {:disconnect, "Error handling packet #{id}:\n#{reason}"}) + send(self(), {:disconnect, "§cError handling packet #{id}:\n#{reason}"}) state newstate -> if is_map(newstate) do @@ -94,7 +94,7 @@ alias ElixirSense.Log rescue e -> Logger.error("Error handling packet with ID #{id} in state #{connstate}: #{Exception.format(:error, e, __STACKTRACE__)}") - send(self(), {:disconnect, "Error handling packet #{id}:\n#{e.message}"}) + send(self(), {:disconnect, "§cError handling packet #{id}:\n#{Exception.format(:error, e, __STACKTRACE__)}"}) state end end diff --git a/apps/amethyst/lib/states/configuration.ex b/apps/amethyst/lib/states/configuration.ex index 761eea2..9021214 100644 --- a/apps/amethyst/lib/states/configuration.ex +++ b/apps/amethyst/lib/states/configuration.ex @@ -25,7 +25,7 @@ defmodule Amethyst.ConnectionState.Configuration do """ Macros.defpacket_clientbound :cookie_request, 0x00, 767, [identifier: :string] Macros.defpacket_clientbound :clientbound_plugin_message, 0x01, 767, [channel: :string, data: :raw] - Macros.defpacket_clientbound :disconnect, 0x02, 767, [reason: :json] + Macros.defpacket_clientbound :disconnect, 0x02, 767, [reason: :nbt] Macros.defpacket_clientbound :finish_configuration, 0x03, 767, [] Macros.defpacket_clientbound :clientbound_keep_alive, 0x04, 767, [id: :long] Macros.defpacket_clientbound :ping, 0x05, 767, [id: :int] @@ -107,9 +107,43 @@ defmodule Amethyst.ConnectionState.Configuration do ]} ] + def handle(%{packet_type: :serverbound_plugin_message, channel: "minecraft:brand", data: data}, 767, state) do + {[string], ""} = Amethyst.Minecraft.Read.start(data) |> Amethyst.Minecraft.Read.string() |> Amethyst.Minecraft.Read.stop() + Logger.debug("Received brand: #{string}") + send(self(), {:send_packet, %{ + packet_type: :clientbound_plugin_message, + channel: "minecraft:brand", + data: Amethyst.Minecraft.Write.string("Amethyst") + }}) + state |> Map.put(:brand, string) + end + + def handle(%{ + packet_type: :client_information, + locale: locale, + view_distance: view_distance, + chat_mode: chat_mode, + chat_colors: chat_colors, + displayed_skin_parts: displayed_skin_parts, + main_hand: main_hand, + text_filtering: text_filtering, + allow_server_listings: allow_server_listings + }, 767, state) do + Logger.debug("Received client information") + state + |> Map.put(:locale, locale) + |> Map.put(:view_distance, view_distance) + |> Map.put(:chat_mode, chat_mode) + |> Map.put(:chat_colors, chat_colors) + |> Map.put(:displayed_skin_parts, displayed_skin_parts) + |> Map.put(:main_hand, main_hand) + |> Map.put(:text_filtering, text_filtering) + |> Map.put(:allow_server_listings, allow_server_listings) + end + def disconnect(reason) do - %{packet_type: :disconnect, reason: %{ - "text" => reason - }} + %{packet_type: :disconnect, reason: {:compound, %{ + "text" => {:string, reason} + }}} end end diff --git a/apps/amethyst/lib/states/login.ex b/apps/amethyst/lib/states/login.ex index e058a89..2e6f752 100644 --- a/apps/amethyst/lib/states/login.ex +++ b/apps/amethyst/lib/states/login.ex @@ -23,7 +23,7 @@ defmodule Amethyst.ConnectionState.Login do @moduledoc """ This module contains the packets and logic for the Login state. """ - Macros.defpacket_clientbound :disconnect, 0x00, 767, [reason: :nbt] + Macros.defpacket_clientbound :disconnect, 0x00, 767, [reason: :json] Macros.defpacket_clientbound :encryption_request, 0x01, 767, [ server_id: :string, public_key: :byte_array, @@ -84,9 +84,9 @@ defmodule Amethyst.ConnectionState.Login do def disconnect(reason) do %{packet_type: :disconnect, reason: - {:compound, %{ - "text" => {:string, reason} - }} + %{ + "text" => reason + } } end end