Files
GeyserWebsite/_site/geyser/custom-items/index.html
T
2023-11-07 19:40:55 -06:00

602 lines
27 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en" data-bs-theme="dark">
<head>
<meta charset="utf-8">
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>GeyserMC Wiki: Custom items with Geyser</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.3/font/bootstrap-icons.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/darcula.css">
<meta name="author" content="GeyserMC">
<meta name="description" content="This is the wiki for all of GeyserMC's projects.">
<meta name="theme-color" content="#2b3035">
<meta property="og:type" content="website">
<meta property="og:url" content="http://localhost:4000">
<meta property="og:title" content="GeyserMC Wiki: Custom items with Geyser">
<meta property="og:description" content="This is the wiki for all of GeyserMC's projects.">
<meta property="og:image" content="/android-chrome-192x192.png">
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="192x192" href="/android-chrome-192x192.png">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#248f00">
</head>
<body>
<header>
<nav class="navbar navbar-expand-lg bg-body-tertiary fixed-top">
<div class="container-fluid">
<a class="navbar-brand" href="/"><img src="/android-chrome-512x512.png" alt="geyser logo" height="32"> GeyserMC Wiki</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarLinks" aria-controls="navbarLinks" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarLinks">
<ul class="navbar-nav ms-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="https://geysermc.org/"><i class="bi bi-house pe-1"></i> Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://geysermc.org/download"><i class="bi bi-download pe-1"></i> Download</a>
</li>
</ul>
<form class="d-flex" role="search" action="/search/">
<div class="input-group">
<button class="btn btn-outline-secondary" type="submit" id="button-search"><i class="bi bi-search"></i></button>
<input type="text" name="q" class="form-control" placeholder="Search the site..." aria-label="Search the site..." aria-describedby="button-search">
</div>
</form>
</div>
</div>
</nav>
</header>
<div id="page-content" class="container-fluid">
<div class="row">
<div class="col-12 col-md-3 col-xl-2">
<div class="sticky-top">
<div class="sidebar py-2 text-break">
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<div class="d-block d-md-none">Wiki Navigation</div>
<button class="navbar-toggler mb-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebarNav" aria-controls="sidebarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse flex-column align-items-start" id="sidebarNav">
<div class="nav-item dropdown">
<a class="nav-link dropdown-toggle fw-bold show" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="false" aria-expanded="false">Geyser Documentation</a>
<ul class="pe-3 pt-0 dropdown-menu position-relative border-0 list-disc show">
<li class="ms-4">
<a href="/geyser/setup/">Setting up Geyser</a>
<ul>
<li>
<a href="/geyser/supported-hosting-providers/">Supported Hosting Providers</a>
</li>
<li>
<a href="/geyser/using-geyser-with-consoles/">Using Geyser with Consoles</a>
</li>
<li>
<a href="/geyser/playit-gg/">Using playit.gg with Geyser</a>
</li>
<li>
<a href="/geyser/creating-a-startup-script/">Creating a Startup Script</a>
</li>
</ul>
</li>
<li class="ms-4">
<a href="/geyser/common-issues/">Common Issues</a>
<ul>
<li>
<a href="/geyser/fixing-unable-to-connect-to-world/">Fixing 'Unable to Connect to World'</a>
</li>
</ul>
</li>
<li class="ms-4">
<a href="/geyser/understanding-the-config/">Configuring Geyser</a>
<ul>
<li>
<a href="/geyser/commands/">Commands</a>
</li>
<li>
<a href="/geyser/geyser-command-line-arguments-and-system-properties/">Geyser Command Line Arguments and System Properties</a>
</li>
</ul>
</li>
<li class="ms-4">
<a href="/geyser/faq/">FAQ</a>
<ul>
<li>
<a href="/geyser/anticheat-compatibility/">Anticheat Compatibility</a>
</li>
<li>
<a href="/geyser/current-limitations/">Current Limitations</a>
</li>
</ul>
</li>
<li class="ms-4">
<a href="/geyser/custom-items/">Custom items with Geyser</a>
<ul>
<li>
<a href="/geyser/custom-items/#json-mappings">JSON mappings</a>
</li>
<li>
<a href="/geyser/custom-items/#geyser-extensions">Geyser extensions</a>
</li>
<li>
<a href="/geyser/custom-items/#resource-pack">Resource pack</a>
</li>
</ul>
</li>
<li class="ms-4">
<a href="/geyser/custom-blocks/">Custom blocks with Geyser</a>
<ul>
<li>
<a href="/geyser/custom-blocks/#enabling-custom-blocks">Enabling custom blocks</a>
</li>
<li>
<a href="/geyser/custom-blocks/#json-mappings">JSON mappings</a>
</li>
<li>
<a href="/geyser/custom-blocks/#geyser-extensions">Geyser extensions</a>
</li>
</ul>
</li>
<li class="ms-4">
<a href="/geyser/custom-skulls/">Custom skulls with Geyser</a>
<ul>
<li>
<a href="/geyser/custom-skulls/#enabling-custom-skulls">Enabling custom skulls</a>
</li>
<li>
<a href="/geyser/custom-skulls/#custom-skullsyml">custom-skulls.yml</a>
</li>
</ul>
</li>
<li class="ms-4">
<a href="/geyser/api/">Geyser API</a>
<ul>
<li>
<a href="/geyser/getting-started-with-the-api/">Getting Started</a>
</li>
<li>
<a href="/geyser/api/#short-overview-of-the-geyser-api">Overview</a>
</li>
<li>
<a href="/geyser/events/">Events</a>
</li>
<li>
<a href="/geyser/forms/">Forms and Cumulus</a>
</li>
</ul>
</li>
<li class="ms-4">
<a href="/geyser/extensions/">Geyser Extensions</a>
<ul>
<li>
<a href="/geyser/extensions/#creating-the-main-class">Main class</a>
</li>
<li>
<a href="/geyser/extensions/#creating-commands-with-geyser-extensions">Creating Commands</a>
</li>
</ul>
</li>
<li class="ms-4">
<a href="/geyser/global-api/">Global API</a>
</li>
</ul>
</div>
<div class="nav-item dropdown">
<a class="nav-link dropdown-toggle fw-bold" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="false" aria-expanded="false">Floodgate Documentation</a>
<ul class="pe-3 pt-0 dropdown-menu position-relative border-0 list-disc">
<li class="ms-4">
<a href="/floodgate/setup/">Setup</a>
</li>
<li class="ms-4">
<a href="/floodgate/issues/">Issues</a>
</li>
<li class="ms-4">
<a href="/floodgate/faq/">FAQ</a>
</li>
<li class="ms-4">
<a href="/floodgate/features/">Features</a>
<ul>
<li>
<a href="/floodgate/features/#whitelist-command">Whitelist command</a>
</li>
<li>
<a href="/floodgate/commands/">Commands</a>
</li>
<li>
<a href="/floodgate/features/#what-is-skin-uploading">Skin Uploading</a>
</li>
</ul>
</li>
<li class="ms-4">
<a href="/floodgate/api/">Floodgate API</a>
<ul>
<li>
<a href="/floodgate/player/">FloodgatePlayer</a>
</li>
<li>
<a href="/geyser/forms/">Forms and Cumulus</a>
</li>
</ul>
</li>
<li class="ms-4">
<a href="/floodgate/linking/">Linking</a>
<ul>
<li>
<a href="/floodgate/linking/#what-is-global-linking">Global Linking</a>
</li>
<li>
<a href="/floodgate/linking/#local-linking">Local Linking</a>
</li>
</ul>
</li>
</ul>
</div>
<div class="nav-item dropdown">
<a class="nav-link dropdown-toggle fw-bold" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="false" aria-expanded="false">Other</a>
<ul class="pe-3 pt-0 dropdown-menu position-relative border-0 list-disc">
<li class="ms-4">
<a href="/other/geyseroptionalpack/">GeyserOptionalPack</a>
</li>
<li class="ms-4">
<a href="/other/hurricane/">Hurricane</a>
</li>
<li class="ms-4">
<a href="/other/geyserconnect/">GeyserConnect</a>
</li>
<li class="ms-4">
<a href="/other/community-geyser-projects/">Community Geyser Projects</a>
</li>
<li class="ms-4">
<a href="/other/test-server/">Test Server</a>
</li>
<li class="ms-4">
<a href="/other/developer-guide/">Developer Guide</a>
</li>
<li class="ms-4">
<a href="/other/discord-bot-usage/">Geyser Discord Bot Usage</a>
</li>
</ul>
</div>
</div>
</div>
</nav>
</div>
</div>
</div>
<main class="col-12 col-md-9 col-xl-8" role="main">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="http://localhost:4000/geyser/">Geyser</a></li>
<li class="breadcrumb-item active" aria-current="page">Custom items with Geyser</li>
</ol>
</nav>
<h1 id="custom-items-with-geyser">Custom items with Geyser</h1>
<p>To setup custom items in geyser, you have to choose how you are going to register your items. The easiest is <a href="#json-mappings">using a json file</a> but you can also <a href="#geyser-extensions">use a Geyser extension</a>.</p>
<h2 id="json-mappings">JSON mappings</h2>
<ol>
<li>Start your server, and you should have a folder called <code class="language-plaintext highlighter-rouge">custom_mappings</code> that is created. That would be with the folder of <code class="language-plaintext highlighter-rouge">Geyser.jar</code> file for standalone and inside your Geyser data folder for a plugin.</li>
<li>Create a <code class="language-plaintext highlighter-rouge">.json</code> file, it can be any name you like and as many files as you like. You don’t need to make one file per item. Here is the structure of the file:
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"format_version"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="nl">"items"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
<li>Inside the <code class="language-plaintext highlighter-rouge">items</code> entry, you can add your java item to extend:</li>
</ol>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nl">"minecraft:JAVA_ITEM"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">]</span><span class="w">
</span></code></pre></div></div>
<ol>
<li>Inside this java item, goes an array of all your custom items.</li>
</ol>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"my_item"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<ol>
<li>Then, you need to set one or more item options or registrations, they can be stacked, so that all of the specified types need to match.
<ul>
<li>Custom model data: <code class="language-plaintext highlighter-rouge">custom_model_data</code> (int)</li>
<li>Damage predicate: <code class="language-plaintext highlighter-rouge">damage_predicate</code> (int) This is a fractional value of damage/max damage and not a number between 0 and 1.</li>
<li>Unbreakable: <code class="language-plaintext highlighter-rouge">unbreakable</code> (boolean)</li>
</ul>
</li>
<li>You also have some extra modifiers that you can set to further customise your item. <strong>Note that the following modifiers are NOT required.</strong>
<ul>
<li><code class="language-plaintext highlighter-rouge">display_name</code> (string) default: item name</li>
<li><code class="language-plaintext highlighter-rouge">icon</code> (string) default: item name</li>
<li><code class="language-plaintext highlighter-rouge">allow_offhand</code> (boolean) default: false</li>
<li><code class="language-plaintext highlighter-rouge">texture_size</code> (int) default: 16</li>
<li><code class="language-plaintext highlighter-rouge">render_offsets</code> (object) It works as follows. Note that all the sub-objects are optional, except x, y and z. You can have for example only a main hand with a position, and noting else. default: no render offset
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="nl">"render_offsets"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"main_hand"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"first_person"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"position"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"x"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"y"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"z"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"rotation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"x"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"y"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"z"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"scale"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"x"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"y"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"z"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"third_person"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"off_hand"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
</ul>
</li>
</ol>
<h2 id="geyser-extensions">Geyser extensions</h2>
<h3 id="extending-a-vanilla-item">Extending a vanilla item</h3>
<ol>
<li>Create your custom item options or registrations, to which you can add any of the following. They can be stacked, so that all of the specified types need to match, but you <strong>do NOT need all of them.</strong>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">CustomItemOptions</span> <span class="n">itemOptions</span> <span class="o">=</span> <span class="nc">CustomItemOptions</span><span class="o">.</span><span class="na">builder</span><span class="o">()</span>
<span class="o">.</span><span class="na">customModelData</span><span class="o">(</span><span class="mi">1</span><span class="o">)</span>
<span class="o">.</span><span class="na">damagePredicate</span><span class="o">(</span><span class="mi">1</span><span class="o">)</span> <span class="c1">//This is a fractional value of damage/max damage and not a number between 0 and 1.</span>
<span class="o">.</span><span class="na">unbreakable</span><span class="o">(</span><span class="kc">true</span><span class="o">)</span>
<span class="o">.</span><span class="na">build</span><span class="o">();</span>
</code></pre></div> </div>
</li>
<li>Create your custom item, and store it somewhere:
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">CustomItemData</span> <span class="n">data</span> <span class="o">=</span> <span class="nc">CustomItemData</span><span class="o">.</span><span class="na">builder</span><span class="o">()</span>
<span class="o">.</span><span class="na">name</span><span class="o">(</span><span class="s">"my_item"</span><span class="o">)</span>
<span class="o">.</span><span class="na">customItemOptions</span><span class="o">(</span><span class="n">itemOptions</span><span class="o">)</span>
<span class="o">.</span><span class="na">build</span><span class="o">();</span>
</code></pre></div> </div>
</li>
<li>You have some modifiers that you can set to further customise your item. <strong>Note that the following modifiers are NOT required.</strong>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">.</span><span class="na">displayName</span><span class="o">(</span><span class="s">"displayName"</span><span class="o">);</span> <span class="c1">//Default: item name</span>
<span class="o">.</span><span class="na">icon</span><span class="o">(</span><span class="s">"my_icon"</span><span class="o">);</span> <span class="c1">//Default: item name</span>
<span class="o">.</span><span class="na">allowOffhand</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span> <span class="c1">//Default: false</span>
<span class="o">.</span><span class="na">textureSize</span><span class="o">(</span><span class="mi">16</span><span class="o">);</span> <span class="c1">//Default: 16</span>
<span class="o">.</span><span class="na">renderOffsets</span><span class="o">(</span><span class="k">new</span> <span class="nc">CustomRenderOffsets</span><span class="o">(...));</span> <span class="c1">//Default: no render offset</span>
</code></pre></div> </div>
</li>
<li>Then, in your pre init event, you can register your item:
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nd">@Subscribe</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onGeyserPreInitializeEvent</span><span class="o">(</span><span class="nc">GeyserDefineCustomItemsEvent</span> <span class="n">event</span><span class="o">)</span> <span class="o">{</span>
<span class="n">event</span><span class="o">.</span><span class="na">registerCustomItem</span><span class="o">(</span><span class="s">"minecraft:JAVA_ITEM"</span><span class="o">,</span> <span class="n">data</span><span class="o">);</span>
<span class="o">}</span>
</code></pre></div> </div>
</li>
</ol>
<h3 id="non-vanilla-modded-items-with-geyser-extensions-for-example-to-use-with-fabric">Non vanilla (modded) items with Geyser extensions (for example to use with Fabric)</h3>
<ol>
<li>Create your item data:
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">NonVanillaCustomItemData</span> <span class="n">data</span> <span class="o">=</span> <span class="nc">NonVanillaCustomItemData</span><span class="o">.</span><span class="na">builder</span><span class="o">()</span>
<span class="o">.</span><span class="na">name</span><span class="o">(</span><span class="s">"my_item"</span><span class="o">)</span>
<span class="o">.</span><span class="na">identifier</span><span class="o">(</span><span class="s">"my_mod:my_item"</span><span class="o">)</span>
<span class="o">.</span><span class="na">javaId</span><span class="o">(</span><span class="mi">1</span><span class="o">)</span>
</code></pre></div> </div>
</li>
<li>There are many other options you can set to match the behavior that you require for your item. You can see them <a href="https://github.com/GeyserMC/Geyser/blob/master/api/src/main/java/org/geysermc/geyser/api/item/custom/NonVanillaCustomItemData.java">here</a></li>
<li>Register your item in the GeyserDefineCustomItems event:
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nd">@Subscribe</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onGeyserDefineCustomItemsEvent</span><span class="o">(</span><span class="nc">GeyserDefineCustomItemsEvent</span> <span class="n">event</span><span class="o">)</span> <span class="o">{</span>
<span class="n">event</span><span class="o">.</span><span class="na">register</span><span class="o">(</span><span class="n">data</span><span class="o">);</span>
<span class="o">}</span>
</code></pre></div> </div>
</li>
</ol>
<h2 id="resource-pack">Resource pack</h2>
<ol>
<li>Setup a basic bedrock resource pack. If you need help, you can find it <a href="https://wiki.bedrock.dev/guide/project-setup.html#rp-manifest">here</a>.</li>
<li>Make a <code class="language-plaintext highlighter-rouge">textures</code> folder.</li>
<li>Create <code class="language-plaintext highlighter-rouge">item_texture.json</code> in the <code class="language-plaintext highlighter-rouge">textures</code>, and put this in it:</li>
</ol>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"resource_pack_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MY_PACK_NAME_HERE"</span><span class="p">,</span><span class="w">
</span><span class="nl">"texture_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"atlas.items"</span><span class="p">,</span><span class="w">
</span><span class="nl">"texture_data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<ol>
<li>Inside texture data, you can add your items. The texture name and path must match the name that you set in your mappings.</li>
</ol>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nl">"my_item"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"textures"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="s2">"textures/items/my_item"</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<ol>
<li>Then you need to put your textures inside the <code class="language-plaintext highlighter-rouge">textures/items</code>. Make sure to have it match the texture path that you specified in <code class="language-plaintext highlighter-rouge">item_texture.json</code>!</li>
</ol>
</main>
<div class="col-2 d-none d-xl-block">
<div class="sticky-top">
<div class="sidebar py-2">
<a class="d-block text-decoration-none" href="https://github.com/GeyserMC/GeyserWiki/edit/master/_docs/geyser/custom-items.md" target="_blank"><i class="bi bi-pencil"></i> Edit this page</a>
<a class="d-block text-decoration-none" href="https://github.com/GeyserMC/GeyserWiki/issues/new?labels=question&title=Question:&body=Question on: _docs/geyser/custom-items.md" target="_blank"><i class="bi bi-github"></i> Create Wiki issue/bug report</a>
<a class="d-block text-decoration-none" href="/issues/new" target="_blank"><i class="bi bi-list-check"></i> Create Geyser issue/bug report</a>
<div id="page-nav" class="py-3 "></div>
</div>
</div>
</div>
</div>
</div>
<!-- <footer class="p-4 text-center bg-body-tertiary">
&copy; 2023 GeyserMC
</footer> -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN" crossorigin="anonymous"></script>
<script src="/js/page-nav.js"></script>
</body>
</html>