From f0bb92bdb98ac272cedf0fa07a886059fced198e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=92=9F=E8=92=BB?= Date: Sat, 23 Aug 2025 17:21:54 +0800 Subject: [PATCH] remove bot and message.go --- bot/basic/basic.go | 91 - bot/basic/cookie.go | 37 - bot/basic/events.go | 163 - bot/basic/info.go | 100 - bot/basic/keepalive.go | 34 - bot/basic/ping.go | 23 - bot/basic/settings.go | 45 - bot/basic/tags.go | 37 - bot/client.go | 136 - bot/configuration.go | 396 -- bot/event.go | 51 - bot/example_test.go | 79 - bot/ingame.go | 93 - bot/login.go | 328 -- bot/mcbot.go | 128 - bot/msg/chat.go | 221 - bot/msg/events.go | 29 - bot/pinglist.go | 137 - bot/playerlist/playerlist.go | 167 - bot/screen/chest.go | 39 - bot/screen/events.go | 9 - bot/screen/inventory.go | 29 - bot/screen/screen.go | 240 - bot/world/chunks.go | 72 - bot/world/events.go | 8 - chat/message.go | 64 + data/item/gen_item.go | 96 - data/item/item.go | 9205 ---------------------------------- level/chunk.go | 4 + 29 files changed, 68 insertions(+), 11993 deletions(-) delete mode 100644 bot/basic/basic.go delete mode 100644 bot/basic/cookie.go delete mode 100644 bot/basic/events.go delete mode 100644 bot/basic/info.go delete mode 100644 bot/basic/keepalive.go delete mode 100644 bot/basic/ping.go delete mode 100644 bot/basic/settings.go delete mode 100644 bot/basic/tags.go delete mode 100644 bot/client.go delete mode 100644 bot/configuration.go delete mode 100644 bot/event.go delete mode 100644 bot/example_test.go delete mode 100644 bot/ingame.go delete mode 100644 bot/login.go delete mode 100644 bot/mcbot.go delete mode 100644 bot/msg/chat.go delete mode 100644 bot/msg/events.go delete mode 100644 bot/pinglist.go delete mode 100644 bot/playerlist/playerlist.go delete mode 100644 bot/screen/chest.go delete mode 100644 bot/screen/events.go delete mode 100644 bot/screen/inventory.go delete mode 100644 bot/screen/screen.go delete mode 100644 bot/world/chunks.go delete mode 100644 bot/world/events.go delete mode 100644 data/item/gen_item.go delete mode 100644 data/item/item.go diff --git a/bot/basic/basic.go b/bot/basic/basic.go deleted file mode 100644 index 6055f0c..0000000 --- a/bot/basic/basic.go +++ /dev/null @@ -1,91 +0,0 @@ -// Package basic provides some basic packet handler which client needs. -// -// # [Player] -// -// The [Player] is attached to a [Client] by calling [NewPlayer] before the client joins a server. -// -// There is 4 kinds of clientbound packet is handled by this package. -// - LoginPacket, for cache player info. The player info will be stored in [Player.PlayerInfo]. -// - KeepAlivePacket, for avoid the client to be kicked by the server. -// - PlayerPosition, is only received when server teleporting the player. -// - Respawn, for updating player info, which may change when player respawned. -// -// # [EventsListener] -// -// Handles some basic event you probably need. -// - GameStart -// - Disconnect -// - HealthChange -// - Death -package basic - -import ( - "github.com/Tnze/go-mc/bot" - "github.com/Tnze/go-mc/data/packetid" - pk "github.com/Tnze/go-mc/net/packet" -) - -type Player struct { - c *bot.Client - Settings Settings - - PlayerInfo - WorldInfo -} - -// NewPlayer create a new Player manager. -func NewPlayer(c *bot.Client, settings Settings, events EventsListener) *Player { - p := &Player{c: c, Settings: settings} - c.Events.AddListener( - bot.PacketHandler{Priority: 0, ID: packetid.ClientboundLogin, F: p.handleLoginPacket}, - bot.PacketHandler{Priority: 0, ID: packetid.ClientboundKeepAlive, F: p.handleKeepAlivePacket}, - bot.PacketHandler{Priority: 0, ID: packetid.ClientboundRespawn, F: p.handleRespawnPacket}, - bot.PacketHandler{Priority: 0, ID: packetid.ClientboundPing, F: p.handlePingPacket}, - bot.PacketHandler{Priority: 0, ID: packetid.ClientboundCookieRequest, F: p.handleCookieRequestPacket}, - bot.PacketHandler{Priority: 0, ID: packetid.ClientboundStoreCookie, F: p.handleStoreCookiePacket}, - bot.PacketHandler{Priority: 0, ID: packetid.ClientboundUpdateTags, F: p.handleUpdateTags}, - ) - events.attach(p) - return p -} - -// Respawn is used to send a respawn packet to the server. -// Typically, you should call this method when the player is dead (in the [Death] event handler). -func (p *Player) Respawn() error { - const PerformRespawn = 0 - - err := p.c.Conn.WritePacket(pk.Marshal( - packetid.ServerboundClientCommand, - pk.VarInt(PerformRespawn), - )) - if err != nil { - return Error{err} - } - - return nil -} - -// AcceptTeleportation is used to send a teleport confirmation packet to the server. -// Typically, you should call this method when received a ClientboundPlayerPosition packet (in the [Teleported] event handler). -func (p *Player) AcceptTeleportation(teleportID pk.VarInt) error { - err := p.c.Conn.WritePacket(pk.Marshal( - packetid.ServerboundAcceptTeleportation, - teleportID, - )) - if err != nil { - return Error{err} - } - return nil -} - -type Error struct { - Err error -} - -func (e Error) Error() string { - return "bot/basic: " + e.Err.Error() -} - -func (e Error) Unwrap() error { - return e.Err -} diff --git a/bot/basic/cookie.go b/bot/basic/cookie.go deleted file mode 100644 index 561b17b..0000000 --- a/bot/basic/cookie.go +++ /dev/null @@ -1,37 +0,0 @@ -package basic - -import ( - "github.com/Tnze/go-mc/data/packetid" - pk "github.com/Tnze/go-mc/net/packet" -) - -func (p *Player) handleCookieRequestPacket(packet pk.Packet) error { - var key pk.Identifier - err := packet.Scan(&key) - if err != nil { - return Error{err} - } - cookieContent := p.c.Cookies[string(key)] - err = p.c.Conn.WritePacket(pk.Marshal( - packetid.ServerboundCookieResponse, - key, pk.OptionEncoder[pk.ByteArray]{ - Has: cookieContent != nil, - Val: pk.ByteArray(cookieContent), - }, - )) - if err != nil { - return Error{err} - } - return nil -} - -func (p *Player) handleStoreCookiePacket(packet pk.Packet) error { - var key pk.Identifier - var payload pk.ByteArray - err := packet.Scan(&key, &payload) - if err != nil { - return Error{err} - } - p.c.Cookies[string(key)] = []byte(payload) - return nil -} diff --git a/bot/basic/events.go b/bot/basic/events.go deleted file mode 100644 index 54807fa..0000000 --- a/bot/basic/events.go +++ /dev/null @@ -1,163 +0,0 @@ -package basic - -import ( - "github.com/Tnze/go-mc/bot" - "github.com/Tnze/go-mc/chat" - "github.com/Tnze/go-mc/data/packetid" - pk "github.com/Tnze/go-mc/net/packet" -) - -// EventsListener is a collection of event handlers. -// Fill the fields with your handler functions and pass it to [NewPlayer] to create the Player manager. -// For the event you don't want to handle, just leave it nil. -type EventsListener struct { - // GameStart event is called when the login process is completed and the player is ready to play. - // - // If you want to do some action when the bot joined the server like sending a chat message, - // this event is the right place to do it. - GameStart func() error - - // Disconnect event is called before the server disconnects your client. - // When the server willfully disconnects the client, it will send a ClientboundDisconnect packet and tell you why. - // On vanilla client, the reason is displayed in the disconnect screen. - // - // This information may be very useful for debugging, and generally you should record it into the log. - // - // If the connection is disconnected due to network reasons or the client's initiative, - // this event will not be triggered. - Disconnect func(reason chat.Message) error - - // HealthChange event is called when the player's health or food changed. - HealthChange func(health float32, foodLevel int32, foodSaturation float32) error - - // Death event is a special case of HealthChange. - // It will be called after HealthChange handler called (if it isn't nil) - // when the player's health is less than or equal to 0. - // - // Typically, you should call [Player.Respawn] in this handler. - Death func() error - - // Teleported event is called when the server think the player position in the client side is wrong, - // and send a ClientboundPlayerPosition packet to correct the client. - // - // Typically, you need to do two things in this handler: - // - Update the player's position and rotation you tracked to the correct position. - // - Call [Player.AcceptTeleportation] to send a teleport confirmation packet to the server. - // - // Before you confirm the teleportation, the server will not accept any player motion packets. - // - // The position coordinates and rotation are absolute or relative depends on the flags. - // The flag byte is a bitfield, specifies whether each coordinate value is absolute or relative. - // For more information, see https://wiki.vg/Protocol#Synchronize_Player_Position - Teleported func(x, y, z float64, yaw, pitch float32, flags byte, teleportID int32) error -} - -// attach your event listener to the client. -// The functions are copied when attaching, and modify on [EventListener] doesn't affect after that. -func (e EventsListener) attach(p *Player) { - if e.GameStart != nil { - attachJoinGameHandler(p.c, e.GameStart) - } - if e.Disconnect != nil { - attachDisconnect(p.c, e.Disconnect) - } - if e.HealthChange != nil || e.Death != nil { - attachUpdateHealth(p.c, e.HealthChange, e.Death) - } - if e.Teleported != nil { - attachPlayerPosition(p.c, e.Teleported) - } -} - -func attachJoinGameHandler(c *bot.Client, handler func() error) { - c.Events.AddListener(bot.PacketHandler{ - Priority: 64, ID: packetid.ClientboundLogin, - F: func(_ pk.Packet) error { - return handler() - }, - }) -} - -func attachDisconnect(c *bot.Client, handler func(reason chat.Message) error) { - c.Events.AddListener(bot.PacketHandler{ - Priority: 64, ID: packetid.ClientboundDisconnect, - F: func(p pk.Packet) error { - var reason chat.Message - if err := p.Scan(&reason); err != nil { - return Error{err} - } - return handler(chat.Message(reason)) - }, - }) -} - -func attachUpdateHealth(c *bot.Client, healthChangeHandler func(health float32, food int32, saturation float32) error, deathHandler func() error) { - c.Events.AddListener(bot.PacketHandler{ - Priority: 64, ID: packetid.ClientboundSetHealth, - F: func(p pk.Packet) error { - var health pk.Float - var food pk.VarInt - var saturation pk.Float - - if err := p.Scan(&health, &food, &saturation); err != nil { - return Error{err} - } - var healthChangeErr, deathErr error - if healthChangeHandler != nil { - healthChangeErr = healthChangeHandler(float32(health), int32(food), float32(saturation)) - } - if deathHandler != nil && health <= 0 { - deathErr = deathHandler() - } - if healthChangeErr != nil || deathErr != nil { - return updateHealthError{healthChangeErr, deathErr} - } - return nil - }, - }) -} - -func attachPlayerPosition(c *bot.Client, handler func(x, y, z float64, yaw, pitch float32, flag byte, teleportID int32) error) { - c.Events.AddListener(bot.PacketHandler{ - Priority: 64, ID: packetid.ClientboundPlayerPosition, - F: func(p pk.Packet) error { - var ( - X, Y, Z pk.Double - Yaw, Pitch pk.Float - Flags pk.Byte - TeleportID pk.VarInt - ) - if err := p.Scan(&X, &Y, &Z, &Yaw, &Pitch, &Flags, &TeleportID); err != nil { - return Error{err} - } - return handler(float64(X), float64(Y), float64(Z), float32(Yaw), float32(Pitch), byte(Flags), int32(TeleportID)) - }, - }) -} - -type updateHealthError struct { - healthChangeErr, deathErr error -} - -func (u updateHealthError) Unwrap() error { - if u.healthChangeErr != nil { - return u.healthChangeErr - } - if u.deathErr != nil { - return u.deathErr - } - return nil -} - -func (u updateHealthError) Error() string { - switch { - case u.healthChangeErr != nil && u.deathErr != nil: - return "[" + u.healthChangeErr.Error() + ", " + u.deathErr.Error() + "]" - case u.healthChangeErr != nil: - return u.healthChangeErr.Error() - case u.deathErr != nil: - return u.deathErr.Error() - default: - return "nil" - } -} diff --git a/bot/basic/info.go b/bot/basic/info.go deleted file mode 100644 index 2987dd9..0000000 --- a/bot/basic/info.go +++ /dev/null @@ -1,100 +0,0 @@ -package basic - -import ( - "unsafe" - - "github.com/Tnze/go-mc/data/packetid" - pk "github.com/Tnze/go-mc/net/packet" -) - -// WorldInfo content player info in server. -type WorldInfo struct { - DimensionType int32 - DimensionNames []string // Identifiers for all worlds on the server. - DimensionName string // Name of the world being spawned into. - HashedSeed int64 // First 8 bytes of the SHA-256 hash of the world's seed. Used client side for biome noise - MaxPlayers int32 // Was once used by the client to draw the player list, but now is ignored. - ViewDistance int32 // Render distance (2-32). - SimulationDistance int32 // The distance that the client will process specific things, such as entities. - ReducedDebugInfo bool // If true, a vanilla client shows reduced information on the debug screen. For servers in development, this should almost always be false. - EnableRespawnScreen bool // Set to false when the doImmediateRespawn gamerule is true. - IsDebug bool // True if the world is a debug mode world; debug mode worlds cannot be modified and have predefined blocks. - IsFlat bool // True if the world is a superflat world; flat worlds have different void fog and a horizon at y=0 instead of y=63. - DoLimitCrafting bool // Whether players can only craft recipes they have already unlocked. Currently unused by the client. -} - -type PlayerInfo struct { - EID int32 // The player's Entity ID (EID). - Hardcore bool // Is hardcore - Gamemode byte // Gamemode. 0: Survival, 1: Creative, 2: Adventure, 3: Spectator. - PrevGamemode int8 // Previous Gamemode -} - -func (p *Player) handleLoginPacket(packet pk.Packet) error { - err := packet.Scan( - (*pk.Int)(&p.EID), - (*pk.Boolean)(&p.Hardcore), - pk.Array((*[]pk.Identifier)(unsafe.Pointer(&p.DimensionNames))), - (*pk.VarInt)(&p.MaxPlayers), - (*pk.VarInt)(&p.ViewDistance), - (*pk.VarInt)(&p.SimulationDistance), - (*pk.Boolean)(&p.ReducedDebugInfo), - (*pk.Boolean)(&p.EnableRespawnScreen), - (*pk.Boolean)(&p.DoLimitCrafting), - (*pk.VarInt)(&p.WorldInfo.DimensionType), - (*pk.Identifier)(&p.DimensionName), - (*pk.Long)(&p.HashedSeed), - (*pk.UnsignedByte)(&p.Gamemode), - (*pk.Byte)(&p.PrevGamemode), - (*pk.Boolean)(&p.IsDebug), - (*pk.Boolean)(&p.IsFlat), - // Death dimension & Death location & Portal cooldown are ignored - ) - if err != nil { - return Error{err} - } - err = p.c.Conn.WritePacket(pk.Marshal( // PluginMessage packet - packetid.ServerboundCustomPayload, - pk.Identifier("minecraft:brand"), - pk.String(p.Settings.Brand), - )) - if err != nil { - return Error{err} - } - - err = p.c.Conn.WritePacket(pk.Marshal( - packetid.ServerboundClientInformation, // Client settings - pk.String(p.Settings.Locale), - pk.Byte(p.Settings.ViewDistance), - pk.VarInt(p.Settings.ChatMode), - pk.Boolean(p.Settings.ChatColors), - pk.UnsignedByte(p.Settings.DisplayedSkinParts), - pk.VarInt(p.Settings.MainHand), - pk.Boolean(p.Settings.EnableTextFiltering), - pk.Boolean(p.Settings.AllowListing), - )) - if err != nil { - return Error{err} - } - - p.resetKeepAliveDeadline() - return nil -} - -func (p *Player) handleRespawnPacket(packet pk.Packet) error { - var copyMeta bool - err := packet.Scan( - (*pk.VarInt)(&p.DimensionType), - (*pk.Identifier)(&p.DimensionName), - (*pk.Long)(&p.HashedSeed), - (*pk.UnsignedByte)(&p.Gamemode), - (*pk.Byte)(&p.PrevGamemode), - (*pk.Boolean)(&p.IsDebug), - (*pk.Boolean)(&p.IsFlat), - (*pk.Boolean)(©Meta), - ) - if err != nil { - return Error{err} - } - return nil -} diff --git a/bot/basic/keepalive.go b/bot/basic/keepalive.go deleted file mode 100644 index 306b73f..0000000 --- a/bot/basic/keepalive.go +++ /dev/null @@ -1,34 +0,0 @@ -package basic - -import ( - "time" - - "github.com/Tnze/go-mc/data/packetid" - pk "github.com/Tnze/go-mc/net/packet" -) - -const keepAliveDuration = time.Second * 20 - -func (p *Player) resetKeepAliveDeadline() { - newDeadline := time.Now().Add(keepAliveDuration) - p.c.Conn.Socket.SetDeadline(newDeadline) -} - -func (p *Player) handleKeepAlivePacket(packet pk.Packet) error { - var KeepAliveID pk.Long - if err := packet.Scan(&KeepAliveID); err != nil { - return Error{err} - } - - p.resetKeepAliveDeadline() - - // Response - err := p.c.Conn.WritePacket(pk.Packet{ - ID: int32(packetid.ServerboundKeepAlive), - Data: packet.Data, - }) - if err != nil { - return Error{err} - } - return nil -} diff --git a/bot/basic/ping.go b/bot/basic/ping.go deleted file mode 100644 index f27538e..0000000 --- a/bot/basic/ping.go +++ /dev/null @@ -1,23 +0,0 @@ -package basic - -import ( - "github.com/Tnze/go-mc/data/packetid" - pk "github.com/Tnze/go-mc/net/packet" -) - -func (p *Player) handlePingPacket(packet pk.Packet) error { - var pingID pk.Int - if err := packet.Scan(&pingID); err != nil { - return Error{err} - } - - // Response - err := p.c.Conn.WritePacket(pk.Packet{ - ID: int32(packetid.ServerboundPong), - Data: packet.Data, - }) - if err != nil { - return Error{err} - } - return nil -} diff --git a/bot/basic/settings.go b/bot/basic/settings.go deleted file mode 100644 index c79aedd..0000000 --- a/bot/basic/settings.go +++ /dev/null @@ -1,45 +0,0 @@ -package basic - -// Settings of client -type Settings struct { - Locale string // 地区 - ViewDistance int // 视距 - ChatMode int // 聊天模式 - ChatColors bool // 聊天颜色 - DisplayedSkinParts uint8 // 皮肤显示 - MainHand int // 主手 - - // Enables filtering of text on signs and written book titles. - // Currently, always false (i.e. the filtering is disabled) - EnableTextFiltering bool - AllowListing bool - - // The brand string presented to the server. - Brand string -} - -// Used by Settings.DisplayedSkinParts. -// For each bit set if shows match part. -const ( - _ = 1 << iota - Jacket - LeftSleeve - RightSleeve - LeftPantsLeg - RightPantsLeg - Hat -) - -// DefaultSettings are the default settings of client -var DefaultSettings = Settings{ - Locale: "zh_CN", // ^_^ - ViewDistance: 15, - ChatMode: 0, - DisplayedSkinParts: Jacket | LeftSleeve | RightSleeve | LeftPantsLeg | RightPantsLeg | Hat, - MainHand: 1, - - EnableTextFiltering: false, - AllowListing: true, - - Brand: "vanilla", -} diff --git a/bot/basic/tags.go b/bot/basic/tags.go deleted file mode 100644 index 4c406d8..0000000 --- a/bot/basic/tags.go +++ /dev/null @@ -1,37 +0,0 @@ -package basic - -import ( - "bytes" - "errors" - - pk "github.com/Tnze/go-mc/net/packet" -) - -func (p *Player) handleUpdateTags(packet pk.Packet) error { - r := bytes.NewReader(packet.Data) - - var length pk.VarInt - _, err := length.ReadFrom(r) - if err != nil { - return Error{err} - } - - var registryID pk.Identifier - for i := 0; i < int(length); i++ { - _, err = registryID.ReadFrom(r) - if err != nil { - return Error{err} - } - - registry := p.c.Registries.Registry(string(registryID)) - if registry == nil { - return Error{errors.New("unknown registry: " + string(registryID))} - } - - _, err = registry.ReadTagsFrom(r) - if err != nil { - return Error{err} - } - } - return nil -} diff --git a/bot/client.go b/bot/client.go deleted file mode 100644 index 607b583..0000000 --- a/bot/client.go +++ /dev/null @@ -1,136 +0,0 @@ -package bot - -import ( - "errors" - "sync" - - "github.com/google/uuid" - - "github.com/Tnze/go-mc/data/packetid" - "github.com/Tnze/go-mc/net" - pk "github.com/Tnze/go-mc/net/packet" - "github.com/Tnze/go-mc/net/queue" - "github.com/Tnze/go-mc/registry" -) - -// Client is used to access Minecraft server -type Client struct { - Conn *Conn - Auth Auth - - // These are filled when login process - Name string - UUID uuid.UUID - Registries registry.Registries - Cookies map[string][]byte - - // Ingame packet handlers - Events Events - - // Login plugins - LoginPlugin map[string]CustomPayloadHandler - - // Configuration handler - ConfigHandler - - CustomReportDetails map[string]string -} - -// CustomPayloadHandler is a function handling custom payload -type CustomPayloadHandler func(data []byte) ([]byte, error) - -func (c *Client) Close() error { - return c.Conn.Close() -} - -// NewClient init and return a new Client. -// -// A new Client has default name "Steve" and zero UUID. -// It is usable for an offline-mode game. -// -// For online-mode, you need login your Mojang account -// and load your Name, UUID and AccessToken to client. -func NewClient() *Client { - return &Client{ - Auth: Auth{Name: "Steve"}, - Registries: registry.NewNetworkCodec(), - Events: Events{handlers: make([][]PacketHandler, packetid.ClientboundPacketIDGuard)}, - LoginPlugin: make(map[string]CustomPayloadHandler), - ConfigHandler: NewDefaultConfigHandler(), - CustomReportDetails: make(map[string]string), - } -} - -// Conn is a concurrently-safe warpper of net.Conn with packet queue. -// Note that not all methods are concurrently-safe. -type Conn struct { - *net.Conn - send, recv queue.Queue[pk.Packet] - pool sync.Pool // pool of recv packet data - rerr error -} - -func warpConn(c *net.Conn, qr, qw queue.Queue[pk.Packet]) *Conn { - wc := Conn{ - Conn: c, - send: qw, - recv: qr, - pool: sync.Pool{New: func() any { return []byte{} }}, - rerr: nil, - } - go func() { - for { - // take a buffer from pool, after the packet is handled we put it back - p := pk.Packet{Data: wc.pool.Get().([]byte)} - if err := c.ReadPacket(&p); err != nil { - wc.rerr = err - break - } - if ok := wc.recv.Push(p); !ok { - wc.rerr = errors.New("receive queue is full") - break - } - } - wc.recv.Close() - }() - go func() { - for { - p, ok := wc.send.Pull() - if !ok { - break - } - if err := c.WritePacket(p); err != nil { - break - } - } - }() - - return &wc -} - -func (c *Conn) ReadPacket(p *pk.Packet) error { - packet, ok := c.recv.Pull() - if !ok { - return c.rerr - } - *p = packet - return nil -} - -func (c *Conn) WritePacket(p pk.Packet) error { - ok := c.send.Push(p) - if !ok { - return errors.New("queue is full") - } - return nil -} - -func (c *Conn) Close() error { - c.send.Close() - return c.Conn.Close() -} - -// Position is a 3D vector. -type Position struct { - X, Y, Z int -} diff --git a/bot/configuration.go b/bot/configuration.go deleted file mode 100644 index c43e875..0000000 --- a/bot/configuration.go +++ /dev/null @@ -1,396 +0,0 @@ -package bot - -import ( - "bytes" - "errors" - "fmt" - "io" - - "github.com/Tnze/go-mc/chat" - "github.com/Tnze/go-mc/data/packetid" - "github.com/Tnze/go-mc/net" - pk "github.com/Tnze/go-mc/net/packet" -) - -type ConfigHandler interface { - EnableFeature(features []pk.Identifier) - - PushResourcePack(res ResourcePack) - PopResourcePack(id pk.UUID) - PopAllResourcePack() - - SelectDataPacks(packs []DataPack) []DataPack -} - -type ResourcePack struct { - ID pk.UUID - URL string - Hash string - Forced bool - PromptMessage *chat.Message // Optional -} - -type ConfigErr struct { - Stage string - Err error -} - -func (l ConfigErr) Error() string { - return "bot: configuration error: [" + l.Stage + "] " + l.Err.Error() -} - -func (l ConfigErr) Unwrap() error { - return l.Err -} - -func (c *Client) joinConfiguration(conn *net.Conn) error { - for { - var p pk.Packet - if err := conn.ReadPacket(&p); err != nil { - return ConfigErr{"config custom payload", err} - } - - switch packetid.ClientboundPacketID(p.ID) { - case packetid.ClientboundConfigCookieRequest: - var key pk.Identifier - err := p.Scan(&key) - if err != nil { - return ConfigErr{"cookie request", err} - } - cookieContent := c.Cookies[string(key)] - err = conn.WritePacket(pk.Marshal( - packetid.ServerboundConfigCookieResponse, - key, pk.OptionEncoder[pk.ByteArray]{ - Has: cookieContent != nil, - Val: pk.ByteArray(cookieContent), - }, - )) - if err != nil { - return ConfigErr{"cookie response", err} - } - - case packetid.ClientboundConfigCustomPayload: - var channel pk.Identifier - var data pk.PluginMessageData - err := p.Scan(&channel, &data) - if err != nil { - return ConfigErr{"custom payload", err} - } - // TODO: Provide configuration custom data handling interface - // - // There are two types of Custom packet. - // One for Login stage, the other for config and play stage. - // The first one called "Custom Query", and the second one called "Custom Payload". - // We can know the different by their name, the "query" is one request to one response, paired. - // But the second one can be sent in any order. - // - // And the custome payload packet seems to be same in config stage and play stage. - // How do we provide API for that? - - case packetid.ClientboundConfigDisconnect: - const ErrStage = "disconnect" - var reason chat.Message - err := p.Scan(&reason) - if err != nil { - return ConfigErr{ErrStage, err} - } - return ConfigErr{ErrStage, DisconnectErr(reason)} - - case packetid.ClientboundConfigFinishConfiguration: - err := conn.WritePacket(pk.Marshal( - packetid.ServerboundConfigFinishConfiguration, - )) - if err != nil { - return ConfigErr{"finish config", err} - } - return nil - - case packetid.ClientboundConfigKeepAlive: - const ErrStage = "keep alive" - var keepAliveID pk.Long - err := p.Scan(&keepAliveID) - if err != nil { - return ConfigErr{ErrStage, err} - } - // send it back - err = conn.WritePacket(pk.Marshal( - packetid.ServerboundConfigKeepAlive, - keepAliveID, - )) - if err != nil { - return ConfigErr{ErrStage, err} - } - - case packetid.ClientboundConfigPing: - var pingID pk.Int - err := p.Scan(&pingID) - if err != nil { - return ConfigErr{"ping", err} - } - // send it back - err = conn.WritePacket(pk.Marshal( - packetid.ServerboundConfigPong, - pingID, - )) - if err != nil { - return ConfigErr{"pong", err} - } - - case packetid.ClientboundConfigResetChat: - // TODO - - case packetid.ClientboundConfigRegistryData: - const ErrStage = "registry" - var registryID pk.Identifier - - r := bytes.NewReader(p.Data) - _, err := registryID.ReadFrom(r) - if err != nil { - return ConfigErr{ErrStage, err} - } - - registry := c.Registries.Registry(string(registryID)) - if registry == nil { - return ConfigErr{ErrStage, errors.New("unknown registry: " + string(registryID))} - } - - _, err = registry.ReadFrom(r) - if err != nil { - return ConfigErr{ErrStage, fmt.Errorf("failed to read registry %s: %w", registryID, err)} - } - - case packetid.ClientboundConfigResourcePackPop: - var id pk.Option[pk.UUID, *pk.UUID] - err := p.Scan(&id) - if err != nil { - return ConfigErr{"resource pack pop", err} - } - - case packetid.ClientboundConfigResourcePackPush: - var id pk.UUID - var Url, Hash pk.String - var Forced pk.Boolean - var PromptMessage pk.Option[chat.Message, *chat.Message] - err := p.Scan( - &id, - &Url, - &Hash, - &Forced, - &PromptMessage, - ) - if err != nil { - return ConfigErr{"resource pack", err} - } - res := ResourcePack{ - ID: id, - URL: string(Url), - Hash: string(Hash), - Forced: bool(Forced), - } - if PromptMessage.Has { - res.PromptMessage = &PromptMessage.Val - } - c.ConfigHandler.PushResourcePack(res) - - case packetid.ClientboundConfigStoreCookie: - var key pk.Identifier - var payload pk.ByteArray - err := p.Scan(&key, &payload) - if err != nil { - return ConfigErr{"store cookie", err} - } - c.Cookies[string(key)] = []byte(payload) - - case packetid.ClientboundConfigTransfer: - var host pk.String - var port pk.VarInt - err := p.Scan(&host, &port) - if err != nil { - return ConfigErr{"transfer", err} - } - // TODO: trnasfer to the specific server - // How does it work? Just connect the new server, and re-start at handshake? - - case packetid.ClientboundConfigUpdateEnabledFeatures: - features := []pk.Identifier{} - err := p.Scan(pk.Array(&features)) - if err != nil { - return ConfigErr{"update enabled features", err} - } - c.ConfigHandler.EnableFeature(features) - - case packetid.ClientboundConfigUpdateTags: - const ErrStage = "update tags" - r := bytes.NewReader(p.Data) - - var length pk.VarInt - _, err := length.ReadFrom(r) - if err != nil { - return ConfigErr{ErrStage, err} - } - - var registryID pk.Identifier - for i := 0; i < int(length); i++ { - _, err = registryID.ReadFrom(r) - if err != nil { - return ConfigErr{ErrStage, err} - } - - registry := c.Registries.Registry(string(registryID)) - if registry == nil { - // TODO: Sice our registry system is incompelted, ignore all tags bind to non-exist registry - _, err = idleTagsDecoder{}.ReadFrom(r) - if err != nil { - return ConfigErr{ErrStage, err} - } - continue - // return ConfigErr{ErrStage, errors.New("unknown registry: " + string(registryID))} - } - - _, err = registry.ReadTagsFrom(r) - if err != nil { - return ConfigErr{ErrStage, err} - } - } - - case packetid.ClientboundConfigSelectKnownPacks: - const ErrStage = "select known packs" - packs := []DataPack{} - err := p.Scan(pk.Array(&packs)) - if err != nil { - return ConfigErr{ErrStage, err} - } - knwonPacks := c.ConfigHandler.SelectDataPacks(packs) - err = conn.WritePacket(pk.Marshal( - packetid.ServerboundConfigSelectKnownPacks, - pk.Array(knwonPacks), - )) - if err != nil { - return ConfigErr{ErrStage, err} - } - - case packetid.ClientboundConfigCustomReportDetails: - const ErrStage = "custom report details" - var length pk.VarInt - var title, description pk.String - r := bytes.NewReader(p.Data) - _, err := length.ReadFrom(r) - if err != nil { - return ConfigErr{ErrStage, err} - } - for i := 0; i < int(length); i++ { - _, err = title.ReadFrom(r) - if err != nil { - return ConfigErr{ErrStage, err} - } - _, err = description.ReadFrom(r) - if err != nil { - return ConfigErr{ErrStage, err} - } - c.CustomReportDetails[string(title)] = string(description) - } - - case packetid.ClientboundConfigServerLinks: - // TODO - } - } -} - -type DataPack struct { - Namespace string - ID string - Version string -} - -func (d DataPack) WriteTo(w io.Writer) (n int64, err error) { - n, err = pk.String(d.Namespace).WriteTo(w) - if err != nil { - return n, err - } - n1, err := pk.String(d.ID).WriteTo(w) - if err != nil { - return n + n1, err - } - n2, err := pk.String(d.Version).WriteTo(w) - return n + n1 + n2, err -} - -func (d *DataPack) ReadFrom(r io.Reader) (n int64, err error) { - n, err = (*pk.String)(&d.Namespace).ReadFrom(r) - if err != nil { - return n, err - } - n1, err := (*pk.String)(&d.ID).ReadFrom(r) - if err != nil { - return n + n1, err - } - n2, err := (*pk.String)(&d.Version).ReadFrom(r) - return n + n1 + n2, err -} - -type DefaultConfigHandler struct { - resourcesPack []ResourcePack -} - -func NewDefaultConfigHandler() *DefaultConfigHandler { - return &DefaultConfigHandler{ - resourcesPack: make([]ResourcePack, 0), - } -} - -func (d *DefaultConfigHandler) EnableFeature(features []pk.Identifier) {} - -func (d *DefaultConfigHandler) PushResourcePack(res ResourcePack) { - d.resourcesPack = append(d.resourcesPack, res) -} - -func (d *DefaultConfigHandler) PopResourcePack(id pk.UUID) { - for i, v := range d.resourcesPack { - if id == v.ID { - d.resourcesPack = append(d.resourcesPack[:i], d.resourcesPack[i+1:]...) - break - } - } -} - -func (d *DefaultConfigHandler) PopAllResourcePack() { - d.resourcesPack = d.resourcesPack[:0] -} - -func (d *DefaultConfigHandler) SelectDataPacks(packs []DataPack) []DataPack { - return []DataPack{} -} - -type idleTagsDecoder struct{} - -func (idleTagsDecoder) ReadFrom(r io.Reader) (int64, error) { - var count pk.VarInt - var tag pk.Identifier - var length pk.VarInt - n, err := count.ReadFrom(r) - if err != nil { - return n, err - } - for i := 0; i < int(count); i++ { - var n1, n2, n3 int64 - n1, err = tag.ReadFrom(r) - if err != nil { - return n + n1, err - } - n2, err = length.ReadFrom(r) - if err != nil { - return n + n1 + n2, err - } - n += n1 + n2 - - var id pk.VarInt - for i := 0; i < int(length); i++ { - n3, err = id.ReadFrom(r) - if err != nil { - return n + n3, err - } - n += n3 - } - } - return n, nil -} diff --git a/bot/event.go b/bot/event.go deleted file mode 100644 index 5f5a3ad..0000000 --- a/bot/event.go +++ /dev/null @@ -1,51 +0,0 @@ -package bot - -import ( - "sort" - "strconv" - - "github.com/Tnze/go-mc/data/packetid" - pk "github.com/Tnze/go-mc/net/packet" -) - -type Events struct { - generic []PacketHandler // for every packet - handlers [][]PacketHandler // for specific packet id only -} - -func (e *Events) AddListener(listeners ...PacketHandler) { - for _, l := range listeners { - // panic if l.ID is invalid - if l.ID < 0 || int(l.ID) >= len(e.handlers) { - panic("Invalid packet ID (" + strconv.Itoa(int(l.ID)) + ")") - } - if s := e.handlers[l.ID]; s == nil { - e.handlers[l.ID] = []PacketHandler{l} - } else { - e.handlers[l.ID] = append(s, l) - sortPacketHandlers(e.handlers[l.ID]) - } - } -} - -// AddGeneric adds listeners like AddListener, but the packet ID is ignored. -// Generic listener is always called before specific packet listener. -func (e *Events) AddGeneric(listeners ...PacketHandler) { - e.generic = append(e.generic, listeners...) - sortPacketHandlers(e.generic) -} - -type ( - PacketHandlerFunc func(p pk.Packet) error - PacketHandler struct { - ID packetid.ClientboundPacketID - Priority int - F func(p pk.Packet) error - } -) - -func sortPacketHandlers(slice []PacketHandler) { - sort.SliceStable(slice, func(i, j int) bool { - return slice[i].Priority > slice[j].Priority - }) -} diff --git a/bot/example_test.go b/bot/example_test.go deleted file mode 100644 index 73fa1e1..0000000 --- a/bot/example_test.go +++ /dev/null @@ -1,79 +0,0 @@ -package bot - -import ( - "encoding/hex" - "log" - - "github.com/Tnze/go-mc/offline" - "github.com/Tnze/go-mc/yggdrasil" -) - -func ExamplePingAndList() { - resp, delay, err := PingAndList("localhost:25565") - if err != nil { - log.Fatalf("ping and list server fail: %v", err) - } - - log.Println("Status:", string(resp)) - log.Println("Delay:", delay) -} - -func ExampleClient_JoinServer_offline() { - c := NewClient() - c.Auth.Name = "Tnze" // set its name before login. - - id := offline.NameToUUID(c.Auth.Name) // optional, get uuid of offline mode game - c.Auth.UUID = hex.EncodeToString(id[:]) - - // Login - err := c.JoinServer("127.0.0.1") - if err != nil { - log.Fatal(err) - } - log.Println("Login success") - - // Register event handlers - // c.Events.AddListener(...) - - // JoinGame - err = c.HandleGame() - if err != nil { - log.Fatal(err) - } -} - -func ExampleClient_JoinServer_online() { - c := NewClient() - - // Login Mojang account to get AccessToken - // To use Microsoft Account, see issue #106 - // https://github.com/Tnze/go-mc/issues/106 - auth, err := yggdrasil.Authenticate("Your E-mail", "Your Password") - if err != nil { - panic(err) - } - - // As long as you set these three fields correctly, - // the client can connect to the online-mode server - c.Auth.UUID, c.Auth.Name = auth.SelectedProfile() - c.Auth.AsTk = auth.AccessToken() - - // Connect server - err = c.JoinServer("127.0.0.1") - if err != nil { - log.Fatal(err) - } - log.Println("Login success") - - // Register event handlers - // c.Events.GameStart = onGameStartFunc - // c.Events.ChatMsg = onChatMsgFunc - // c.Events.Disconnect = onDisconnectFunc - // ... - - // Join the game - err = c.HandleGame() - if err != nil { - log.Fatal(err) - } -} diff --git a/bot/ingame.go b/bot/ingame.go deleted file mode 100644 index 7188f2e..0000000 --- a/bot/ingame.go +++ /dev/null @@ -1,93 +0,0 @@ -package bot - -import ( - "errors" - "fmt" - - "github.com/Tnze/go-mc/data/packetid" - pk "github.com/Tnze/go-mc/net/packet" -) - -// HandleGame receive server packet and response them correctly. -// Note that HandleGame will block if you don't receive from Events. -func (c *Client) HandleGame() error { - for { - var p pk.Packet - // Read packets - if err := c.Conn.ReadPacket(&p); err != nil { - return err - } - - if p.ID == int32(packetid.BundleDelimiter) { - err := c.handleBundlePackets() - if err != nil { - return err - } - } else { - // handle packets - err := c.handlePacket(p) - if err != nil { - return err - } - - // return the packet buffer - c.Conn.pool.Put(p.Data) - } - } -} - -type PacketHandlerError struct { - ID packetid.ClientboundPacketID - Err error -} - -func (d PacketHandlerError) Error() string { - return fmt.Sprintf("handle packet %v error: %v", d.ID, d.Err) -} - -func (d PacketHandlerError) Unwrap() error { - return d.Err -} - -func (c *Client) handleBundlePackets() (err error) { - var packets []pk.Packet - for i := 0; i < 4096; i++ { - var p pk.Packet - // Read packets - if err := c.Conn.ReadPacket(&p); err != nil { - return err - } - - if p.ID == int32(packetid.BundleDelimiter) { - // bundle finished - goto handlePackets - } - - packets = append(packets, p) - } - return errors.New("packet number of a bundle out of limit") - -handlePackets: - for i := range packets { - if err := c.handlePacket(packets[i]); err != nil { - return err - } - } - return nil -} - -func (c *Client) handlePacket(p pk.Packet) (err error) { - packetID := packetid.ClientboundPacketID(p.ID) - for _, handler := range c.Events.generic { - if err = handler.F(p); err != nil { - return PacketHandlerError{ID: packetID, Err: err} - } - } - for _, handler := range c.Events.handlers[packetID] { - err = handler.F(p) - if err != nil { - return PacketHandlerError{ID: packetID, Err: err} - } - } - return -} diff --git a/bot/login.go b/bot/login.go deleted file mode 100644 index 4c647a8..0000000 --- a/bot/login.go +++ /dev/null @@ -1,328 +0,0 @@ -package bot - -import ( - "bytes" - "crypto/aes" - "crypto/cipher" - "crypto/rand" - "crypto/rsa" - "crypto/sha1" - "crypto/x509" - "encoding/hex" - "encoding/json" - "fmt" - "io" - "net/http" - "strings" - - "github.com/google/uuid" - - "github.com/Tnze/go-mc/chat" - "github.com/Tnze/go-mc/data/packetid" - "github.com/Tnze/go-mc/net" - "github.com/Tnze/go-mc/net/CFB8" - pk "github.com/Tnze/go-mc/net/packet" -) - -type LoginErr struct { - Stage string - Err error -} - -func (l LoginErr) Error() string { - return "bot: login error: [" + l.Stage + "] " + l.Err.Error() -} - -func (l LoginErr) Unwrap() error { - return l.Err -} - -func (c *Client) joinLogin(conn *net.Conn) error { - var err error - if c.Auth.UUID != "" { - c.UUID, err = uuid.Parse(c.Auth.UUID) - if err != nil { - return LoginErr{"login start", err} - } - } - err = conn.WritePacket(pk.Marshal( - packetid.ServerboundLoginHello, - pk.String(c.Auth.Name), - pk.UUID(c.UUID), - )) - if err != nil { - return LoginErr{"login start", err} - } - receiving := "encrypt start" - for { - // Receive Packet - var p pk.Packet - if err = conn.ReadPacket(&p); err != nil { - return LoginErr{receiving, err} - } - - // Handle Packet - switch packetid.ClientboundPacketID(p.ID) { - case packetid.ClientboundLoginLoginDisconnect: // LoginDisconnect - var reason chat.JsonMessage - err = p.Scan(&reason) - if err != nil { - return LoginErr{"disconnect", err} - } - return LoginErr{"disconnect", DisconnectErr(reason)} - - case packetid.ClientboundLoginHello: // Encryption Request - if err := handleEncryptionRequest(conn, c, p); err != nil { - return LoginErr{"encryption", err} - } - receiving = "set compression" - - case packetid.ClientboundLoginGameProfile: // Login Success - err := p.Scan( - (*pk.UUID)(&c.UUID), - (*pk.String)(&c.Name), - ) - if err != nil { - return LoginErr{"login success", err} - } - err = conn.WritePacket(pk.Marshal(packetid.ServerboundLoginLoginAcknowledged)) - if err != nil { - return LoginErr{"login success", err} - } - return nil - - case packetid.ClientboundLoginLoginCompression: // Set Compression - var threshold pk.VarInt - if err := p.Scan(&threshold); err != nil { - return LoginErr{"compression", err} - } - conn.SetThreshold(int(threshold)) - receiving = "login success" - - case packetid.ClientboundLoginCustomQuery: // Login Plugin Request - var ( - msgid pk.VarInt - channel pk.Identifier - data pk.PluginMessageData - ) - if err := p.Scan(&msgid, &channel, &data); err != nil { - return LoginErr{"Login Plugin", err} - } - - var PluginMessageData pk.Option[pk.PluginMessageData, *pk.PluginMessageData] - if handler, ok := c.LoginPlugin[string(channel)]; ok { - PluginMessageData.Has = true - PluginMessageData.Val, err = handler(data) - if err != nil { - return LoginErr{"Login Plugin", err} - } - } - - if err := conn.WritePacket(pk.Marshal( - packetid.ServerboundLoginCustomQueryAnswer, - msgid, PluginMessageData, - )); err != nil { - return LoginErr{"login Plugin", err} - } - - case packetid.ClientboundLoginCookieRequest: - var key pk.Identifier - err := p.Scan(&key) - if err != nil { - return LoginErr{"cookie request", err} - } - cookieContent := c.Cookies[string(key)] - err = conn.WritePacket(pk.Marshal( - packetid.ServerboundLoginCookieResponse, - key, pk.OptionEncoder[pk.ByteArray]{ - Has: cookieContent != nil, - Val: pk.ByteArray(cookieContent), - }, - )) - if err != nil { - return LoginErr{"cookie response", err} - } - } - } -} - -// Auth includes an account -type Auth struct { - Name string - UUID string - AsTk string -} - -func handleEncryptionRequest(conn *net.Conn, c *Client, p pk.Packet) error { - // 创建AES对称加密密钥 - key, encoStream, decoStream := newSymmetricEncryption() - - // Read EncryptionRequest - var er encryptionRequest - if err := p.Scan(&er); err != nil { - return err - } - - err := loginAuth(c.Auth, key, er) // 向Mojang验证 - if err != nil { - return fmt.Errorf("login fail: %v", err) - } - - // 响应加密请求 - // Write Encryption Key Response - p, err = genEncryptionKeyResponse(key, er.PublicKey, er.VerifyToken) - if err != nil { - return fmt.Errorf("gen encryption key response fail: %v", err) - } - - err = conn.WritePacket(p) - if err != nil { - return err - } - - // 设置连接加密 - conn.SetCipher(encoStream, decoStream) - return nil -} - -type encryptionRequest struct { - ServerID string - PublicKey []byte - VerifyToken []byte -} - -func (e *encryptionRequest) ReadFrom(r io.Reader) (int64, error) { - return pk.Tuple{ - (*pk.String)(&e.ServerID), - (*pk.ByteArray)(&e.PublicKey), - (*pk.ByteArray)(&e.VerifyToken), - }.ReadFrom(r) -} - -// authDigest computes a special SHA-1 digest required for Minecraft web -// authentication on Premium servers (online-mode=true). -// Source: http://wiki.vg/Protocol_Encryption#Server -func authDigest(serverID string, sharedSecret, publicKey []byte) string { - h := sha1.New() - h.Write([]byte(serverID)) - h.Write(sharedSecret) - h.Write(publicKey) - hash := h.Sum(nil) - - // Check for negative hashes - negative := (hash[0] & 0x80) == 0x80 - if negative { - hash = twosComplement(hash) - } - - // Trim away zeroes - res := strings.TrimLeft(hex.EncodeToString(hash), "0") - if negative { - res = "-" + res - } - - return res -} - -// little endian -func twosComplement(p []byte) []byte { - carry := true - for i := len(p) - 1; i >= 0; i-- { - p[i] = ^p[i] - if carry { - carry = p[i] == 0xff - p[i]++ - } - } - return p -} - -type profile struct { - ID string `json:"id"` - Name string `json:"name"` -} - -type request struct { - AccessToken string `json:"accessToken"` - SelectedProfile profile `json:"selectedProfile"` - ServerID string `json:"serverId"` -} - -func loginAuth(auth Auth, shareSecret []byte, er encryptionRequest) error { - digest := authDigest(er.ServerID, shareSecret, er.PublicKey) - - requestPacket, err := json.Marshal( - request{ - AccessToken: auth.AsTk, - SelectedProfile: profile{ - ID: auth.UUID, - Name: auth.Name, - }, - ServerID: digest, - }, - ) - if err != nil { - return fmt.Errorf("create request packet to yggdrasil faile: %v", err) - } - - PostRequest, err := http.NewRequest(http.MethodPost, "https://sessionserver.mojang.com/session/minecraft/join", - bytes.NewReader(requestPacket)) - if err != nil { - return fmt.Errorf("make request error: %v", err) - } - PostRequest.Header.Set("User-agent", "go-mc") - PostRequest.Header.Set("Connection", "keep-alive") - PostRequest.Header.Set("Content-Type", "application/json") - resp, err := http.DefaultClient.Do(PostRequest) - if err != nil { - return fmt.Errorf("post fail: %v", err) - } - defer resp.Body.Close() - - body, _ := io.ReadAll(resp.Body) - if resp.StatusCode != http.StatusNoContent { - return fmt.Errorf("auth fail: %s", string(body)) - } - return nil -} - -// AES/CFB8 with random key -func newSymmetricEncryption() (key []byte, encoStream, decoStream cipher.Stream) { - key = make([]byte, 16) - if _, err := rand.Read(key); err != nil { - panic(err) - } - - b, err := aes.NewCipher(key) - if err != nil { - panic(err) - } - decoStream = CFB8.NewCFB8Decrypt(b, key) - encoStream = CFB8.NewCFB8Encrypt(b, key) - return -} - -func genEncryptionKeyResponse(shareSecret, publicKey, verifyToken []byte) (erp pk.Packet, err error) { - iPK, err := x509.ParsePKIXPublicKey(publicKey) // Decode Public Key - if err != nil { - err = fmt.Errorf("decode public key fail: %v", err) - return - } - rsaKey := iPK.(*rsa.PublicKey) - cryptPK, err := rsa.EncryptPKCS1v15(rand.Reader, rsaKey, shareSecret) - if err != nil { - err = fmt.Errorf("encryption share secret fail: %v", err) - return - } - - verifyT, err := rsa.EncryptPKCS1v15(rand.Reader, rsaKey, verifyToken) - if err != nil { - err = fmt.Errorf("encryption verfy tokenfail: %v", err) - return erp, err - } - return pk.Marshal( - packetid.ServerboundLoginKey, - pk.ByteArray(cryptPK), - pk.ByteArray(verifyT), - ), nil -} diff --git a/bot/mcbot.go b/bot/mcbot.go deleted file mode 100644 index ce27cf9..0000000 --- a/bot/mcbot.go +++ /dev/null @@ -1,128 +0,0 @@ -// Package bot implements a simple Minecraft client that can join a server -// or just ping it for getting information. -// -// Runnable example could be found at examples/ . -package bot - -import ( - "context" - "errors" - "net" - "strconv" - - "github.com/Tnze/go-mc/chat" - mcnet "github.com/Tnze/go-mc/net" - pk "github.com/Tnze/go-mc/net/packet" - "github.com/Tnze/go-mc/net/queue" - "github.com/Tnze/go-mc/yggdrasil/user" -) - -// ProtocolVersion is the protocol version number of minecraft net protocol -const ( - ProtocolVersion = 767 - DefaultPort = mcnet.DefaultPort -) - -type JoinOptions struct { - MCDialer mcnet.MCDialer - Context context.Context - - // Indicate not to fetch and sending player's PubKey - NoPublicKey bool - - // Specify the player PubKey to use. - // If nil, it will be obtained from Mojang when joining - KeyPair *user.KeyPairResp - - QueueRead queue.Queue[pk.Packet] - QueueWrite queue.Queue[pk.Packet] -} - -// JoinServer connect a Minecraft server for playing the game. -// Using roughly the same way to parse address as minecraft. -func (c *Client) JoinServer(addr string) (err error) { - return c.JoinServerWithOptions(addr, JoinOptions{}) -} - -// JoinServerWithDialer is similar to JoinServer but using a net.Dialer. -func (c *Client) JoinServerWithDialer(dialer *net.Dialer, addr string) (err error) { - return c.JoinServerWithOptions(addr, JoinOptions{ - MCDialer: (*mcnet.Dialer)(dialer), - }) -} - -func (c *Client) JoinServerWithOptions(addr string, options JoinOptions) (err error) { - if options.MCDialer == nil { - options.MCDialer = &mcnet.DefaultDialer - } - if options.Context == nil { - options.Context = context.Background() - } - if options.QueueRead == nil { - options.QueueRead = queue.NewLinkedQueue[pk.Packet]() - } - if options.QueueWrite == nil { - options.QueueWrite = queue.NewLinkedQueue[pk.Packet]() - } - return c.join(addr, options) -} - -func (c *Client) join(addr string, options JoinOptions) error { - const Handshake = 0x00 - - // Split Host and Port. The DialMCContext will do this once, - // but we need the result for sending handshake packet here. - host, portStr, err := net.SplitHostPort(addr) - var port uint64 - if err != nil { - var addrErr *net.AddrError - const missingPort = "missing port in address" - if errors.As(err, &addrErr) && addrErr.Err == missingPort { - host = addr - port = 25565 - } else { - return LoginErr{"split address", err} - } - } else { - port, err = strconv.ParseUint(portStr, 0, 16) - if err != nil { - return LoginErr{"parse port", err} - } - } - - // Dial connection - conn, err := options.MCDialer.DialMCContext(options.Context, addr) - if err != nil { - return LoginErr{"connect server", err} - } - - // Handshake - err = conn.WritePacket(pk.Marshal( - Handshake, - pk.VarInt(ProtocolVersion), // Protocol version - pk.String(host), // Host - pk.UnsignedShort(port), // Port - pk.VarInt(2), - )) - if err != nil { - return LoginErr{"handshake", err} - } - - // Login Start - if err := c.joinLogin(conn); err != nil { - return err - } - - // Configuration - if err := c.joinConfiguration(conn); err != nil { - return err - } - c.Conn = warpConn(conn, options.QueueRead, options.QueueWrite) - return nil -} - -type DisconnectErr chat.Message - -func (d DisconnectErr) Error() string { - return "disconnect because: " + chat.Message(d).String() -} diff --git a/bot/msg/chat.go b/bot/msg/chat.go deleted file mode 100644 index 460cf5a..0000000 --- a/bot/msg/chat.go +++ /dev/null @@ -1,221 +0,0 @@ -package msg - -import ( - "crypto/rand" - "encoding/binary" - "errors" - "time" - - "github.com/google/uuid" - - "github.com/Tnze/go-mc/bot" - "github.com/Tnze/go-mc/bot/basic" - "github.com/Tnze/go-mc/bot/playerlist" - "github.com/Tnze/go-mc/chat" - "github.com/Tnze/go-mc/chat/sign" - "github.com/Tnze/go-mc/data/packetid" - pk "github.com/Tnze/go-mc/net/packet" -) - -// The Manager is used to receive and send chat messages. -type Manager struct { - c *bot.Client - p *basic.Player - pl *playerlist.PlayerList - events EventsHandler - - sign.SignatureCache -} - -// New returns a new chat manager. -func New(c *bot.Client, p *basic.Player, pl *playerlist.PlayerList, events EventsHandler) *Manager { - m := &Manager{ - c: c, - p: p, - pl: pl, - events: events, - SignatureCache: sign.NewSignatureCache(), - } - if events.SystemChat != nil { - c.Events.AddListener(bot.PacketHandler{ - Priority: 64, ID: packetid.ClientboundSystemChat, - F: m.handleSystemChat, - }) - } - if events.PlayerChatMessage != nil { - c.Events.AddListener(bot.PacketHandler{ - Priority: 64, ID: packetid.ClientboundPlayerChat, - F: m.handlePlayerChat, - }) - } - if events.DisguisedChat != nil { - c.Events.AddListener(bot.PacketHandler{ - Priority: 64, ID: packetid.ClientboundDisguisedChat, - F: m.handleDisguisedChat, - }) - } - return m -} - -func (m *Manager) handleSystemChat(p pk.Packet) error { - var msg chat.Message - var overlay pk.Boolean - if err := p.Scan(&msg, &overlay); err != nil { - return err - } - return m.events.SystemChat(msg, bool(overlay)) -} - -func (m *Manager) handlePlayerChat(packet pk.Packet) error { - var ( - sender pk.UUID - index pk.VarInt - signature pk.Option[sign.Signature, *sign.Signature] - body sign.PackedMessageBody - unsignedContent pk.Option[chat.Message, *chat.Message] - filter sign.FilterMask - chatType chat.Type - ) - if err := packet.Scan(&sender, &index, &signature, &body, &unsignedContent, &filter, &chatType); err != nil { - return err - } - - unpackedMsg, err := body.Unpack(&m.SignatureCache) - if err != nil { - return InvalidChatPacket{err} - } - senderInfo, ok := m.pl.PlayerInfos[uuid.UUID(sender)] - if !ok { - return InvalidChatPacket{ErrUnknownPlayer} - } - ct := m.c.Registries.ChatType.GetByID(chatType.ID) - if ct == nil { - return InvalidChatPacket{ErrUnknwonChatType} - } - - var message sign.Message - if senderInfo.ChatSession != nil { - message.Prev = sign.Prev{ - Index: int(index), - Sender: uuid.UUID(sender), - Session: senderInfo.ChatSession.SessionID, - } - } else { - message.Prev = sign.Prev{ - Index: 0, - Sender: uuid.UUID(sender), - Session: uuid.Nil, - } - } - message.Signature = signature.Pointer() - message.MessageBody = unpackedMsg - message.Unsigned = unsignedContent.Pointer() - message.FilterMask = filter - - var validated bool - if senderInfo.ChatSession != nil { - if !senderInfo.ChatSession.VerifyAndUpdate(&message) { - return ErrValidationFailed - } - validated = true - // store signature into signatureCache - m.PopOrInsert(signature.Pointer(), message.LastSeen) - } - - var content chat.Message - if unsignedContent.Has { - content = unsignedContent.Val - } else { - content = chat.Text(body.PlainMsg) - } - msg := chatType.Decorate(content, &ct.Chat) - return m.events.PlayerChatMessage(msg, validated) -} - -func (m *Manager) handleDisguisedChat(packet pk.Packet) error { - var ( - message chat.Message - chatType chat.Type - ) - if err := packet.Scan(&message, &chatType); err != nil { - return err - } - - ct := m.c.Registries.ChatType.GetByID(chatType.ID) - if ct == nil { - return InvalidChatPacket{ErrUnknwonChatType} - } - msg := chatType.Decorate(message, &ct.Chat) - - return m.events.DisguisedChat(msg) -} - -// SendMessage send chat message to server. -// Doesn't support sending message with signature currently. -func (m *Manager) SendMessage(msg string) error { - if len(msg) > 256 { - return errors.New("message length greater than 256") - } - - var salt int64 - if err := binary.Read(rand.Reader, binary.BigEndian, &salt); err != nil { - return err - } - - err := m.c.Conn.WritePacket(pk.Marshal( - packetid.ServerboundChat, - pk.String(msg), - pk.Long(time.Now().UnixMilli()), - pk.Long(salt), - pk.Boolean(false), // signature - sign.HistoryUpdate{ - Acknowledged: pk.NewFixedBitSet(20), - }, - )) - return err -} - -// SendMessage send chat message to server. -// Doesn't support sending message with signature currently. -func (m *Manager) SendCommand(command string) error { - if len(command) > 256 { - return errors.New("message length greater than 256") - } - var salt int64 - if err := binary.Read(rand.Reader, binary.BigEndian, &salt); err != nil { - return err - } - - err := m.c.Conn.WritePacket(pk.Marshal( - packetid.ServerboundChatCommand, - pk.String(command), - pk.Long(time.Now().UnixMilli()), - pk.Long(salt), - pk.Ary[pk.VarInt]{Ary: []pk.Tuple{}}, - sign.HistoryUpdate{ - Acknowledged: pk.NewFixedBitSet(20), - }, - )) - return err -} - -type InvalidChatPacket struct { - err error -} - -func (i InvalidChatPacket) Error() string { - if i.err == nil { - return "invalid chat packet" - } - return "invalid chat packet: " + i.err.Error() -} - -func (i InvalidChatPacket) Unwrap() error { - return i.err -} - -var ( - ErrUnknownPlayer = errors.New("unknown player") - ErrUnknwonChatType = errors.New("unknown chat type") - ErrValidationFailed error = bot.DisconnectErr(chat.TranslateMsg("multiplayer.disconnect.chat_validation_failed")) -) diff --git a/bot/msg/events.go b/bot/msg/events.go deleted file mode 100644 index 7353e3e..0000000 --- a/bot/msg/events.go +++ /dev/null @@ -1,29 +0,0 @@ -package msg - -import "github.com/Tnze/go-mc/chat" - -// EventsHandler is a collection of event handlers. -// Fill the fields with your handler functions and pass this struct to [New] to create the msg manager. -// The handler functions will be called when the corresponding event is triggered. -// Leave the fields as nil if you don't want to handle the event. -type EventsHandler struct { - // SystemChat handles messages sent by gaming system. - // - // In vanilla client: - // If overlay is false, the message will be displayed in the chat box. - // If overlay is true, the message will be displayed on the top of the hot-bar. - SystemChat func(msg chat.Message, overlay bool) error - - // PlayerChatMessage handles messages sent by players. - // - // Message signing system is added in 1.19. The message and its context could be signed by the player's private key. - // The manager tries to verify the message signature through the player's public key, - // and return the result as validated boolean. - PlayerChatMessage func(msg chat.Message, validated bool) error - - // DisguisedChat handles DisguisedChat message. - // - // DisguisedChat message used to send system chat. - // Now it is used to send messages from "/say" command from server console. - DisguisedChat func(msg chat.Message) error -} diff --git a/bot/pinglist.go b/bot/pinglist.go deleted file mode 100644 index 71a4653..0000000 --- a/bot/pinglist.go +++ /dev/null @@ -1,137 +0,0 @@ -package bot - -import ( - "context" - "errors" - "fmt" - "net" - "os" - "strconv" - "time" - - "github.com/Tnze/go-mc/data/packetid" - mcnet "github.com/Tnze/go-mc/net" - pk "github.com/Tnze/go-mc/net/packet" -) - -// PingAndList check server status and list online player. -// Returns a JSON data with server status, and the delay. -// -// For more information for JSON format, see https://wiki.vg/Server_List_Ping#Response -func PingAndList(addr string) ([]byte, time.Duration, error) { - conn, err := mcnet.DialMC(addr) - if err != nil { - return nil, 0, LoginErr{"dial connection", err} - } - return pingAndList(context.Background(), addr, conn) -} - -// PingAndListTimeout is the version of PingAndList with max request time. -func PingAndListTimeout(addr string, timeout time.Duration) ([]byte, time.Duration, error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return PingAndListContext(ctx, addr) -} - -func PingAndListContext(ctx context.Context, addr string) ([]byte, time.Duration, error) { - conn, err := mcnet.DefaultDialer.DialMCContext(ctx, addr) - if err != nil { - return nil, 0, err - } - return pingAndList(ctx, addr, conn) -} - -func pingAndList(ctx context.Context, addr string, conn *mcnet.Conn) (data []byte, delay time.Duration, err error) { - if deadline, hasDeadline := ctx.Deadline(); hasDeadline { - if err := conn.Socket.SetDeadline(deadline); err != nil { - return nil, 0, err - } - defer func() { - // Reset deadline - if err2 := conn.Socket.SetDeadline(time.Time{}); err2 != nil { - if err == nil { - err = err2 - } - return - } - // Map error type - if errors.Is(err, os.ErrDeadlineExceeded) { - err = context.DeadlineExceeded - } - }() - } - // Split Host and Port - host, portStr, err := net.SplitHostPort(addr) - var port uint64 - if err != nil { - var addrErr *net.AddrError - const missingPort = "missing port in address" - if errors.As(err, &addrErr) && addrErr.Err == missingPort { - host, port, err = addr, DefaultPort, nil - } else { - return nil, 0, LoginErr{"split address", err} - } - } else { - port, err = strconv.ParseUint(portStr, 0, 16) - if err != nil { - return nil, 0, LoginErr{"parse port", err} - } - } - - const Handshake = 0x00 - // 握手 - err = conn.WritePacket(pk.Marshal( - Handshake, // Handshake packet ID - pk.VarInt(ProtocolVersion), // Protocol version - pk.String(host), // Server's address - pk.UnsignedShort(port), - pk.Byte(1), - )) - if err != nil { - return nil, 0, fmt.Errorf("bot: send handshake packect fail: %v", err) - } - - // LIST - // 请求服务器状态 - err = conn.WritePacket(pk.Marshal( - packetid.ServerboundStatusStatusRequest, - )) - if err != nil { - return nil, 0, fmt.Errorf("bot: send list packect fail: %v", err) - } - - var p pk.Packet - // 服务器返回状态 - if err := conn.ReadPacket(&p); err != nil { - return nil, 0, fmt.Errorf("bot: recv list packect fail: %v", err) - } - var s pk.String - err = p.Scan(&s) - if err != nil { - return nil, 0, fmt.Errorf("bot: scan list packect fail: %v", err) - } - - // PING - startTime := time.Now() - err = conn.WritePacket(pk.Marshal( - packetid.ServerboundStatusPingRequest, - pk.Long(startTime.Unix()), - )) - if err != nil { - return nil, 0, fmt.Errorf("bot: send ping packect fail: %v", err) - } - - if err = conn.ReadPacket(&p); err != nil { - return nil, 0, fmt.Errorf("bot: recv pong packect fail: %v", err) - } - var t pk.Long - err = p.Scan(&t) - if err != nil { - return nil, 0, fmt.Errorf("bot: scan pong packect fail: %v", err) - } - if t != pk.Long(startTime.Unix()) { - return nil, 0, fmt.Errorf("bot: pong packect no match: %v", err) - } - - return []byte(s), time.Since(startTime), err -} diff --git a/bot/playerlist/playerlist.go b/bot/playerlist/playerlist.go deleted file mode 100644 index 5b5a2ed..0000000 --- a/bot/playerlist/playerlist.go +++ /dev/null @@ -1,167 +0,0 @@ -// Package playerlist contains a PlayerList struct that used to manage player information. -// -// The [PlayerList] contains a list of [PlayerInfo] which is received from server when client join. -// The playerlist contains every players' information of name, display name, uuid, gamemode, latency, public key, etc. -// And can be used to render the "TAB List". Other packages may also require playerlist to work, -// for example, the bot/msg package. -package playerlist - -import ( - "bytes" - - "github.com/google/uuid" - - "github.com/Tnze/go-mc/bot" - "github.com/Tnze/go-mc/chat" - "github.com/Tnze/go-mc/chat/sign" - "github.com/Tnze/go-mc/data/packetid" - pk "github.com/Tnze/go-mc/net/packet" - "github.com/Tnze/go-mc/yggdrasil/user" -) - -type PlayerList struct { - PlayerInfos map[uuid.UUID]*PlayerInfo -} - -func New(c *bot.Client) *PlayerList { - pl := PlayerList{ - PlayerInfos: make(map[uuid.UUID]*PlayerInfo), - } - c.Events.AddListener( - bot.PacketHandler{ - Priority: 64, ID: packetid.ClientboundPlayerInfoUpdate, - F: pl.handlePlayerInfoUpdatePacket, - }, - bot.PacketHandler{ - Priority: 64, ID: packetid.ClientboundPlayerInfoRemove, - F: pl.handlePlayerInfoRemovePacket, - }, - ) - return &pl -} - -func (pl *PlayerList) handlePlayerInfoUpdatePacket(p pk.Packet) error { - r := bytes.NewReader(p.Data) - - action := pk.NewFixedBitSet(6) - if _, err := action.ReadFrom(r); err != nil { - return err - } - - var length pk.VarInt - if _, err := length.ReadFrom(r); err != nil { - return err - } - - for i := 0; i < int(length); i++ { - var id pk.UUID - if _, err := id.ReadFrom(r); err != nil { - return err - } - - player, ok := pl.PlayerInfos[uuid.UUID(id)] - if !ok { // create new player info if not exist - player = new(PlayerInfo) - pl.PlayerInfos[uuid.UUID(id)] = player - } - - // add player - if action.Get(0) { - var name pk.String - var properties []user.Property - if _, err := (pk.Tuple{&name, pk.Array(&properties)}).ReadFrom(r); err != nil { - return err - } - player.GameProfile = GameProfile{ - ID: uuid.UUID(id), - Name: string(name), - Properties: properties, - } - } - // initialize chat - if action.Get(1) { - var chatSession pk.Option[sign.Session, *sign.Session] - if _, err := chatSession.ReadFrom(r); err != nil { - return err - } - if chatSession.Has { - player.ChatSession = chatSession.Pointer() - player.ChatSession.InitValidate() - } else { - player.ChatSession = nil - } - } - // update gamemode - if action.Get(2) { - var gamemode pk.VarInt - if _, err := gamemode.ReadFrom(r); err != nil { - return err - } - player.Gamemode = int32(gamemode) - } - // update listed - if action.Get(3) { - var listed pk.Boolean - if _, err := listed.ReadFrom(r); err != nil { - return err - } - player.Listed = bool(listed) - } - // update latency - if action.Get(4) { - var latency pk.VarInt - if _, err := latency.ReadFrom(r); err != nil { - return err - } - player.Latency = int32(latency) - } - // display name - if action.Get(5) { - var displayName pk.Option[chat.Message, *chat.Message] - if _, err := displayName.ReadFrom(r); err != nil { - return err - } - if displayName.Has { - player.DisplayName = &displayName.Val - } else { - player.DisplayName = nil - } - } - } - - return nil -} - -func (pl *PlayerList) handlePlayerInfoRemovePacket(p pk.Packet) error { - r := bytes.NewReader(p.Data) - var ( - length pk.VarInt - id pk.UUID - ) - if _, err := length.ReadFrom(r); err != nil { - return err - } - - for i := 0; i < int(length); i++ { - if _, err := id.ReadFrom(r); err != nil { - return err - } - delete(pl.PlayerInfos, uuid.UUID(id)) - } - return nil -} - -type PlayerInfo struct { - GameProfile - ChatSession *sign.Session - Gamemode int32 - Latency int32 - Listed bool - DisplayName *chat.Message -} - -type GameProfile struct { - ID uuid.UUID - Name string - Properties []user.Property -} diff --git a/bot/screen/chest.go b/bot/screen/chest.go deleted file mode 100644 index 7123a7f..0000000 --- a/bot/screen/chest.go +++ /dev/null @@ -1,39 +0,0 @@ -package screen - -import ( - "errors" - - "github.com/Tnze/go-mc/chat" - "github.com/Tnze/go-mc/data/inventory" -) - -type Chest struct { - Type inventory.InventoryID - Title chat.Message - Slots []Slot - Rows int -} - -func (c *Chest) onSetSlot(i int, slot Slot) error { - if i < 0 || i >= len(c.Slots) { - return errors.New("slot index out of bounds") - } - c.Slots[i] = slot - return nil -} - -func (c *Chest) onClose() error { - return nil -} - -func (c *Chest) Container() []Slot { - return c.Slots[0 : c.Rows*9] -} - -func (c *Chest) Main() []Slot { - return c.Slots[c.Rows*9 : c.Rows*9+27] -} - -func (c *Chest) Hotbar() []Slot { - return c.Slots[c.Rows*9+27 : (c.Rows+4)*9] -} diff --git a/bot/screen/events.go b/bot/screen/events.go deleted file mode 100644 index 26ff050..0000000 --- a/bot/screen/events.go +++ /dev/null @@ -1,9 +0,0 @@ -package screen - -import "github.com/Tnze/go-mc/chat" - -type EventsListener struct { - Open func(id int, container_type int32, title chat.Message) error - SetSlot func(id, index int) error - Close func(id int) error -} diff --git a/bot/screen/inventory.go b/bot/screen/inventory.go deleted file mode 100644 index b19e537..0000000 --- a/bot/screen/inventory.go +++ /dev/null @@ -1,29 +0,0 @@ -package screen - -import "errors" - -type Inventory struct { - Slots [46]Slot -} - -func (inv *Inventory) onClose() error { - return nil -} - -func (inv *Inventory) onSetSlot(i int, s Slot) error { - if i < 0 || i >= len(inv.Slots) { - return errors.New("slot index out of bounds") - } - inv.Slots[i] = s - return nil -} - -func (inv *Inventory) CraftingOutput() *Slot { return &inv.Slots[0] } -func (inv *Inventory) CraftingInput() []Slot { return inv.Slots[1 : 1+4] } - -// Armor returns to the armor section of the Inventory. -// The length is 4, which are head, chest, legs and feet. -func (inv *Inventory) Armor() []Slot { return inv.Slots[5 : 5+4] } -func (inv *Inventory) Main() []Slot { return inv.Slots[9 : 9+3*9] } -func (inv *Inventory) Hotbar() []Slot { return inv.Slots[36 : 36+9] } -func (inv *Inventory) Offhand() *Slot { return &inv.Slots[45] } diff --git a/bot/screen/screen.go b/bot/screen/screen.go deleted file mode 100644 index fc1fe3a..0000000 --- a/bot/screen/screen.go +++ /dev/null @@ -1,240 +0,0 @@ -package screen - -import ( - "errors" - "io" - - "github.com/Tnze/go-mc/bot" - "github.com/Tnze/go-mc/chat" - "github.com/Tnze/go-mc/data/packetid" - "github.com/Tnze/go-mc/nbt" - pk "github.com/Tnze/go-mc/net/packet" -) - -type Manager struct { - c *bot.Client - - Screens map[int]Container - Inventory Inventory - Cursor Slot - events EventsListener - // The last received State ID from server - stateID int32 -} - -func NewManager(c *bot.Client, e EventsListener) *Manager { - m := &Manager{ - c: c, - Screens: make(map[int]Container), - events: e, - } - m.Screens[0] = &m.Inventory - c.Events.AddListener( - bot.PacketHandler{Priority: 0, ID: packetid.ClientboundOpenScreen, F: m.onOpenScreen}, - bot.PacketHandler{Priority: 0, ID: packetid.ClientboundContainerSetContent, F: m.onSetContentPacket}, - bot.PacketHandler{Priority: 0, ID: packetid.ClientboundContainerClose, F: m.onCloseScreen}, - bot.PacketHandler{Priority: 0, ID: packetid.ClientboundContainerSetSlot, F: m.onSetSlot}, - ) - return m -} - -type ChangedSlots map[int]*Slot - -func (m *Manager) ContainerClick(id int, slot int16, button byte, mode int32, slots ChangedSlots, carried *Slot) error { - return m.c.Conn.WritePacket(pk.Marshal( - packetid.ServerboundContainerClick, - pk.UnsignedByte(id), - pk.VarInt(m.stateID), - pk.Short(slot), - pk.Byte(button), - pk.VarInt(mode), - slots, - carried, - )) -} - -func (c ChangedSlots) WriteTo(w io.Writer) (n int64, err error) { - n, err = pk.VarInt(len(c)).WriteTo(w) - if err != nil { - return - } - for i, v := range c { - n1, err := pk.Short(i).WriteTo(w) - if err != nil { - return n + n1, err - } - n2, err := v.WriteTo(w) - if err != nil { - return n + n1 + n2, err - } - n += n1 + n2 - } - return -} - -func (m *Manager) onOpenScreen(p pk.Packet) error { - var ( - ContainerID pk.VarInt - Type pk.VarInt - Title chat.Message - ) - if err := p.Scan(&ContainerID, &Type, &Title); err != nil { - return Error{err} - } - if _, ok := m.Screens[int(ContainerID)]; !ok { - TypeInt32 := int32(Type) - if TypeInt32 < 6 { - Rows := TypeInt32 + 1 - chest := Chest{ - Type: TypeInt32, - Slots: make([]Slot, 9*Rows), - Rows: int(Rows), - Title: Title, - } - m.Screens[int(ContainerID)] = &chest - } - } else { - return errors.New("container id already exists in screens") - } - if m.events.Open != nil { - if err := m.events.Open(int(ContainerID), int32(Type), Title); err != nil { - return Error{err} - } - } - return nil -} - -func (m *Manager) onSetContentPacket(p pk.Packet) error { - var ( - ContainerID pk.UnsignedByte - StateID pk.VarInt - SlotData []Slot - CarriedItem Slot - ) - if err := p.Scan( - &ContainerID, - &StateID, - pk.Array(&SlotData), - &CarriedItem, - ); err != nil { - return Error{err} - } - m.stateID = int32(StateID) - // copy the slot data to container - container, ok := m.Screens[int(ContainerID)] - if !ok { - return Error{errors.New("setting content of non-exist container")} - } - for i, v := range SlotData { - err := container.onSetSlot(i, v) - if err != nil { - return Error{err} - } - if m.events.SetSlot != nil { - if err := m.events.SetSlot(int(ContainerID), i); err != nil { - return Error{err} - } - } - } - return nil -} - -func (m *Manager) onCloseScreen(p pk.Packet) error { - var ContainerID pk.UnsignedByte - if err := p.Scan(&ContainerID); err != nil { - return Error{err} - } - if c, ok := m.Screens[int(ContainerID)]; ok { - delete(m.Screens, int(ContainerID)) - if err := c.onClose(); err != nil { - return Error{err} - } - if m.events.Close != nil { - if err := m.events.Close(int(ContainerID)); err != nil { - return Error{err} - } - } - } - return nil -} - -func (m *Manager) onSetSlot(p pk.Packet) (err error) { - var ( - ContainerID pk.Byte - StateID pk.VarInt - SlotID pk.Short - SlotData Slot - ) - if err := p.Scan(&ContainerID, &StateID, &SlotID, &SlotData); err != nil { - return Error{err} - } - - m.stateID = int32(StateID) - if ContainerID == -1 && SlotID == -1 { - m.Cursor = SlotData - } else if ContainerID == -2 { - err = m.Inventory.onSetSlot(int(SlotID), SlotData) - } else if c, ok := m.Screens[int(ContainerID)]; ok { - err = c.onSetSlot(int(SlotID), SlotData) - } - - if m.events.SetSlot != nil { - if err := m.events.SetSlot(int(ContainerID), int(SlotID)); err != nil { - return Error{err} - } - } - if err != nil { - return Error{err} - } - return nil -} - -type Slot struct { - ID pk.VarInt - Count pk.VarInt - NBT nbt.RawMessage -} - -func (s *Slot) WriteTo(w io.Writer) (n int64, err error) { - var present pk.Boolean = s != nil - return pk.Tuple{ - present, pk.Opt{ - Has: present, - Field: pk.Tuple{ - &s.ID, &s.Count, pk.NBT(&s.NBT), - }, - }, - }.WriteTo(w) -} - -func (s *Slot) ReadFrom(r io.Reader) (n int64, err error) { - var componentsAdd, componentsRemove pk.VarInt - return pk.Tuple{ - &s.Count, pk.Opt{ - Has: func() bool { return s.Count > 0 }, - Field: pk.Tuple{ - &s.ID, - &componentsAdd, - &componentsRemove, - // TODO: Components Ignored - }, - }, - }.ReadFrom(r) -} - -type Container interface { - onSetSlot(i int, s Slot) error - onClose() error -} - -type Error struct { - Err error -} - -func (e Error) Error() string { - return "bot/screen: " + e.Err.Error() -} - -func (e Error) Unwrap() error { - return e.Err -} diff --git a/bot/world/chunks.go b/bot/world/chunks.go deleted file mode 100644 index 7e5a7d0..0000000 --- a/bot/world/chunks.go +++ /dev/null @@ -1,72 +0,0 @@ -package world - -import ( - "fmt" - - "github.com/Tnze/go-mc/bot" - "github.com/Tnze/go-mc/bot/basic" - "github.com/Tnze/go-mc/data/packetid" - "github.com/Tnze/go-mc/level" - pk "github.com/Tnze/go-mc/net/packet" -) - -type World struct { - c *bot.Client - p *basic.Player - events EventsListener - - Columns map[level.ChunkPos]*level.Chunk -} - -func NewWorld(c *bot.Client, p *basic.Player, events EventsListener) (w *World) { - w = &World{ - c: c, p: p, - events: events, - Columns: make(map[level.ChunkPos]*level.Chunk), - } - c.Events.AddListener( - bot.PacketHandler{Priority: 64, ID: packetid.ClientboundLogin, F: w.onPlayerSpawn}, - bot.PacketHandler{Priority: 64, ID: packetid.ClientboundRespawn, F: w.onPlayerSpawn}, - bot.PacketHandler{Priority: 0, ID: packetid.ClientboundLevelChunkWithLight, F: w.handleLevelChunkWithLightPacket}, - bot.PacketHandler{Priority: 0, ID: packetid.ClientboundForgetLevelChunk, F: w.handleForgetLevelChunkPacket}, - ) - return -} - -func (w *World) onPlayerSpawn(pk.Packet) error { - // unload all chunks - w.Columns = make(map[level.ChunkPos]*level.Chunk) - return nil -} - -func (w *World) handleLevelChunkWithLightPacket(packet pk.Packet) error { - var pos level.ChunkPos - currentDimType := w.c.Registries.DimensionType.GetByID(w.p.DimensionType) - if currentDimType == nil { - return fmt.Errorf("dimension type %d not found", w.p.DimensionType) - } - chunk := level.EmptyChunk(int(currentDimType.Height) / 16) - if err := packet.Scan(&pos, chunk); err != nil { - return err - } - w.Columns[pos] = chunk - if w.events.LoadChunk != nil { - if err := w.events.LoadChunk(pos); err != nil { - return err - } - } - return nil -} - -func (w *World) handleForgetLevelChunkPacket(packet pk.Packet) error { - var pos level.ChunkPos - if err := packet.Scan(&pos); err != nil { - return err - } - var err error - if w.events.UnloadChunk != nil { - err = w.events.UnloadChunk(pos) - } - delete(w.Columns, pos) - return err -} diff --git a/bot/world/events.go b/bot/world/events.go deleted file mode 100644 index 92bf375..0000000 --- a/bot/world/events.go +++ /dev/null @@ -1,8 +0,0 @@ -package world - -import "github.com/Tnze/go-mc/level" - -type EventsListener struct { - LoadChunk func(pos level.ChunkPos) error - UnloadChunk func(pos level.ChunkPos) error -} diff --git a/chat/message.go b/chat/message.go index f6368b2..2abebcd 100644 --- a/chat/message.go +++ b/chat/message.go @@ -180,6 +180,25 @@ var colors = map[string]string{ White: "97", } +var colorsLegacy = map[string]string{ + Black: "0", + DarkBlue: "1", + DarkGreen: "2", + DarkAqua: "3", + DarkRed: "4", + DarkPurple: "5", + Gold: "6", + Gray: "7", + DarkGray: "8", + Blue: "9", + Green: "a", + Aqua: "b", + Red: "c", + LightPurple: "d", + Yellow: "e", + White: "f", +} + // translateMap is the translation table. // By default, it's en-us. var translateMap = en_us.Map @@ -262,6 +281,51 @@ func (m Message) String() string { return msg.String() } +func (m Message) LegacyString() string { + var msg strings.Builder + if m.Bold { + msg.WriteString("&l") + } + if m.Italic { + msg.WriteString("&o") + } + if m.UnderLined { + msg.WriteString("&n") + } + if m.StrikeThrough { + msg.WriteString("&m") + } + if m.Color != "" { + msg.WriteString("&" + colorsLegacy[m.Color]) + } + + text := fmtPat.ReplaceAllStringFunc( + m.Text, + func(str string) string { + return "&" + string(str[2]) + }, + ) + msg.WriteString(text) + + // handle translate + if m.Translate != "" { + args := make([]any, len(m.With)) + for i, v := range m.With { + args[i] = v + } + + _, _ = fmt.Fprintf(&msg, translateMap[m.Translate], args...) + } + + if m.Extra != nil { + for i := range m.Extra { + msg.WriteString(m.Extra[i].LegacyString()) + } + } + + return msg.String() +} + var fmtPat = regexp.MustCompile(`(?i)§[\dA-FK-OR]`) // TransCtrlSeq will transform control sequences into ANSI code diff --git a/data/item/gen_item.go b/data/item/gen_item.go deleted file mode 100644 index d82f07e..0000000 --- a/data/item/gen_item.go +++ /dev/null @@ -1,96 +0,0 @@ -//go:build generate - -// gen_item.go generates item information. -package main - -import ( - "encoding/json" - "fmt" - "net/http" - "os" - "text/template" - - "github.com/iancoleman/strcase" -) - -const ( - version = "1.20.3" - infoURL = "https://raw.githubusercontent.com/PrismarineJS/minecraft-data/master/data/pc/" + version + "/items.json" - // language=gohtml - itemTmpl = `// Code generated by gen_item.go DO NOT EDIT. -// Package item stores information about items in Minecraft. -package item - -// ID describes the numeric ID of an item. -type ID uint32 - -// Item describes information about a type of item. -type Item struct { - ID ID - DisplayName string - Name string - StackSize uint -} - -var ( - {{- range .}} - {{.CamelName}} = Item{ - ID: {{.ID}}, - DisplayName: "{{.DisplayName}}", - Name: "{{.Name}}", - StackSize: {{.StackSize}}, - }{{end}} -) - -// ByID is an index of minecraft items by their ID. -var ByID = map[ID]*Item{ {{range .}} - {{.ID}}: &{{.CamelName}},{{end}} -}` -) - -type Item struct { - ID uint32 `json:"id"` - CamelName string `json:"-"` - DisplayName string `json:"displayName"` - Name string `json:"name"` - StackSize uint `json:"stackSize"` -} - -func downloadInfo() ([]*Item, error) { - resp, err := http.Get(infoURL) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - var data []*Item - if err := json.NewDecoder(resp.Body).Decode(&data); err != nil { - return nil, err - } - for _, d := range data { - d.CamelName = strcase.ToCamel(d.Name) - } - return data, nil -} - -//go:generate go run $GOFILE -//go:generate go fmt item.go -func main() { - fmt.Println("generating item.go") - items, err := downloadInfo() - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %v\n", err) - os.Exit(1) - } - - f, err := os.Create("item.go") - if err != nil { - fmt.Fprintf(os.Stderr, "Error: %v\n", err) - os.Exit(1) - } - defer f.Close() - - if err := template.Must(template.New("").Parse(itemTmpl)).Execute(f, items); err != nil { - panic(err) - } -} diff --git a/data/item/item.go b/data/item/item.go deleted file mode 100644 index 395af80..0000000 --- a/data/item/item.go +++ /dev/null @@ -1,9205 +0,0 @@ -// Code generated by gen_item.go DO NOT EDIT. -// Package item stores information about items in Minecraft. -package item - -// ID describes the numeric ID of an item. -type ID uint32 - -// Item describes information about a type of item. -type Item struct { - ID ID - DisplayName string - Name string - StackSize uint -} - -var ( - Air = Item{ - ID: 0, - DisplayName: "Air", - Name: "air", - StackSize: 64, - } - Stone = Item{ - ID: 1, - DisplayName: "Stone", - Name: "stone", - StackSize: 64, - } - Granite = Item{ - ID: 2, - DisplayName: "Granite", - Name: "granite", - StackSize: 64, - } - PolishedGranite = Item{ - ID: 3, - DisplayName: "Polished Granite", - Name: "polished_granite", - StackSize: 64, - } - Diorite = Item{ - ID: 4, - DisplayName: "Diorite", - Name: "diorite", - StackSize: 64, - } - PolishedDiorite = Item{ - ID: 5, - DisplayName: "Polished Diorite", - Name: "polished_diorite", - StackSize: 64, - } - Andesite = Item{ - ID: 6, - DisplayName: "Andesite", - Name: "andesite", - StackSize: 64, - } - PolishedAndesite = Item{ - ID: 7, - DisplayName: "Polished Andesite", - Name: "polished_andesite", - StackSize: 64, - } - Deepslate = Item{ - ID: 8, - DisplayName: "Deepslate", - Name: "deepslate", - StackSize: 64, - } - CobbledDeepslate = Item{ - ID: 9, - DisplayName: "Cobbled Deepslate", - Name: "cobbled_deepslate", - StackSize: 64, - } - PolishedDeepslate = Item{ - ID: 10, - DisplayName: "Polished Deepslate", - Name: "polished_deepslate", - StackSize: 64, - } - Calcite = Item{ - ID: 11, - DisplayName: "Calcite", - Name: "calcite", - StackSize: 64, - } - Tuff = Item{ - ID: 12, - DisplayName: "Tuff", - Name: "tuff", - StackSize: 64, - } - TuffSlab = Item{ - ID: 13, - DisplayName: "Tuff Slab", - Name: "tuff_slab", - StackSize: 64, - } - TuffStairs = Item{ - ID: 14, - DisplayName: "Tuff Stairs", - Name: "tuff_stairs", - StackSize: 64, - } - TuffWall = Item{ - ID: 15, - DisplayName: "Tuff Wall", - Name: "tuff_wall", - StackSize: 64, - } - ChiseledTuff = Item{ - ID: 16, - DisplayName: "Chiseled Tuff", - Name: "chiseled_tuff", - StackSize: 64, - } - PolishedTuff = Item{ - ID: 17, - DisplayName: "Polished Tuff", - Name: "polished_tuff", - StackSize: 64, - } - PolishedTuffSlab = Item{ - ID: 18, - DisplayName: "Polished Tuff Slab", - Name: "polished_tuff_slab", - StackSize: 64, - } - PolishedTuffStairs = Item{ - ID: 19, - DisplayName: "Polished Tuff Stairs", - Name: "polished_tuff_stairs", - StackSize: 64, - } - PolishedTuffWall = Item{ - ID: 20, - DisplayName: "Polished Tuff Wall", - Name: "polished_tuff_wall", - StackSize: 64, - } - TuffBricks = Item{ - ID: 21, - DisplayName: "Tuff Bricks", - Name: "tuff_bricks", - StackSize: 64, - } - TuffBrickSlab = Item{ - ID: 22, - DisplayName: "Tuff Brick Slab", - Name: "tuff_brick_slab", - StackSize: 64, - } - TuffBrickStairs = Item{ - ID: 23, - DisplayName: "Tuff Brick Stairs", - Name: "tuff_brick_stairs", - StackSize: 64, - } - TuffBrickWall = Item{ - ID: 24, - DisplayName: "Tuff Brick Wall", - Name: "tuff_brick_wall", - StackSize: 64, - } - ChiseledTuffBricks = Item{ - ID: 25, - DisplayName: "Chiseled Tuff Bricks", - Name: "chiseled_tuff_bricks", - StackSize: 64, - } - DripstoneBlock = Item{ - ID: 26, - DisplayName: "Dripstone Block", - Name: "dripstone_block", - StackSize: 64, - } - GrassBlock = Item{ - ID: 27, - DisplayName: "Grass Block", - Name: "grass_block", - StackSize: 64, - } - Dirt = Item{ - ID: 28, - DisplayName: "Dirt", - Name: "dirt", - StackSize: 64, - } - CoarseDirt = Item{ - ID: 29, - DisplayName: "Coarse Dirt", - Name: "coarse_dirt", - StackSize: 64, - } - Podzol = Item{ - ID: 30, - DisplayName: "Podzol", - Name: "podzol", - StackSize: 64, - } - RootedDirt = Item{ - ID: 31, - DisplayName: "Rooted Dirt", - Name: "rooted_dirt", - StackSize: 64, - } - Mud = Item{ - ID: 32, - DisplayName: "Mud", - Name: "mud", - StackSize: 64, - } - CrimsonNylium = Item{ - ID: 33, - DisplayName: "Crimson Nylium", - Name: "crimson_nylium", - StackSize: 64, - } - WarpedNylium = Item{ - ID: 34, - DisplayName: "Warped Nylium", - Name: "warped_nylium", - StackSize: 64, - } - Cobblestone = Item{ - ID: 35, - DisplayName: "Cobblestone", - Name: "cobblestone", - StackSize: 64, - } - OakPlanks = Item{ - ID: 36, - DisplayName: "Oak Planks", - Name: "oak_planks", - StackSize: 64, - } - SprucePlanks = Item{ - ID: 37, - DisplayName: "Spruce Planks", - Name: "spruce_planks", - StackSize: 64, - } - BirchPlanks = Item{ - ID: 38, - DisplayName: "Birch Planks", - Name: "birch_planks", - StackSize: 64, - } - JunglePlanks = Item{ - ID: 39, - DisplayName: "Jungle Planks", - Name: "jungle_planks", - StackSize: 64, - } - AcaciaPlanks = Item{ - ID: 40, - DisplayName: "Acacia Planks", - Name: "acacia_planks", - StackSize: 64, - } - CherryPlanks = Item{ - ID: 41, - DisplayName: "Cherry Planks", - Name: "cherry_planks", - StackSize: 64, - } - DarkOakPlanks = Item{ - ID: 42, - DisplayName: "Dark Oak Planks", - Name: "dark_oak_planks", - StackSize: 64, - } - MangrovePlanks = Item{ - ID: 43, - DisplayName: "Mangrove Planks", - Name: "mangrove_planks", - StackSize: 64, - } - BambooPlanks = Item{ - ID: 44, - DisplayName: "Bamboo Planks", - Name: "bamboo_planks", - StackSize: 64, - } - CrimsonPlanks = Item{ - ID: 45, - DisplayName: "Crimson Planks", - Name: "crimson_planks", - StackSize: 64, - } - WarpedPlanks = Item{ - ID: 46, - DisplayName: "Warped Planks", - Name: "warped_planks", - StackSize: 64, - } - BambooMosaic = Item{ - ID: 47, - DisplayName: "Bamboo Mosaic", - Name: "bamboo_mosaic", - StackSize: 64, - } - OakSapling = Item{ - ID: 48, - DisplayName: "Oak Sapling", - Name: "oak_sapling", - StackSize: 64, - } - SpruceSapling = Item{ - ID: 49, - DisplayName: "Spruce Sapling", - Name: "spruce_sapling", - StackSize: 64, - } - BirchSapling = Item{ - ID: 50, - DisplayName: "Birch Sapling", - Name: "birch_sapling", - StackSize: 64, - } - JungleSapling = Item{ - ID: 51, - DisplayName: "Jungle Sapling", - Name: "jungle_sapling", - StackSize: 64, - } - AcaciaSapling = Item{ - ID: 52, - DisplayName: "Acacia Sapling", - Name: "acacia_sapling", - StackSize: 64, - } - CherrySapling = Item{ - ID: 53, - DisplayName: "Cherry Sapling", - Name: "cherry_sapling", - StackSize: 64, - } - DarkOakSapling = Item{ - ID: 54, - DisplayName: "Dark Oak Sapling", - Name: "dark_oak_sapling", - StackSize: 64, - } - MangrovePropagule = Item{ - ID: 55, - DisplayName: "Mangrove Propagule", - Name: "mangrove_propagule", - StackSize: 64, - } - Bedrock = Item{ - ID: 56, - DisplayName: "Bedrock", - Name: "bedrock", - StackSize: 64, - } - Sand = Item{ - ID: 57, - DisplayName: "Sand", - Name: "sand", - StackSize: 64, - } - SuspiciousSand = Item{ - ID: 58, - DisplayName: "Suspicious Sand", - Name: "suspicious_sand", - StackSize: 64, - } - SuspiciousGravel = Item{ - ID: 59, - DisplayName: "Suspicious Gravel", - Name: "suspicious_gravel", - StackSize: 64, - } - RedSand = Item{ - ID: 60, - DisplayName: "Red Sand", - Name: "red_sand", - StackSize: 64, - } - Gravel = Item{ - ID: 61, - DisplayName: "Gravel", - Name: "gravel", - StackSize: 64, - } - CoalOre = Item{ - ID: 62, - DisplayName: "Coal Ore", - Name: "coal_ore", - StackSize: 64, - } - DeepslateCoalOre = Item{ - ID: 63, - DisplayName: "Deepslate Coal Ore", - Name: "deepslate_coal_ore", - StackSize: 64, - } - IronOre = Item{ - ID: 64, - DisplayName: "Iron Ore", - Name: "iron_ore", - StackSize: 64, - } - DeepslateIronOre = Item{ - ID: 65, - DisplayName: "Deepslate Iron Ore", - Name: "deepslate_iron_ore", - StackSize: 64, - } - CopperOre = Item{ - ID: 66, - DisplayName: "Copper Ore", - Name: "copper_ore", - StackSize: 64, - } - DeepslateCopperOre = Item{ - ID: 67, - DisplayName: "Deepslate Copper Ore", - Name: "deepslate_copper_ore", - StackSize: 64, - } - GoldOre = Item{ - ID: 68, - DisplayName: "Gold Ore", - Name: "gold_ore", - StackSize: 64, - } - DeepslateGoldOre = Item{ - ID: 69, - DisplayName: "Deepslate Gold Ore", - Name: "deepslate_gold_ore", - StackSize: 64, - } - RedstoneOre = Item{ - ID: 70, - DisplayName: "Redstone Ore", - Name: "redstone_ore", - StackSize: 64, - } - DeepslateRedstoneOre = Item{ - ID: 71, - DisplayName: "Deepslate Redstone Ore", - Name: "deepslate_redstone_ore", - StackSize: 64, - } - EmeraldOre = Item{ - ID: 72, - DisplayName: "Emerald Ore", - Name: "emerald_ore", - StackSize: 64, - } - DeepslateEmeraldOre = Item{ - ID: 73, - DisplayName: "Deepslate Emerald Ore", - Name: "deepslate_emerald_ore", - StackSize: 64, - } - LapisOre = Item{ - ID: 74, - DisplayName: "Lapis Lazuli Ore", - Name: "lapis_ore", - StackSize: 64, - } - DeepslateLapisOre = Item{ - ID: 75, - DisplayName: "Deepslate Lapis Lazuli Ore", - Name: "deepslate_lapis_ore", - StackSize: 64, - } - DiamondOre = Item{ - ID: 76, - DisplayName: "Diamond Ore", - Name: "diamond_ore", - StackSize: 64, - } - DeepslateDiamondOre = Item{ - ID: 77, - DisplayName: "Deepslate Diamond Ore", - Name: "deepslate_diamond_ore", - StackSize: 64, - } - NetherGoldOre = Item{ - ID: 78, - DisplayName: "Nether Gold Ore", - Name: "nether_gold_ore", - StackSize: 64, - } - NetherQuartzOre = Item{ - ID: 79, - DisplayName: "Nether Quartz Ore", - Name: "nether_quartz_ore", - StackSize: 64, - } - AncientDebris = Item{ - ID: 80, - DisplayName: "Ancient Debris", - Name: "ancient_debris", - StackSize: 64, - } - CoalBlock = Item{ - ID: 81, - DisplayName: "Block of Coal", - Name: "coal_block", - StackSize: 64, - } - RawIronBlock = Item{ - ID: 82, - DisplayName: "Block of Raw Iron", - Name: "raw_iron_block", - StackSize: 64, - } - RawCopperBlock = Item{ - ID: 83, - DisplayName: "Block of Raw Copper", - Name: "raw_copper_block", - StackSize: 64, - } - RawGoldBlock = Item{ - ID: 84, - DisplayName: "Block of Raw Gold", - Name: "raw_gold_block", - StackSize: 64, - } - AmethystBlock = Item{ - ID: 85, - DisplayName: "Block of Amethyst", - Name: "amethyst_block", - StackSize: 64, - } - BuddingAmethyst = Item{ - ID: 86, - DisplayName: "Budding Amethyst", - Name: "budding_amethyst", - StackSize: 64, - } - IronBlock = Item{ - ID: 87, - DisplayName: "Block of Iron", - Name: "iron_block", - StackSize: 64, - } - CopperBlock = Item{ - ID: 88, - DisplayName: "Block of Copper", - Name: "copper_block", - StackSize: 64, - } - GoldBlock = Item{ - ID: 89, - DisplayName: "Block of Gold", - Name: "gold_block", - StackSize: 64, - } - DiamondBlock = Item{ - ID: 90, - DisplayName: "Block of Diamond", - Name: "diamond_block", - StackSize: 64, - } - NetheriteBlock = Item{ - ID: 91, - DisplayName: "Block of Netherite", - Name: "netherite_block", - StackSize: 64, - } - ExposedCopper = Item{ - ID: 92, - DisplayName: "Exposed Copper", - Name: "exposed_copper", - StackSize: 64, - } - WeatheredCopper = Item{ - ID: 93, - DisplayName: "Weathered Copper", - Name: "weathered_copper", - StackSize: 64, - } - OxidizedCopper = Item{ - ID: 94, - DisplayName: "Oxidized Copper", - Name: "oxidized_copper", - StackSize: 64, - } - ChiseledCopper = Item{ - ID: 95, - DisplayName: "Chiseled Copper", - Name: "chiseled_copper", - StackSize: 64, - } - ExposedChiseledCopper = Item{ - ID: 96, - DisplayName: "Exposed Chiseled Copper", - Name: "exposed_chiseled_copper", - StackSize: 64, - } - WeatheredChiseledCopper = Item{ - ID: 97, - DisplayName: "Weathered Chiseled Copper", - Name: "weathered_chiseled_copper", - StackSize: 64, - } - OxidizedChiseledCopper = Item{ - ID: 98, - DisplayName: "Oxidized Chiseled Copper", - Name: "oxidized_chiseled_copper", - StackSize: 64, - } - CutCopper = Item{ - ID: 99, - DisplayName: "Cut Copper", - Name: "cut_copper", - StackSize: 64, - } - ExposedCutCopper = Item{ - ID: 100, - DisplayName: "Exposed Cut Copper", - Name: "exposed_cut_copper", - StackSize: 64, - } - WeatheredCutCopper = Item{ - ID: 101, - DisplayName: "Weathered Cut Copper", - Name: "weathered_cut_copper", - StackSize: 64, - } - OxidizedCutCopper = Item{ - ID: 102, - DisplayName: "Oxidized Cut Copper", - Name: "oxidized_cut_copper", - StackSize: 64, - } - CutCopperStairs = Item{ - ID: 103, - DisplayName: "Cut Copper Stairs", - Name: "cut_copper_stairs", - StackSize: 64, - } - ExposedCutCopperStairs = Item{ - ID: 104, - DisplayName: "Exposed Cut Copper Stairs", - Name: "exposed_cut_copper_stairs", - StackSize: 64, - } - WeatheredCutCopperStairs = Item{ - ID: 105, - DisplayName: "Weathered Cut Copper Stairs", - Name: "weathered_cut_copper_stairs", - StackSize: 64, - } - OxidizedCutCopperStairs = Item{ - ID: 106, - DisplayName: "Oxidized Cut Copper Stairs", - Name: "oxidized_cut_copper_stairs", - StackSize: 64, - } - CutCopperSlab = Item{ - ID: 107, - DisplayName: "Cut Copper Slab", - Name: "cut_copper_slab", - StackSize: 64, - } - ExposedCutCopperSlab = Item{ - ID: 108, - DisplayName: "Exposed Cut Copper Slab", - Name: "exposed_cut_copper_slab", - StackSize: 64, - } - WeatheredCutCopperSlab = Item{ - ID: 109, - DisplayName: "Weathered Cut Copper Slab", - Name: "weathered_cut_copper_slab", - StackSize: 64, - } - OxidizedCutCopperSlab = Item{ - ID: 110, - DisplayName: "Oxidized Cut Copper Slab", - Name: "oxidized_cut_copper_slab", - StackSize: 64, - } - WaxedCopperBlock = Item{ - ID: 111, - DisplayName: "Waxed Block of Copper", - Name: "waxed_copper_block", - StackSize: 64, - } - WaxedExposedCopper = Item{ - ID: 112, - DisplayName: "Waxed Exposed Copper", - Name: "waxed_exposed_copper", - StackSize: 64, - } - WaxedWeatheredCopper = Item{ - ID: 113, - DisplayName: "Waxed Weathered Copper", - Name: "waxed_weathered_copper", - StackSize: 64, - } - WaxedOxidizedCopper = Item{ - ID: 114, - DisplayName: "Waxed Oxidized Copper", - Name: "waxed_oxidized_copper", - StackSize: 64, - } - WaxedChiseledCopper = Item{ - ID: 115, - DisplayName: "Waxed Chiseled Copper", - Name: "waxed_chiseled_copper", - StackSize: 64, - } - WaxedExposedChiseledCopper = Item{ - ID: 116, - DisplayName: "Waxed Exposed Chiseled Copper", - Name: "waxed_exposed_chiseled_copper", - StackSize: 64, - } - WaxedWeatheredChiseledCopper = Item{ - ID: 117, - DisplayName: "Waxed Weathered Chiseled Copper", - Name: "waxed_weathered_chiseled_copper", - StackSize: 64, - } - WaxedOxidizedChiseledCopper = Item{ - ID: 118, - DisplayName: "Waxed Oxidized Chiseled Copper", - Name: "waxed_oxidized_chiseled_copper", - StackSize: 64, - } - WaxedCutCopper = Item{ - ID: 119, - DisplayName: "Waxed Cut Copper", - Name: "waxed_cut_copper", - StackSize: 64, - } - WaxedExposedCutCopper = Item{ - ID: 120, - DisplayName: "Waxed Exposed Cut Copper", - Name: "waxed_exposed_cut_copper", - StackSize: 64, - } - WaxedWeatheredCutCopper = Item{ - ID: 121, - DisplayName: "Waxed Weathered Cut Copper", - Name: "waxed_weathered_cut_copper", - StackSize: 64, - } - WaxedOxidizedCutCopper = Item{ - ID: 122, - DisplayName: "Waxed Oxidized Cut Copper", - Name: "waxed_oxidized_cut_copper", - StackSize: 64, - } - WaxedCutCopperStairs = Item{ - ID: 123, - DisplayName: "Waxed Cut Copper Stairs", - Name: "waxed_cut_copper_stairs", - StackSize: 64, - } - WaxedExposedCutCopperStairs = Item{ - ID: 124, - DisplayName: "Waxed Exposed Cut Copper Stairs", - Name: "waxed_exposed_cut_copper_stairs", - StackSize: 64, - } - WaxedWeatheredCutCopperStairs = Item{ - ID: 125, - DisplayName: "Waxed Weathered Cut Copper Stairs", - Name: "waxed_weathered_cut_copper_stairs", - StackSize: 64, - } - WaxedOxidizedCutCopperStairs = Item{ - ID: 126, - DisplayName: "Waxed Oxidized Cut Copper Stairs", - Name: "waxed_oxidized_cut_copper_stairs", - StackSize: 64, - } - WaxedCutCopperSlab = Item{ - ID: 127, - DisplayName: "Waxed Cut Copper Slab", - Name: "waxed_cut_copper_slab", - StackSize: 64, - } - WaxedExposedCutCopperSlab = Item{ - ID: 128, - DisplayName: "Waxed Exposed Cut Copper Slab", - Name: "waxed_exposed_cut_copper_slab", - StackSize: 64, - } - WaxedWeatheredCutCopperSlab = Item{ - ID: 129, - DisplayName: "Waxed Weathered Cut Copper Slab", - Name: "waxed_weathered_cut_copper_slab", - StackSize: 64, - } - WaxedOxidizedCutCopperSlab = Item{ - ID: 130, - DisplayName: "Waxed Oxidized Cut Copper Slab", - Name: "waxed_oxidized_cut_copper_slab", - StackSize: 64, - } - OakLog = Item{ - ID: 131, - DisplayName: "Oak Log", - Name: "oak_log", - StackSize: 64, - } - SpruceLog = Item{ - ID: 132, - DisplayName: "Spruce Log", - Name: "spruce_log", - StackSize: 64, - } - BirchLog = Item{ - ID: 133, - DisplayName: "Birch Log", - Name: "birch_log", - StackSize: 64, - } - JungleLog = Item{ - ID: 134, - DisplayName: "Jungle Log", - Name: "jungle_log", - StackSize: 64, - } - AcaciaLog = Item{ - ID: 135, - DisplayName: "Acacia Log", - Name: "acacia_log", - StackSize: 64, - } - CherryLog = Item{ - ID: 136, - DisplayName: "Cherry Log", - Name: "cherry_log", - StackSize: 64, - } - DarkOakLog = Item{ - ID: 137, - DisplayName: "Dark Oak Log", - Name: "dark_oak_log", - StackSize: 64, - } - MangroveLog = Item{ - ID: 138, - DisplayName: "Mangrove Log", - Name: "mangrove_log", - StackSize: 64, - } - MangroveRoots = Item{ - ID: 139, - DisplayName: "Mangrove Roots", - Name: "mangrove_roots", - StackSize: 64, - } - MuddyMangroveRoots = Item{ - ID: 140, - DisplayName: "Muddy Mangrove Roots", - Name: "muddy_mangrove_roots", - StackSize: 64, - } - CrimsonStem = Item{ - ID: 141, - DisplayName: "Crimson Stem", - Name: "crimson_stem", - StackSize: 64, - } - WarpedStem = Item{ - ID: 142, - DisplayName: "Warped Stem", - Name: "warped_stem", - StackSize: 64, - } - BambooBlock = Item{ - ID: 143, - DisplayName: "Block of Bamboo", - Name: "bamboo_block", - StackSize: 64, - } - StrippedOakLog = Item{ - ID: 144, - DisplayName: "Stripped Oak Log", - Name: "stripped_oak_log", - StackSize: 64, - } - StrippedSpruceLog = Item{ - ID: 145, - DisplayName: "Stripped Spruce Log", - Name: "stripped_spruce_log", - StackSize: 64, - } - StrippedBirchLog = Item{ - ID: 146, - DisplayName: "Stripped Birch Log", - Name: "stripped_birch_log", - StackSize: 64, - } - StrippedJungleLog = Item{ - ID: 147, - DisplayName: "Stripped Jungle Log", - Name: "stripped_jungle_log", - StackSize: 64, - } - StrippedAcaciaLog = Item{ - ID: 148, - DisplayName: "Stripped Acacia Log", - Name: "stripped_acacia_log", - StackSize: 64, - } - StrippedCherryLog = Item{ - ID: 149, - DisplayName: "Stripped Cherry Log", - Name: "stripped_cherry_log", - StackSize: 64, - } - StrippedDarkOakLog = Item{ - ID: 150, - DisplayName: "Stripped Dark Oak Log", - Name: "stripped_dark_oak_log", - StackSize: 64, - } - StrippedMangroveLog = Item{ - ID: 151, - DisplayName: "Stripped Mangrove Log", - Name: "stripped_mangrove_log", - StackSize: 64, - } - StrippedCrimsonStem = Item{ - ID: 152, - DisplayName: "Stripped Crimson Stem", - Name: "stripped_crimson_stem", - StackSize: 64, - } - StrippedWarpedStem = Item{ - ID: 153, - DisplayName: "Stripped Warped Stem", - Name: "stripped_warped_stem", - StackSize: 64, - } - StrippedOakWood = Item{ - ID: 154, - DisplayName: "Stripped Oak Wood", - Name: "stripped_oak_wood", - StackSize: 64, - } - StrippedSpruceWood = Item{ - ID: 155, - DisplayName: "Stripped Spruce Wood", - Name: "stripped_spruce_wood", - StackSize: 64, - } - StrippedBirchWood = Item{ - ID: 156, - DisplayName: "Stripped Birch Wood", - Name: "stripped_birch_wood", - StackSize: 64, - } - StrippedJungleWood = Item{ - ID: 157, - DisplayName: "Stripped Jungle Wood", - Name: "stripped_jungle_wood", - StackSize: 64, - } - StrippedAcaciaWood = Item{ - ID: 158, - DisplayName: "Stripped Acacia Wood", - Name: "stripped_acacia_wood", - StackSize: 64, - } - StrippedCherryWood = Item{ - ID: 159, - DisplayName: "Stripped Cherry Wood", - Name: "stripped_cherry_wood", - StackSize: 64, - } - StrippedDarkOakWood = Item{ - ID: 160, - DisplayName: "Stripped Dark Oak Wood", - Name: "stripped_dark_oak_wood", - StackSize: 64, - } - StrippedMangroveWood = Item{ - ID: 161, - DisplayName: "Stripped Mangrove Wood", - Name: "stripped_mangrove_wood", - StackSize: 64, - } - StrippedCrimsonHyphae = Item{ - ID: 162, - DisplayName: "Stripped Crimson Hyphae", - Name: "stripped_crimson_hyphae", - StackSize: 64, - } - StrippedWarpedHyphae = Item{ - ID: 163, - DisplayName: "Stripped Warped Hyphae", - Name: "stripped_warped_hyphae", - StackSize: 64, - } - StrippedBambooBlock = Item{ - ID: 164, - DisplayName: "Block of Stripped Bamboo", - Name: "stripped_bamboo_block", - StackSize: 64, - } - OakWood = Item{ - ID: 165, - DisplayName: "Oak Wood", - Name: "oak_wood", - StackSize: 64, - } - SpruceWood = Item{ - ID: 166, - DisplayName: "Spruce Wood", - Name: "spruce_wood", - StackSize: 64, - } - BirchWood = Item{ - ID: 167, - DisplayName: "Birch Wood", - Name: "birch_wood", - StackSize: 64, - } - JungleWood = Item{ - ID: 168, - DisplayName: "Jungle Wood", - Name: "jungle_wood", - StackSize: 64, - } - AcaciaWood = Item{ - ID: 169, - DisplayName: "Acacia Wood", - Name: "acacia_wood", - StackSize: 64, - } - CherryWood = Item{ - ID: 170, - DisplayName: "Cherry Wood", - Name: "cherry_wood", - StackSize: 64, - } - DarkOakWood = Item{ - ID: 171, - DisplayName: "Dark Oak Wood", - Name: "dark_oak_wood", - StackSize: 64, - } - MangroveWood = Item{ - ID: 172, - DisplayName: "Mangrove Wood", - Name: "mangrove_wood", - StackSize: 64, - } - CrimsonHyphae = Item{ - ID: 173, - DisplayName: "Crimson Hyphae", - Name: "crimson_hyphae", - StackSize: 64, - } - WarpedHyphae = Item{ - ID: 174, - DisplayName: "Warped Hyphae", - Name: "warped_hyphae", - StackSize: 64, - } - OakLeaves = Item{ - ID: 175, - DisplayName: "Oak Leaves", - Name: "oak_leaves", - StackSize: 64, - } - SpruceLeaves = Item{ - ID: 176, - DisplayName: "Spruce Leaves", - Name: "spruce_leaves", - StackSize: 64, - } - BirchLeaves = Item{ - ID: 177, - DisplayName: "Birch Leaves", - Name: "birch_leaves", - StackSize: 64, - } - JungleLeaves = Item{ - ID: 178, - DisplayName: "Jungle Leaves", - Name: "jungle_leaves", - StackSize: 64, - } - AcaciaLeaves = Item{ - ID: 179, - DisplayName: "Acacia Leaves", - Name: "acacia_leaves", - StackSize: 64, - } - CherryLeaves = Item{ - ID: 180, - DisplayName: "Cherry Leaves", - Name: "cherry_leaves", - StackSize: 64, - } - DarkOakLeaves = Item{ - ID: 181, - DisplayName: "Dark Oak Leaves", - Name: "dark_oak_leaves", - StackSize: 64, - } - MangroveLeaves = Item{ - ID: 182, - DisplayName: "Mangrove Leaves", - Name: "mangrove_leaves", - StackSize: 64, - } - AzaleaLeaves = Item{ - ID: 183, - DisplayName: "Azalea Leaves", - Name: "azalea_leaves", - StackSize: 64, - } - FloweringAzaleaLeaves = Item{ - ID: 184, - DisplayName: "Flowering Azalea Leaves", - Name: "flowering_azalea_leaves", - StackSize: 64, - } - Sponge = Item{ - ID: 185, - DisplayName: "Sponge", - Name: "sponge", - StackSize: 64, - } - WetSponge = Item{ - ID: 186, - DisplayName: "Wet Sponge", - Name: "wet_sponge", - StackSize: 64, - } - Glass = Item{ - ID: 187, - DisplayName: "Glass", - Name: "glass", - StackSize: 64, - } - TintedGlass = Item{ - ID: 188, - DisplayName: "Tinted Glass", - Name: "tinted_glass", - StackSize: 64, - } - LapisBlock = Item{ - ID: 189, - DisplayName: "Block of Lapis Lazuli", - Name: "lapis_block", - StackSize: 64, - } - Sandstone = Item{ - ID: 190, - DisplayName: "Sandstone", - Name: "sandstone", - StackSize: 64, - } - ChiseledSandstone = Item{ - ID: 191, - DisplayName: "Chiseled Sandstone", - Name: "chiseled_sandstone", - StackSize: 64, - } - CutSandstone = Item{ - ID: 192, - DisplayName: "Cut Sandstone", - Name: "cut_sandstone", - StackSize: 64, - } - Cobweb = Item{ - ID: 193, - DisplayName: "Cobweb", - Name: "cobweb", - StackSize: 64, - } - ShortGrass = Item{ - ID: 194, - DisplayName: "Short Grass", - Name: "short_grass", - StackSize: 64, - } - Fern = Item{ - ID: 195, - DisplayName: "Fern", - Name: "fern", - StackSize: 64, - } - Azalea = Item{ - ID: 196, - DisplayName: "Azalea", - Name: "azalea", - StackSize: 64, - } - FloweringAzalea = Item{ - ID: 197, - DisplayName: "Flowering Azalea", - Name: "flowering_azalea", - StackSize: 64, - } - DeadBush = Item{ - ID: 198, - DisplayName: "Dead Bush", - Name: "dead_bush", - StackSize: 64, - } - Seagrass = Item{ - ID: 199, - DisplayName: "Seagrass", - Name: "seagrass", - StackSize: 64, - } - SeaPickle = Item{ - ID: 200, - DisplayName: "Sea Pickle", - Name: "sea_pickle", - StackSize: 64, - } - WhiteWool = Item{ - ID: 201, - DisplayName: "White Wool", - Name: "white_wool", - StackSize: 64, - } - OrangeWool = Item{ - ID: 202, - DisplayName: "Orange Wool", - Name: "orange_wool", - StackSize: 64, - } - MagentaWool = Item{ - ID: 203, - DisplayName: "Magenta Wool", - Name: "magenta_wool", - StackSize: 64, - } - LightBlueWool = Item{ - ID: 204, - DisplayName: "Light Blue Wool", - Name: "light_blue_wool", - StackSize: 64, - } - YellowWool = Item{ - ID: 205, - DisplayName: "Yellow Wool", - Name: "yellow_wool", - StackSize: 64, - } - LimeWool = Item{ - ID: 206, - DisplayName: "Lime Wool", - Name: "lime_wool", - StackSize: 64, - } - PinkWool = Item{ - ID: 207, - DisplayName: "Pink Wool", - Name: "pink_wool", - StackSize: 64, - } - GrayWool = Item{ - ID: 208, - DisplayName: "Gray Wool", - Name: "gray_wool", - StackSize: 64, - } - LightGrayWool = Item{ - ID: 209, - DisplayName: "Light Gray Wool", - Name: "light_gray_wool", - StackSize: 64, - } - CyanWool = Item{ - ID: 210, - DisplayName: "Cyan Wool", - Name: "cyan_wool", - StackSize: 64, - } - PurpleWool = Item{ - ID: 211, - DisplayName: "Purple Wool", - Name: "purple_wool", - StackSize: 64, - } - BlueWool = Item{ - ID: 212, - DisplayName: "Blue Wool", - Name: "blue_wool", - StackSize: 64, - } - BrownWool = Item{ - ID: 213, - DisplayName: "Brown Wool", - Name: "brown_wool", - StackSize: 64, - } - GreenWool = Item{ - ID: 214, - DisplayName: "Green Wool", - Name: "green_wool", - StackSize: 64, - } - RedWool = Item{ - ID: 215, - DisplayName: "Red Wool", - Name: "red_wool", - StackSize: 64, - } - BlackWool = Item{ - ID: 216, - DisplayName: "Black Wool", - Name: "black_wool", - StackSize: 64, - } - Dandelion = Item{ - ID: 217, - DisplayName: "Dandelion", - Name: "dandelion", - StackSize: 64, - } - Poppy = Item{ - ID: 218, - DisplayName: "Poppy", - Name: "poppy", - StackSize: 64, - } - BlueOrchid = Item{ - ID: 219, - DisplayName: "Blue Orchid", - Name: "blue_orchid", - StackSize: 64, - } - Allium = Item{ - ID: 220, - DisplayName: "Allium", - Name: "allium", - StackSize: 64, - } - AzureBluet = Item{ - ID: 221, - DisplayName: "Azure Bluet", - Name: "azure_bluet", - StackSize: 64, - } - RedTulip = Item{ - ID: 222, - DisplayName: "Red Tulip", - Name: "red_tulip", - StackSize: 64, - } - OrangeTulip = Item{ - ID: 223, - DisplayName: "Orange Tulip", - Name: "orange_tulip", - StackSize: 64, - } - WhiteTulip = Item{ - ID: 224, - DisplayName: "White Tulip", - Name: "white_tulip", - StackSize: 64, - } - PinkTulip = Item{ - ID: 225, - DisplayName: "Pink Tulip", - Name: "pink_tulip", - StackSize: 64, - } - OxeyeDaisy = Item{ - ID: 226, - DisplayName: "Oxeye Daisy", - Name: "oxeye_daisy", - StackSize: 64, - } - Cornflower = Item{ - ID: 227, - DisplayName: "Cornflower", - Name: "cornflower", - StackSize: 64, - } - LilyOfTheValley = Item{ - ID: 228, - DisplayName: "Lily of the Valley", - Name: "lily_of_the_valley", - StackSize: 64, - } - WitherRose = Item{ - ID: 229, - DisplayName: "Wither Rose", - Name: "wither_rose", - StackSize: 64, - } - Torchflower = Item{ - ID: 230, - DisplayName: "Torchflower", - Name: "torchflower", - StackSize: 64, - } - PitcherPlant = Item{ - ID: 231, - DisplayName: "Pitcher Plant", - Name: "pitcher_plant", - StackSize: 64, - } - SporeBlossom = Item{ - ID: 232, - DisplayName: "Spore Blossom", - Name: "spore_blossom", - StackSize: 64, - } - BrownMushroom = Item{ - ID: 233, - DisplayName: "Brown Mushroom", - Name: "brown_mushroom", - StackSize: 64, - } - RedMushroom = Item{ - ID: 234, - DisplayName: "Red Mushroom", - Name: "red_mushroom", - StackSize: 64, - } - CrimsonFungus = Item{ - ID: 235, - DisplayName: "Crimson Fungus", - Name: "crimson_fungus", - StackSize: 64, - } - WarpedFungus = Item{ - ID: 236, - DisplayName: "Warped Fungus", - Name: "warped_fungus", - StackSize: 64, - } - CrimsonRoots = Item{ - ID: 237, - DisplayName: "Crimson Roots", - Name: "crimson_roots", - StackSize: 64, - } - WarpedRoots = Item{ - ID: 238, - DisplayName: "Warped Roots", - Name: "warped_roots", - StackSize: 64, - } - NetherSprouts = Item{ - ID: 239, - DisplayName: "Nether Sprouts", - Name: "nether_sprouts", - StackSize: 64, - } - WeepingVines = Item{ - ID: 240, - DisplayName: "Weeping Vines", - Name: "weeping_vines", - StackSize: 64, - } - TwistingVines = Item{ - ID: 241, - DisplayName: "Twisting Vines", - Name: "twisting_vines", - StackSize: 64, - } - SugarCane = Item{ - ID: 242, - DisplayName: "Sugar Cane", - Name: "sugar_cane", - StackSize: 64, - } - Kelp = Item{ - ID: 243, - DisplayName: "Kelp", - Name: "kelp", - StackSize: 64, - } - MossCarpet = Item{ - ID: 244, - DisplayName: "Moss Carpet", - Name: "moss_carpet", - StackSize: 64, - } - PinkPetals = Item{ - ID: 245, - DisplayName: "Pink Petals", - Name: "pink_petals", - StackSize: 64, - } - MossBlock = Item{ - ID: 246, - DisplayName: "Moss Block", - Name: "moss_block", - StackSize: 64, - } - HangingRoots = Item{ - ID: 247, - DisplayName: "Hanging Roots", - Name: "hanging_roots", - StackSize: 64, - } - BigDripleaf = Item{ - ID: 248, - DisplayName: "Big Dripleaf", - Name: "big_dripleaf", - StackSize: 64, - } - SmallDripleaf = Item{ - ID: 249, - DisplayName: "Small Dripleaf", - Name: "small_dripleaf", - StackSize: 64, - } - Bamboo = Item{ - ID: 250, - DisplayName: "Bamboo", - Name: "bamboo", - StackSize: 64, - } - OakSlab = Item{ - ID: 251, - DisplayName: "Oak Slab", - Name: "oak_slab", - StackSize: 64, - } - SpruceSlab = Item{ - ID: 252, - DisplayName: "Spruce Slab", - Name: "spruce_slab", - StackSize: 64, - } - BirchSlab = Item{ - ID: 253, - DisplayName: "Birch Slab", - Name: "birch_slab", - StackSize: 64, - } - JungleSlab = Item{ - ID: 254, - DisplayName: "Jungle Slab", - Name: "jungle_slab", - StackSize: 64, - } - AcaciaSlab = Item{ - ID: 255, - DisplayName: "Acacia Slab", - Name: "acacia_slab", - StackSize: 64, - } - CherrySlab = Item{ - ID: 256, - DisplayName: "Cherry Slab", - Name: "cherry_slab", - StackSize: 64, - } - DarkOakSlab = Item{ - ID: 257, - DisplayName: "Dark Oak Slab", - Name: "dark_oak_slab", - StackSize: 64, - } - MangroveSlab = Item{ - ID: 258, - DisplayName: "Mangrove Slab", - Name: "mangrove_slab", - StackSize: 64, - } - BambooSlab = Item{ - ID: 259, - DisplayName: "Bamboo Slab", - Name: "bamboo_slab", - StackSize: 64, - } - BambooMosaicSlab = Item{ - ID: 260, - DisplayName: "Bamboo Mosaic Slab", - Name: "bamboo_mosaic_slab", - StackSize: 64, - } - CrimsonSlab = Item{ - ID: 261, - DisplayName: "Crimson Slab", - Name: "crimson_slab", - StackSize: 64, - } - WarpedSlab = Item{ - ID: 262, - DisplayName: "Warped Slab", - Name: "warped_slab", - StackSize: 64, - } - StoneSlab = Item{ - ID: 263, - DisplayName: "Stone Slab", - Name: "stone_slab", - StackSize: 64, - } - SmoothStoneSlab = Item{ - ID: 264, - DisplayName: "Smooth Stone Slab", - Name: "smooth_stone_slab", - StackSize: 64, - } - SandstoneSlab = Item{ - ID: 265, - DisplayName: "Sandstone Slab", - Name: "sandstone_slab", - StackSize: 64, - } - CutSandstoneSlab = Item{ - ID: 266, - DisplayName: "Cut Sandstone Slab", - Name: "cut_sandstone_slab", - StackSize: 64, - } - PetrifiedOakSlab = Item{ - ID: 267, - DisplayName: "Petrified Oak Slab", - Name: "petrified_oak_slab", - StackSize: 64, - } - CobblestoneSlab = Item{ - ID: 268, - DisplayName: "Cobblestone Slab", - Name: "cobblestone_slab", - StackSize: 64, - } - BrickSlab = Item{ - ID: 269, - DisplayName: "Brick Slab", - Name: "brick_slab", - StackSize: 64, - } - StoneBrickSlab = Item{ - ID: 270, - DisplayName: "Stone Brick Slab", - Name: "stone_brick_slab", - StackSize: 64, - } - MudBrickSlab = Item{ - ID: 271, - DisplayName: "Mud Brick Slab", - Name: "mud_brick_slab", - StackSize: 64, - } - NetherBrickSlab = Item{ - ID: 272, - DisplayName: "Nether Brick Slab", - Name: "nether_brick_slab", - StackSize: 64, - } - QuartzSlab = Item{ - ID: 273, - DisplayName: "Quartz Slab", - Name: "quartz_slab", - StackSize: 64, - } - RedSandstoneSlab = Item{ - ID: 274, - DisplayName: "Red Sandstone Slab", - Name: "red_sandstone_slab", - StackSize: 64, - } - CutRedSandstoneSlab = Item{ - ID: 275, - DisplayName: "Cut Red Sandstone Slab", - Name: "cut_red_sandstone_slab", - StackSize: 64, - } - PurpurSlab = Item{ - ID: 276, - DisplayName: "Purpur Slab", - Name: "purpur_slab", - StackSize: 64, - } - PrismarineSlab = Item{ - ID: 277, - DisplayName: "Prismarine Slab", - Name: "prismarine_slab", - StackSize: 64, - } - PrismarineBrickSlab = Item{ - ID: 278, - DisplayName: "Prismarine Brick Slab", - Name: "prismarine_brick_slab", - StackSize: 64, - } - DarkPrismarineSlab = Item{ - ID: 279, - DisplayName: "Dark Prismarine Slab", - Name: "dark_prismarine_slab", - StackSize: 64, - } - SmoothQuartz = Item{ - ID: 280, - DisplayName: "Smooth Quartz Block", - Name: "smooth_quartz", - StackSize: 64, - } - SmoothRedSandstone = Item{ - ID: 281, - DisplayName: "Smooth Red Sandstone", - Name: "smooth_red_sandstone", - StackSize: 64, - } - SmoothSandstone = Item{ - ID: 282, - DisplayName: "Smooth Sandstone", - Name: "smooth_sandstone", - StackSize: 64, - } - SmoothStone = Item{ - ID: 283, - DisplayName: "Smooth Stone", - Name: "smooth_stone", - StackSize: 64, - } - Bricks = Item{ - ID: 284, - DisplayName: "Bricks", - Name: "bricks", - StackSize: 64, - } - Bookshelf = Item{ - ID: 285, - DisplayName: "Bookshelf", - Name: "bookshelf", - StackSize: 64, - } - ChiseledBookshelf = Item{ - ID: 286, - DisplayName: "Chiseled Bookshelf", - Name: "chiseled_bookshelf", - StackSize: 64, - } - DecoratedPot = Item{ - ID: 287, - DisplayName: "Decorated Pot", - Name: "decorated_pot", - StackSize: 64, - } - MossyCobblestone = Item{ - ID: 288, - DisplayName: "Mossy Cobblestone", - Name: "mossy_cobblestone", - StackSize: 64, - } - Obsidian = Item{ - ID: 289, - DisplayName: "Obsidian", - Name: "obsidian", - StackSize: 64, - } - Torch = Item{ - ID: 290, - DisplayName: "Torch", - Name: "torch", - StackSize: 64, - } - EndRod = Item{ - ID: 291, - DisplayName: "End Rod", - Name: "end_rod", - StackSize: 64, - } - ChorusPlant = Item{ - ID: 292, - DisplayName: "Chorus Plant", - Name: "chorus_plant", - StackSize: 64, - } - ChorusFlower = Item{ - ID: 293, - DisplayName: "Chorus Flower", - Name: "chorus_flower", - StackSize: 64, - } - PurpurBlock = Item{ - ID: 294, - DisplayName: "Purpur Block", - Name: "purpur_block", - StackSize: 64, - } - PurpurPillar = Item{ - ID: 295, - DisplayName: "Purpur Pillar", - Name: "purpur_pillar", - StackSize: 64, - } - PurpurStairs = Item{ - ID: 296, - DisplayName: "Purpur Stairs", - Name: "purpur_stairs", - StackSize: 64, - } - Spawner = Item{ - ID: 297, - DisplayName: "Monster Spawner", - Name: "spawner", - StackSize: 64, - } - Chest = Item{ - ID: 298, - DisplayName: "Chest", - Name: "chest", - StackSize: 64, - } - CraftingTable = Item{ - ID: 299, - DisplayName: "Crafting Table", - Name: "crafting_table", - StackSize: 64, - } - Farmland = Item{ - ID: 300, - DisplayName: "Farmland", - Name: "farmland", - StackSize: 64, - } - Furnace = Item{ - ID: 301, - DisplayName: "Furnace", - Name: "furnace", - StackSize: 64, - } - Ladder = Item{ - ID: 302, - DisplayName: "Ladder", - Name: "ladder", - StackSize: 64, - } - CobblestoneStairs = Item{ - ID: 303, - DisplayName: "Cobblestone Stairs", - Name: "cobblestone_stairs", - StackSize: 64, - } - Snow = Item{ - ID: 304, - DisplayName: "Snow", - Name: "snow", - StackSize: 64, - } - Ice = Item{ - ID: 305, - DisplayName: "Ice", - Name: "ice", - StackSize: 64, - } - SnowBlock = Item{ - ID: 306, - DisplayName: "Snow Block", - Name: "snow_block", - StackSize: 64, - } - Cactus = Item{ - ID: 307, - DisplayName: "Cactus", - Name: "cactus", - StackSize: 64, - } - Clay = Item{ - ID: 308, - DisplayName: "Clay", - Name: "clay", - StackSize: 64, - } - Jukebox = Item{ - ID: 309, - DisplayName: "Jukebox", - Name: "jukebox", - StackSize: 64, - } - OakFence = Item{ - ID: 310, - DisplayName: "Oak Fence", - Name: "oak_fence", - StackSize: 64, - } - SpruceFence = Item{ - ID: 311, - DisplayName: "Spruce Fence", - Name: "spruce_fence", - StackSize: 64, - } - BirchFence = Item{ - ID: 312, - DisplayName: "Birch Fence", - Name: "birch_fence", - StackSize: 64, - } - JungleFence = Item{ - ID: 313, - DisplayName: "Jungle Fence", - Name: "jungle_fence", - StackSize: 64, - } - AcaciaFence = Item{ - ID: 314, - DisplayName: "Acacia Fence", - Name: "acacia_fence", - StackSize: 64, - } - CherryFence = Item{ - ID: 315, - DisplayName: "Cherry Fence", - Name: "cherry_fence", - StackSize: 64, - } - DarkOakFence = Item{ - ID: 316, - DisplayName: "Dark Oak Fence", - Name: "dark_oak_fence", - StackSize: 64, - } - MangroveFence = Item{ - ID: 317, - DisplayName: "Mangrove Fence", - Name: "mangrove_fence", - StackSize: 64, - } - BambooFence = Item{ - ID: 318, - DisplayName: "Bamboo Fence", - Name: "bamboo_fence", - StackSize: 64, - } - CrimsonFence = Item{ - ID: 319, - DisplayName: "Crimson Fence", - Name: "crimson_fence", - StackSize: 64, - } - WarpedFence = Item{ - ID: 320, - DisplayName: "Warped Fence", - Name: "warped_fence", - StackSize: 64, - } - Pumpkin = Item{ - ID: 321, - DisplayName: "Pumpkin", - Name: "pumpkin", - StackSize: 64, - } - CarvedPumpkin = Item{ - ID: 322, - DisplayName: "Carved Pumpkin", - Name: "carved_pumpkin", - StackSize: 64, - } - JackOLantern = Item{ - ID: 323, - DisplayName: "Jack o'Lantern", - Name: "jack_o_lantern", - StackSize: 64, - } - Netherrack = Item{ - ID: 324, - DisplayName: "Netherrack", - Name: "netherrack", - StackSize: 64, - } - SoulSand = Item{ - ID: 325, - DisplayName: "Soul Sand", - Name: "soul_sand", - StackSize: 64, - } - SoulSoil = Item{ - ID: 326, - DisplayName: "Soul Soil", - Name: "soul_soil", - StackSize: 64, - } - Basalt = Item{ - ID: 327, - DisplayName: "Basalt", - Name: "basalt", - StackSize: 64, - } - PolishedBasalt = Item{ - ID: 328, - DisplayName: "Polished Basalt", - Name: "polished_basalt", - StackSize: 64, - } - SmoothBasalt = Item{ - ID: 329, - DisplayName: "Smooth Basalt", - Name: "smooth_basalt", - StackSize: 64, - } - SoulTorch = Item{ - ID: 330, - DisplayName: "Soul Torch", - Name: "soul_torch", - StackSize: 64, - } - Glowstone = Item{ - ID: 331, - DisplayName: "Glowstone", - Name: "glowstone", - StackSize: 64, - } - InfestedStone = Item{ - ID: 332, - DisplayName: "Infested Stone", - Name: "infested_stone", - StackSize: 64, - } - InfestedCobblestone = Item{ - ID: 333, - DisplayName: "Infested Cobblestone", - Name: "infested_cobblestone", - StackSize: 64, - } - InfestedStoneBricks = Item{ - ID: 334, - DisplayName: "Infested Stone Bricks", - Name: "infested_stone_bricks", - StackSize: 64, - } - InfestedMossyStoneBricks = Item{ - ID: 335, - DisplayName: "Infested Mossy Stone Bricks", - Name: "infested_mossy_stone_bricks", - StackSize: 64, - } - InfestedCrackedStoneBricks = Item{ - ID: 336, - DisplayName: "Infested Cracked Stone Bricks", - Name: "infested_cracked_stone_bricks", - StackSize: 64, - } - InfestedChiseledStoneBricks = Item{ - ID: 337, - DisplayName: "Infested Chiseled Stone Bricks", - Name: "infested_chiseled_stone_bricks", - StackSize: 64, - } - InfestedDeepslate = Item{ - ID: 338, - DisplayName: "Infested Deepslate", - Name: "infested_deepslate", - StackSize: 64, - } - StoneBricks = Item{ - ID: 339, - DisplayName: "Stone Bricks", - Name: "stone_bricks", - StackSize: 64, - } - MossyStoneBricks = Item{ - ID: 340, - DisplayName: "Mossy Stone Bricks", - Name: "mossy_stone_bricks", - StackSize: 64, - } - CrackedStoneBricks = Item{ - ID: 341, - DisplayName: "Cracked Stone Bricks", - Name: "cracked_stone_bricks", - StackSize: 64, - } - ChiseledStoneBricks = Item{ - ID: 342, - DisplayName: "Chiseled Stone Bricks", - Name: "chiseled_stone_bricks", - StackSize: 64, - } - PackedMud = Item{ - ID: 343, - DisplayName: "Packed Mud", - Name: "packed_mud", - StackSize: 64, - } - MudBricks = Item{ - ID: 344, - DisplayName: "Mud Bricks", - Name: "mud_bricks", - StackSize: 64, - } - DeepslateBricks = Item{ - ID: 345, - DisplayName: "Deepslate Bricks", - Name: "deepslate_bricks", - StackSize: 64, - } - CrackedDeepslateBricks = Item{ - ID: 346, - DisplayName: "Cracked Deepslate Bricks", - Name: "cracked_deepslate_bricks", - StackSize: 64, - } - DeepslateTiles = Item{ - ID: 347, - DisplayName: "Deepslate Tiles", - Name: "deepslate_tiles", - StackSize: 64, - } - CrackedDeepslateTiles = Item{ - ID: 348, - DisplayName: "Cracked Deepslate Tiles", - Name: "cracked_deepslate_tiles", - StackSize: 64, - } - ChiseledDeepslate = Item{ - ID: 349, - DisplayName: "Chiseled Deepslate", - Name: "chiseled_deepslate", - StackSize: 64, - } - ReinforcedDeepslate = Item{ - ID: 350, - DisplayName: "Reinforced Deepslate", - Name: "reinforced_deepslate", - StackSize: 64, - } - BrownMushroomBlock = Item{ - ID: 351, - DisplayName: "Brown Mushroom Block", - Name: "brown_mushroom_block", - StackSize: 64, - } - RedMushroomBlock = Item{ - ID: 352, - DisplayName: "Red Mushroom Block", - Name: "red_mushroom_block", - StackSize: 64, - } - MushroomStem = Item{ - ID: 353, - DisplayName: "Mushroom Stem", - Name: "mushroom_stem", - StackSize: 64, - } - IronBars = Item{ - ID: 354, - DisplayName: "Iron Bars", - Name: "iron_bars", - StackSize: 64, - } - Chain = Item{ - ID: 355, - DisplayName: "Chain", - Name: "chain", - StackSize: 64, - } - GlassPane = Item{ - ID: 356, - DisplayName: "Glass Pane", - Name: "glass_pane", - StackSize: 64, - } - Melon = Item{ - ID: 357, - DisplayName: "Melon", - Name: "melon", - StackSize: 64, - } - Vine = Item{ - ID: 358, - DisplayName: "Vines", - Name: "vine", - StackSize: 64, - } - GlowLichen = Item{ - ID: 359, - DisplayName: "Glow Lichen", - Name: "glow_lichen", - StackSize: 64, - } - BrickStairs = Item{ - ID: 360, - DisplayName: "Brick Stairs", - Name: "brick_stairs", - StackSize: 64, - } - StoneBrickStairs = Item{ - ID: 361, - DisplayName: "Stone Brick Stairs", - Name: "stone_brick_stairs", - StackSize: 64, - } - MudBrickStairs = Item{ - ID: 362, - DisplayName: "Mud Brick Stairs", - Name: "mud_brick_stairs", - StackSize: 64, - } - Mycelium = Item{ - ID: 363, - DisplayName: "Mycelium", - Name: "mycelium", - StackSize: 64, - } - LilyPad = Item{ - ID: 364, - DisplayName: "Lily Pad", - Name: "lily_pad", - StackSize: 64, - } - NetherBricks = Item{ - ID: 365, - DisplayName: "Nether Bricks", - Name: "nether_bricks", - StackSize: 64, - } - CrackedNetherBricks = Item{ - ID: 366, - DisplayName: "Cracked Nether Bricks", - Name: "cracked_nether_bricks", - StackSize: 64, - } - ChiseledNetherBricks = Item{ - ID: 367, - DisplayName: "Chiseled Nether Bricks", - Name: "chiseled_nether_bricks", - StackSize: 64, - } - NetherBrickFence = Item{ - ID: 368, - DisplayName: "Nether Brick Fence", - Name: "nether_brick_fence", - StackSize: 64, - } - NetherBrickStairs = Item{ - ID: 369, - DisplayName: "Nether Brick Stairs", - Name: "nether_brick_stairs", - StackSize: 64, - } - Sculk = Item{ - ID: 370, - DisplayName: "Sculk", - Name: "sculk", - StackSize: 64, - } - SculkVein = Item{ - ID: 371, - DisplayName: "Sculk Vein", - Name: "sculk_vein", - StackSize: 64, - } - SculkCatalyst = Item{ - ID: 372, - DisplayName: "Sculk Catalyst", - Name: "sculk_catalyst", - StackSize: 64, - } - SculkShrieker = Item{ - ID: 373, - DisplayName: "Sculk Shrieker", - Name: "sculk_shrieker", - StackSize: 64, - } - EnchantingTable = Item{ - ID: 374, - DisplayName: "Enchanting Table", - Name: "enchanting_table", - StackSize: 64, - } - EndPortalFrame = Item{ - ID: 375, - DisplayName: "End Portal Frame", - Name: "end_portal_frame", - StackSize: 64, - } - EndStone = Item{ - ID: 376, - DisplayName: "End Stone", - Name: "end_stone", - StackSize: 64, - } - EndStoneBricks = Item{ - ID: 377, - DisplayName: "End Stone Bricks", - Name: "end_stone_bricks", - StackSize: 64, - } - DragonEgg = Item{ - ID: 378, - DisplayName: "Dragon Egg", - Name: "dragon_egg", - StackSize: 64, - } - SandstoneStairs = Item{ - ID: 379, - DisplayName: "Sandstone Stairs", - Name: "sandstone_stairs", - StackSize: 64, - } - EnderChest = Item{ - ID: 380, - DisplayName: "Ender Chest", - Name: "ender_chest", - StackSize: 64, - } - EmeraldBlock = Item{ - ID: 381, - DisplayName: "Block of Emerald", - Name: "emerald_block", - StackSize: 64, - } - OakStairs = Item{ - ID: 382, - DisplayName: "Oak Stairs", - Name: "oak_stairs", - StackSize: 64, - } - SpruceStairs = Item{ - ID: 383, - DisplayName: "Spruce Stairs", - Name: "spruce_stairs", - StackSize: 64, - } - BirchStairs = Item{ - ID: 384, - DisplayName: "Birch Stairs", - Name: "birch_stairs", - StackSize: 64, - } - JungleStairs = Item{ - ID: 385, - DisplayName: "Jungle Stairs", - Name: "jungle_stairs", - StackSize: 64, - } - AcaciaStairs = Item{ - ID: 386, - DisplayName: "Acacia Stairs", - Name: "acacia_stairs", - StackSize: 64, - } - CherryStairs = Item{ - ID: 387, - DisplayName: "Cherry Stairs", - Name: "cherry_stairs", - StackSize: 64, - } - DarkOakStairs = Item{ - ID: 388, - DisplayName: "Dark Oak Stairs", - Name: "dark_oak_stairs", - StackSize: 64, - } - MangroveStairs = Item{ - ID: 389, - DisplayName: "Mangrove Stairs", - Name: "mangrove_stairs", - StackSize: 64, - } - BambooStairs = Item{ - ID: 390, - DisplayName: "Bamboo Stairs", - Name: "bamboo_stairs", - StackSize: 64, - } - BambooMosaicStairs = Item{ - ID: 391, - DisplayName: "Bamboo Mosaic Stairs", - Name: "bamboo_mosaic_stairs", - StackSize: 64, - } - CrimsonStairs = Item{ - ID: 392, - DisplayName: "Crimson Stairs", - Name: "crimson_stairs", - StackSize: 64, - } - WarpedStairs = Item{ - ID: 393, - DisplayName: "Warped Stairs", - Name: "warped_stairs", - StackSize: 64, - } - CommandBlock = Item{ - ID: 394, - DisplayName: "Command Block", - Name: "command_block", - StackSize: 64, - } - Beacon = Item{ - ID: 395, - DisplayName: "Beacon", - Name: "beacon", - StackSize: 64, - } - CobblestoneWall = Item{ - ID: 396, - DisplayName: "Cobblestone Wall", - Name: "cobblestone_wall", - StackSize: 64, - } - MossyCobblestoneWall = Item{ - ID: 397, - DisplayName: "Mossy Cobblestone Wall", - Name: "mossy_cobblestone_wall", - StackSize: 64, - } - BrickWall = Item{ - ID: 398, - DisplayName: "Brick Wall", - Name: "brick_wall", - StackSize: 64, - } - PrismarineWall = Item{ - ID: 399, - DisplayName: "Prismarine Wall", - Name: "prismarine_wall", - StackSize: 64, - } - RedSandstoneWall = Item{ - ID: 400, - DisplayName: "Red Sandstone Wall", - Name: "red_sandstone_wall", - StackSize: 64, - } - MossyStoneBrickWall = Item{ - ID: 401, - DisplayName: "Mossy Stone Brick Wall", - Name: "mossy_stone_brick_wall", - StackSize: 64, - } - GraniteWall = Item{ - ID: 402, - DisplayName: "Granite Wall", - Name: "granite_wall", - StackSize: 64, - } - StoneBrickWall = Item{ - ID: 403, - DisplayName: "Stone Brick Wall", - Name: "stone_brick_wall", - StackSize: 64, - } - MudBrickWall = Item{ - ID: 404, - DisplayName: "Mud Brick Wall", - Name: "mud_brick_wall", - StackSize: 64, - } - NetherBrickWall = Item{ - ID: 405, - DisplayName: "Nether Brick Wall", - Name: "nether_brick_wall", - StackSize: 64, - } - AndesiteWall = Item{ - ID: 406, - DisplayName: "Andesite Wall", - Name: "andesite_wall", - StackSize: 64, - } - RedNetherBrickWall = Item{ - ID: 407, - DisplayName: "Red Nether Brick Wall", - Name: "red_nether_brick_wall", - StackSize: 64, - } - SandstoneWall = Item{ - ID: 408, - DisplayName: "Sandstone Wall", - Name: "sandstone_wall", - StackSize: 64, - } - EndStoneBrickWall = Item{ - ID: 409, - DisplayName: "End Stone Brick Wall", - Name: "end_stone_brick_wall", - StackSize: 64, - } - DioriteWall = Item{ - ID: 410, - DisplayName: "Diorite Wall", - Name: "diorite_wall", - StackSize: 64, - } - BlackstoneWall = Item{ - ID: 411, - DisplayName: "Blackstone Wall", - Name: "blackstone_wall", - StackSize: 64, - } - PolishedBlackstoneWall = Item{ - ID: 412, - DisplayName: "Polished Blackstone Wall", - Name: "polished_blackstone_wall", - StackSize: 64, - } - PolishedBlackstoneBrickWall = Item{ - ID: 413, - DisplayName: "Polished Blackstone Brick Wall", - Name: "polished_blackstone_brick_wall", - StackSize: 64, - } - CobbledDeepslateWall = Item{ - ID: 414, - DisplayName: "Cobbled Deepslate Wall", - Name: "cobbled_deepslate_wall", - StackSize: 64, - } - PolishedDeepslateWall = Item{ - ID: 415, - DisplayName: "Polished Deepslate Wall", - Name: "polished_deepslate_wall", - StackSize: 64, - } - DeepslateBrickWall = Item{ - ID: 416, - DisplayName: "Deepslate Brick Wall", - Name: "deepslate_brick_wall", - StackSize: 64, - } - DeepslateTileWall = Item{ - ID: 417, - DisplayName: "Deepslate Tile Wall", - Name: "deepslate_tile_wall", - StackSize: 64, - } - Anvil = Item{ - ID: 418, - DisplayName: "Anvil", - Name: "anvil", - StackSize: 64, - } - ChippedAnvil = Item{ - ID: 419, - DisplayName: "Chipped Anvil", - Name: "chipped_anvil", - StackSize: 64, - } - DamagedAnvil = Item{ - ID: 420, - DisplayName: "Damaged Anvil", - Name: "damaged_anvil", - StackSize: 64, - } - ChiseledQuartzBlock = Item{ - ID: 421, - DisplayName: "Chiseled Quartz Block", - Name: "chiseled_quartz_block", - StackSize: 64, - } - QuartzBlock = Item{ - ID: 422, - DisplayName: "Block of Quartz", - Name: "quartz_block", - StackSize: 64, - } - QuartzBricks = Item{ - ID: 423, - DisplayName: "Quartz Bricks", - Name: "quartz_bricks", - StackSize: 64, - } - QuartzPillar = Item{ - ID: 424, - DisplayName: "Quartz Pillar", - Name: "quartz_pillar", - StackSize: 64, - } - QuartzStairs = Item{ - ID: 425, - DisplayName: "Quartz Stairs", - Name: "quartz_stairs", - StackSize: 64, - } - WhiteTerracotta = Item{ - ID: 426, - DisplayName: "White Terracotta", - Name: "white_terracotta", - StackSize: 64, - } - OrangeTerracotta = Item{ - ID: 427, - DisplayName: "Orange Terracotta", - Name: "orange_terracotta", - StackSize: 64, - } - MagentaTerracotta = Item{ - ID: 428, - DisplayName: "Magenta Terracotta", - Name: "magenta_terracotta", - StackSize: 64, - } - LightBlueTerracotta = Item{ - ID: 429, - DisplayName: "Light Blue Terracotta", - Name: "light_blue_terracotta", - StackSize: 64, - } - YellowTerracotta = Item{ - ID: 430, - DisplayName: "Yellow Terracotta", - Name: "yellow_terracotta", - StackSize: 64, - } - LimeTerracotta = Item{ - ID: 431, - DisplayName: "Lime Terracotta", - Name: "lime_terracotta", - StackSize: 64, - } - PinkTerracotta = Item{ - ID: 432, - DisplayName: "Pink Terracotta", - Name: "pink_terracotta", - StackSize: 64, - } - GrayTerracotta = Item{ - ID: 433, - DisplayName: "Gray Terracotta", - Name: "gray_terracotta", - StackSize: 64, - } - LightGrayTerracotta = Item{ - ID: 434, - DisplayName: "Light Gray Terracotta", - Name: "light_gray_terracotta", - StackSize: 64, - } - CyanTerracotta = Item{ - ID: 435, - DisplayName: "Cyan Terracotta", - Name: "cyan_terracotta", - StackSize: 64, - } - PurpleTerracotta = Item{ - ID: 436, - DisplayName: "Purple Terracotta", - Name: "purple_terracotta", - StackSize: 64, - } - BlueTerracotta = Item{ - ID: 437, - DisplayName: "Blue Terracotta", - Name: "blue_terracotta", - StackSize: 64, - } - BrownTerracotta = Item{ - ID: 438, - DisplayName: "Brown Terracotta", - Name: "brown_terracotta", - StackSize: 64, - } - GreenTerracotta = Item{ - ID: 439, - DisplayName: "Green Terracotta", - Name: "green_terracotta", - StackSize: 64, - } - RedTerracotta = Item{ - ID: 440, - DisplayName: "Red Terracotta", - Name: "red_terracotta", - StackSize: 64, - } - BlackTerracotta = Item{ - ID: 441, - DisplayName: "Black Terracotta", - Name: "black_terracotta", - StackSize: 64, - } - Barrier = Item{ - ID: 442, - DisplayName: "Barrier", - Name: "barrier", - StackSize: 64, - } - Light = Item{ - ID: 443, - DisplayName: "Light", - Name: "light", - StackSize: 64, - } - HayBlock = Item{ - ID: 444, - DisplayName: "Hay Bale", - Name: "hay_block", - StackSize: 64, - } - WhiteCarpet = Item{ - ID: 445, - DisplayName: "White Carpet", - Name: "white_carpet", - StackSize: 64, - } - OrangeCarpet = Item{ - ID: 446, - DisplayName: "Orange Carpet", - Name: "orange_carpet", - StackSize: 64, - } - MagentaCarpet = Item{ - ID: 447, - DisplayName: "Magenta Carpet", - Name: "magenta_carpet", - StackSize: 64, - } - LightBlueCarpet = Item{ - ID: 448, - DisplayName: "Light Blue Carpet", - Name: "light_blue_carpet", - StackSize: 64, - } - YellowCarpet = Item{ - ID: 449, - DisplayName: "Yellow Carpet", - Name: "yellow_carpet", - StackSize: 64, - } - LimeCarpet = Item{ - ID: 450, - DisplayName: "Lime Carpet", - Name: "lime_carpet", - StackSize: 64, - } - PinkCarpet = Item{ - ID: 451, - DisplayName: "Pink Carpet", - Name: "pink_carpet", - StackSize: 64, - } - GrayCarpet = Item{ - ID: 452, - DisplayName: "Gray Carpet", - Name: "gray_carpet", - StackSize: 64, - } - LightGrayCarpet = Item{ - ID: 453, - DisplayName: "Light Gray Carpet", - Name: "light_gray_carpet", - StackSize: 64, - } - CyanCarpet = Item{ - ID: 454, - DisplayName: "Cyan Carpet", - Name: "cyan_carpet", - StackSize: 64, - } - PurpleCarpet = Item{ - ID: 455, - DisplayName: "Purple Carpet", - Name: "purple_carpet", - StackSize: 64, - } - BlueCarpet = Item{ - ID: 456, - DisplayName: "Blue Carpet", - Name: "blue_carpet", - StackSize: 64, - } - BrownCarpet = Item{ - ID: 457, - DisplayName: "Brown Carpet", - Name: "brown_carpet", - StackSize: 64, - } - GreenCarpet = Item{ - ID: 458, - DisplayName: "Green Carpet", - Name: "green_carpet", - StackSize: 64, - } - RedCarpet = Item{ - ID: 459, - DisplayName: "Red Carpet", - Name: "red_carpet", - StackSize: 64, - } - BlackCarpet = Item{ - ID: 460, - DisplayName: "Black Carpet", - Name: "black_carpet", - StackSize: 64, - } - Terracotta = Item{ - ID: 461, - DisplayName: "Terracotta", - Name: "terracotta", - StackSize: 64, - } - PackedIce = Item{ - ID: 462, - DisplayName: "Packed Ice", - Name: "packed_ice", - StackSize: 64, - } - DirtPath = Item{ - ID: 463, - DisplayName: "Dirt Path", - Name: "dirt_path", - StackSize: 64, - } - Sunflower = Item{ - ID: 464, - DisplayName: "Sunflower", - Name: "sunflower", - StackSize: 64, - } - Lilac = Item{ - ID: 465, - DisplayName: "Lilac", - Name: "lilac", - StackSize: 64, - } - RoseBush = Item{ - ID: 466, - DisplayName: "Rose Bush", - Name: "rose_bush", - StackSize: 64, - } - Peony = Item{ - ID: 467, - DisplayName: "Peony", - Name: "peony", - StackSize: 64, - } - TallGrass = Item{ - ID: 468, - DisplayName: "Tall Grass", - Name: "tall_grass", - StackSize: 64, - } - LargeFern = Item{ - ID: 469, - DisplayName: "Large Fern", - Name: "large_fern", - StackSize: 64, - } - WhiteStainedGlass = Item{ - ID: 470, - DisplayName: "White Stained Glass", - Name: "white_stained_glass", - StackSize: 64, - } - OrangeStainedGlass = Item{ - ID: 471, - DisplayName: "Orange Stained Glass", - Name: "orange_stained_glass", - StackSize: 64, - } - MagentaStainedGlass = Item{ - ID: 472, - DisplayName: "Magenta Stained Glass", - Name: "magenta_stained_glass", - StackSize: 64, - } - LightBlueStainedGlass = Item{ - ID: 473, - DisplayName: "Light Blue Stained Glass", - Name: "light_blue_stained_glass", - StackSize: 64, - } - YellowStainedGlass = Item{ - ID: 474, - DisplayName: "Yellow Stained Glass", - Name: "yellow_stained_glass", - StackSize: 64, - } - LimeStainedGlass = Item{ - ID: 475, - DisplayName: "Lime Stained Glass", - Name: "lime_stained_glass", - StackSize: 64, - } - PinkStainedGlass = Item{ - ID: 476, - DisplayName: "Pink Stained Glass", - Name: "pink_stained_glass", - StackSize: 64, - } - GrayStainedGlass = Item{ - ID: 477, - DisplayName: "Gray Stained Glass", - Name: "gray_stained_glass", - StackSize: 64, - } - LightGrayStainedGlass = Item{ - ID: 478, - DisplayName: "Light Gray Stained Glass", - Name: "light_gray_stained_glass", - StackSize: 64, - } - CyanStainedGlass = Item{ - ID: 479, - DisplayName: "Cyan Stained Glass", - Name: "cyan_stained_glass", - StackSize: 64, - } - PurpleStainedGlass = Item{ - ID: 480, - DisplayName: "Purple Stained Glass", - Name: "purple_stained_glass", - StackSize: 64, - } - BlueStainedGlass = Item{ - ID: 481, - DisplayName: "Blue Stained Glass", - Name: "blue_stained_glass", - StackSize: 64, - } - BrownStainedGlass = Item{ - ID: 482, - DisplayName: "Brown Stained Glass", - Name: "brown_stained_glass", - StackSize: 64, - } - GreenStainedGlass = Item{ - ID: 483, - DisplayName: "Green Stained Glass", - Name: "green_stained_glass", - StackSize: 64, - } - RedStainedGlass = Item{ - ID: 484, - DisplayName: "Red Stained Glass", - Name: "red_stained_glass", - StackSize: 64, - } - BlackStainedGlass = Item{ - ID: 485, - DisplayName: "Black Stained Glass", - Name: "black_stained_glass", - StackSize: 64, - } - WhiteStainedGlassPane = Item{ - ID: 486, - DisplayName: "White Stained Glass Pane", - Name: "white_stained_glass_pane", - StackSize: 64, - } - OrangeStainedGlassPane = Item{ - ID: 487, - DisplayName: "Orange Stained Glass Pane", - Name: "orange_stained_glass_pane", - StackSize: 64, - } - MagentaStainedGlassPane = Item{ - ID: 488, - DisplayName: "Magenta Stained Glass Pane", - Name: "magenta_stained_glass_pane", - StackSize: 64, - } - LightBlueStainedGlassPane = Item{ - ID: 489, - DisplayName: "Light Blue Stained Glass Pane", - Name: "light_blue_stained_glass_pane", - StackSize: 64, - } - YellowStainedGlassPane = Item{ - ID: 490, - DisplayName: "Yellow Stained Glass Pane", - Name: "yellow_stained_glass_pane", - StackSize: 64, - } - LimeStainedGlassPane = Item{ - ID: 491, - DisplayName: "Lime Stained Glass Pane", - Name: "lime_stained_glass_pane", - StackSize: 64, - } - PinkStainedGlassPane = Item{ - ID: 492, - DisplayName: "Pink Stained Glass Pane", - Name: "pink_stained_glass_pane", - StackSize: 64, - } - GrayStainedGlassPane = Item{ - ID: 493, - DisplayName: "Gray Stained Glass Pane", - Name: "gray_stained_glass_pane", - StackSize: 64, - } - LightGrayStainedGlassPane = Item{ - ID: 494, - DisplayName: "Light Gray Stained Glass Pane", - Name: "light_gray_stained_glass_pane", - StackSize: 64, - } - CyanStainedGlassPane = Item{ - ID: 495, - DisplayName: "Cyan Stained Glass Pane", - Name: "cyan_stained_glass_pane", - StackSize: 64, - } - PurpleStainedGlassPane = Item{ - ID: 496, - DisplayName: "Purple Stained Glass Pane", - Name: "purple_stained_glass_pane", - StackSize: 64, - } - BlueStainedGlassPane = Item{ - ID: 497, - DisplayName: "Blue Stained Glass Pane", - Name: "blue_stained_glass_pane", - StackSize: 64, - } - BrownStainedGlassPane = Item{ - ID: 498, - DisplayName: "Brown Stained Glass Pane", - Name: "brown_stained_glass_pane", - StackSize: 64, - } - GreenStainedGlassPane = Item{ - ID: 499, - DisplayName: "Green Stained Glass Pane", - Name: "green_stained_glass_pane", - StackSize: 64, - } - RedStainedGlassPane = Item{ - ID: 500, - DisplayName: "Red Stained Glass Pane", - Name: "red_stained_glass_pane", - StackSize: 64, - } - BlackStainedGlassPane = Item{ - ID: 501, - DisplayName: "Black Stained Glass Pane", - Name: "black_stained_glass_pane", - StackSize: 64, - } - Prismarine = Item{ - ID: 502, - DisplayName: "Prismarine", - Name: "prismarine", - StackSize: 64, - } - PrismarineBricks = Item{ - ID: 503, - DisplayName: "Prismarine Bricks", - Name: "prismarine_bricks", - StackSize: 64, - } - DarkPrismarine = Item{ - ID: 504, - DisplayName: "Dark Prismarine", - Name: "dark_prismarine", - StackSize: 64, - } - PrismarineStairs = Item{ - ID: 505, - DisplayName: "Prismarine Stairs", - Name: "prismarine_stairs", - StackSize: 64, - } - PrismarineBrickStairs = Item{ - ID: 506, - DisplayName: "Prismarine Brick Stairs", - Name: "prismarine_brick_stairs", - StackSize: 64, - } - DarkPrismarineStairs = Item{ - ID: 507, - DisplayName: "Dark Prismarine Stairs", - Name: "dark_prismarine_stairs", - StackSize: 64, - } - SeaLantern = Item{ - ID: 508, - DisplayName: "Sea Lantern", - Name: "sea_lantern", - StackSize: 64, - } - RedSandstone = Item{ - ID: 509, - DisplayName: "Red Sandstone", - Name: "red_sandstone", - StackSize: 64, - } - ChiseledRedSandstone = Item{ - ID: 510, - DisplayName: "Chiseled Red Sandstone", - Name: "chiseled_red_sandstone", - StackSize: 64, - } - CutRedSandstone = Item{ - ID: 511, - DisplayName: "Cut Red Sandstone", - Name: "cut_red_sandstone", - StackSize: 64, - } - RedSandstoneStairs = Item{ - ID: 512, - DisplayName: "Red Sandstone Stairs", - Name: "red_sandstone_stairs", - StackSize: 64, - } - RepeatingCommandBlock = Item{ - ID: 513, - DisplayName: "Repeating Command Block", - Name: "repeating_command_block", - StackSize: 64, - } - ChainCommandBlock = Item{ - ID: 514, - DisplayName: "Chain Command Block", - Name: "chain_command_block", - StackSize: 64, - } - MagmaBlock = Item{ - ID: 515, - DisplayName: "Magma Block", - Name: "magma_block", - StackSize: 64, - } - NetherWartBlock = Item{ - ID: 516, - DisplayName: "Nether Wart Block", - Name: "nether_wart_block", - StackSize: 64, - } - WarpedWartBlock = Item{ - ID: 517, - DisplayName: "Warped Wart Block", - Name: "warped_wart_block", - StackSize: 64, - } - RedNetherBricks = Item{ - ID: 518, - DisplayName: "Red Nether Bricks", - Name: "red_nether_bricks", - StackSize: 64, - } - BoneBlock = Item{ - ID: 519, - DisplayName: "Bone Block", - Name: "bone_block", - StackSize: 64, - } - StructureVoid = Item{ - ID: 520, - DisplayName: "Structure Void", - Name: "structure_void", - StackSize: 64, - } - ShulkerBox = Item{ - ID: 521, - DisplayName: "Shulker Box", - Name: "shulker_box", - StackSize: 1, - } - WhiteShulkerBox = Item{ - ID: 522, - DisplayName: "White Shulker Box", - Name: "white_shulker_box", - StackSize: 1, - } - OrangeShulkerBox = Item{ - ID: 523, - DisplayName: "Orange Shulker Box", - Name: "orange_shulker_box", - StackSize: 1, - } - MagentaShulkerBox = Item{ - ID: 524, - DisplayName: "Magenta Shulker Box", - Name: "magenta_shulker_box", - StackSize: 1, - } - LightBlueShulkerBox = Item{ - ID: 525, - DisplayName: "Light Blue Shulker Box", - Name: "light_blue_shulker_box", - StackSize: 1, - } - YellowShulkerBox = Item{ - ID: 526, - DisplayName: "Yellow Shulker Box", - Name: "yellow_shulker_box", - StackSize: 1, - } - LimeShulkerBox = Item{ - ID: 527, - DisplayName: "Lime Shulker Box", - Name: "lime_shulker_box", - StackSize: 1, - } - PinkShulkerBox = Item{ - ID: 528, - DisplayName: "Pink Shulker Box", - Name: "pink_shulker_box", - StackSize: 1, - } - GrayShulkerBox = Item{ - ID: 529, - DisplayName: "Gray Shulker Box", - Name: "gray_shulker_box", - StackSize: 1, - } - LightGrayShulkerBox = Item{ - ID: 530, - DisplayName: "Light Gray Shulker Box", - Name: "light_gray_shulker_box", - StackSize: 1, - } - CyanShulkerBox = Item{ - ID: 531, - DisplayName: "Cyan Shulker Box", - Name: "cyan_shulker_box", - StackSize: 1, - } - PurpleShulkerBox = Item{ - ID: 532, - DisplayName: "Purple Shulker Box", - Name: "purple_shulker_box", - StackSize: 1, - } - BlueShulkerBox = Item{ - ID: 533, - DisplayName: "Blue Shulker Box", - Name: "blue_shulker_box", - StackSize: 1, - } - BrownShulkerBox = Item{ - ID: 534, - DisplayName: "Brown Shulker Box", - Name: "brown_shulker_box", - StackSize: 1, - } - GreenShulkerBox = Item{ - ID: 535, - DisplayName: "Green Shulker Box", - Name: "green_shulker_box", - StackSize: 1, - } - RedShulkerBox = Item{ - ID: 536, - DisplayName: "Red Shulker Box", - Name: "red_shulker_box", - StackSize: 1, - } - BlackShulkerBox = Item{ - ID: 537, - DisplayName: "Black Shulker Box", - Name: "black_shulker_box", - StackSize: 1, - } - WhiteGlazedTerracotta = Item{ - ID: 538, - DisplayName: "White Glazed Terracotta", - Name: "white_glazed_terracotta", - StackSize: 64, - } - OrangeGlazedTerracotta = Item{ - ID: 539, - DisplayName: "Orange Glazed Terracotta", - Name: "orange_glazed_terracotta", - StackSize: 64, - } - MagentaGlazedTerracotta = Item{ - ID: 540, - DisplayName: "Magenta Glazed Terracotta", - Name: "magenta_glazed_terracotta", - StackSize: 64, - } - LightBlueGlazedTerracotta = Item{ - ID: 541, - DisplayName: "Light Blue Glazed Terracotta", - Name: "light_blue_glazed_terracotta", - StackSize: 64, - } - YellowGlazedTerracotta = Item{ - ID: 542, - DisplayName: "Yellow Glazed Terracotta", - Name: "yellow_glazed_terracotta", - StackSize: 64, - } - LimeGlazedTerracotta = Item{ - ID: 543, - DisplayName: "Lime Glazed Terracotta", - Name: "lime_glazed_terracotta", - StackSize: 64, - } - PinkGlazedTerracotta = Item{ - ID: 544, - DisplayName: "Pink Glazed Terracotta", - Name: "pink_glazed_terracotta", - StackSize: 64, - } - GrayGlazedTerracotta = Item{ - ID: 545, - DisplayName: "Gray Glazed Terracotta", - Name: "gray_glazed_terracotta", - StackSize: 64, - } - LightGrayGlazedTerracotta = Item{ - ID: 546, - DisplayName: "Light Gray Glazed Terracotta", - Name: "light_gray_glazed_terracotta", - StackSize: 64, - } - CyanGlazedTerracotta = Item{ - ID: 547, - DisplayName: "Cyan Glazed Terracotta", - Name: "cyan_glazed_terracotta", - StackSize: 64, - } - PurpleGlazedTerracotta = Item{ - ID: 548, - DisplayName: "Purple Glazed Terracotta", - Name: "purple_glazed_terracotta", - StackSize: 64, - } - BlueGlazedTerracotta = Item{ - ID: 549, - DisplayName: "Blue Glazed Terracotta", - Name: "blue_glazed_terracotta", - StackSize: 64, - } - BrownGlazedTerracotta = Item{ - ID: 550, - DisplayName: "Brown Glazed Terracotta", - Name: "brown_glazed_terracotta", - StackSize: 64, - } - GreenGlazedTerracotta = Item{ - ID: 551, - DisplayName: "Green Glazed Terracotta", - Name: "green_glazed_terracotta", - StackSize: 64, - } - RedGlazedTerracotta = Item{ - ID: 552, - DisplayName: "Red Glazed Terracotta", - Name: "red_glazed_terracotta", - StackSize: 64, - } - BlackGlazedTerracotta = Item{ - ID: 553, - DisplayName: "Black Glazed Terracotta", - Name: "black_glazed_terracotta", - StackSize: 64, - } - WhiteConcrete = Item{ - ID: 554, - DisplayName: "White Concrete", - Name: "white_concrete", - StackSize: 64, - } - OrangeConcrete = Item{ - ID: 555, - DisplayName: "Orange Concrete", - Name: "orange_concrete", - StackSize: 64, - } - MagentaConcrete = Item{ - ID: 556, - DisplayName: "Magenta Concrete", - Name: "magenta_concrete", - StackSize: 64, - } - LightBlueConcrete = Item{ - ID: 557, - DisplayName: "Light Blue Concrete", - Name: "light_blue_concrete", - StackSize: 64, - } - YellowConcrete = Item{ - ID: 558, - DisplayName: "Yellow Concrete", - Name: "yellow_concrete", - StackSize: 64, - } - LimeConcrete = Item{ - ID: 559, - DisplayName: "Lime Concrete", - Name: "lime_concrete", - StackSize: 64, - } - PinkConcrete = Item{ - ID: 560, - DisplayName: "Pink Concrete", - Name: "pink_concrete", - StackSize: 64, - } - GrayConcrete = Item{ - ID: 561, - DisplayName: "Gray Concrete", - Name: "gray_concrete", - StackSize: 64, - } - LightGrayConcrete = Item{ - ID: 562, - DisplayName: "Light Gray Concrete", - Name: "light_gray_concrete", - StackSize: 64, - } - CyanConcrete = Item{ - ID: 563, - DisplayName: "Cyan Concrete", - Name: "cyan_concrete", - StackSize: 64, - } - PurpleConcrete = Item{ - ID: 564, - DisplayName: "Purple Concrete", - Name: "purple_concrete", - StackSize: 64, - } - BlueConcrete = Item{ - ID: 565, - DisplayName: "Blue Concrete", - Name: "blue_concrete", - StackSize: 64, - } - BrownConcrete = Item{ - ID: 566, - DisplayName: "Brown Concrete", - Name: "brown_concrete", - StackSize: 64, - } - GreenConcrete = Item{ - ID: 567, - DisplayName: "Green Concrete", - Name: "green_concrete", - StackSize: 64, - } - RedConcrete = Item{ - ID: 568, - DisplayName: "Red Concrete", - Name: "red_concrete", - StackSize: 64, - } - BlackConcrete = Item{ - ID: 569, - DisplayName: "Black Concrete", - Name: "black_concrete", - StackSize: 64, - } - WhiteConcretePowder = Item{ - ID: 570, - DisplayName: "White Concrete Powder", - Name: "white_concrete_powder", - StackSize: 64, - } - OrangeConcretePowder = Item{ - ID: 571, - DisplayName: "Orange Concrete Powder", - Name: "orange_concrete_powder", - StackSize: 64, - } - MagentaConcretePowder = Item{ - ID: 572, - DisplayName: "Magenta Concrete Powder", - Name: "magenta_concrete_powder", - StackSize: 64, - } - LightBlueConcretePowder = Item{ - ID: 573, - DisplayName: "Light Blue Concrete Powder", - Name: "light_blue_concrete_powder", - StackSize: 64, - } - YellowConcretePowder = Item{ - ID: 574, - DisplayName: "Yellow Concrete Powder", - Name: "yellow_concrete_powder", - StackSize: 64, - } - LimeConcretePowder = Item{ - ID: 575, - DisplayName: "Lime Concrete Powder", - Name: "lime_concrete_powder", - StackSize: 64, - } - PinkConcretePowder = Item{ - ID: 576, - DisplayName: "Pink Concrete Powder", - Name: "pink_concrete_powder", - StackSize: 64, - } - GrayConcretePowder = Item{ - ID: 577, - DisplayName: "Gray Concrete Powder", - Name: "gray_concrete_powder", - StackSize: 64, - } - LightGrayConcretePowder = Item{ - ID: 578, - DisplayName: "Light Gray Concrete Powder", - Name: "light_gray_concrete_powder", - StackSize: 64, - } - CyanConcretePowder = Item{ - ID: 579, - DisplayName: "Cyan Concrete Powder", - Name: "cyan_concrete_powder", - StackSize: 64, - } - PurpleConcretePowder = Item{ - ID: 580, - DisplayName: "Purple Concrete Powder", - Name: "purple_concrete_powder", - StackSize: 64, - } - BlueConcretePowder = Item{ - ID: 581, - DisplayName: "Blue Concrete Powder", - Name: "blue_concrete_powder", - StackSize: 64, - } - BrownConcretePowder = Item{ - ID: 582, - DisplayName: "Brown Concrete Powder", - Name: "brown_concrete_powder", - StackSize: 64, - } - GreenConcretePowder = Item{ - ID: 583, - DisplayName: "Green Concrete Powder", - Name: "green_concrete_powder", - StackSize: 64, - } - RedConcretePowder = Item{ - ID: 584, - DisplayName: "Red Concrete Powder", - Name: "red_concrete_powder", - StackSize: 64, - } - BlackConcretePowder = Item{ - ID: 585, - DisplayName: "Black Concrete Powder", - Name: "black_concrete_powder", - StackSize: 64, - } - TurtleEgg = Item{ - ID: 586, - DisplayName: "Turtle Egg", - Name: "turtle_egg", - StackSize: 64, - } - SnifferEgg = Item{ - ID: 587, - DisplayName: "Sniffer Egg", - Name: "sniffer_egg", - StackSize: 64, - } - DeadTubeCoralBlock = Item{ - ID: 588, - DisplayName: "Dead Tube Coral Block", - Name: "dead_tube_coral_block", - StackSize: 64, - } - DeadBrainCoralBlock = Item{ - ID: 589, - DisplayName: "Dead Brain Coral Block", - Name: "dead_brain_coral_block", - StackSize: 64, - } - DeadBubbleCoralBlock = Item{ - ID: 590, - DisplayName: "Dead Bubble Coral Block", - Name: "dead_bubble_coral_block", - StackSize: 64, - } - DeadFireCoralBlock = Item{ - ID: 591, - DisplayName: "Dead Fire Coral Block", - Name: "dead_fire_coral_block", - StackSize: 64, - } - DeadHornCoralBlock = Item{ - ID: 592, - DisplayName: "Dead Horn Coral Block", - Name: "dead_horn_coral_block", - StackSize: 64, - } - TubeCoralBlock = Item{ - ID: 593, - DisplayName: "Tube Coral Block", - Name: "tube_coral_block", - StackSize: 64, - } - BrainCoralBlock = Item{ - ID: 594, - DisplayName: "Brain Coral Block", - Name: "brain_coral_block", - StackSize: 64, - } - BubbleCoralBlock = Item{ - ID: 595, - DisplayName: "Bubble Coral Block", - Name: "bubble_coral_block", - StackSize: 64, - } - FireCoralBlock = Item{ - ID: 596, - DisplayName: "Fire Coral Block", - Name: "fire_coral_block", - StackSize: 64, - } - HornCoralBlock = Item{ - ID: 597, - DisplayName: "Horn Coral Block", - Name: "horn_coral_block", - StackSize: 64, - } - TubeCoral = Item{ - ID: 598, - DisplayName: "Tube Coral", - Name: "tube_coral", - StackSize: 64, - } - BrainCoral = Item{ - ID: 599, - DisplayName: "Brain Coral", - Name: "brain_coral", - StackSize: 64, - } - BubbleCoral = Item{ - ID: 600, - DisplayName: "Bubble Coral", - Name: "bubble_coral", - StackSize: 64, - } - FireCoral = Item{ - ID: 601, - DisplayName: "Fire Coral", - Name: "fire_coral", - StackSize: 64, - } - HornCoral = Item{ - ID: 602, - DisplayName: "Horn Coral", - Name: "horn_coral", - StackSize: 64, - } - DeadBrainCoral = Item{ - ID: 603, - DisplayName: "Dead Brain Coral", - Name: "dead_brain_coral", - StackSize: 64, - } - DeadBubbleCoral = Item{ - ID: 604, - DisplayName: "Dead Bubble Coral", - Name: "dead_bubble_coral", - StackSize: 64, - } - DeadFireCoral = Item{ - ID: 605, - DisplayName: "Dead Fire Coral", - Name: "dead_fire_coral", - StackSize: 64, - } - DeadHornCoral = Item{ - ID: 606, - DisplayName: "Dead Horn Coral", - Name: "dead_horn_coral", - StackSize: 64, - } - DeadTubeCoral = Item{ - ID: 607, - DisplayName: "Dead Tube Coral", - Name: "dead_tube_coral", - StackSize: 64, - } - TubeCoralFan = Item{ - ID: 608, - DisplayName: "Tube Coral Fan", - Name: "tube_coral_fan", - StackSize: 64, - } - BrainCoralFan = Item{ - ID: 609, - DisplayName: "Brain Coral Fan", - Name: "brain_coral_fan", - StackSize: 64, - } - BubbleCoralFan = Item{ - ID: 610, - DisplayName: "Bubble Coral Fan", - Name: "bubble_coral_fan", - StackSize: 64, - } - FireCoralFan = Item{ - ID: 611, - DisplayName: "Fire Coral Fan", - Name: "fire_coral_fan", - StackSize: 64, - } - HornCoralFan = Item{ - ID: 612, - DisplayName: "Horn Coral Fan", - Name: "horn_coral_fan", - StackSize: 64, - } - DeadTubeCoralFan = Item{ - ID: 613, - DisplayName: "Dead Tube Coral Fan", - Name: "dead_tube_coral_fan", - StackSize: 64, - } - DeadBrainCoralFan = Item{ - ID: 614, - DisplayName: "Dead Brain Coral Fan", - Name: "dead_brain_coral_fan", - StackSize: 64, - } - DeadBubbleCoralFan = Item{ - ID: 615, - DisplayName: "Dead Bubble Coral Fan", - Name: "dead_bubble_coral_fan", - StackSize: 64, - } - DeadFireCoralFan = Item{ - ID: 616, - DisplayName: "Dead Fire Coral Fan", - Name: "dead_fire_coral_fan", - StackSize: 64, - } - DeadHornCoralFan = Item{ - ID: 617, - DisplayName: "Dead Horn Coral Fan", - Name: "dead_horn_coral_fan", - StackSize: 64, - } - BlueIce = Item{ - ID: 618, - DisplayName: "Blue Ice", - Name: "blue_ice", - StackSize: 64, - } - Conduit = Item{ - ID: 619, - DisplayName: "Conduit", - Name: "conduit", - StackSize: 64, - } - PolishedGraniteStairs = Item{ - ID: 620, - DisplayName: "Polished Granite Stairs", - Name: "polished_granite_stairs", - StackSize: 64, - } - SmoothRedSandstoneStairs = Item{ - ID: 621, - DisplayName: "Smooth Red Sandstone Stairs", - Name: "smooth_red_sandstone_stairs", - StackSize: 64, - } - MossyStoneBrickStairs = Item{ - ID: 622, - DisplayName: "Mossy Stone Brick Stairs", - Name: "mossy_stone_brick_stairs", - StackSize: 64, - } - PolishedDioriteStairs = Item{ - ID: 623, - DisplayName: "Polished Diorite Stairs", - Name: "polished_diorite_stairs", - StackSize: 64, - } - MossyCobblestoneStairs = Item{ - ID: 624, - DisplayName: "Mossy Cobblestone Stairs", - Name: "mossy_cobblestone_stairs", - StackSize: 64, - } - EndStoneBrickStairs = Item{ - ID: 625, - DisplayName: "End Stone Brick Stairs", - Name: "end_stone_brick_stairs", - StackSize: 64, - } - StoneStairs = Item{ - ID: 626, - DisplayName: "Stone Stairs", - Name: "stone_stairs", - StackSize: 64, - } - SmoothSandstoneStairs = Item{ - ID: 627, - DisplayName: "Smooth Sandstone Stairs", - Name: "smooth_sandstone_stairs", - StackSize: 64, - } - SmoothQuartzStairs = Item{ - ID: 628, - DisplayName: "Smooth Quartz Stairs", - Name: "smooth_quartz_stairs", - StackSize: 64, - } - GraniteStairs = Item{ - ID: 629, - DisplayName: "Granite Stairs", - Name: "granite_stairs", - StackSize: 64, - } - AndesiteStairs = Item{ - ID: 630, - DisplayName: "Andesite Stairs", - Name: "andesite_stairs", - StackSize: 64, - } - RedNetherBrickStairs = Item{ - ID: 631, - DisplayName: "Red Nether Brick Stairs", - Name: "red_nether_brick_stairs", - StackSize: 64, - } - PolishedAndesiteStairs = Item{ - ID: 632, - DisplayName: "Polished Andesite Stairs", - Name: "polished_andesite_stairs", - StackSize: 64, - } - DioriteStairs = Item{ - ID: 633, - DisplayName: "Diorite Stairs", - Name: "diorite_stairs", - StackSize: 64, - } - CobbledDeepslateStairs = Item{ - ID: 634, - DisplayName: "Cobbled Deepslate Stairs", - Name: "cobbled_deepslate_stairs", - StackSize: 64, - } - PolishedDeepslateStairs = Item{ - ID: 635, - DisplayName: "Polished Deepslate Stairs", - Name: "polished_deepslate_stairs", - StackSize: 64, - } - DeepslateBrickStairs = Item{ - ID: 636, - DisplayName: "Deepslate Brick Stairs", - Name: "deepslate_brick_stairs", - StackSize: 64, - } - DeepslateTileStairs = Item{ - ID: 637, - DisplayName: "Deepslate Tile Stairs", - Name: "deepslate_tile_stairs", - StackSize: 64, - } - PolishedGraniteSlab = Item{ - ID: 638, - DisplayName: "Polished Granite Slab", - Name: "polished_granite_slab", - StackSize: 64, - } - SmoothRedSandstoneSlab = Item{ - ID: 639, - DisplayName: "Smooth Red Sandstone Slab", - Name: "smooth_red_sandstone_slab", - StackSize: 64, - } - MossyStoneBrickSlab = Item{ - ID: 640, - DisplayName: "Mossy Stone Brick Slab", - Name: "mossy_stone_brick_slab", - StackSize: 64, - } - PolishedDioriteSlab = Item{ - ID: 641, - DisplayName: "Polished Diorite Slab", - Name: "polished_diorite_slab", - StackSize: 64, - } - MossyCobblestoneSlab = Item{ - ID: 642, - DisplayName: "Mossy Cobblestone Slab", - Name: "mossy_cobblestone_slab", - StackSize: 64, - } - EndStoneBrickSlab = Item{ - ID: 643, - DisplayName: "End Stone Brick Slab", - Name: "end_stone_brick_slab", - StackSize: 64, - } - SmoothSandstoneSlab = Item{ - ID: 644, - DisplayName: "Smooth Sandstone Slab", - Name: "smooth_sandstone_slab", - StackSize: 64, - } - SmoothQuartzSlab = Item{ - ID: 645, - DisplayName: "Smooth Quartz Slab", - Name: "smooth_quartz_slab", - StackSize: 64, - } - GraniteSlab = Item{ - ID: 646, - DisplayName: "Granite Slab", - Name: "granite_slab", - StackSize: 64, - } - AndesiteSlab = Item{ - ID: 647, - DisplayName: "Andesite Slab", - Name: "andesite_slab", - StackSize: 64, - } - RedNetherBrickSlab = Item{ - ID: 648, - DisplayName: "Red Nether Brick Slab", - Name: "red_nether_brick_slab", - StackSize: 64, - } - PolishedAndesiteSlab = Item{ - ID: 649, - DisplayName: "Polished Andesite Slab", - Name: "polished_andesite_slab", - StackSize: 64, - } - DioriteSlab = Item{ - ID: 650, - DisplayName: "Diorite Slab", - Name: "diorite_slab", - StackSize: 64, - } - CobbledDeepslateSlab = Item{ - ID: 651, - DisplayName: "Cobbled Deepslate Slab", - Name: "cobbled_deepslate_slab", - StackSize: 64, - } - PolishedDeepslateSlab = Item{ - ID: 652, - DisplayName: "Polished Deepslate Slab", - Name: "polished_deepslate_slab", - StackSize: 64, - } - DeepslateBrickSlab = Item{ - ID: 653, - DisplayName: "Deepslate Brick Slab", - Name: "deepslate_brick_slab", - StackSize: 64, - } - DeepslateTileSlab = Item{ - ID: 654, - DisplayName: "Deepslate Tile Slab", - Name: "deepslate_tile_slab", - StackSize: 64, - } - Scaffolding = Item{ - ID: 655, - DisplayName: "Scaffolding", - Name: "scaffolding", - StackSize: 64, - } - Redstone = Item{ - ID: 656, - DisplayName: "Redstone Dust", - Name: "redstone", - StackSize: 64, - } - RedstoneTorch = Item{ - ID: 657, - DisplayName: "Redstone Torch", - Name: "redstone_torch", - StackSize: 64, - } - RedstoneBlock = Item{ - ID: 658, - DisplayName: "Block of Redstone", - Name: "redstone_block", - StackSize: 64, - } - Repeater = Item{ - ID: 659, - DisplayName: "Redstone Repeater", - Name: "repeater", - StackSize: 64, - } - Comparator = Item{ - ID: 660, - DisplayName: "Redstone Comparator", - Name: "comparator", - StackSize: 64, - } - Piston = Item{ - ID: 661, - DisplayName: "Piston", - Name: "piston", - StackSize: 64, - } - StickyPiston = Item{ - ID: 662, - DisplayName: "Sticky Piston", - Name: "sticky_piston", - StackSize: 64, - } - SlimeBlock = Item{ - ID: 663, - DisplayName: "Slime Block", - Name: "slime_block", - StackSize: 64, - } - HoneyBlock = Item{ - ID: 664, - DisplayName: "Honey Block", - Name: "honey_block", - StackSize: 64, - } - Observer = Item{ - ID: 665, - DisplayName: "Observer", - Name: "observer", - StackSize: 64, - } - Hopper = Item{ - ID: 666, - DisplayName: "Hopper", - Name: "hopper", - StackSize: 64, - } - Dispenser = Item{ - ID: 667, - DisplayName: "Dispenser", - Name: "dispenser", - StackSize: 64, - } - Dropper = Item{ - ID: 668, - DisplayName: "Dropper", - Name: "dropper", - StackSize: 64, - } - Lectern = Item{ - ID: 669, - DisplayName: "Lectern", - Name: "lectern", - StackSize: 64, - } - Target = Item{ - ID: 670, - DisplayName: "Target", - Name: "target", - StackSize: 64, - } - Lever = Item{ - ID: 671, - DisplayName: "Lever", - Name: "lever", - StackSize: 64, - } - LightningRod = Item{ - ID: 672, - DisplayName: "Lightning Rod", - Name: "lightning_rod", - StackSize: 64, - } - DaylightDetector = Item{ - ID: 673, - DisplayName: "Daylight Detector", - Name: "daylight_detector", - StackSize: 64, - } - SculkSensor = Item{ - ID: 674, - DisplayName: "Sculk Sensor", - Name: "sculk_sensor", - StackSize: 64, - } - CalibratedSculkSensor = Item{ - ID: 675, - DisplayName: "Calibrated Sculk Sensor", - Name: "calibrated_sculk_sensor", - StackSize: 64, - } - TripwireHook = Item{ - ID: 676, - DisplayName: "Tripwire Hook", - Name: "tripwire_hook", - StackSize: 64, - } - TrappedChest = Item{ - ID: 677, - DisplayName: "Trapped Chest", - Name: "trapped_chest", - StackSize: 64, - } - Tnt = Item{ - ID: 678, - DisplayName: "TNT", - Name: "tnt", - StackSize: 64, - } - RedstoneLamp = Item{ - ID: 679, - DisplayName: "Redstone Lamp", - Name: "redstone_lamp", - StackSize: 64, - } - NoteBlock = Item{ - ID: 680, - DisplayName: "Note Block", - Name: "note_block", - StackSize: 64, - } - StoneButton = Item{ - ID: 681, - DisplayName: "Stone Button", - Name: "stone_button", - StackSize: 64, - } - PolishedBlackstoneButton = Item{ - ID: 682, - DisplayName: "Polished Blackstone Button", - Name: "polished_blackstone_button", - StackSize: 64, - } - OakButton = Item{ - ID: 683, - DisplayName: "Oak Button", - Name: "oak_button", - StackSize: 64, - } - SpruceButton = Item{ - ID: 684, - DisplayName: "Spruce Button", - Name: "spruce_button", - StackSize: 64, - } - BirchButton = Item{ - ID: 685, - DisplayName: "Birch Button", - Name: "birch_button", - StackSize: 64, - } - JungleButton = Item{ - ID: 686, - DisplayName: "Jungle Button", - Name: "jungle_button", - StackSize: 64, - } - AcaciaButton = Item{ - ID: 687, - DisplayName: "Acacia Button", - Name: "acacia_button", - StackSize: 64, - } - CherryButton = Item{ - ID: 688, - DisplayName: "Cherry Button", - Name: "cherry_button", - StackSize: 64, - } - DarkOakButton = Item{ - ID: 689, - DisplayName: "Dark Oak Button", - Name: "dark_oak_button", - StackSize: 64, - } - MangroveButton = Item{ - ID: 690, - DisplayName: "Mangrove Button", - Name: "mangrove_button", - StackSize: 64, - } - BambooButton = Item{ - ID: 691, - DisplayName: "Bamboo Button", - Name: "bamboo_button", - StackSize: 64, - } - CrimsonButton = Item{ - ID: 692, - DisplayName: "Crimson Button", - Name: "crimson_button", - StackSize: 64, - } - WarpedButton = Item{ - ID: 693, - DisplayName: "Warped Button", - Name: "warped_button", - StackSize: 64, - } - StonePressurePlate = Item{ - ID: 694, - DisplayName: "Stone Pressure Plate", - Name: "stone_pressure_plate", - StackSize: 64, - } - PolishedBlackstonePressurePlate = Item{ - ID: 695, - DisplayName: "Polished Blackstone Pressure Plate", - Name: "polished_blackstone_pressure_plate", - StackSize: 64, - } - LightWeightedPressurePlate = Item{ - ID: 696, - DisplayName: "Light Weighted Pressure Plate", - Name: "light_weighted_pressure_plate", - StackSize: 64, - } - HeavyWeightedPressurePlate = Item{ - ID: 697, - DisplayName: "Heavy Weighted Pressure Plate", - Name: "heavy_weighted_pressure_plate", - StackSize: 64, - } - OakPressurePlate = Item{ - ID: 698, - DisplayName: "Oak Pressure Plate", - Name: "oak_pressure_plate", - StackSize: 64, - } - SprucePressurePlate = Item{ - ID: 699, - DisplayName: "Spruce Pressure Plate", - Name: "spruce_pressure_plate", - StackSize: 64, - } - BirchPressurePlate = Item{ - ID: 700, - DisplayName: "Birch Pressure Plate", - Name: "birch_pressure_plate", - StackSize: 64, - } - JunglePressurePlate = Item{ - ID: 701, - DisplayName: "Jungle Pressure Plate", - Name: "jungle_pressure_plate", - StackSize: 64, - } - AcaciaPressurePlate = Item{ - ID: 702, - DisplayName: "Acacia Pressure Plate", - Name: "acacia_pressure_plate", - StackSize: 64, - } - CherryPressurePlate = Item{ - ID: 703, - DisplayName: "Cherry Pressure Plate", - Name: "cherry_pressure_plate", - StackSize: 64, - } - DarkOakPressurePlate = Item{ - ID: 704, - DisplayName: "Dark Oak Pressure Plate", - Name: "dark_oak_pressure_plate", - StackSize: 64, - } - MangrovePressurePlate = Item{ - ID: 705, - DisplayName: "Mangrove Pressure Plate", - Name: "mangrove_pressure_plate", - StackSize: 64, - } - BambooPressurePlate = Item{ - ID: 706, - DisplayName: "Bamboo Pressure Plate", - Name: "bamboo_pressure_plate", - StackSize: 64, - } - CrimsonPressurePlate = Item{ - ID: 707, - DisplayName: "Crimson Pressure Plate", - Name: "crimson_pressure_plate", - StackSize: 64, - } - WarpedPressurePlate = Item{ - ID: 708, - DisplayName: "Warped Pressure Plate", - Name: "warped_pressure_plate", - StackSize: 64, - } - IronDoor = Item{ - ID: 709, - DisplayName: "Iron Door", - Name: "iron_door", - StackSize: 64, - } - OakDoor = Item{ - ID: 710, - DisplayName: "Oak Door", - Name: "oak_door", - StackSize: 64, - } - SpruceDoor = Item{ - ID: 711, - DisplayName: "Spruce Door", - Name: "spruce_door", - StackSize: 64, - } - BirchDoor = Item{ - ID: 712, - DisplayName: "Birch Door", - Name: "birch_door", - StackSize: 64, - } - JungleDoor = Item{ - ID: 713, - DisplayName: "Jungle Door", - Name: "jungle_door", - StackSize: 64, - } - AcaciaDoor = Item{ - ID: 714, - DisplayName: "Acacia Door", - Name: "acacia_door", - StackSize: 64, - } - CherryDoor = Item{ - ID: 715, - DisplayName: "Cherry Door", - Name: "cherry_door", - StackSize: 64, - } - DarkOakDoor = Item{ - ID: 716, - DisplayName: "Dark Oak Door", - Name: "dark_oak_door", - StackSize: 64, - } - MangroveDoor = Item{ - ID: 717, - DisplayName: "Mangrove Door", - Name: "mangrove_door", - StackSize: 64, - } - BambooDoor = Item{ - ID: 718, - DisplayName: "Bamboo Door", - Name: "bamboo_door", - StackSize: 64, - } - CrimsonDoor = Item{ - ID: 719, - DisplayName: "Crimson Door", - Name: "crimson_door", - StackSize: 64, - } - WarpedDoor = Item{ - ID: 720, - DisplayName: "Warped Door", - Name: "warped_door", - StackSize: 64, - } - CopperDoor = Item{ - ID: 721, - DisplayName: "Copper Door", - Name: "copper_door", - StackSize: 64, - } - ExposedCopperDoor = Item{ - ID: 722, - DisplayName: "Exposed Copper Door", - Name: "exposed_copper_door", - StackSize: 64, - } - WeatheredCopperDoor = Item{ - ID: 723, - DisplayName: "Weathered Copper Door", - Name: "weathered_copper_door", - StackSize: 64, - } - OxidizedCopperDoor = Item{ - ID: 724, - DisplayName: "Oxidized Copper Door", - Name: "oxidized_copper_door", - StackSize: 64, - } - WaxedCopperDoor = Item{ - ID: 725, - DisplayName: "Waxed Copper Door", - Name: "waxed_copper_door", - StackSize: 64, - } - WaxedExposedCopperDoor = Item{ - ID: 726, - DisplayName: "Waxed Exposed Copper Door", - Name: "waxed_exposed_copper_door", - StackSize: 64, - } - WaxedWeatheredCopperDoor = Item{ - ID: 727, - DisplayName: "Waxed Weathered Copper Door", - Name: "waxed_weathered_copper_door", - StackSize: 64, - } - WaxedOxidizedCopperDoor = Item{ - ID: 728, - DisplayName: "Waxed Oxidized Copper Door", - Name: "waxed_oxidized_copper_door", - StackSize: 64, - } - IronTrapdoor = Item{ - ID: 729, - DisplayName: "Iron Trapdoor", - Name: "iron_trapdoor", - StackSize: 64, - } - OakTrapdoor = Item{ - ID: 730, - DisplayName: "Oak Trapdoor", - Name: "oak_trapdoor", - StackSize: 64, - } - SpruceTrapdoor = Item{ - ID: 731, - DisplayName: "Spruce Trapdoor", - Name: "spruce_trapdoor", - StackSize: 64, - } - BirchTrapdoor = Item{ - ID: 732, - DisplayName: "Birch Trapdoor", - Name: "birch_trapdoor", - StackSize: 64, - } - JungleTrapdoor = Item{ - ID: 733, - DisplayName: "Jungle Trapdoor", - Name: "jungle_trapdoor", - StackSize: 64, - } - AcaciaTrapdoor = Item{ - ID: 734, - DisplayName: "Acacia Trapdoor", - Name: "acacia_trapdoor", - StackSize: 64, - } - CherryTrapdoor = Item{ - ID: 735, - DisplayName: "Cherry Trapdoor", - Name: "cherry_trapdoor", - StackSize: 64, - } - DarkOakTrapdoor = Item{ - ID: 736, - DisplayName: "Dark Oak Trapdoor", - Name: "dark_oak_trapdoor", - StackSize: 64, - } - MangroveTrapdoor = Item{ - ID: 737, - DisplayName: "Mangrove Trapdoor", - Name: "mangrove_trapdoor", - StackSize: 64, - } - BambooTrapdoor = Item{ - ID: 738, - DisplayName: "Bamboo Trapdoor", - Name: "bamboo_trapdoor", - StackSize: 64, - } - CrimsonTrapdoor = Item{ - ID: 739, - DisplayName: "Crimson Trapdoor", - Name: "crimson_trapdoor", - StackSize: 64, - } - WarpedTrapdoor = Item{ - ID: 740, - DisplayName: "Warped Trapdoor", - Name: "warped_trapdoor", - StackSize: 64, - } - CopperTrapdoor = Item{ - ID: 741, - DisplayName: "Copper Trapdoor", - Name: "copper_trapdoor", - StackSize: 64, - } - ExposedCopperTrapdoor = Item{ - ID: 742, - DisplayName: "Exposed Copper Trapdoor", - Name: "exposed_copper_trapdoor", - StackSize: 64, - } - WeatheredCopperTrapdoor = Item{ - ID: 743, - DisplayName: "Weathered Copper Trapdoor", - Name: "weathered_copper_trapdoor", - StackSize: 64, - } - OxidizedCopperTrapdoor = Item{ - ID: 744, - DisplayName: "Oxidized Copper Trapdoor", - Name: "oxidized_copper_trapdoor", - StackSize: 64, - } - WaxedCopperTrapdoor = Item{ - ID: 745, - DisplayName: "Waxed Copper Trapdoor", - Name: "waxed_copper_trapdoor", - StackSize: 64, - } - WaxedExposedCopperTrapdoor = Item{ - ID: 746, - DisplayName: "Waxed Exposed Copper Trapdoor", - Name: "waxed_exposed_copper_trapdoor", - StackSize: 64, - } - WaxedWeatheredCopperTrapdoor = Item{ - ID: 747, - DisplayName: "Waxed Weathered Copper Trapdoor", - Name: "waxed_weathered_copper_trapdoor", - StackSize: 64, - } - WaxedOxidizedCopperTrapdoor = Item{ - ID: 748, - DisplayName: "Waxed Oxidized Copper Trapdoor", - Name: "waxed_oxidized_copper_trapdoor", - StackSize: 64, - } - OakFenceGate = Item{ - ID: 749, - DisplayName: "Oak Fence Gate", - Name: "oak_fence_gate", - StackSize: 64, - } - SpruceFenceGate = Item{ - ID: 750, - DisplayName: "Spruce Fence Gate", - Name: "spruce_fence_gate", - StackSize: 64, - } - BirchFenceGate = Item{ - ID: 751, - DisplayName: "Birch Fence Gate", - Name: "birch_fence_gate", - StackSize: 64, - } - JungleFenceGate = Item{ - ID: 752, - DisplayName: "Jungle Fence Gate", - Name: "jungle_fence_gate", - StackSize: 64, - } - AcaciaFenceGate = Item{ - ID: 753, - DisplayName: "Acacia Fence Gate", - Name: "acacia_fence_gate", - StackSize: 64, - } - CherryFenceGate = Item{ - ID: 754, - DisplayName: "Cherry Fence Gate", - Name: "cherry_fence_gate", - StackSize: 64, - } - DarkOakFenceGate = Item{ - ID: 755, - DisplayName: "Dark Oak Fence Gate", - Name: "dark_oak_fence_gate", - StackSize: 64, - } - MangroveFenceGate = Item{ - ID: 756, - DisplayName: "Mangrove Fence Gate", - Name: "mangrove_fence_gate", - StackSize: 64, - } - BambooFenceGate = Item{ - ID: 757, - DisplayName: "Bamboo Fence Gate", - Name: "bamboo_fence_gate", - StackSize: 64, - } - CrimsonFenceGate = Item{ - ID: 758, - DisplayName: "Crimson Fence Gate", - Name: "crimson_fence_gate", - StackSize: 64, - } - WarpedFenceGate = Item{ - ID: 759, - DisplayName: "Warped Fence Gate", - Name: "warped_fence_gate", - StackSize: 64, - } - PoweredRail = Item{ - ID: 760, - DisplayName: "Powered Rail", - Name: "powered_rail", - StackSize: 64, - } - DetectorRail = Item{ - ID: 761, - DisplayName: "Detector Rail", - Name: "detector_rail", - StackSize: 64, - } - Rail = Item{ - ID: 762, - DisplayName: "Rail", - Name: "rail", - StackSize: 64, - } - ActivatorRail = Item{ - ID: 763, - DisplayName: "Activator Rail", - Name: "activator_rail", - StackSize: 64, - } - Saddle = Item{ - ID: 764, - DisplayName: "Saddle", - Name: "saddle", - StackSize: 1, - } - Minecart = Item{ - ID: 765, - DisplayName: "Minecart", - Name: "minecart", - StackSize: 1, - } - ChestMinecart = Item{ - ID: 766, - DisplayName: "Minecart with Chest", - Name: "chest_minecart", - StackSize: 1, - } - FurnaceMinecart = Item{ - ID: 767, - DisplayName: "Minecart with Furnace", - Name: "furnace_minecart", - StackSize: 1, - } - TntMinecart = Item{ - ID: 768, - DisplayName: "Minecart with TNT", - Name: "tnt_minecart", - StackSize: 1, - } - HopperMinecart = Item{ - ID: 769, - DisplayName: "Minecart with Hopper", - Name: "hopper_minecart", - StackSize: 1, - } - CarrotOnAStick = Item{ - ID: 770, - DisplayName: "Carrot on a Stick", - Name: "carrot_on_a_stick", - StackSize: 1, - } - WarpedFungusOnAStick = Item{ - ID: 771, - DisplayName: "Warped Fungus on a Stick", - Name: "warped_fungus_on_a_stick", - StackSize: 1, - } - Elytra = Item{ - ID: 772, - DisplayName: "Elytra", - Name: "elytra", - StackSize: 1, - } - OakBoat = Item{ - ID: 773, - DisplayName: "Oak Boat", - Name: "oak_boat", - StackSize: 1, - } - OakChestBoat = Item{ - ID: 774, - DisplayName: "Oak Boat with Chest", - Name: "oak_chest_boat", - StackSize: 1, - } - SpruceBoat = Item{ - ID: 775, - DisplayName: "Spruce Boat", - Name: "spruce_boat", - StackSize: 1, - } - SpruceChestBoat = Item{ - ID: 776, - DisplayName: "Spruce Boat with Chest", - Name: "spruce_chest_boat", - StackSize: 1, - } - BirchBoat = Item{ - ID: 777, - DisplayName: "Birch Boat", - Name: "birch_boat", - StackSize: 1, - } - BirchChestBoat = Item{ - ID: 778, - DisplayName: "Birch Boat with Chest", - Name: "birch_chest_boat", - StackSize: 1, - } - JungleBoat = Item{ - ID: 779, - DisplayName: "Jungle Boat", - Name: "jungle_boat", - StackSize: 1, - } - JungleChestBoat = Item{ - ID: 780, - DisplayName: "Jungle Boat with Chest", - Name: "jungle_chest_boat", - StackSize: 1, - } - AcaciaBoat = Item{ - ID: 781, - DisplayName: "Acacia Boat", - Name: "acacia_boat", - StackSize: 1, - } - AcaciaChestBoat = Item{ - ID: 782, - DisplayName: "Acacia Boat with Chest", - Name: "acacia_chest_boat", - StackSize: 1, - } - CherryBoat = Item{ - ID: 783, - DisplayName: "Cherry Boat", - Name: "cherry_boat", - StackSize: 1, - } - CherryChestBoat = Item{ - ID: 784, - DisplayName: "Cherry Boat with Chest", - Name: "cherry_chest_boat", - StackSize: 1, - } - DarkOakBoat = Item{ - ID: 785, - DisplayName: "Dark Oak Boat", - Name: "dark_oak_boat", - StackSize: 1, - } - DarkOakChestBoat = Item{ - ID: 786, - DisplayName: "Dark Oak Boat with Chest", - Name: "dark_oak_chest_boat", - StackSize: 1, - } - MangroveBoat = Item{ - ID: 787, - DisplayName: "Mangrove Boat", - Name: "mangrove_boat", - StackSize: 1, - } - MangroveChestBoat = Item{ - ID: 788, - DisplayName: "Mangrove Boat with Chest", - Name: "mangrove_chest_boat", - StackSize: 1, - } - BambooRaft = Item{ - ID: 789, - DisplayName: "Bamboo Raft", - Name: "bamboo_raft", - StackSize: 1, - } - BambooChestRaft = Item{ - ID: 790, - DisplayName: "Bamboo Raft with Chest", - Name: "bamboo_chest_raft", - StackSize: 1, - } - StructureBlock = Item{ - ID: 791, - DisplayName: "Structure Block", - Name: "structure_block", - StackSize: 64, - } - Jigsaw = Item{ - ID: 792, - DisplayName: "Jigsaw Block", - Name: "jigsaw", - StackSize: 64, - } - TurtleHelmet = Item{ - ID: 793, - DisplayName: "Turtle Shell", - Name: "turtle_helmet", - StackSize: 1, - } - Scute = Item{ - ID: 794, - DisplayName: "Scute", - Name: "scute", - StackSize: 64, - } - FlintAndSteel = Item{ - ID: 795, - DisplayName: "Flint and Steel", - Name: "flint_and_steel", - StackSize: 1, - } - Apple = Item{ - ID: 796, - DisplayName: "Apple", - Name: "apple", - StackSize: 64, - } - Bow = Item{ - ID: 797, - DisplayName: "Bow", - Name: "bow", - StackSize: 1, - } - Arrow = Item{ - ID: 798, - DisplayName: "Arrow", - Name: "arrow", - StackSize: 64, - } - Coal = Item{ - ID: 799, - DisplayName: "Coal", - Name: "coal", - StackSize: 64, - } - Charcoal = Item{ - ID: 800, - DisplayName: "Charcoal", - Name: "charcoal", - StackSize: 64, - } - Diamond = Item{ - ID: 801, - DisplayName: "Diamond", - Name: "diamond", - StackSize: 64, - } - Emerald = Item{ - ID: 802, - DisplayName: "Emerald", - Name: "emerald", - StackSize: 64, - } - LapisLazuli = Item{ - ID: 803, - DisplayName: "Lapis Lazuli", - Name: "lapis_lazuli", - StackSize: 64, - } - Quartz = Item{ - ID: 804, - DisplayName: "Nether Quartz", - Name: "quartz", - StackSize: 64, - } - AmethystShard = Item{ - ID: 805, - DisplayName: "Amethyst Shard", - Name: "amethyst_shard", - StackSize: 64, - } - RawIron = Item{ - ID: 806, - DisplayName: "Raw Iron", - Name: "raw_iron", - StackSize: 64, - } - IronIngot = Item{ - ID: 807, - DisplayName: "Iron Ingot", - Name: "iron_ingot", - StackSize: 64, - } - RawCopper = Item{ - ID: 808, - DisplayName: "Raw Copper", - Name: "raw_copper", - StackSize: 64, - } - CopperIngot = Item{ - ID: 809, - DisplayName: "Copper Ingot", - Name: "copper_ingot", - StackSize: 64, - } - RawGold = Item{ - ID: 810, - DisplayName: "Raw Gold", - Name: "raw_gold", - StackSize: 64, - } - GoldIngot = Item{ - ID: 811, - DisplayName: "Gold Ingot", - Name: "gold_ingot", - StackSize: 64, - } - NetheriteIngot = Item{ - ID: 812, - DisplayName: "Netherite Ingot", - Name: "netherite_ingot", - StackSize: 64, - } - NetheriteScrap = Item{ - ID: 813, - DisplayName: "Netherite Scrap", - Name: "netherite_scrap", - StackSize: 64, - } - WoodenSword = Item{ - ID: 814, - DisplayName: "Wooden Sword", - Name: "wooden_sword", - StackSize: 1, - } - WoodenShovel = Item{ - ID: 815, - DisplayName: "Wooden Shovel", - Name: "wooden_shovel", - StackSize: 1, - } - WoodenPickaxe = Item{ - ID: 816, - DisplayName: "Wooden Pickaxe", - Name: "wooden_pickaxe", - StackSize: 1, - } - WoodenAxe = Item{ - ID: 817, - DisplayName: "Wooden Axe", - Name: "wooden_axe", - StackSize: 1, - } - WoodenHoe = Item{ - ID: 818, - DisplayName: "Wooden Hoe", - Name: "wooden_hoe", - StackSize: 1, - } - StoneSword = Item{ - ID: 819, - DisplayName: "Stone Sword", - Name: "stone_sword", - StackSize: 1, - } - StoneShovel = Item{ - ID: 820, - DisplayName: "Stone Shovel", - Name: "stone_shovel", - StackSize: 1, - } - StonePickaxe = Item{ - ID: 821, - DisplayName: "Stone Pickaxe", - Name: "stone_pickaxe", - StackSize: 1, - } - StoneAxe = Item{ - ID: 822, - DisplayName: "Stone Axe", - Name: "stone_axe", - StackSize: 1, - } - StoneHoe = Item{ - ID: 823, - DisplayName: "Stone Hoe", - Name: "stone_hoe", - StackSize: 1, - } - GoldenSword = Item{ - ID: 824, - DisplayName: "Golden Sword", - Name: "golden_sword", - StackSize: 1, - } - GoldenShovel = Item{ - ID: 825, - DisplayName: "Golden Shovel", - Name: "golden_shovel", - StackSize: 1, - } - GoldenPickaxe = Item{ - ID: 826, - DisplayName: "Golden Pickaxe", - Name: "golden_pickaxe", - StackSize: 1, - } - GoldenAxe = Item{ - ID: 827, - DisplayName: "Golden Axe", - Name: "golden_axe", - StackSize: 1, - } - GoldenHoe = Item{ - ID: 828, - DisplayName: "Golden Hoe", - Name: "golden_hoe", - StackSize: 1, - } - IronSword = Item{ - ID: 829, - DisplayName: "Iron Sword", - Name: "iron_sword", - StackSize: 1, - } - IronShovel = Item{ - ID: 830, - DisplayName: "Iron Shovel", - Name: "iron_shovel", - StackSize: 1, - } - IronPickaxe = Item{ - ID: 831, - DisplayName: "Iron Pickaxe", - Name: "iron_pickaxe", - StackSize: 1, - } - IronAxe = Item{ - ID: 832, - DisplayName: "Iron Axe", - Name: "iron_axe", - StackSize: 1, - } - IronHoe = Item{ - ID: 833, - DisplayName: "Iron Hoe", - Name: "iron_hoe", - StackSize: 1, - } - DiamondSword = Item{ - ID: 834, - DisplayName: "Diamond Sword", - Name: "diamond_sword", - StackSize: 1, - } - DiamondShovel = Item{ - ID: 835, - DisplayName: "Diamond Shovel", - Name: "diamond_shovel", - StackSize: 1, - } - DiamondPickaxe = Item{ - ID: 836, - DisplayName: "Diamond Pickaxe", - Name: "diamond_pickaxe", - StackSize: 1, - } - DiamondAxe = Item{ - ID: 837, - DisplayName: "Diamond Axe", - Name: "diamond_axe", - StackSize: 1, - } - DiamondHoe = Item{ - ID: 838, - DisplayName: "Diamond Hoe", - Name: "diamond_hoe", - StackSize: 1, - } - NetheriteSword = Item{ - ID: 839, - DisplayName: "Netherite Sword", - Name: "netherite_sword", - StackSize: 1, - } - NetheriteShovel = Item{ - ID: 840, - DisplayName: "Netherite Shovel", - Name: "netherite_shovel", - StackSize: 1, - } - NetheritePickaxe = Item{ - ID: 841, - DisplayName: "Netherite Pickaxe", - Name: "netherite_pickaxe", - StackSize: 1, - } - NetheriteAxe = Item{ - ID: 842, - DisplayName: "Netherite Axe", - Name: "netherite_axe", - StackSize: 1, - } - NetheriteHoe = Item{ - ID: 843, - DisplayName: "Netherite Hoe", - Name: "netherite_hoe", - StackSize: 1, - } - Stick = Item{ - ID: 844, - DisplayName: "Stick", - Name: "stick", - StackSize: 64, - } - Bowl = Item{ - ID: 845, - DisplayName: "Bowl", - Name: "bowl", - StackSize: 64, - } - MushroomStew = Item{ - ID: 846, - DisplayName: "Mushroom Stew", - Name: "mushroom_stew", - StackSize: 1, - } - String = Item{ - ID: 847, - DisplayName: "String", - Name: "string", - StackSize: 64, - } - Feather = Item{ - ID: 848, - DisplayName: "Feather", - Name: "feather", - StackSize: 64, - } - Gunpowder = Item{ - ID: 849, - DisplayName: "Gunpowder", - Name: "gunpowder", - StackSize: 64, - } - WheatSeeds = Item{ - ID: 850, - DisplayName: "Wheat Seeds", - Name: "wheat_seeds", - StackSize: 64, - } - Wheat = Item{ - ID: 851, - DisplayName: "Wheat", - Name: "wheat", - StackSize: 64, - } - Bread = Item{ - ID: 852, - DisplayName: "Bread", - Name: "bread", - StackSize: 64, - } - LeatherHelmet = Item{ - ID: 853, - DisplayName: "Leather Cap", - Name: "leather_helmet", - StackSize: 1, - } - LeatherChestplate = Item{ - ID: 854, - DisplayName: "Leather Tunic", - Name: "leather_chestplate", - StackSize: 1, - } - LeatherLeggings = Item{ - ID: 855, - DisplayName: "Leather Pants", - Name: "leather_leggings", - StackSize: 1, - } - LeatherBoots = Item{ - ID: 856, - DisplayName: "Leather Boots", - Name: "leather_boots", - StackSize: 1, - } - ChainmailHelmet = Item{ - ID: 857, - DisplayName: "Chainmail Helmet", - Name: "chainmail_helmet", - StackSize: 1, - } - ChainmailChestplate = Item{ - ID: 858, - DisplayName: "Chainmail Chestplate", - Name: "chainmail_chestplate", - StackSize: 1, - } - ChainmailLeggings = Item{ - ID: 859, - DisplayName: "Chainmail Leggings", - Name: "chainmail_leggings", - StackSize: 1, - } - ChainmailBoots = Item{ - ID: 860, - DisplayName: "Chainmail Boots", - Name: "chainmail_boots", - StackSize: 1, - } - IronHelmet = Item{ - ID: 861, - DisplayName: "Iron Helmet", - Name: "iron_helmet", - StackSize: 1, - } - IronChestplate = Item{ - ID: 862, - DisplayName: "Iron Chestplate", - Name: "iron_chestplate", - StackSize: 1, - } - IronLeggings = Item{ - ID: 863, - DisplayName: "Iron Leggings", - Name: "iron_leggings", - StackSize: 1, - } - IronBoots = Item{ - ID: 864, - DisplayName: "Iron Boots", - Name: "iron_boots", - StackSize: 1, - } - DiamondHelmet = Item{ - ID: 865, - DisplayName: "Diamond Helmet", - Name: "diamond_helmet", - StackSize: 1, - } - DiamondChestplate = Item{ - ID: 866, - DisplayName: "Diamond Chestplate", - Name: "diamond_chestplate", - StackSize: 1, - } - DiamondLeggings = Item{ - ID: 867, - DisplayName: "Diamond Leggings", - Name: "diamond_leggings", - StackSize: 1, - } - DiamondBoots = Item{ - ID: 868, - DisplayName: "Diamond Boots", - Name: "diamond_boots", - StackSize: 1, - } - GoldenHelmet = Item{ - ID: 869, - DisplayName: "Golden Helmet", - Name: "golden_helmet", - StackSize: 1, - } - GoldenChestplate = Item{ - ID: 870, - DisplayName: "Golden Chestplate", - Name: "golden_chestplate", - StackSize: 1, - } - GoldenLeggings = Item{ - ID: 871, - DisplayName: "Golden Leggings", - Name: "golden_leggings", - StackSize: 1, - } - GoldenBoots = Item{ - ID: 872, - DisplayName: "Golden Boots", - Name: "golden_boots", - StackSize: 1, - } - NetheriteHelmet = Item{ - ID: 873, - DisplayName: "Netherite Helmet", - Name: "netherite_helmet", - StackSize: 1, - } - NetheriteChestplate = Item{ - ID: 874, - DisplayName: "Netherite Chestplate", - Name: "netherite_chestplate", - StackSize: 1, - } - NetheriteLeggings = Item{ - ID: 875, - DisplayName: "Netherite Leggings", - Name: "netherite_leggings", - StackSize: 1, - } - NetheriteBoots = Item{ - ID: 876, - DisplayName: "Netherite Boots", - Name: "netherite_boots", - StackSize: 1, - } - Flint = Item{ - ID: 877, - DisplayName: "Flint", - Name: "flint", - StackSize: 64, - } - Porkchop = Item{ - ID: 878, - DisplayName: "Raw Porkchop", - Name: "porkchop", - StackSize: 64, - } - CookedPorkchop = Item{ - ID: 879, - DisplayName: "Cooked Porkchop", - Name: "cooked_porkchop", - StackSize: 64, - } - Painting = Item{ - ID: 880, - DisplayName: "Painting", - Name: "painting", - StackSize: 64, - } - GoldenApple = Item{ - ID: 881, - DisplayName: "Golden Apple", - Name: "golden_apple", - StackSize: 64, - } - EnchantedGoldenApple = Item{ - ID: 882, - DisplayName: "Enchanted Golden Apple", - Name: "enchanted_golden_apple", - StackSize: 64, - } - OakSign = Item{ - ID: 883, - DisplayName: "Oak Sign", - Name: "oak_sign", - StackSize: 16, - } - SpruceSign = Item{ - ID: 884, - DisplayName: "Spruce Sign", - Name: "spruce_sign", - StackSize: 16, - } - BirchSign = Item{ - ID: 885, - DisplayName: "Birch Sign", - Name: "birch_sign", - StackSize: 16, - } - JungleSign = Item{ - ID: 886, - DisplayName: "Jungle Sign", - Name: "jungle_sign", - StackSize: 16, - } - AcaciaSign = Item{ - ID: 887, - DisplayName: "Acacia Sign", - Name: "acacia_sign", - StackSize: 16, - } - CherrySign = Item{ - ID: 888, - DisplayName: "Cherry Sign", - Name: "cherry_sign", - StackSize: 16, - } - DarkOakSign = Item{ - ID: 889, - DisplayName: "Dark Oak Sign", - Name: "dark_oak_sign", - StackSize: 16, - } - MangroveSign = Item{ - ID: 890, - DisplayName: "Mangrove Sign", - Name: "mangrove_sign", - StackSize: 16, - } - BambooSign = Item{ - ID: 891, - DisplayName: "Bamboo Sign", - Name: "bamboo_sign", - StackSize: 16, - } - CrimsonSign = Item{ - ID: 892, - DisplayName: "Crimson Sign", - Name: "crimson_sign", - StackSize: 16, - } - WarpedSign = Item{ - ID: 893, - DisplayName: "Warped Sign", - Name: "warped_sign", - StackSize: 16, - } - OakHangingSign = Item{ - ID: 894, - DisplayName: "Oak Hanging Sign", - Name: "oak_hanging_sign", - StackSize: 16, - } - SpruceHangingSign = Item{ - ID: 895, - DisplayName: "Spruce Hanging Sign", - Name: "spruce_hanging_sign", - StackSize: 16, - } - BirchHangingSign = Item{ - ID: 896, - DisplayName: "Birch Hanging Sign", - Name: "birch_hanging_sign", - StackSize: 16, - } - JungleHangingSign = Item{ - ID: 897, - DisplayName: "Jungle Hanging Sign", - Name: "jungle_hanging_sign", - StackSize: 16, - } - AcaciaHangingSign = Item{ - ID: 898, - DisplayName: "Acacia Hanging Sign", - Name: "acacia_hanging_sign", - StackSize: 16, - } - CherryHangingSign = Item{ - ID: 899, - DisplayName: "Cherry Hanging Sign", - Name: "cherry_hanging_sign", - StackSize: 16, - } - DarkOakHangingSign = Item{ - ID: 900, - DisplayName: "Dark Oak Hanging Sign", - Name: "dark_oak_hanging_sign", - StackSize: 16, - } - MangroveHangingSign = Item{ - ID: 901, - DisplayName: "Mangrove Hanging Sign", - Name: "mangrove_hanging_sign", - StackSize: 16, - } - BambooHangingSign = Item{ - ID: 902, - DisplayName: "Bamboo Hanging Sign", - Name: "bamboo_hanging_sign", - StackSize: 16, - } - CrimsonHangingSign = Item{ - ID: 903, - DisplayName: "Crimson Hanging Sign", - Name: "crimson_hanging_sign", - StackSize: 16, - } - WarpedHangingSign = Item{ - ID: 904, - DisplayName: "Warped Hanging Sign", - Name: "warped_hanging_sign", - StackSize: 16, - } - Bucket = Item{ - ID: 905, - DisplayName: "Bucket", - Name: "bucket", - StackSize: 16, - } - WaterBucket = Item{ - ID: 906, - DisplayName: "Water Bucket", - Name: "water_bucket", - StackSize: 1, - } - LavaBucket = Item{ - ID: 907, - DisplayName: "Lava Bucket", - Name: "lava_bucket", - StackSize: 1, - } - PowderSnowBucket = Item{ - ID: 908, - DisplayName: "Powder Snow Bucket", - Name: "powder_snow_bucket", - StackSize: 1, - } - Snowball = Item{ - ID: 909, - DisplayName: "Snowball", - Name: "snowball", - StackSize: 16, - } - Leather = Item{ - ID: 910, - DisplayName: "Leather", - Name: "leather", - StackSize: 64, - } - MilkBucket = Item{ - ID: 911, - DisplayName: "Milk Bucket", - Name: "milk_bucket", - StackSize: 1, - } - PufferfishBucket = Item{ - ID: 912, - DisplayName: "Bucket of Pufferfish", - Name: "pufferfish_bucket", - StackSize: 1, - } - SalmonBucket = Item{ - ID: 913, - DisplayName: "Bucket of Salmon", - Name: "salmon_bucket", - StackSize: 1, - } - CodBucket = Item{ - ID: 914, - DisplayName: "Bucket of Cod", - Name: "cod_bucket", - StackSize: 1, - } - TropicalFishBucket = Item{ - ID: 915, - DisplayName: "Bucket of Tropical Fish", - Name: "tropical_fish_bucket", - StackSize: 1, - } - AxolotlBucket = Item{ - ID: 916, - DisplayName: "Bucket of Axolotl", - Name: "axolotl_bucket", - StackSize: 1, - } - TadpoleBucket = Item{ - ID: 917, - DisplayName: "Bucket of Tadpole", - Name: "tadpole_bucket", - StackSize: 1, - } - Brick = Item{ - ID: 918, - DisplayName: "Brick", - Name: "brick", - StackSize: 64, - } - ClayBall = Item{ - ID: 919, - DisplayName: "Clay Ball", - Name: "clay_ball", - StackSize: 64, - } - DriedKelpBlock = Item{ - ID: 920, - DisplayName: "Dried Kelp Block", - Name: "dried_kelp_block", - StackSize: 64, - } - Paper = Item{ - ID: 921, - DisplayName: "Paper", - Name: "paper", - StackSize: 64, - } - Book = Item{ - ID: 922, - DisplayName: "Book", - Name: "book", - StackSize: 64, - } - SlimeBall = Item{ - ID: 923, - DisplayName: "Slimeball", - Name: "slime_ball", - StackSize: 64, - } - Egg = Item{ - ID: 924, - DisplayName: "Egg", - Name: "egg", - StackSize: 16, - } - Compass = Item{ - ID: 925, - DisplayName: "Compass", - Name: "compass", - StackSize: 64, - } - RecoveryCompass = Item{ - ID: 926, - DisplayName: "Recovery Compass", - Name: "recovery_compass", - StackSize: 64, - } - Bundle = Item{ - ID: 927, - DisplayName: "Bundle", - Name: "bundle", - StackSize: 1, - } - FishingRod = Item{ - ID: 928, - DisplayName: "Fishing Rod", - Name: "fishing_rod", - StackSize: 1, - } - Clock = Item{ - ID: 929, - DisplayName: "Clock", - Name: "clock", - StackSize: 64, - } - Spyglass = Item{ - ID: 930, - DisplayName: "Spyglass", - Name: "spyglass", - StackSize: 1, - } - GlowstoneDust = Item{ - ID: 931, - DisplayName: "Glowstone Dust", - Name: "glowstone_dust", - StackSize: 64, - } - Cod = Item{ - ID: 932, - DisplayName: "Raw Cod", - Name: "cod", - StackSize: 64, - } - Salmon = Item{ - ID: 933, - DisplayName: "Raw Salmon", - Name: "salmon", - StackSize: 64, - } - TropicalFish = Item{ - ID: 934, - DisplayName: "Tropical Fish", - Name: "tropical_fish", - StackSize: 64, - } - Pufferfish = Item{ - ID: 935, - DisplayName: "Pufferfish", - Name: "pufferfish", - StackSize: 64, - } - CookedCod = Item{ - ID: 936, - DisplayName: "Cooked Cod", - Name: "cooked_cod", - StackSize: 64, - } - CookedSalmon = Item{ - ID: 937, - DisplayName: "Cooked Salmon", - Name: "cooked_salmon", - StackSize: 64, - } - InkSac = Item{ - ID: 938, - DisplayName: "Ink Sac", - Name: "ink_sac", - StackSize: 64, - } - GlowInkSac = Item{ - ID: 939, - DisplayName: "Glow Ink Sac", - Name: "glow_ink_sac", - StackSize: 64, - } - CocoaBeans = Item{ - ID: 940, - DisplayName: "Cocoa Beans", - Name: "cocoa_beans", - StackSize: 64, - } - WhiteDye = Item{ - ID: 941, - DisplayName: "White Dye", - Name: "white_dye", - StackSize: 64, - } - OrangeDye = Item{ - ID: 942, - DisplayName: "Orange Dye", - Name: "orange_dye", - StackSize: 64, - } - MagentaDye = Item{ - ID: 943, - DisplayName: "Magenta Dye", - Name: "magenta_dye", - StackSize: 64, - } - LightBlueDye = Item{ - ID: 944, - DisplayName: "Light Blue Dye", - Name: "light_blue_dye", - StackSize: 64, - } - YellowDye = Item{ - ID: 945, - DisplayName: "Yellow Dye", - Name: "yellow_dye", - StackSize: 64, - } - LimeDye = Item{ - ID: 946, - DisplayName: "Lime Dye", - Name: "lime_dye", - StackSize: 64, - } - PinkDye = Item{ - ID: 947, - DisplayName: "Pink Dye", - Name: "pink_dye", - StackSize: 64, - } - GrayDye = Item{ - ID: 948, - DisplayName: "Gray Dye", - Name: "gray_dye", - StackSize: 64, - } - LightGrayDye = Item{ - ID: 949, - DisplayName: "Light Gray Dye", - Name: "light_gray_dye", - StackSize: 64, - } - CyanDye = Item{ - ID: 950, - DisplayName: "Cyan Dye", - Name: "cyan_dye", - StackSize: 64, - } - PurpleDye = Item{ - ID: 951, - DisplayName: "Purple Dye", - Name: "purple_dye", - StackSize: 64, - } - BlueDye = Item{ - ID: 952, - DisplayName: "Blue Dye", - Name: "blue_dye", - StackSize: 64, - } - BrownDye = Item{ - ID: 953, - DisplayName: "Brown Dye", - Name: "brown_dye", - StackSize: 64, - } - GreenDye = Item{ - ID: 954, - DisplayName: "Green Dye", - Name: "green_dye", - StackSize: 64, - } - RedDye = Item{ - ID: 955, - DisplayName: "Red Dye", - Name: "red_dye", - StackSize: 64, - } - BlackDye = Item{ - ID: 956, - DisplayName: "Black Dye", - Name: "black_dye", - StackSize: 64, - } - BoneMeal = Item{ - ID: 957, - DisplayName: "Bone Meal", - Name: "bone_meal", - StackSize: 64, - } - Bone = Item{ - ID: 958, - DisplayName: "Bone", - Name: "bone", - StackSize: 64, - } - Sugar = Item{ - ID: 959, - DisplayName: "Sugar", - Name: "sugar", - StackSize: 64, - } - Cake = Item{ - ID: 960, - DisplayName: "Cake", - Name: "cake", - StackSize: 1, - } - WhiteBed = Item{ - ID: 961, - DisplayName: "White Bed", - Name: "white_bed", - StackSize: 1, - } - OrangeBed = Item{ - ID: 962, - DisplayName: "Orange Bed", - Name: "orange_bed", - StackSize: 1, - } - MagentaBed = Item{ - ID: 963, - DisplayName: "Magenta Bed", - Name: "magenta_bed", - StackSize: 1, - } - LightBlueBed = Item{ - ID: 964, - DisplayName: "Light Blue Bed", - Name: "light_blue_bed", - StackSize: 1, - } - YellowBed = Item{ - ID: 965, - DisplayName: "Yellow Bed", - Name: "yellow_bed", - StackSize: 1, - } - LimeBed = Item{ - ID: 966, - DisplayName: "Lime Bed", - Name: "lime_bed", - StackSize: 1, - } - PinkBed = Item{ - ID: 967, - DisplayName: "Pink Bed", - Name: "pink_bed", - StackSize: 1, - } - GrayBed = Item{ - ID: 968, - DisplayName: "Gray Bed", - Name: "gray_bed", - StackSize: 1, - } - LightGrayBed = Item{ - ID: 969, - DisplayName: "Light Gray Bed", - Name: "light_gray_bed", - StackSize: 1, - } - CyanBed = Item{ - ID: 970, - DisplayName: "Cyan Bed", - Name: "cyan_bed", - StackSize: 1, - } - PurpleBed = Item{ - ID: 971, - DisplayName: "Purple Bed", - Name: "purple_bed", - StackSize: 1, - } - BlueBed = Item{ - ID: 972, - DisplayName: "Blue Bed", - Name: "blue_bed", - StackSize: 1, - } - BrownBed = Item{ - ID: 973, - DisplayName: "Brown Bed", - Name: "brown_bed", - StackSize: 1, - } - GreenBed = Item{ - ID: 974, - DisplayName: "Green Bed", - Name: "green_bed", - StackSize: 1, - } - RedBed = Item{ - ID: 975, - DisplayName: "Red Bed", - Name: "red_bed", - StackSize: 1, - } - BlackBed = Item{ - ID: 976, - DisplayName: "Black Bed", - Name: "black_bed", - StackSize: 1, - } - Cookie = Item{ - ID: 977, - DisplayName: "Cookie", - Name: "cookie", - StackSize: 64, - } - Crafter = Item{ - ID: 978, - DisplayName: "Crafter", - Name: "crafter", - StackSize: 64, - } - FilledMap = Item{ - ID: 979, - DisplayName: "Map", - Name: "filled_map", - StackSize: 64, - } - Shears = Item{ - ID: 980, - DisplayName: "Shears", - Name: "shears", - StackSize: 1, - } - MelonSlice = Item{ - ID: 981, - DisplayName: "Melon Slice", - Name: "melon_slice", - StackSize: 64, - } - DriedKelp = Item{ - ID: 982, - DisplayName: "Dried Kelp", - Name: "dried_kelp", - StackSize: 64, - } - PumpkinSeeds = Item{ - ID: 983, - DisplayName: "Pumpkin Seeds", - Name: "pumpkin_seeds", - StackSize: 64, - } - MelonSeeds = Item{ - ID: 984, - DisplayName: "Melon Seeds", - Name: "melon_seeds", - StackSize: 64, - } - Beef = Item{ - ID: 985, - DisplayName: "Raw Beef", - Name: "beef", - StackSize: 64, - } - CookedBeef = Item{ - ID: 986, - DisplayName: "Steak", - Name: "cooked_beef", - StackSize: 64, - } - Chicken = Item{ - ID: 987, - DisplayName: "Raw Chicken", - Name: "chicken", - StackSize: 64, - } - CookedChicken = Item{ - ID: 988, - DisplayName: "Cooked Chicken", - Name: "cooked_chicken", - StackSize: 64, - } - RottenFlesh = Item{ - ID: 989, - DisplayName: "Rotten Flesh", - Name: "rotten_flesh", - StackSize: 64, - } - EnderPearl = Item{ - ID: 990, - DisplayName: "Ender Pearl", - Name: "ender_pearl", - StackSize: 16, - } - BlazeRod = Item{ - ID: 991, - DisplayName: "Blaze Rod", - Name: "blaze_rod", - StackSize: 64, - } - GhastTear = Item{ - ID: 992, - DisplayName: "Ghast Tear", - Name: "ghast_tear", - StackSize: 64, - } - GoldNugget = Item{ - ID: 993, - DisplayName: "Gold Nugget", - Name: "gold_nugget", - StackSize: 64, - } - NetherWart = Item{ - ID: 994, - DisplayName: "Nether Wart", - Name: "nether_wart", - StackSize: 64, - } - Potion = Item{ - ID: 995, - DisplayName: "Potion", - Name: "potion", - StackSize: 1, - } - GlassBottle = Item{ - ID: 996, - DisplayName: "Glass Bottle", - Name: "glass_bottle", - StackSize: 64, - } - SpiderEye = Item{ - ID: 997, - DisplayName: "Spider Eye", - Name: "spider_eye", - StackSize: 64, - } - FermentedSpiderEye = Item{ - ID: 998, - DisplayName: "Fermented Spider Eye", - Name: "fermented_spider_eye", - StackSize: 64, - } - BlazePowder = Item{ - ID: 999, - DisplayName: "Blaze Powder", - Name: "blaze_powder", - StackSize: 64, - } - MagmaCream = Item{ - ID: 1000, - DisplayName: "Magma Cream", - Name: "magma_cream", - StackSize: 64, - } - BrewingStand = Item{ - ID: 1001, - DisplayName: "Brewing Stand", - Name: "brewing_stand", - StackSize: 64, - } - Cauldron = Item{ - ID: 1002, - DisplayName: "Cauldron", - Name: "cauldron", - StackSize: 64, - } - EnderEye = Item{ - ID: 1003, - DisplayName: "Eye of Ender", - Name: "ender_eye", - StackSize: 64, - } - GlisteringMelonSlice = Item{ - ID: 1004, - DisplayName: "Glistering Melon Slice", - Name: "glistering_melon_slice", - StackSize: 64, - } - AllaySpawnEgg = Item{ - ID: 1005, - DisplayName: "Allay Spawn Egg", - Name: "allay_spawn_egg", - StackSize: 64, - } - AxolotlSpawnEgg = Item{ - ID: 1006, - DisplayName: "Axolotl Spawn Egg", - Name: "axolotl_spawn_egg", - StackSize: 64, - } - BatSpawnEgg = Item{ - ID: 1007, - DisplayName: "Bat Spawn Egg", - Name: "bat_spawn_egg", - StackSize: 64, - } - BeeSpawnEgg = Item{ - ID: 1008, - DisplayName: "Bee Spawn Egg", - Name: "bee_spawn_egg", - StackSize: 64, - } - BlazeSpawnEgg = Item{ - ID: 1009, - DisplayName: "Blaze Spawn Egg", - Name: "blaze_spawn_egg", - StackSize: 64, - } - BreezeSpawnEgg = Item{ - ID: 1010, - DisplayName: "Breeze Spawn Egg", - Name: "breeze_spawn_egg", - StackSize: 64, - } - CatSpawnEgg = Item{ - ID: 1011, - DisplayName: "Cat Spawn Egg", - Name: "cat_spawn_egg", - StackSize: 64, - } - CamelSpawnEgg = Item{ - ID: 1012, - DisplayName: "Camel Spawn Egg", - Name: "camel_spawn_egg", - StackSize: 64, - } - CaveSpiderSpawnEgg = Item{ - ID: 1013, - DisplayName: "Cave Spider Spawn Egg", - Name: "cave_spider_spawn_egg", - StackSize: 64, - } - ChickenSpawnEgg = Item{ - ID: 1014, - DisplayName: "Chicken Spawn Egg", - Name: "chicken_spawn_egg", - StackSize: 64, - } - CodSpawnEgg = Item{ - ID: 1015, - DisplayName: "Cod Spawn Egg", - Name: "cod_spawn_egg", - StackSize: 64, - } - CowSpawnEgg = Item{ - ID: 1016, - DisplayName: "Cow Spawn Egg", - Name: "cow_spawn_egg", - StackSize: 64, - } - CreeperSpawnEgg = Item{ - ID: 1017, - DisplayName: "Creeper Spawn Egg", - Name: "creeper_spawn_egg", - StackSize: 64, - } - DolphinSpawnEgg = Item{ - ID: 1018, - DisplayName: "Dolphin Spawn Egg", - Name: "dolphin_spawn_egg", - StackSize: 64, - } - DonkeySpawnEgg = Item{ - ID: 1019, - DisplayName: "Donkey Spawn Egg", - Name: "donkey_spawn_egg", - StackSize: 64, - } - DrownedSpawnEgg = Item{ - ID: 1020, - DisplayName: "Drowned Spawn Egg", - Name: "drowned_spawn_egg", - StackSize: 64, - } - ElderGuardianSpawnEgg = Item{ - ID: 1021, - DisplayName: "Elder Guardian Spawn Egg", - Name: "elder_guardian_spawn_egg", - StackSize: 64, - } - EnderDragonSpawnEgg = Item{ - ID: 1022, - DisplayName: "Ender Dragon Spawn Egg", - Name: "ender_dragon_spawn_egg", - StackSize: 64, - } - EndermanSpawnEgg = Item{ - ID: 1023, - DisplayName: "Enderman Spawn Egg", - Name: "enderman_spawn_egg", - StackSize: 64, - } - EndermiteSpawnEgg = Item{ - ID: 1024, - DisplayName: "Endermite Spawn Egg", - Name: "endermite_spawn_egg", - StackSize: 64, - } - EvokerSpawnEgg = Item{ - ID: 1025, - DisplayName: "Evoker Spawn Egg", - Name: "evoker_spawn_egg", - StackSize: 64, - } - FoxSpawnEgg = Item{ - ID: 1026, - DisplayName: "Fox Spawn Egg", - Name: "fox_spawn_egg", - StackSize: 64, - } - FrogSpawnEgg = Item{ - ID: 1027, - DisplayName: "Frog Spawn Egg", - Name: "frog_spawn_egg", - StackSize: 64, - } - GhastSpawnEgg = Item{ - ID: 1028, - DisplayName: "Ghast Spawn Egg", - Name: "ghast_spawn_egg", - StackSize: 64, - } - GlowSquidSpawnEgg = Item{ - ID: 1029, - DisplayName: "Glow Squid Spawn Egg", - Name: "glow_squid_spawn_egg", - StackSize: 64, - } - GoatSpawnEgg = Item{ - ID: 1030, - DisplayName: "Goat Spawn Egg", - Name: "goat_spawn_egg", - StackSize: 64, - } - GuardianSpawnEgg = Item{ - ID: 1031, - DisplayName: "Guardian Spawn Egg", - Name: "guardian_spawn_egg", - StackSize: 64, - } - HoglinSpawnEgg = Item{ - ID: 1032, - DisplayName: "Hoglin Spawn Egg", - Name: "hoglin_spawn_egg", - StackSize: 64, - } - HorseSpawnEgg = Item{ - ID: 1033, - DisplayName: "Horse Spawn Egg", - Name: "horse_spawn_egg", - StackSize: 64, - } - HuskSpawnEgg = Item{ - ID: 1034, - DisplayName: "Husk Spawn Egg", - Name: "husk_spawn_egg", - StackSize: 64, - } - IronGolemSpawnEgg = Item{ - ID: 1035, - DisplayName: "Iron Golem Spawn Egg", - Name: "iron_golem_spawn_egg", - StackSize: 64, - } - LlamaSpawnEgg = Item{ - ID: 1036, - DisplayName: "Llama Spawn Egg", - Name: "llama_spawn_egg", - StackSize: 64, - } - MagmaCubeSpawnEgg = Item{ - ID: 1037, - DisplayName: "Magma Cube Spawn Egg", - Name: "magma_cube_spawn_egg", - StackSize: 64, - } - MooshroomSpawnEgg = Item{ - ID: 1038, - DisplayName: "Mooshroom Spawn Egg", - Name: "mooshroom_spawn_egg", - StackSize: 64, - } - MuleSpawnEgg = Item{ - ID: 1039, - DisplayName: "Mule Spawn Egg", - Name: "mule_spawn_egg", - StackSize: 64, - } - OcelotSpawnEgg = Item{ - ID: 1040, - DisplayName: "Ocelot Spawn Egg", - Name: "ocelot_spawn_egg", - StackSize: 64, - } - PandaSpawnEgg = Item{ - ID: 1041, - DisplayName: "Panda Spawn Egg", - Name: "panda_spawn_egg", - StackSize: 64, - } - ParrotSpawnEgg = Item{ - ID: 1042, - DisplayName: "Parrot Spawn Egg", - Name: "parrot_spawn_egg", - StackSize: 64, - } - PhantomSpawnEgg = Item{ - ID: 1043, - DisplayName: "Phantom Spawn Egg", - Name: "phantom_spawn_egg", - StackSize: 64, - } - PigSpawnEgg = Item{ - ID: 1044, - DisplayName: "Pig Spawn Egg", - Name: "pig_spawn_egg", - StackSize: 64, - } - PiglinSpawnEgg = Item{ - ID: 1045, - DisplayName: "Piglin Spawn Egg", - Name: "piglin_spawn_egg", - StackSize: 64, - } - PiglinBruteSpawnEgg = Item{ - ID: 1046, - DisplayName: "Piglin Brute Spawn Egg", - Name: "piglin_brute_spawn_egg", - StackSize: 64, - } - PillagerSpawnEgg = Item{ - ID: 1047, - DisplayName: "Pillager Spawn Egg", - Name: "pillager_spawn_egg", - StackSize: 64, - } - PolarBearSpawnEgg = Item{ - ID: 1048, - DisplayName: "Polar Bear Spawn Egg", - Name: "polar_bear_spawn_egg", - StackSize: 64, - } - PufferfishSpawnEgg = Item{ - ID: 1049, - DisplayName: "Pufferfish Spawn Egg", - Name: "pufferfish_spawn_egg", - StackSize: 64, - } - RabbitSpawnEgg = Item{ - ID: 1050, - DisplayName: "Rabbit Spawn Egg", - Name: "rabbit_spawn_egg", - StackSize: 64, - } - RavagerSpawnEgg = Item{ - ID: 1051, - DisplayName: "Ravager Spawn Egg", - Name: "ravager_spawn_egg", - StackSize: 64, - } - SalmonSpawnEgg = Item{ - ID: 1052, - DisplayName: "Salmon Spawn Egg", - Name: "salmon_spawn_egg", - StackSize: 64, - } - SheepSpawnEgg = Item{ - ID: 1053, - DisplayName: "Sheep Spawn Egg", - Name: "sheep_spawn_egg", - StackSize: 64, - } - ShulkerSpawnEgg = Item{ - ID: 1054, - DisplayName: "Shulker Spawn Egg", - Name: "shulker_spawn_egg", - StackSize: 64, - } - SilverfishSpawnEgg = Item{ - ID: 1055, - DisplayName: "Silverfish Spawn Egg", - Name: "silverfish_spawn_egg", - StackSize: 64, - } - SkeletonSpawnEgg = Item{ - ID: 1056, - DisplayName: "Skeleton Spawn Egg", - Name: "skeleton_spawn_egg", - StackSize: 64, - } - SkeletonHorseSpawnEgg = Item{ - ID: 1057, - DisplayName: "Skeleton Horse Spawn Egg", - Name: "skeleton_horse_spawn_egg", - StackSize: 64, - } - SlimeSpawnEgg = Item{ - ID: 1058, - DisplayName: "Slime Spawn Egg", - Name: "slime_spawn_egg", - StackSize: 64, - } - SnifferSpawnEgg = Item{ - ID: 1059, - DisplayName: "Sniffer Spawn Egg", - Name: "sniffer_spawn_egg", - StackSize: 64, - } - SnowGolemSpawnEgg = Item{ - ID: 1060, - DisplayName: "Snow Golem Spawn Egg", - Name: "snow_golem_spawn_egg", - StackSize: 64, - } - SpiderSpawnEgg = Item{ - ID: 1061, - DisplayName: "Spider Spawn Egg", - Name: "spider_spawn_egg", - StackSize: 64, - } - SquidSpawnEgg = Item{ - ID: 1062, - DisplayName: "Squid Spawn Egg", - Name: "squid_spawn_egg", - StackSize: 64, - } - StraySpawnEgg = Item{ - ID: 1063, - DisplayName: "Stray Spawn Egg", - Name: "stray_spawn_egg", - StackSize: 64, - } - StriderSpawnEgg = Item{ - ID: 1064, - DisplayName: "Strider Spawn Egg", - Name: "strider_spawn_egg", - StackSize: 64, - } - TadpoleSpawnEgg = Item{ - ID: 1065, - DisplayName: "Tadpole Spawn Egg", - Name: "tadpole_spawn_egg", - StackSize: 64, - } - TraderLlamaSpawnEgg = Item{ - ID: 1066, - DisplayName: "Trader Llama Spawn Egg", - Name: "trader_llama_spawn_egg", - StackSize: 64, - } - TropicalFishSpawnEgg = Item{ - ID: 1067, - DisplayName: "Tropical Fish Spawn Egg", - Name: "tropical_fish_spawn_egg", - StackSize: 64, - } - TurtleSpawnEgg = Item{ - ID: 1068, - DisplayName: "Turtle Spawn Egg", - Name: "turtle_spawn_egg", - StackSize: 64, - } - VexSpawnEgg = Item{ - ID: 1069, - DisplayName: "Vex Spawn Egg", - Name: "vex_spawn_egg", - StackSize: 64, - } - VillagerSpawnEgg = Item{ - ID: 1070, - DisplayName: "Villager Spawn Egg", - Name: "villager_spawn_egg", - StackSize: 64, - } - VindicatorSpawnEgg = Item{ - ID: 1071, - DisplayName: "Vindicator Spawn Egg", - Name: "vindicator_spawn_egg", - StackSize: 64, - } - WanderingTraderSpawnEgg = Item{ - ID: 1072, - DisplayName: "Wandering Trader Spawn Egg", - Name: "wandering_trader_spawn_egg", - StackSize: 64, - } - WardenSpawnEgg = Item{ - ID: 1073, - DisplayName: "Warden Spawn Egg", - Name: "warden_spawn_egg", - StackSize: 64, - } - WitchSpawnEgg = Item{ - ID: 1074, - DisplayName: "Witch Spawn Egg", - Name: "witch_spawn_egg", - StackSize: 64, - } - WitherSpawnEgg = Item{ - ID: 1075, - DisplayName: "Wither Spawn Egg", - Name: "wither_spawn_egg", - StackSize: 64, - } - WitherSkeletonSpawnEgg = Item{ - ID: 1076, - DisplayName: "Wither Skeleton Spawn Egg", - Name: "wither_skeleton_spawn_egg", - StackSize: 64, - } - WolfSpawnEgg = Item{ - ID: 1077, - DisplayName: "Wolf Spawn Egg", - Name: "wolf_spawn_egg", - StackSize: 64, - } - ZoglinSpawnEgg = Item{ - ID: 1078, - DisplayName: "Zoglin Spawn Egg", - Name: "zoglin_spawn_egg", - StackSize: 64, - } - ZombieSpawnEgg = Item{ - ID: 1079, - DisplayName: "Zombie Spawn Egg", - Name: "zombie_spawn_egg", - StackSize: 64, - } - ZombieHorseSpawnEgg = Item{ - ID: 1080, - DisplayName: "Zombie Horse Spawn Egg", - Name: "zombie_horse_spawn_egg", - StackSize: 64, - } - ZombieVillagerSpawnEgg = Item{ - ID: 1081, - DisplayName: "Zombie Villager Spawn Egg", - Name: "zombie_villager_spawn_egg", - StackSize: 64, - } - ZombifiedPiglinSpawnEgg = Item{ - ID: 1082, - DisplayName: "Zombified Piglin Spawn Egg", - Name: "zombified_piglin_spawn_egg", - StackSize: 64, - } - ExperienceBottle = Item{ - ID: 1083, - DisplayName: "Bottle o' Enchanting", - Name: "experience_bottle", - StackSize: 64, - } - FireCharge = Item{ - ID: 1084, - DisplayName: "Fire Charge", - Name: "fire_charge", - StackSize: 64, - } - WritableBook = Item{ - ID: 1085, - DisplayName: "Book and Quill", - Name: "writable_book", - StackSize: 1, - } - WrittenBook = Item{ - ID: 1086, - DisplayName: "Written Book", - Name: "written_book", - StackSize: 16, - } - ItemFrame = Item{ - ID: 1087, - DisplayName: "Item Frame", - Name: "item_frame", - StackSize: 64, - } - GlowItemFrame = Item{ - ID: 1088, - DisplayName: "Glow Item Frame", - Name: "glow_item_frame", - StackSize: 64, - } - FlowerPot = Item{ - ID: 1089, - DisplayName: "Flower Pot", - Name: "flower_pot", - StackSize: 64, - } - Carrot = Item{ - ID: 1090, - DisplayName: "Carrot", - Name: "carrot", - StackSize: 64, - } - Potato = Item{ - ID: 1091, - DisplayName: "Potato", - Name: "potato", - StackSize: 64, - } - BakedPotato = Item{ - ID: 1092, - DisplayName: "Baked Potato", - Name: "baked_potato", - StackSize: 64, - } - PoisonousPotato = Item{ - ID: 1093, - DisplayName: "Poisonous Potato", - Name: "poisonous_potato", - StackSize: 64, - } - Map = Item{ - ID: 1094, - DisplayName: "Empty Map", - Name: "map", - StackSize: 64, - } - GoldenCarrot = Item{ - ID: 1095, - DisplayName: "Golden Carrot", - Name: "golden_carrot", - StackSize: 64, - } - SkeletonSkull = Item{ - ID: 1096, - DisplayName: "Skeleton Skull", - Name: "skeleton_skull", - StackSize: 64, - } - WitherSkeletonSkull = Item{ - ID: 1097, - DisplayName: "Wither Skeleton Skull", - Name: "wither_skeleton_skull", - StackSize: 64, - } - PlayerHead = Item{ - ID: 1098, - DisplayName: "Player Head", - Name: "player_head", - StackSize: 64, - } - ZombieHead = Item{ - ID: 1099, - DisplayName: "Zombie Head", - Name: "zombie_head", - StackSize: 64, - } - CreeperHead = Item{ - ID: 1100, - DisplayName: "Creeper Head", - Name: "creeper_head", - StackSize: 64, - } - DragonHead = Item{ - ID: 1101, - DisplayName: "Dragon Head", - Name: "dragon_head", - StackSize: 64, - } - PiglinHead = Item{ - ID: 1102, - DisplayName: "Piglin Head", - Name: "piglin_head", - StackSize: 64, - } - NetherStar = Item{ - ID: 1103, - DisplayName: "Nether Star", - Name: "nether_star", - StackSize: 64, - } - PumpkinPie = Item{ - ID: 1104, - DisplayName: "Pumpkin Pie", - Name: "pumpkin_pie", - StackSize: 64, - } - FireworkRocket = Item{ - ID: 1105, - DisplayName: "Firework Rocket", - Name: "firework_rocket", - StackSize: 64, - } - FireworkStar = Item{ - ID: 1106, - DisplayName: "Firework Star", - Name: "firework_star", - StackSize: 64, - } - EnchantedBook = Item{ - ID: 1107, - DisplayName: "Enchanted Book", - Name: "enchanted_book", - StackSize: 1, - } - NetherBrick = Item{ - ID: 1108, - DisplayName: "Nether Brick", - Name: "nether_brick", - StackSize: 64, - } - PrismarineShard = Item{ - ID: 1109, - DisplayName: "Prismarine Shard", - Name: "prismarine_shard", - StackSize: 64, - } - PrismarineCrystals = Item{ - ID: 1110, - DisplayName: "Prismarine Crystals", - Name: "prismarine_crystals", - StackSize: 64, - } - Rabbit = Item{ - ID: 1111, - DisplayName: "Raw Rabbit", - Name: "rabbit", - StackSize: 64, - } - CookedRabbit = Item{ - ID: 1112, - DisplayName: "Cooked Rabbit", - Name: "cooked_rabbit", - StackSize: 64, - } - RabbitStew = Item{ - ID: 1113, - DisplayName: "Rabbit Stew", - Name: "rabbit_stew", - StackSize: 1, - } - RabbitFoot = Item{ - ID: 1114, - DisplayName: "Rabbit's Foot", - Name: "rabbit_foot", - StackSize: 64, - } - RabbitHide = Item{ - ID: 1115, - DisplayName: "Rabbit Hide", - Name: "rabbit_hide", - StackSize: 64, - } - ArmorStand = Item{ - ID: 1116, - DisplayName: "Armor Stand", - Name: "armor_stand", - StackSize: 16, - } - IronHorseArmor = Item{ - ID: 1117, - DisplayName: "Iron Horse Armor", - Name: "iron_horse_armor", - StackSize: 1, - } - GoldenHorseArmor = Item{ - ID: 1118, - DisplayName: "Golden Horse Armor", - Name: "golden_horse_armor", - StackSize: 1, - } - DiamondHorseArmor = Item{ - ID: 1119, - DisplayName: "Diamond Horse Armor", - Name: "diamond_horse_armor", - StackSize: 1, - } - LeatherHorseArmor = Item{ - ID: 1120, - DisplayName: "Leather Horse Armor", - Name: "leather_horse_armor", - StackSize: 1, - } - Lead = Item{ - ID: 1121, - DisplayName: "Lead", - Name: "lead", - StackSize: 64, - } - NameTag = Item{ - ID: 1122, - DisplayName: "Name Tag", - Name: "name_tag", - StackSize: 64, - } - CommandBlockMinecart = Item{ - ID: 1123, - DisplayName: "Minecart with Command Block", - Name: "command_block_minecart", - StackSize: 1, - } - Mutton = Item{ - ID: 1124, - DisplayName: "Raw Mutton", - Name: "mutton", - StackSize: 64, - } - CookedMutton = Item{ - ID: 1125, - DisplayName: "Cooked Mutton", - Name: "cooked_mutton", - StackSize: 64, - } - WhiteBanner = Item{ - ID: 1126, - DisplayName: "White Banner", - Name: "white_banner", - StackSize: 16, - } - OrangeBanner = Item{ - ID: 1127, - DisplayName: "Orange Banner", - Name: "orange_banner", - StackSize: 16, - } - MagentaBanner = Item{ - ID: 1128, - DisplayName: "Magenta Banner", - Name: "magenta_banner", - StackSize: 16, - } - LightBlueBanner = Item{ - ID: 1129, - DisplayName: "Light Blue Banner", - Name: "light_blue_banner", - StackSize: 16, - } - YellowBanner = Item{ - ID: 1130, - DisplayName: "Yellow Banner", - Name: "yellow_banner", - StackSize: 16, - } - LimeBanner = Item{ - ID: 1131, - DisplayName: "Lime Banner", - Name: "lime_banner", - StackSize: 16, - } - PinkBanner = Item{ - ID: 1132, - DisplayName: "Pink Banner", - Name: "pink_banner", - StackSize: 16, - } - GrayBanner = Item{ - ID: 1133, - DisplayName: "Gray Banner", - Name: "gray_banner", - StackSize: 16, - } - LightGrayBanner = Item{ - ID: 1134, - DisplayName: "Light Gray Banner", - Name: "light_gray_banner", - StackSize: 16, - } - CyanBanner = Item{ - ID: 1135, - DisplayName: "Cyan Banner", - Name: "cyan_banner", - StackSize: 16, - } - PurpleBanner = Item{ - ID: 1136, - DisplayName: "Purple Banner", - Name: "purple_banner", - StackSize: 16, - } - BlueBanner = Item{ - ID: 1137, - DisplayName: "Blue Banner", - Name: "blue_banner", - StackSize: 16, - } - BrownBanner = Item{ - ID: 1138, - DisplayName: "Brown Banner", - Name: "brown_banner", - StackSize: 16, - } - GreenBanner = Item{ - ID: 1139, - DisplayName: "Green Banner", - Name: "green_banner", - StackSize: 16, - } - RedBanner = Item{ - ID: 1140, - DisplayName: "Red Banner", - Name: "red_banner", - StackSize: 16, - } - BlackBanner = Item{ - ID: 1141, - DisplayName: "Black Banner", - Name: "black_banner", - StackSize: 16, - } - EndCrystal = Item{ - ID: 1142, - DisplayName: "End Crystal", - Name: "end_crystal", - StackSize: 64, - } - ChorusFruit = Item{ - ID: 1143, - DisplayName: "Chorus Fruit", - Name: "chorus_fruit", - StackSize: 64, - } - PoppedChorusFruit = Item{ - ID: 1144, - DisplayName: "Popped Chorus Fruit", - Name: "popped_chorus_fruit", - StackSize: 64, - } - TorchflowerSeeds = Item{ - ID: 1145, - DisplayName: "Torchflower Seeds", - Name: "torchflower_seeds", - StackSize: 64, - } - PitcherPod = Item{ - ID: 1146, - DisplayName: "Pitcher Pod", - Name: "pitcher_pod", - StackSize: 64, - } - Beetroot = Item{ - ID: 1147, - DisplayName: "Beetroot", - Name: "beetroot", - StackSize: 64, - } - BeetrootSeeds = Item{ - ID: 1148, - DisplayName: "Beetroot Seeds", - Name: "beetroot_seeds", - StackSize: 64, - } - BeetrootSoup = Item{ - ID: 1149, - DisplayName: "Beetroot Soup", - Name: "beetroot_soup", - StackSize: 1, - } - DragonBreath = Item{ - ID: 1150, - DisplayName: "Dragon's Breath", - Name: "dragon_breath", - StackSize: 64, - } - SplashPotion = Item{ - ID: 1151, - DisplayName: "Splash Potion", - Name: "splash_potion", - StackSize: 1, - } - SpectralArrow = Item{ - ID: 1152, - DisplayName: "Spectral Arrow", - Name: "spectral_arrow", - StackSize: 64, - } - TippedArrow = Item{ - ID: 1153, - DisplayName: "Tipped Arrow", - Name: "tipped_arrow", - StackSize: 64, - } - LingeringPotion = Item{ - ID: 1154, - DisplayName: "Lingering Potion", - Name: "lingering_potion", - StackSize: 1, - } - Shield = Item{ - ID: 1155, - DisplayName: "Shield", - Name: "shield", - StackSize: 1, - } - TotemOfUndying = Item{ - ID: 1156, - DisplayName: "Totem of Undying", - Name: "totem_of_undying", - StackSize: 1, - } - ShulkerShell = Item{ - ID: 1157, - DisplayName: "Shulker Shell", - Name: "shulker_shell", - StackSize: 64, - } - IronNugget = Item{ - ID: 1158, - DisplayName: "Iron Nugget", - Name: "iron_nugget", - StackSize: 64, - } - KnowledgeBook = Item{ - ID: 1159, - DisplayName: "Knowledge Book", - Name: "knowledge_book", - StackSize: 1, - } - DebugStick = Item{ - ID: 1160, - DisplayName: "Debug Stick", - Name: "debug_stick", - StackSize: 1, - } - MusicDisc13 = Item{ - ID: 1161, - DisplayName: "Music Disc", - Name: "music_disc_13", - StackSize: 1, - } - MusicDiscCat = Item{ - ID: 1162, - DisplayName: "Music Disc", - Name: "music_disc_cat", - StackSize: 1, - } - MusicDiscBlocks = Item{ - ID: 1163, - DisplayName: "Music Disc", - Name: "music_disc_blocks", - StackSize: 1, - } - MusicDiscChirp = Item{ - ID: 1164, - DisplayName: "Music Disc", - Name: "music_disc_chirp", - StackSize: 1, - } - MusicDiscFar = Item{ - ID: 1165, - DisplayName: "Music Disc", - Name: "music_disc_far", - StackSize: 1, - } - MusicDiscMall = Item{ - ID: 1166, - DisplayName: "Music Disc", - Name: "music_disc_mall", - StackSize: 1, - } - MusicDiscMellohi = Item{ - ID: 1167, - DisplayName: "Music Disc", - Name: "music_disc_mellohi", - StackSize: 1, - } - MusicDiscStal = Item{ - ID: 1168, - DisplayName: "Music Disc", - Name: "music_disc_stal", - StackSize: 1, - } - MusicDiscStrad = Item{ - ID: 1169, - DisplayName: "Music Disc", - Name: "music_disc_strad", - StackSize: 1, - } - MusicDiscWard = Item{ - ID: 1170, - DisplayName: "Music Disc", - Name: "music_disc_ward", - StackSize: 1, - } - MusicDisc11 = Item{ - ID: 1171, - DisplayName: "Music Disc", - Name: "music_disc_11", - StackSize: 1, - } - MusicDiscWait = Item{ - ID: 1172, - DisplayName: "Music Disc", - Name: "music_disc_wait", - StackSize: 1, - } - MusicDiscOtherside = Item{ - ID: 1173, - DisplayName: "Music Disc", - Name: "music_disc_otherside", - StackSize: 1, - } - MusicDiscRelic = Item{ - ID: 1174, - DisplayName: "Music Disc", - Name: "music_disc_relic", - StackSize: 1, - } - MusicDisc5 = Item{ - ID: 1175, - DisplayName: "Music Disc", - Name: "music_disc_5", - StackSize: 1, - } - MusicDiscPigstep = Item{ - ID: 1176, - DisplayName: "Music Disc", - Name: "music_disc_pigstep", - StackSize: 1, - } - DiscFragment5 = Item{ - ID: 1177, - DisplayName: "Disc Fragment", - Name: "disc_fragment_5", - StackSize: 64, - } - Trident = Item{ - ID: 1178, - DisplayName: "Trident", - Name: "trident", - StackSize: 1, - } - PhantomMembrane = Item{ - ID: 1179, - DisplayName: "Phantom Membrane", - Name: "phantom_membrane", - StackSize: 64, - } - NautilusShell = Item{ - ID: 1180, - DisplayName: "Nautilus Shell", - Name: "nautilus_shell", - StackSize: 64, - } - HeartOfTheSea = Item{ - ID: 1181, - DisplayName: "Heart of the Sea", - Name: "heart_of_the_sea", - StackSize: 64, - } - Crossbow = Item{ - ID: 1182, - DisplayName: "Crossbow", - Name: "crossbow", - StackSize: 1, - } - SuspiciousStew = Item{ - ID: 1183, - DisplayName: "Suspicious Stew", - Name: "suspicious_stew", - StackSize: 1, - } - Loom = Item{ - ID: 1184, - DisplayName: "Loom", - Name: "loom", - StackSize: 64, - } - FlowerBannerPattern = Item{ - ID: 1185, - DisplayName: "Banner Pattern", - Name: "flower_banner_pattern", - StackSize: 1, - } - CreeperBannerPattern = Item{ - ID: 1186, - DisplayName: "Banner Pattern", - Name: "creeper_banner_pattern", - StackSize: 1, - } - SkullBannerPattern = Item{ - ID: 1187, - DisplayName: "Banner Pattern", - Name: "skull_banner_pattern", - StackSize: 1, - } - MojangBannerPattern = Item{ - ID: 1188, - DisplayName: "Banner Pattern", - Name: "mojang_banner_pattern", - StackSize: 1, - } - GlobeBannerPattern = Item{ - ID: 1189, - DisplayName: "Banner Pattern", - Name: "globe_banner_pattern", - StackSize: 1, - } - PiglinBannerPattern = Item{ - ID: 1190, - DisplayName: "Banner Pattern", - Name: "piglin_banner_pattern", - StackSize: 1, - } - GoatHorn = Item{ - ID: 1191, - DisplayName: "Goat Horn", - Name: "goat_horn", - StackSize: 1, - } - Composter = Item{ - ID: 1192, - DisplayName: "Composter", - Name: "composter", - StackSize: 64, - } - Barrel = Item{ - ID: 1193, - DisplayName: "Barrel", - Name: "barrel", - StackSize: 64, - } - Smoker = Item{ - ID: 1194, - DisplayName: "Smoker", - Name: "smoker", - StackSize: 64, - } - BlastFurnace = Item{ - ID: 1195, - DisplayName: "Blast Furnace", - Name: "blast_furnace", - StackSize: 64, - } - CartographyTable = Item{ - ID: 1196, - DisplayName: "Cartography Table", - Name: "cartography_table", - StackSize: 64, - } - FletchingTable = Item{ - ID: 1197, - DisplayName: "Fletching Table", - Name: "fletching_table", - StackSize: 64, - } - Grindstone = Item{ - ID: 1198, - DisplayName: "Grindstone", - Name: "grindstone", - StackSize: 64, - } - SmithingTable = Item{ - ID: 1199, - DisplayName: "Smithing Table", - Name: "smithing_table", - StackSize: 64, - } - Stonecutter = Item{ - ID: 1200, - DisplayName: "Stonecutter", - Name: "stonecutter", - StackSize: 64, - } - Bell = Item{ - ID: 1201, - DisplayName: "Bell", - Name: "bell", - StackSize: 64, - } - Lantern = Item{ - ID: 1202, - DisplayName: "Lantern", - Name: "lantern", - StackSize: 64, - } - SoulLantern = Item{ - ID: 1203, - DisplayName: "Soul Lantern", - Name: "soul_lantern", - StackSize: 64, - } - SweetBerries = Item{ - ID: 1204, - DisplayName: "Sweet Berries", - Name: "sweet_berries", - StackSize: 64, - } - GlowBerries = Item{ - ID: 1205, - DisplayName: "Glow Berries", - Name: "glow_berries", - StackSize: 64, - } - Campfire = Item{ - ID: 1206, - DisplayName: "Campfire", - Name: "campfire", - StackSize: 64, - } - SoulCampfire = Item{ - ID: 1207, - DisplayName: "Soul Campfire", - Name: "soul_campfire", - StackSize: 64, - } - Shroomlight = Item{ - ID: 1208, - DisplayName: "Shroomlight", - Name: "shroomlight", - StackSize: 64, - } - Honeycomb = Item{ - ID: 1209, - DisplayName: "Honeycomb", - Name: "honeycomb", - StackSize: 64, - } - BeeNest = Item{ - ID: 1210, - DisplayName: "Bee Nest", - Name: "bee_nest", - StackSize: 64, - } - Beehive = Item{ - ID: 1211, - DisplayName: "Beehive", - Name: "beehive", - StackSize: 64, - } - HoneyBottle = Item{ - ID: 1212, - DisplayName: "Honey Bottle", - Name: "honey_bottle", - StackSize: 16, - } - HoneycombBlock = Item{ - ID: 1213, - DisplayName: "Honeycomb Block", - Name: "honeycomb_block", - StackSize: 64, - } - Lodestone = Item{ - ID: 1214, - DisplayName: "Lodestone", - Name: "lodestone", - StackSize: 64, - } - CryingObsidian = Item{ - ID: 1215, - DisplayName: "Crying Obsidian", - Name: "crying_obsidian", - StackSize: 64, - } - Blackstone = Item{ - ID: 1216, - DisplayName: "Blackstone", - Name: "blackstone", - StackSize: 64, - } - BlackstoneSlab = Item{ - ID: 1217, - DisplayName: "Blackstone Slab", - Name: "blackstone_slab", - StackSize: 64, - } - BlackstoneStairs = Item{ - ID: 1218, - DisplayName: "Blackstone Stairs", - Name: "blackstone_stairs", - StackSize: 64, - } - GildedBlackstone = Item{ - ID: 1219, - DisplayName: "Gilded Blackstone", - Name: "gilded_blackstone", - StackSize: 64, - } - PolishedBlackstone = Item{ - ID: 1220, - DisplayName: "Polished Blackstone", - Name: "polished_blackstone", - StackSize: 64, - } - PolishedBlackstoneSlab = Item{ - ID: 1221, - DisplayName: "Polished Blackstone Slab", - Name: "polished_blackstone_slab", - StackSize: 64, - } - PolishedBlackstoneStairs = Item{ - ID: 1222, - DisplayName: "Polished Blackstone Stairs", - Name: "polished_blackstone_stairs", - StackSize: 64, - } - ChiseledPolishedBlackstone = Item{ - ID: 1223, - DisplayName: "Chiseled Polished Blackstone", - Name: "chiseled_polished_blackstone", - StackSize: 64, - } - PolishedBlackstoneBricks = Item{ - ID: 1224, - DisplayName: "Polished Blackstone Bricks", - Name: "polished_blackstone_bricks", - StackSize: 64, - } - PolishedBlackstoneBrickSlab = Item{ - ID: 1225, - DisplayName: "Polished Blackstone Brick Slab", - Name: "polished_blackstone_brick_slab", - StackSize: 64, - } - PolishedBlackstoneBrickStairs = Item{ - ID: 1226, - DisplayName: "Polished Blackstone Brick Stairs", - Name: "polished_blackstone_brick_stairs", - StackSize: 64, - } - CrackedPolishedBlackstoneBricks = Item{ - ID: 1227, - DisplayName: "Cracked Polished Blackstone Bricks", - Name: "cracked_polished_blackstone_bricks", - StackSize: 64, - } - RespawnAnchor = Item{ - ID: 1228, - DisplayName: "Respawn Anchor", - Name: "respawn_anchor", - StackSize: 64, - } - Candle = Item{ - ID: 1229, - DisplayName: "Candle", - Name: "candle", - StackSize: 64, - } - WhiteCandle = Item{ - ID: 1230, - DisplayName: "White Candle", - Name: "white_candle", - StackSize: 64, - } - OrangeCandle = Item{ - ID: 1231, - DisplayName: "Orange Candle", - Name: "orange_candle", - StackSize: 64, - } - MagentaCandle = Item{ - ID: 1232, - DisplayName: "Magenta Candle", - Name: "magenta_candle", - StackSize: 64, - } - LightBlueCandle = Item{ - ID: 1233, - DisplayName: "Light Blue Candle", - Name: "light_blue_candle", - StackSize: 64, - } - YellowCandle = Item{ - ID: 1234, - DisplayName: "Yellow Candle", - Name: "yellow_candle", - StackSize: 64, - } - LimeCandle = Item{ - ID: 1235, - DisplayName: "Lime Candle", - Name: "lime_candle", - StackSize: 64, - } - PinkCandle = Item{ - ID: 1236, - DisplayName: "Pink Candle", - Name: "pink_candle", - StackSize: 64, - } - GrayCandle = Item{ - ID: 1237, - DisplayName: "Gray Candle", - Name: "gray_candle", - StackSize: 64, - } - LightGrayCandle = Item{ - ID: 1238, - DisplayName: "Light Gray Candle", - Name: "light_gray_candle", - StackSize: 64, - } - CyanCandle = Item{ - ID: 1239, - DisplayName: "Cyan Candle", - Name: "cyan_candle", - StackSize: 64, - } - PurpleCandle = Item{ - ID: 1240, - DisplayName: "Purple Candle", - Name: "purple_candle", - StackSize: 64, - } - BlueCandle = Item{ - ID: 1241, - DisplayName: "Blue Candle", - Name: "blue_candle", - StackSize: 64, - } - BrownCandle = Item{ - ID: 1242, - DisplayName: "Brown Candle", - Name: "brown_candle", - StackSize: 64, - } - GreenCandle = Item{ - ID: 1243, - DisplayName: "Green Candle", - Name: "green_candle", - StackSize: 64, - } - RedCandle = Item{ - ID: 1244, - DisplayName: "Red Candle", - Name: "red_candle", - StackSize: 64, - } - BlackCandle = Item{ - ID: 1245, - DisplayName: "Black Candle", - Name: "black_candle", - StackSize: 64, - } - SmallAmethystBud = Item{ - ID: 1246, - DisplayName: "Small Amethyst Bud", - Name: "small_amethyst_bud", - StackSize: 64, - } - MediumAmethystBud = Item{ - ID: 1247, - DisplayName: "Medium Amethyst Bud", - Name: "medium_amethyst_bud", - StackSize: 64, - } - LargeAmethystBud = Item{ - ID: 1248, - DisplayName: "Large Amethyst Bud", - Name: "large_amethyst_bud", - StackSize: 64, - } - AmethystCluster = Item{ - ID: 1249, - DisplayName: "Amethyst Cluster", - Name: "amethyst_cluster", - StackSize: 64, - } - PointedDripstone = Item{ - ID: 1250, - DisplayName: "Pointed Dripstone", - Name: "pointed_dripstone", - StackSize: 64, - } - OchreFroglight = Item{ - ID: 1251, - DisplayName: "Ochre Froglight", - Name: "ochre_froglight", - StackSize: 64, - } - VerdantFroglight = Item{ - ID: 1252, - DisplayName: "Verdant Froglight", - Name: "verdant_froglight", - StackSize: 64, - } - PearlescentFroglight = Item{ - ID: 1253, - DisplayName: "Pearlescent Froglight", - Name: "pearlescent_froglight", - StackSize: 64, - } - Frogspawn = Item{ - ID: 1254, - DisplayName: "Frogspawn", - Name: "frogspawn", - StackSize: 64, - } - EchoShard = Item{ - ID: 1255, - DisplayName: "Echo Shard", - Name: "echo_shard", - StackSize: 64, - } - Brush = Item{ - ID: 1256, - DisplayName: "Brush", - Name: "brush", - StackSize: 1, - } - NetheriteUpgradeSmithingTemplate = Item{ - ID: 1257, - DisplayName: "Smithing Template", - Name: "netherite_upgrade_smithing_template", - StackSize: 64, - } - SentryArmorTrimSmithingTemplate = Item{ - ID: 1258, - DisplayName: "Smithing Template", - Name: "sentry_armor_trim_smithing_template", - StackSize: 64, - } - DuneArmorTrimSmithingTemplate = Item{ - ID: 1259, - DisplayName: "Smithing Template", - Name: "dune_armor_trim_smithing_template", - StackSize: 64, - } - CoastArmorTrimSmithingTemplate = Item{ - ID: 1260, - DisplayName: "Smithing Template", - Name: "coast_armor_trim_smithing_template", - StackSize: 64, - } - WildArmorTrimSmithingTemplate = Item{ - ID: 1261, - DisplayName: "Smithing Template", - Name: "wild_armor_trim_smithing_template", - StackSize: 64, - } - WardArmorTrimSmithingTemplate = Item{ - ID: 1262, - DisplayName: "Smithing Template", - Name: "ward_armor_trim_smithing_template", - StackSize: 64, - } - EyeArmorTrimSmithingTemplate = Item{ - ID: 1263, - DisplayName: "Smithing Template", - Name: "eye_armor_trim_smithing_template", - StackSize: 64, - } - VexArmorTrimSmithingTemplate = Item{ - ID: 1264, - DisplayName: "Smithing Template", - Name: "vex_armor_trim_smithing_template", - StackSize: 64, - } - TideArmorTrimSmithingTemplate = Item{ - ID: 1265, - DisplayName: "Smithing Template", - Name: "tide_armor_trim_smithing_template", - StackSize: 64, - } - SnoutArmorTrimSmithingTemplate = Item{ - ID: 1266, - DisplayName: "Smithing Template", - Name: "snout_armor_trim_smithing_template", - StackSize: 64, - } - RibArmorTrimSmithingTemplate = Item{ - ID: 1267, - DisplayName: "Smithing Template", - Name: "rib_armor_trim_smithing_template", - StackSize: 64, - } - SpireArmorTrimSmithingTemplate = Item{ - ID: 1268, - DisplayName: "Smithing Template", - Name: "spire_armor_trim_smithing_template", - StackSize: 64, - } - WayfinderArmorTrimSmithingTemplate = Item{ - ID: 1269, - DisplayName: "Smithing Template", - Name: "wayfinder_armor_trim_smithing_template", - StackSize: 64, - } - ShaperArmorTrimSmithingTemplate = Item{ - ID: 1270, - DisplayName: "Smithing Template", - Name: "shaper_armor_trim_smithing_template", - StackSize: 64, - } - SilenceArmorTrimSmithingTemplate = Item{ - ID: 1271, - DisplayName: "Smithing Template", - Name: "silence_armor_trim_smithing_template", - StackSize: 64, - } - RaiserArmorTrimSmithingTemplate = Item{ - ID: 1272, - DisplayName: "Smithing Template", - Name: "raiser_armor_trim_smithing_template", - StackSize: 64, - } - HostArmorTrimSmithingTemplate = Item{ - ID: 1273, - DisplayName: "Smithing Template", - Name: "host_armor_trim_smithing_template", - StackSize: 64, - } - AnglerPotterySherd = Item{ - ID: 1274, - DisplayName: "Angler Pottery Sherd", - Name: "angler_pottery_sherd", - StackSize: 64, - } - ArcherPotterySherd = Item{ - ID: 1275, - DisplayName: "Archer Pottery Sherd", - Name: "archer_pottery_sherd", - StackSize: 64, - } - ArmsUpPotterySherd = Item{ - ID: 1276, - DisplayName: "Arms Up Pottery Sherd", - Name: "arms_up_pottery_sherd", - StackSize: 64, - } - BladePotterySherd = Item{ - ID: 1277, - DisplayName: "Blade Pottery Sherd", - Name: "blade_pottery_sherd", - StackSize: 64, - } - BrewerPotterySherd = Item{ - ID: 1278, - DisplayName: "Brewer Pottery Sherd", - Name: "brewer_pottery_sherd", - StackSize: 64, - } - BurnPotterySherd = Item{ - ID: 1279, - DisplayName: "Burn Pottery Sherd", - Name: "burn_pottery_sherd", - StackSize: 64, - } - DangerPotterySherd = Item{ - ID: 1280, - DisplayName: "Danger Pottery Sherd", - Name: "danger_pottery_sherd", - StackSize: 64, - } - ExplorerPotterySherd = Item{ - ID: 1281, - DisplayName: "Explorer Pottery Sherd", - Name: "explorer_pottery_sherd", - StackSize: 64, - } - FriendPotterySherd = Item{ - ID: 1282, - DisplayName: "Friend Pottery Sherd", - Name: "friend_pottery_sherd", - StackSize: 64, - } - HeartPotterySherd = Item{ - ID: 1283, - DisplayName: "Heart Pottery Sherd", - Name: "heart_pottery_sherd", - StackSize: 64, - } - HeartbreakPotterySherd = Item{ - ID: 1284, - DisplayName: "Heartbreak Pottery Sherd", - Name: "heartbreak_pottery_sherd", - StackSize: 64, - } - HowlPotterySherd = Item{ - ID: 1285, - DisplayName: "Howl Pottery Sherd", - Name: "howl_pottery_sherd", - StackSize: 64, - } - MinerPotterySherd = Item{ - ID: 1286, - DisplayName: "Miner Pottery Sherd", - Name: "miner_pottery_sherd", - StackSize: 64, - } - MournerPotterySherd = Item{ - ID: 1287, - DisplayName: "Mourner Pottery Sherd", - Name: "mourner_pottery_sherd", - StackSize: 64, - } - PlentyPotterySherd = Item{ - ID: 1288, - DisplayName: "Plenty Pottery Sherd", - Name: "plenty_pottery_sherd", - StackSize: 64, - } - PrizePotterySherd = Item{ - ID: 1289, - DisplayName: "Prize Pottery Sherd", - Name: "prize_pottery_sherd", - StackSize: 64, - } - SheafPotterySherd = Item{ - ID: 1290, - DisplayName: "Sheaf Pottery Sherd", - Name: "sheaf_pottery_sherd", - StackSize: 64, - } - ShelterPotterySherd = Item{ - ID: 1291, - DisplayName: "Shelter Pottery Sherd", - Name: "shelter_pottery_sherd", - StackSize: 64, - } - SkullPotterySherd = Item{ - ID: 1292, - DisplayName: "Skull Pottery Sherd", - Name: "skull_pottery_sherd", - StackSize: 64, - } - SnortPotterySherd = Item{ - ID: 1293, - DisplayName: "Snort Pottery Sherd", - Name: "snort_pottery_sherd", - StackSize: 64, - } - CopperGrate = Item{ - ID: 1294, - DisplayName: "Copper Grate", - Name: "copper_grate", - StackSize: 64, - } - ExposedCopperGrate = Item{ - ID: 1295, - DisplayName: "Exposed Copper Grate", - Name: "exposed_copper_grate", - StackSize: 64, - } - WeatheredCopperGrate = Item{ - ID: 1296, - DisplayName: "Weathered Copper Grate", - Name: "weathered_copper_grate", - StackSize: 64, - } - OxidizedCopperGrate = Item{ - ID: 1297, - DisplayName: "Oxidized Copper Grate", - Name: "oxidized_copper_grate", - StackSize: 64, - } - WaxedCopperGrate = Item{ - ID: 1298, - DisplayName: "Waxed Copper Grate", - Name: "waxed_copper_grate", - StackSize: 64, - } - WaxedExposedCopperGrate = Item{ - ID: 1299, - DisplayName: "Waxed Exposed Copper Grate", - Name: "waxed_exposed_copper_grate", - StackSize: 64, - } - WaxedWeatheredCopperGrate = Item{ - ID: 1300, - DisplayName: "Waxed Weathered Copper Grate", - Name: "waxed_weathered_copper_grate", - StackSize: 64, - } - WaxedOxidizedCopperGrate = Item{ - ID: 1301, - DisplayName: "Waxed Oxidized Copper Grate", - Name: "waxed_oxidized_copper_grate", - StackSize: 64, - } - CopperBulb = Item{ - ID: 1302, - DisplayName: "Copper Bulb", - Name: "copper_bulb", - StackSize: 64, - } - ExposedCopperBulb = Item{ - ID: 1303, - DisplayName: "Exposed Copper Bulb", - Name: "exposed_copper_bulb", - StackSize: 64, - } - WeatheredCopperBulb = Item{ - ID: 1304, - DisplayName: "Weathered Copper Bulb", - Name: "weathered_copper_bulb", - StackSize: 64, - } - OxidizedCopperBulb = Item{ - ID: 1305, - DisplayName: "Oxidized Copper Bulb", - Name: "oxidized_copper_bulb", - StackSize: 64, - } - WaxedCopperBulb = Item{ - ID: 1306, - DisplayName: "Waxed Copper Bulb", - Name: "waxed_copper_bulb", - StackSize: 64, - } - WaxedExposedCopperBulb = Item{ - ID: 1307, - DisplayName: "Waxed Exposed Copper Bulb", - Name: "waxed_exposed_copper_bulb", - StackSize: 64, - } - WaxedWeatheredCopperBulb = Item{ - ID: 1308, - DisplayName: "Waxed Weathered Copper Bulb", - Name: "waxed_weathered_copper_bulb", - StackSize: 64, - } - WaxedOxidizedCopperBulb = Item{ - ID: 1309, - DisplayName: "Waxed Oxidized Copper Bulb", - Name: "waxed_oxidized_copper_bulb", - StackSize: 64, - } - TrialSpawner = Item{ - ID: 1310, - DisplayName: "Trial Spawner", - Name: "trial_spawner", - StackSize: 64, - } - TrialKey = Item{ - ID: 1311, - DisplayName: "Trial Key", - Name: "trial_key", - StackSize: 64, - } -) - -// ByID is an index of minecraft items by their ID. -var ByID = map[ID]*Item{ - 0: &Air, - 1: &Stone, - 2: &Granite, - 3: &PolishedGranite, - 4: &Diorite, - 5: &PolishedDiorite, - 6: &Andesite, - 7: &PolishedAndesite, - 8: &Deepslate, - 9: &CobbledDeepslate, - 10: &PolishedDeepslate, - 11: &Calcite, - 12: &Tuff, - 13: &TuffSlab, - 14: &TuffStairs, - 15: &TuffWall, - 16: &ChiseledTuff, - 17: &PolishedTuff, - 18: &PolishedTuffSlab, - 19: &PolishedTuffStairs, - 20: &PolishedTuffWall, - 21: &TuffBricks, - 22: &TuffBrickSlab, - 23: &TuffBrickStairs, - 24: &TuffBrickWall, - 25: &ChiseledTuffBricks, - 26: &DripstoneBlock, - 27: &GrassBlock, - 28: &Dirt, - 29: &CoarseDirt, - 30: &Podzol, - 31: &RootedDirt, - 32: &Mud, - 33: &CrimsonNylium, - 34: &WarpedNylium, - 35: &Cobblestone, - 36: &OakPlanks, - 37: &SprucePlanks, - 38: &BirchPlanks, - 39: &JunglePlanks, - 40: &AcaciaPlanks, - 41: &CherryPlanks, - 42: &DarkOakPlanks, - 43: &MangrovePlanks, - 44: &BambooPlanks, - 45: &CrimsonPlanks, - 46: &WarpedPlanks, - 47: &BambooMosaic, - 48: &OakSapling, - 49: &SpruceSapling, - 50: &BirchSapling, - 51: &JungleSapling, - 52: &AcaciaSapling, - 53: &CherrySapling, - 54: &DarkOakSapling, - 55: &MangrovePropagule, - 56: &Bedrock, - 57: &Sand, - 58: &SuspiciousSand, - 59: &SuspiciousGravel, - 60: &RedSand, - 61: &Gravel, - 62: &CoalOre, - 63: &DeepslateCoalOre, - 64: &IronOre, - 65: &DeepslateIronOre, - 66: &CopperOre, - 67: &DeepslateCopperOre, - 68: &GoldOre, - 69: &DeepslateGoldOre, - 70: &RedstoneOre, - 71: &DeepslateRedstoneOre, - 72: &EmeraldOre, - 73: &DeepslateEmeraldOre, - 74: &LapisOre, - 75: &DeepslateLapisOre, - 76: &DiamondOre, - 77: &DeepslateDiamondOre, - 78: &NetherGoldOre, - 79: &NetherQuartzOre, - 80: &AncientDebris, - 81: &CoalBlock, - 82: &RawIronBlock, - 83: &RawCopperBlock, - 84: &RawGoldBlock, - 85: &AmethystBlock, - 86: &BuddingAmethyst, - 87: &IronBlock, - 88: &CopperBlock, - 89: &GoldBlock, - 90: &DiamondBlock, - 91: &NetheriteBlock, - 92: &ExposedCopper, - 93: &WeatheredCopper, - 94: &OxidizedCopper, - 95: &ChiseledCopper, - 96: &ExposedChiseledCopper, - 97: &WeatheredChiseledCopper, - 98: &OxidizedChiseledCopper, - 99: &CutCopper, - 100: &ExposedCutCopper, - 101: &WeatheredCutCopper, - 102: &OxidizedCutCopper, - 103: &CutCopperStairs, - 104: &ExposedCutCopperStairs, - 105: &WeatheredCutCopperStairs, - 106: &OxidizedCutCopperStairs, - 107: &CutCopperSlab, - 108: &ExposedCutCopperSlab, - 109: &WeatheredCutCopperSlab, - 110: &OxidizedCutCopperSlab, - 111: &WaxedCopperBlock, - 112: &WaxedExposedCopper, - 113: &WaxedWeatheredCopper, - 114: &WaxedOxidizedCopper, - 115: &WaxedChiseledCopper, - 116: &WaxedExposedChiseledCopper, - 117: &WaxedWeatheredChiseledCopper, - 118: &WaxedOxidizedChiseledCopper, - 119: &WaxedCutCopper, - 120: &WaxedExposedCutCopper, - 121: &WaxedWeatheredCutCopper, - 122: &WaxedOxidizedCutCopper, - 123: &WaxedCutCopperStairs, - 124: &WaxedExposedCutCopperStairs, - 125: &WaxedWeatheredCutCopperStairs, - 126: &WaxedOxidizedCutCopperStairs, - 127: &WaxedCutCopperSlab, - 128: &WaxedExposedCutCopperSlab, - 129: &WaxedWeatheredCutCopperSlab, - 130: &WaxedOxidizedCutCopperSlab, - 131: &OakLog, - 132: &SpruceLog, - 133: &BirchLog, - 134: &JungleLog, - 135: &AcaciaLog, - 136: &CherryLog, - 137: &DarkOakLog, - 138: &MangroveLog, - 139: &MangroveRoots, - 140: &MuddyMangroveRoots, - 141: &CrimsonStem, - 142: &WarpedStem, - 143: &BambooBlock, - 144: &StrippedOakLog, - 145: &StrippedSpruceLog, - 146: &StrippedBirchLog, - 147: &StrippedJungleLog, - 148: &StrippedAcaciaLog, - 149: &StrippedCherryLog, - 150: &StrippedDarkOakLog, - 151: &StrippedMangroveLog, - 152: &StrippedCrimsonStem, - 153: &StrippedWarpedStem, - 154: &StrippedOakWood, - 155: &StrippedSpruceWood, - 156: &StrippedBirchWood, - 157: &StrippedJungleWood, - 158: &StrippedAcaciaWood, - 159: &StrippedCherryWood, - 160: &StrippedDarkOakWood, - 161: &StrippedMangroveWood, - 162: &StrippedCrimsonHyphae, - 163: &StrippedWarpedHyphae, - 164: &StrippedBambooBlock, - 165: &OakWood, - 166: &SpruceWood, - 167: &BirchWood, - 168: &JungleWood, - 169: &AcaciaWood, - 170: &CherryWood, - 171: &DarkOakWood, - 172: &MangroveWood, - 173: &CrimsonHyphae, - 174: &WarpedHyphae, - 175: &OakLeaves, - 176: &SpruceLeaves, - 177: &BirchLeaves, - 178: &JungleLeaves, - 179: &AcaciaLeaves, - 180: &CherryLeaves, - 181: &DarkOakLeaves, - 182: &MangroveLeaves, - 183: &AzaleaLeaves, - 184: &FloweringAzaleaLeaves, - 185: &Sponge, - 186: &WetSponge, - 187: &Glass, - 188: &TintedGlass, - 189: &LapisBlock, - 190: &Sandstone, - 191: &ChiseledSandstone, - 192: &CutSandstone, - 193: &Cobweb, - 194: &ShortGrass, - 195: &Fern, - 196: &Azalea, - 197: &FloweringAzalea, - 198: &DeadBush, - 199: &Seagrass, - 200: &SeaPickle, - 201: &WhiteWool, - 202: &OrangeWool, - 203: &MagentaWool, - 204: &LightBlueWool, - 205: &YellowWool, - 206: &LimeWool, - 207: &PinkWool, - 208: &GrayWool, - 209: &LightGrayWool, - 210: &CyanWool, - 211: &PurpleWool, - 212: &BlueWool, - 213: &BrownWool, - 214: &GreenWool, - 215: &RedWool, - 216: &BlackWool, - 217: &Dandelion, - 218: &Poppy, - 219: &BlueOrchid, - 220: &Allium, - 221: &AzureBluet, - 222: &RedTulip, - 223: &OrangeTulip, - 224: &WhiteTulip, - 225: &PinkTulip, - 226: &OxeyeDaisy, - 227: &Cornflower, - 228: &LilyOfTheValley, - 229: &WitherRose, - 230: &Torchflower, - 231: &PitcherPlant, - 232: &SporeBlossom, - 233: &BrownMushroom, - 234: &RedMushroom, - 235: &CrimsonFungus, - 236: &WarpedFungus, - 237: &CrimsonRoots, - 238: &WarpedRoots, - 239: &NetherSprouts, - 240: &WeepingVines, - 241: &TwistingVines, - 242: &SugarCane, - 243: &Kelp, - 244: &MossCarpet, - 245: &PinkPetals, - 246: &MossBlock, - 247: &HangingRoots, - 248: &BigDripleaf, - 249: &SmallDripleaf, - 250: &Bamboo, - 251: &OakSlab, - 252: &SpruceSlab, - 253: &BirchSlab, - 254: &JungleSlab, - 255: &AcaciaSlab, - 256: &CherrySlab, - 257: &DarkOakSlab, - 258: &MangroveSlab, - 259: &BambooSlab, - 260: &BambooMosaicSlab, - 261: &CrimsonSlab, - 262: &WarpedSlab, - 263: &StoneSlab, - 264: &SmoothStoneSlab, - 265: &SandstoneSlab, - 266: &CutSandstoneSlab, - 267: &PetrifiedOakSlab, - 268: &CobblestoneSlab, - 269: &BrickSlab, - 270: &StoneBrickSlab, - 271: &MudBrickSlab, - 272: &NetherBrickSlab, - 273: &QuartzSlab, - 274: &RedSandstoneSlab, - 275: &CutRedSandstoneSlab, - 276: &PurpurSlab, - 277: &PrismarineSlab, - 278: &PrismarineBrickSlab, - 279: &DarkPrismarineSlab, - 280: &SmoothQuartz, - 281: &SmoothRedSandstone, - 282: &SmoothSandstone, - 283: &SmoothStone, - 284: &Bricks, - 285: &Bookshelf, - 286: &ChiseledBookshelf, - 287: &DecoratedPot, - 288: &MossyCobblestone, - 289: &Obsidian, - 290: &Torch, - 291: &EndRod, - 292: &ChorusPlant, - 293: &ChorusFlower, - 294: &PurpurBlock, - 295: &PurpurPillar, - 296: &PurpurStairs, - 297: &Spawner, - 298: &Chest, - 299: &CraftingTable, - 300: &Farmland, - 301: &Furnace, - 302: &Ladder, - 303: &CobblestoneStairs, - 304: &Snow, - 305: &Ice, - 306: &SnowBlock, - 307: &Cactus, - 308: &Clay, - 309: &Jukebox, - 310: &OakFence, - 311: &SpruceFence, - 312: &BirchFence, - 313: &JungleFence, - 314: &AcaciaFence, - 315: &CherryFence, - 316: &DarkOakFence, - 317: &MangroveFence, - 318: &BambooFence, - 319: &CrimsonFence, - 320: &WarpedFence, - 321: &Pumpkin, - 322: &CarvedPumpkin, - 323: &JackOLantern, - 324: &Netherrack, - 325: &SoulSand, - 326: &SoulSoil, - 327: &Basalt, - 328: &PolishedBasalt, - 329: &SmoothBasalt, - 330: &SoulTorch, - 331: &Glowstone, - 332: &InfestedStone, - 333: &InfestedCobblestone, - 334: &InfestedStoneBricks, - 335: &InfestedMossyStoneBricks, - 336: &InfestedCrackedStoneBricks, - 337: &InfestedChiseledStoneBricks, - 338: &InfestedDeepslate, - 339: &StoneBricks, - 340: &MossyStoneBricks, - 341: &CrackedStoneBricks, - 342: &ChiseledStoneBricks, - 343: &PackedMud, - 344: &MudBricks, - 345: &DeepslateBricks, - 346: &CrackedDeepslateBricks, - 347: &DeepslateTiles, - 348: &CrackedDeepslateTiles, - 349: &ChiseledDeepslate, - 350: &ReinforcedDeepslate, - 351: &BrownMushroomBlock, - 352: &RedMushroomBlock, - 353: &MushroomStem, - 354: &IronBars, - 355: &Chain, - 356: &GlassPane, - 357: &Melon, - 358: &Vine, - 359: &GlowLichen, - 360: &BrickStairs, - 361: &StoneBrickStairs, - 362: &MudBrickStairs, - 363: &Mycelium, - 364: &LilyPad, - 365: &NetherBricks, - 366: &CrackedNetherBricks, - 367: &ChiseledNetherBricks, - 368: &NetherBrickFence, - 369: &NetherBrickStairs, - 370: &Sculk, - 371: &SculkVein, - 372: &SculkCatalyst, - 373: &SculkShrieker, - 374: &EnchantingTable, - 375: &EndPortalFrame, - 376: &EndStone, - 377: &EndStoneBricks, - 378: &DragonEgg, - 379: &SandstoneStairs, - 380: &EnderChest, - 381: &EmeraldBlock, - 382: &OakStairs, - 383: &SpruceStairs, - 384: &BirchStairs, - 385: &JungleStairs, - 386: &AcaciaStairs, - 387: &CherryStairs, - 388: &DarkOakStairs, - 389: &MangroveStairs, - 390: &BambooStairs, - 391: &BambooMosaicStairs, - 392: &CrimsonStairs, - 393: &WarpedStairs, - 394: &CommandBlock, - 395: &Beacon, - 396: &CobblestoneWall, - 397: &MossyCobblestoneWall, - 398: &BrickWall, - 399: &PrismarineWall, - 400: &RedSandstoneWall, - 401: &MossyStoneBrickWall, - 402: &GraniteWall, - 403: &StoneBrickWall, - 404: &MudBrickWall, - 405: &NetherBrickWall, - 406: &AndesiteWall, - 407: &RedNetherBrickWall, - 408: &SandstoneWall, - 409: &EndStoneBrickWall, - 410: &DioriteWall, - 411: &BlackstoneWall, - 412: &PolishedBlackstoneWall, - 413: &PolishedBlackstoneBrickWall, - 414: &CobbledDeepslateWall, - 415: &PolishedDeepslateWall, - 416: &DeepslateBrickWall, - 417: &DeepslateTileWall, - 418: &Anvil, - 419: &ChippedAnvil, - 420: &DamagedAnvil, - 421: &ChiseledQuartzBlock, - 422: &QuartzBlock, - 423: &QuartzBricks, - 424: &QuartzPillar, - 425: &QuartzStairs, - 426: &WhiteTerracotta, - 427: &OrangeTerracotta, - 428: &MagentaTerracotta, - 429: &LightBlueTerracotta, - 430: &YellowTerracotta, - 431: &LimeTerracotta, - 432: &PinkTerracotta, - 433: &GrayTerracotta, - 434: &LightGrayTerracotta, - 435: &CyanTerracotta, - 436: &PurpleTerracotta, - 437: &BlueTerracotta, - 438: &BrownTerracotta, - 439: &GreenTerracotta, - 440: &RedTerracotta, - 441: &BlackTerracotta, - 442: &Barrier, - 443: &Light, - 444: &HayBlock, - 445: &WhiteCarpet, - 446: &OrangeCarpet, - 447: &MagentaCarpet, - 448: &LightBlueCarpet, - 449: &YellowCarpet, - 450: &LimeCarpet, - 451: &PinkCarpet, - 452: &GrayCarpet, - 453: &LightGrayCarpet, - 454: &CyanCarpet, - 455: &PurpleCarpet, - 456: &BlueCarpet, - 457: &BrownCarpet, - 458: &GreenCarpet, - 459: &RedCarpet, - 460: &BlackCarpet, - 461: &Terracotta, - 462: &PackedIce, - 463: &DirtPath, - 464: &Sunflower, - 465: &Lilac, - 466: &RoseBush, - 467: &Peony, - 468: &TallGrass, - 469: &LargeFern, - 470: &WhiteStainedGlass, - 471: &OrangeStainedGlass, - 472: &MagentaStainedGlass, - 473: &LightBlueStainedGlass, - 474: &YellowStainedGlass, - 475: &LimeStainedGlass, - 476: &PinkStainedGlass, - 477: &GrayStainedGlass, - 478: &LightGrayStainedGlass, - 479: &CyanStainedGlass, - 480: &PurpleStainedGlass, - 481: &BlueStainedGlass, - 482: &BrownStainedGlass, - 483: &GreenStainedGlass, - 484: &RedStainedGlass, - 485: &BlackStainedGlass, - 486: &WhiteStainedGlassPane, - 487: &OrangeStainedGlassPane, - 488: &MagentaStainedGlassPane, - 489: &LightBlueStainedGlassPane, - 490: &YellowStainedGlassPane, - 491: &LimeStainedGlassPane, - 492: &PinkStainedGlassPane, - 493: &GrayStainedGlassPane, - 494: &LightGrayStainedGlassPane, - 495: &CyanStainedGlassPane, - 496: &PurpleStainedGlassPane, - 497: &BlueStainedGlassPane, - 498: &BrownStainedGlassPane, - 499: &GreenStainedGlassPane, - 500: &RedStainedGlassPane, - 501: &BlackStainedGlassPane, - 502: &Prismarine, - 503: &PrismarineBricks, - 504: &DarkPrismarine, - 505: &PrismarineStairs, - 506: &PrismarineBrickStairs, - 507: &DarkPrismarineStairs, - 508: &SeaLantern, - 509: &RedSandstone, - 510: &ChiseledRedSandstone, - 511: &CutRedSandstone, - 512: &RedSandstoneStairs, - 513: &RepeatingCommandBlock, - 514: &ChainCommandBlock, - 515: &MagmaBlock, - 516: &NetherWartBlock, - 517: &WarpedWartBlock, - 518: &RedNetherBricks, - 519: &BoneBlock, - 520: &StructureVoid, - 521: &ShulkerBox, - 522: &WhiteShulkerBox, - 523: &OrangeShulkerBox, - 524: &MagentaShulkerBox, - 525: &LightBlueShulkerBox, - 526: &YellowShulkerBox, - 527: &LimeShulkerBox, - 528: &PinkShulkerBox, - 529: &GrayShulkerBox, - 530: &LightGrayShulkerBox, - 531: &CyanShulkerBox, - 532: &PurpleShulkerBox, - 533: &BlueShulkerBox, - 534: &BrownShulkerBox, - 535: &GreenShulkerBox, - 536: &RedShulkerBox, - 537: &BlackShulkerBox, - 538: &WhiteGlazedTerracotta, - 539: &OrangeGlazedTerracotta, - 540: &MagentaGlazedTerracotta, - 541: &LightBlueGlazedTerracotta, - 542: &YellowGlazedTerracotta, - 543: &LimeGlazedTerracotta, - 544: &PinkGlazedTerracotta, - 545: &GrayGlazedTerracotta, - 546: &LightGrayGlazedTerracotta, - 547: &CyanGlazedTerracotta, - 548: &PurpleGlazedTerracotta, - 549: &BlueGlazedTerracotta, - 550: &BrownGlazedTerracotta, - 551: &GreenGlazedTerracotta, - 552: &RedGlazedTerracotta, - 553: &BlackGlazedTerracotta, - 554: &WhiteConcrete, - 555: &OrangeConcrete, - 556: &MagentaConcrete, - 557: &LightBlueConcrete, - 558: &YellowConcrete, - 559: &LimeConcrete, - 560: &PinkConcrete, - 561: &GrayConcrete, - 562: &LightGrayConcrete, - 563: &CyanConcrete, - 564: &PurpleConcrete, - 565: &BlueConcrete, - 566: &BrownConcrete, - 567: &GreenConcrete, - 568: &RedConcrete, - 569: &BlackConcrete, - 570: &WhiteConcretePowder, - 571: &OrangeConcretePowder, - 572: &MagentaConcretePowder, - 573: &LightBlueConcretePowder, - 574: &YellowConcretePowder, - 575: &LimeConcretePowder, - 576: &PinkConcretePowder, - 577: &GrayConcretePowder, - 578: &LightGrayConcretePowder, - 579: &CyanConcretePowder, - 580: &PurpleConcretePowder, - 581: &BlueConcretePowder, - 582: &BrownConcretePowder, - 583: &GreenConcretePowder, - 584: &RedConcretePowder, - 585: &BlackConcretePowder, - 586: &TurtleEgg, - 587: &SnifferEgg, - 588: &DeadTubeCoralBlock, - 589: &DeadBrainCoralBlock, - 590: &DeadBubbleCoralBlock, - 591: &DeadFireCoralBlock, - 592: &DeadHornCoralBlock, - 593: &TubeCoralBlock, - 594: &BrainCoralBlock, - 595: &BubbleCoralBlock, - 596: &FireCoralBlock, - 597: &HornCoralBlock, - 598: &TubeCoral, - 599: &BrainCoral, - 600: &BubbleCoral, - 601: &FireCoral, - 602: &HornCoral, - 603: &DeadBrainCoral, - 604: &DeadBubbleCoral, - 605: &DeadFireCoral, - 606: &DeadHornCoral, - 607: &DeadTubeCoral, - 608: &TubeCoralFan, - 609: &BrainCoralFan, - 610: &BubbleCoralFan, - 611: &FireCoralFan, - 612: &HornCoralFan, - 613: &DeadTubeCoralFan, - 614: &DeadBrainCoralFan, - 615: &DeadBubbleCoralFan, - 616: &DeadFireCoralFan, - 617: &DeadHornCoralFan, - 618: &BlueIce, - 619: &Conduit, - 620: &PolishedGraniteStairs, - 621: &SmoothRedSandstoneStairs, - 622: &MossyStoneBrickStairs, - 623: &PolishedDioriteStairs, - 624: &MossyCobblestoneStairs, - 625: &EndStoneBrickStairs, - 626: &StoneStairs, - 627: &SmoothSandstoneStairs, - 628: &SmoothQuartzStairs, - 629: &GraniteStairs, - 630: &AndesiteStairs, - 631: &RedNetherBrickStairs, - 632: &PolishedAndesiteStairs, - 633: &DioriteStairs, - 634: &CobbledDeepslateStairs, - 635: &PolishedDeepslateStairs, - 636: &DeepslateBrickStairs, - 637: &DeepslateTileStairs, - 638: &PolishedGraniteSlab, - 639: &SmoothRedSandstoneSlab, - 640: &MossyStoneBrickSlab, - 641: &PolishedDioriteSlab, - 642: &MossyCobblestoneSlab, - 643: &EndStoneBrickSlab, - 644: &SmoothSandstoneSlab, - 645: &SmoothQuartzSlab, - 646: &GraniteSlab, - 647: &AndesiteSlab, - 648: &RedNetherBrickSlab, - 649: &PolishedAndesiteSlab, - 650: &DioriteSlab, - 651: &CobbledDeepslateSlab, - 652: &PolishedDeepslateSlab, - 653: &DeepslateBrickSlab, - 654: &DeepslateTileSlab, - 655: &Scaffolding, - 656: &Redstone, - 657: &RedstoneTorch, - 658: &RedstoneBlock, - 659: &Repeater, - 660: &Comparator, - 661: &Piston, - 662: &StickyPiston, - 663: &SlimeBlock, - 664: &HoneyBlock, - 665: &Observer, - 666: &Hopper, - 667: &Dispenser, - 668: &Dropper, - 669: &Lectern, - 670: &Target, - 671: &Lever, - 672: &LightningRod, - 673: &DaylightDetector, - 674: &SculkSensor, - 675: &CalibratedSculkSensor, - 676: &TripwireHook, - 677: &TrappedChest, - 678: &Tnt, - 679: &RedstoneLamp, - 680: &NoteBlock, - 681: &StoneButton, - 682: &PolishedBlackstoneButton, - 683: &OakButton, - 684: &SpruceButton, - 685: &BirchButton, - 686: &JungleButton, - 687: &AcaciaButton, - 688: &CherryButton, - 689: &DarkOakButton, - 690: &MangroveButton, - 691: &BambooButton, - 692: &CrimsonButton, - 693: &WarpedButton, - 694: &StonePressurePlate, - 695: &PolishedBlackstonePressurePlate, - 696: &LightWeightedPressurePlate, - 697: &HeavyWeightedPressurePlate, - 698: &OakPressurePlate, - 699: &SprucePressurePlate, - 700: &BirchPressurePlate, - 701: &JunglePressurePlate, - 702: &AcaciaPressurePlate, - 703: &CherryPressurePlate, - 704: &DarkOakPressurePlate, - 705: &MangrovePressurePlate, - 706: &BambooPressurePlate, - 707: &CrimsonPressurePlate, - 708: &WarpedPressurePlate, - 709: &IronDoor, - 710: &OakDoor, - 711: &SpruceDoor, - 712: &BirchDoor, - 713: &JungleDoor, - 714: &AcaciaDoor, - 715: &CherryDoor, - 716: &DarkOakDoor, - 717: &MangroveDoor, - 718: &BambooDoor, - 719: &CrimsonDoor, - 720: &WarpedDoor, - 721: &CopperDoor, - 722: &ExposedCopperDoor, - 723: &WeatheredCopperDoor, - 724: &OxidizedCopperDoor, - 725: &WaxedCopperDoor, - 726: &WaxedExposedCopperDoor, - 727: &WaxedWeatheredCopperDoor, - 728: &WaxedOxidizedCopperDoor, - 729: &IronTrapdoor, - 730: &OakTrapdoor, - 731: &SpruceTrapdoor, - 732: &BirchTrapdoor, - 733: &JungleTrapdoor, - 734: &AcaciaTrapdoor, - 735: &CherryTrapdoor, - 736: &DarkOakTrapdoor, - 737: &MangroveTrapdoor, - 738: &BambooTrapdoor, - 739: &CrimsonTrapdoor, - 740: &WarpedTrapdoor, - 741: &CopperTrapdoor, - 742: &ExposedCopperTrapdoor, - 743: &WeatheredCopperTrapdoor, - 744: &OxidizedCopperTrapdoor, - 745: &WaxedCopperTrapdoor, - 746: &WaxedExposedCopperTrapdoor, - 747: &WaxedWeatheredCopperTrapdoor, - 748: &WaxedOxidizedCopperTrapdoor, - 749: &OakFenceGate, - 750: &SpruceFenceGate, - 751: &BirchFenceGate, - 752: &JungleFenceGate, - 753: &AcaciaFenceGate, - 754: &CherryFenceGate, - 755: &DarkOakFenceGate, - 756: &MangroveFenceGate, - 757: &BambooFenceGate, - 758: &CrimsonFenceGate, - 759: &WarpedFenceGate, - 760: &PoweredRail, - 761: &DetectorRail, - 762: &Rail, - 763: &ActivatorRail, - 764: &Saddle, - 765: &Minecart, - 766: &ChestMinecart, - 767: &FurnaceMinecart, - 768: &TntMinecart, - 769: &HopperMinecart, - 770: &CarrotOnAStick, - 771: &WarpedFungusOnAStick, - 772: &Elytra, - 773: &OakBoat, - 774: &OakChestBoat, - 775: &SpruceBoat, - 776: &SpruceChestBoat, - 777: &BirchBoat, - 778: &BirchChestBoat, - 779: &JungleBoat, - 780: &JungleChestBoat, - 781: &AcaciaBoat, - 782: &AcaciaChestBoat, - 783: &CherryBoat, - 784: &CherryChestBoat, - 785: &DarkOakBoat, - 786: &DarkOakChestBoat, - 787: &MangroveBoat, - 788: &MangroveChestBoat, - 789: &BambooRaft, - 790: &BambooChestRaft, - 791: &StructureBlock, - 792: &Jigsaw, - 793: &TurtleHelmet, - 794: &Scute, - 795: &FlintAndSteel, - 796: &Apple, - 797: &Bow, - 798: &Arrow, - 799: &Coal, - 800: &Charcoal, - 801: &Diamond, - 802: &Emerald, - 803: &LapisLazuli, - 804: &Quartz, - 805: &AmethystShard, - 806: &RawIron, - 807: &IronIngot, - 808: &RawCopper, - 809: &CopperIngot, - 810: &RawGold, - 811: &GoldIngot, - 812: &NetheriteIngot, - 813: &NetheriteScrap, - 814: &WoodenSword, - 815: &WoodenShovel, - 816: &WoodenPickaxe, - 817: &WoodenAxe, - 818: &WoodenHoe, - 819: &StoneSword, - 820: &StoneShovel, - 821: &StonePickaxe, - 822: &StoneAxe, - 823: &StoneHoe, - 824: &GoldenSword, - 825: &GoldenShovel, - 826: &GoldenPickaxe, - 827: &GoldenAxe, - 828: &GoldenHoe, - 829: &IronSword, - 830: &IronShovel, - 831: &IronPickaxe, - 832: &IronAxe, - 833: &IronHoe, - 834: &DiamondSword, - 835: &DiamondShovel, - 836: &DiamondPickaxe, - 837: &DiamondAxe, - 838: &DiamondHoe, - 839: &NetheriteSword, - 840: &NetheriteShovel, - 841: &NetheritePickaxe, - 842: &NetheriteAxe, - 843: &NetheriteHoe, - 844: &Stick, - 845: &Bowl, - 846: &MushroomStew, - 847: &String, - 848: &Feather, - 849: &Gunpowder, - 850: &WheatSeeds, - 851: &Wheat, - 852: &Bread, - 853: &LeatherHelmet, - 854: &LeatherChestplate, - 855: &LeatherLeggings, - 856: &LeatherBoots, - 857: &ChainmailHelmet, - 858: &ChainmailChestplate, - 859: &ChainmailLeggings, - 860: &ChainmailBoots, - 861: &IronHelmet, - 862: &IronChestplate, - 863: &IronLeggings, - 864: &IronBoots, - 865: &DiamondHelmet, - 866: &DiamondChestplate, - 867: &DiamondLeggings, - 868: &DiamondBoots, - 869: &GoldenHelmet, - 870: &GoldenChestplate, - 871: &GoldenLeggings, - 872: &GoldenBoots, - 873: &NetheriteHelmet, - 874: &NetheriteChestplate, - 875: &NetheriteLeggings, - 876: &NetheriteBoots, - 877: &Flint, - 878: &Porkchop, - 879: &CookedPorkchop, - 880: &Painting, - 881: &GoldenApple, - 882: &EnchantedGoldenApple, - 883: &OakSign, - 884: &SpruceSign, - 885: &BirchSign, - 886: &JungleSign, - 887: &AcaciaSign, - 888: &CherrySign, - 889: &DarkOakSign, - 890: &MangroveSign, - 891: &BambooSign, - 892: &CrimsonSign, - 893: &WarpedSign, - 894: &OakHangingSign, - 895: &SpruceHangingSign, - 896: &BirchHangingSign, - 897: &JungleHangingSign, - 898: &AcaciaHangingSign, - 899: &CherryHangingSign, - 900: &DarkOakHangingSign, - 901: &MangroveHangingSign, - 902: &BambooHangingSign, - 903: &CrimsonHangingSign, - 904: &WarpedHangingSign, - 905: &Bucket, - 906: &WaterBucket, - 907: &LavaBucket, - 908: &PowderSnowBucket, - 909: &Snowball, - 910: &Leather, - 911: &MilkBucket, - 912: &PufferfishBucket, - 913: &SalmonBucket, - 914: &CodBucket, - 915: &TropicalFishBucket, - 916: &AxolotlBucket, - 917: &TadpoleBucket, - 918: &Brick, - 919: &ClayBall, - 920: &DriedKelpBlock, - 921: &Paper, - 922: &Book, - 923: &SlimeBall, - 924: &Egg, - 925: &Compass, - 926: &RecoveryCompass, - 927: &Bundle, - 928: &FishingRod, - 929: &Clock, - 930: &Spyglass, - 931: &GlowstoneDust, - 932: &Cod, - 933: &Salmon, - 934: &TropicalFish, - 935: &Pufferfish, - 936: &CookedCod, - 937: &CookedSalmon, - 938: &InkSac, - 939: &GlowInkSac, - 940: &CocoaBeans, - 941: &WhiteDye, - 942: &OrangeDye, - 943: &MagentaDye, - 944: &LightBlueDye, - 945: &YellowDye, - 946: &LimeDye, - 947: &PinkDye, - 948: &GrayDye, - 949: &LightGrayDye, - 950: &CyanDye, - 951: &PurpleDye, - 952: &BlueDye, - 953: &BrownDye, - 954: &GreenDye, - 955: &RedDye, - 956: &BlackDye, - 957: &BoneMeal, - 958: &Bone, - 959: &Sugar, - 960: &Cake, - 961: &WhiteBed, - 962: &OrangeBed, - 963: &MagentaBed, - 964: &LightBlueBed, - 965: &YellowBed, - 966: &LimeBed, - 967: &PinkBed, - 968: &GrayBed, - 969: &LightGrayBed, - 970: &CyanBed, - 971: &PurpleBed, - 972: &BlueBed, - 973: &BrownBed, - 974: &GreenBed, - 975: &RedBed, - 976: &BlackBed, - 977: &Cookie, - 978: &Crafter, - 979: &FilledMap, - 980: &Shears, - 981: &MelonSlice, - 982: &DriedKelp, - 983: &PumpkinSeeds, - 984: &MelonSeeds, - 985: &Beef, - 986: &CookedBeef, - 987: &Chicken, - 988: &CookedChicken, - 989: &RottenFlesh, - 990: &EnderPearl, - 991: &BlazeRod, - 992: &GhastTear, - 993: &GoldNugget, - 994: &NetherWart, - 995: &Potion, - 996: &GlassBottle, - 997: &SpiderEye, - 998: &FermentedSpiderEye, - 999: &BlazePowder, - 1000: &MagmaCream, - 1001: &BrewingStand, - 1002: &Cauldron, - 1003: &EnderEye, - 1004: &GlisteringMelonSlice, - 1005: &AllaySpawnEgg, - 1006: &AxolotlSpawnEgg, - 1007: &BatSpawnEgg, - 1008: &BeeSpawnEgg, - 1009: &BlazeSpawnEgg, - 1010: &BreezeSpawnEgg, - 1011: &CatSpawnEgg, - 1012: &CamelSpawnEgg, - 1013: &CaveSpiderSpawnEgg, - 1014: &ChickenSpawnEgg, - 1015: &CodSpawnEgg, - 1016: &CowSpawnEgg, - 1017: &CreeperSpawnEgg, - 1018: &DolphinSpawnEgg, - 1019: &DonkeySpawnEgg, - 1020: &DrownedSpawnEgg, - 1021: &ElderGuardianSpawnEgg, - 1022: &EnderDragonSpawnEgg, - 1023: &EndermanSpawnEgg, - 1024: &EndermiteSpawnEgg, - 1025: &EvokerSpawnEgg, - 1026: &FoxSpawnEgg, - 1027: &FrogSpawnEgg, - 1028: &GhastSpawnEgg, - 1029: &GlowSquidSpawnEgg, - 1030: &GoatSpawnEgg, - 1031: &GuardianSpawnEgg, - 1032: &HoglinSpawnEgg, - 1033: &HorseSpawnEgg, - 1034: &HuskSpawnEgg, - 1035: &IronGolemSpawnEgg, - 1036: &LlamaSpawnEgg, - 1037: &MagmaCubeSpawnEgg, - 1038: &MooshroomSpawnEgg, - 1039: &MuleSpawnEgg, - 1040: &OcelotSpawnEgg, - 1041: &PandaSpawnEgg, - 1042: &ParrotSpawnEgg, - 1043: &PhantomSpawnEgg, - 1044: &PigSpawnEgg, - 1045: &PiglinSpawnEgg, - 1046: &PiglinBruteSpawnEgg, - 1047: &PillagerSpawnEgg, - 1048: &PolarBearSpawnEgg, - 1049: &PufferfishSpawnEgg, - 1050: &RabbitSpawnEgg, - 1051: &RavagerSpawnEgg, - 1052: &SalmonSpawnEgg, - 1053: &SheepSpawnEgg, - 1054: &ShulkerSpawnEgg, - 1055: &SilverfishSpawnEgg, - 1056: &SkeletonSpawnEgg, - 1057: &SkeletonHorseSpawnEgg, - 1058: &SlimeSpawnEgg, - 1059: &SnifferSpawnEgg, - 1060: &SnowGolemSpawnEgg, - 1061: &SpiderSpawnEgg, - 1062: &SquidSpawnEgg, - 1063: &StraySpawnEgg, - 1064: &StriderSpawnEgg, - 1065: &TadpoleSpawnEgg, - 1066: &TraderLlamaSpawnEgg, - 1067: &TropicalFishSpawnEgg, - 1068: &TurtleSpawnEgg, - 1069: &VexSpawnEgg, - 1070: &VillagerSpawnEgg, - 1071: &VindicatorSpawnEgg, - 1072: &WanderingTraderSpawnEgg, - 1073: &WardenSpawnEgg, - 1074: &WitchSpawnEgg, - 1075: &WitherSpawnEgg, - 1076: &WitherSkeletonSpawnEgg, - 1077: &WolfSpawnEgg, - 1078: &ZoglinSpawnEgg, - 1079: &ZombieSpawnEgg, - 1080: &ZombieHorseSpawnEgg, - 1081: &ZombieVillagerSpawnEgg, - 1082: &ZombifiedPiglinSpawnEgg, - 1083: &ExperienceBottle, - 1084: &FireCharge, - 1085: &WritableBook, - 1086: &WrittenBook, - 1087: &ItemFrame, - 1088: &GlowItemFrame, - 1089: &FlowerPot, - 1090: &Carrot, - 1091: &Potato, - 1092: &BakedPotato, - 1093: &PoisonousPotato, - 1094: &Map, - 1095: &GoldenCarrot, - 1096: &SkeletonSkull, - 1097: &WitherSkeletonSkull, - 1098: &PlayerHead, - 1099: &ZombieHead, - 1100: &CreeperHead, - 1101: &DragonHead, - 1102: &PiglinHead, - 1103: &NetherStar, - 1104: &PumpkinPie, - 1105: &FireworkRocket, - 1106: &FireworkStar, - 1107: &EnchantedBook, - 1108: &NetherBrick, - 1109: &PrismarineShard, - 1110: &PrismarineCrystals, - 1111: &Rabbit, - 1112: &CookedRabbit, - 1113: &RabbitStew, - 1114: &RabbitFoot, - 1115: &RabbitHide, - 1116: &ArmorStand, - 1117: &IronHorseArmor, - 1118: &GoldenHorseArmor, - 1119: &DiamondHorseArmor, - 1120: &LeatherHorseArmor, - 1121: &Lead, - 1122: &NameTag, - 1123: &CommandBlockMinecart, - 1124: &Mutton, - 1125: &CookedMutton, - 1126: &WhiteBanner, - 1127: &OrangeBanner, - 1128: &MagentaBanner, - 1129: &LightBlueBanner, - 1130: &YellowBanner, - 1131: &LimeBanner, - 1132: &PinkBanner, - 1133: &GrayBanner, - 1134: &LightGrayBanner, - 1135: &CyanBanner, - 1136: &PurpleBanner, - 1137: &BlueBanner, - 1138: &BrownBanner, - 1139: &GreenBanner, - 1140: &RedBanner, - 1141: &BlackBanner, - 1142: &EndCrystal, - 1143: &ChorusFruit, - 1144: &PoppedChorusFruit, - 1145: &TorchflowerSeeds, - 1146: &PitcherPod, - 1147: &Beetroot, - 1148: &BeetrootSeeds, - 1149: &BeetrootSoup, - 1150: &DragonBreath, - 1151: &SplashPotion, - 1152: &SpectralArrow, - 1153: &TippedArrow, - 1154: &LingeringPotion, - 1155: &Shield, - 1156: &TotemOfUndying, - 1157: &ShulkerShell, - 1158: &IronNugget, - 1159: &KnowledgeBook, - 1160: &DebugStick, - 1161: &MusicDisc13, - 1162: &MusicDiscCat, - 1163: &MusicDiscBlocks, - 1164: &MusicDiscChirp, - 1165: &MusicDiscFar, - 1166: &MusicDiscMall, - 1167: &MusicDiscMellohi, - 1168: &MusicDiscStal, - 1169: &MusicDiscStrad, - 1170: &MusicDiscWard, - 1171: &MusicDisc11, - 1172: &MusicDiscWait, - 1173: &MusicDiscOtherside, - 1174: &MusicDiscRelic, - 1175: &MusicDisc5, - 1176: &MusicDiscPigstep, - 1177: &DiscFragment5, - 1178: &Trident, - 1179: &PhantomMembrane, - 1180: &NautilusShell, - 1181: &HeartOfTheSea, - 1182: &Crossbow, - 1183: &SuspiciousStew, - 1184: &Loom, - 1185: &FlowerBannerPattern, - 1186: &CreeperBannerPattern, - 1187: &SkullBannerPattern, - 1188: &MojangBannerPattern, - 1189: &GlobeBannerPattern, - 1190: &PiglinBannerPattern, - 1191: &GoatHorn, - 1192: &Composter, - 1193: &Barrel, - 1194: &Smoker, - 1195: &BlastFurnace, - 1196: &CartographyTable, - 1197: &FletchingTable, - 1198: &Grindstone, - 1199: &SmithingTable, - 1200: &Stonecutter, - 1201: &Bell, - 1202: &Lantern, - 1203: &SoulLantern, - 1204: &SweetBerries, - 1205: &GlowBerries, - 1206: &Campfire, - 1207: &SoulCampfire, - 1208: &Shroomlight, - 1209: &Honeycomb, - 1210: &BeeNest, - 1211: &Beehive, - 1212: &HoneyBottle, - 1213: &HoneycombBlock, - 1214: &Lodestone, - 1215: &CryingObsidian, - 1216: &Blackstone, - 1217: &BlackstoneSlab, - 1218: &BlackstoneStairs, - 1219: &GildedBlackstone, - 1220: &PolishedBlackstone, - 1221: &PolishedBlackstoneSlab, - 1222: &PolishedBlackstoneStairs, - 1223: &ChiseledPolishedBlackstone, - 1224: &PolishedBlackstoneBricks, - 1225: &PolishedBlackstoneBrickSlab, - 1226: &PolishedBlackstoneBrickStairs, - 1227: &CrackedPolishedBlackstoneBricks, - 1228: &RespawnAnchor, - 1229: &Candle, - 1230: &WhiteCandle, - 1231: &OrangeCandle, - 1232: &MagentaCandle, - 1233: &LightBlueCandle, - 1234: &YellowCandle, - 1235: &LimeCandle, - 1236: &PinkCandle, - 1237: &GrayCandle, - 1238: &LightGrayCandle, - 1239: &CyanCandle, - 1240: &PurpleCandle, - 1241: &BlueCandle, - 1242: &BrownCandle, - 1243: &GreenCandle, - 1244: &RedCandle, - 1245: &BlackCandle, - 1246: &SmallAmethystBud, - 1247: &MediumAmethystBud, - 1248: &LargeAmethystBud, - 1249: &AmethystCluster, - 1250: &PointedDripstone, - 1251: &OchreFroglight, - 1252: &VerdantFroglight, - 1253: &PearlescentFroglight, - 1254: &Frogspawn, - 1255: &EchoShard, - 1256: &Brush, - 1257: &NetheriteUpgradeSmithingTemplate, - 1258: &SentryArmorTrimSmithingTemplate, - 1259: &DuneArmorTrimSmithingTemplate, - 1260: &CoastArmorTrimSmithingTemplate, - 1261: &WildArmorTrimSmithingTemplate, - 1262: &WardArmorTrimSmithingTemplate, - 1263: &EyeArmorTrimSmithingTemplate, - 1264: &VexArmorTrimSmithingTemplate, - 1265: &TideArmorTrimSmithingTemplate, - 1266: &SnoutArmorTrimSmithingTemplate, - 1267: &RibArmorTrimSmithingTemplate, - 1268: &SpireArmorTrimSmithingTemplate, - 1269: &WayfinderArmorTrimSmithingTemplate, - 1270: &ShaperArmorTrimSmithingTemplate, - 1271: &SilenceArmorTrimSmithingTemplate, - 1272: &RaiserArmorTrimSmithingTemplate, - 1273: &HostArmorTrimSmithingTemplate, - 1274: &AnglerPotterySherd, - 1275: &ArcherPotterySherd, - 1276: &ArmsUpPotterySherd, - 1277: &BladePotterySherd, - 1278: &BrewerPotterySherd, - 1279: &BurnPotterySherd, - 1280: &DangerPotterySherd, - 1281: &ExplorerPotterySherd, - 1282: &FriendPotterySherd, - 1283: &HeartPotterySherd, - 1284: &HeartbreakPotterySherd, - 1285: &HowlPotterySherd, - 1286: &MinerPotterySherd, - 1287: &MournerPotterySherd, - 1288: &PlentyPotterySherd, - 1289: &PrizePotterySherd, - 1290: &SheafPotterySherd, - 1291: &ShelterPotterySherd, - 1292: &SkullPotterySherd, - 1293: &SnortPotterySherd, - 1294: &CopperGrate, - 1295: &ExposedCopperGrate, - 1296: &WeatheredCopperGrate, - 1297: &OxidizedCopperGrate, - 1298: &WaxedCopperGrate, - 1299: &WaxedExposedCopperGrate, - 1300: &WaxedWeatheredCopperGrate, - 1301: &WaxedOxidizedCopperGrate, - 1302: &CopperBulb, - 1303: &ExposedCopperBulb, - 1304: &WeatheredCopperBulb, - 1305: &OxidizedCopperBulb, - 1306: &WaxedCopperBulb, - 1307: &WaxedExposedCopperBulb, - 1308: &WaxedWeatheredCopperBulb, - 1309: &WaxedOxidizedCopperBulb, - 1310: &TrialSpawner, - 1311: &TrialKey, -} diff --git a/level/chunk.go b/level/chunk.go index 4e3b51f..71faf4a 100644 --- a/level/chunk.go +++ b/level/chunk.go @@ -329,6 +329,10 @@ func (c *Chunk) PutData(data []byte) error { r := bytes.NewReader(data) for i := range c.Sections { _, err := c.Sections[i].ReadFrom(r) + if errors.Is(err, io.EOF) { + c.Sections = c.Sections[:i] + break + } if err != nil { return err }