Skip to content

Commit

Permalink
Fixup new Material fields for injected items
Browse files Browse the repository at this point in the history
  • Loading branch information
SoSeDiK committed Oct 29, 2024
1 parent a75b201 commit e80e9d8
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ target/
dependency-reduced-pom.xml

# various other potential build files
build/
bin/
dist/
manifest.mf
Expand All @@ -58,6 +57,5 @@ build-data/
paper-api-generator
test-plugin.settings.gradle.kts
Kiterino-API
Kiterino-MojangAPI
Kiterino-Server
kiterino.jar
1 change: 1 addition & 0 deletions patches/api/0004-Init-destruct-injectors.patch
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ From: SoSeDiK <[email protected]>
Date: Mon, 28 Oct 2024 12:06:23 +0200
Subject: [PATCH] Init/destruct injectors

See the server patch for some context.

diff --git a/src/test/java/org/bukkit/support/TestServer.java b/src/test/java/org/bukkit/support/TestServer.java
index 494419922f11e494c9de6f757bb76f0cfe5d7c81..ab4292e9dcfd172f5cdf42cac960614d68603274 100644
Expand Down
14 changes: 11 additions & 3 deletions patches/server/0019-Injecting-custom-Materials.patch
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,21 @@ index 0e86e7962be82ccc6f77d651f2ce6aa70806b789..33a071b5bdbf84c4529a3293ecd921ca
val testPluginJar = rootProject.project(":test-plugin").tasks.jar.flatMap { it.archiveFile }
diff --git a/src/main/java/me/sosedik/kiterino/util/KiterinoBootstrapMaterialInjectorImpl.java b/src/main/java/me/sosedik/kiterino/util/KiterinoBootstrapMaterialInjectorImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..c8714a9e3d382827a61c02f61f05b1449d0fa8ea
index 0000000000000000000000000000000000000000..f365b66ba81ae08dd89072c5c37a42edb0f6ecd8
--- /dev/null
+++ b/src/main/java/me/sosedik/kiterino/util/KiterinoBootstrapMaterialInjectorImpl.java
@@ -0,0 +1,136 @@
@@ -0,0 +1,144 @@
+package me.sosedik.kiterino.util;
+
+import com.google.common.base.Suppliers;
+import io.papermc.paper.adventure.PaperAdventure;
+import net.kyori.adventure.key.Key;
+import net.minecraft.core.component.DataComponents;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.world.item.Item;
+import org.bukkit.Material;
+import org.bukkit.NamespacedKey;
+import org.bukkit.Registry;
+import org.bukkit.craftbukkit.util.CraftMagicNumbers;
+import org.jetbrains.annotations.NotNull;
+
Expand Down Expand Up @@ -71,6 +73,8 @@ index 0000000000000000000000000000000000000000..c8714a9e3d382827a61c02f61f05b144
+ private final Field dataField = getField(Material.class, "data");
+ private final Field legacyField = getField(Material.class, "legacy");
+ private final Field keyField = getField(Material.class, "key");
+ private final Field itemTypeField = getField(Material.class, "itemType");
+ private final Field blockTypeField = getField(Material.class, "blockType");
+ private final Field injectedField = getField(Material.class, "injected");
+
+ @SuppressWarnings("java:S3011")
Expand All @@ -86,7 +90,8 @@ index 0000000000000000000000000000000000000000..c8714a9e3d382827a61c02f61f05b144
+ if (!Modifier.isFinal(modifiers)) continue;
+
+ Material material = (Material) field.get(null);
+ Item item = BuiltInRegistries.ITEM.get(PaperAdventure.asVanilla(material.getKey()));
+ NamespacedKey materialKey = material.getKey();
+ Item item = BuiltInRegistries.ITEM.get(PaperAdventure.asVanilla(materialKey));
+
+ maxStackField.set(material, item.getDefaultMaxStackSize());
+ durabilityField.set(material, (short) (int) item.components().getOrDefault(DataComponents.MAX_DAMAGE, 0));
Expand All @@ -96,6 +101,9 @@ index 0000000000000000000000000000000000000000..c8714a9e3d382827a61c02f61f05b144
+ ctorField.set(material, org.bukkit.material.MaterialData.class.getConstructor(Material.class, byte.class));
+ dataField.set(material, org.bukkit.material.MaterialData.class);
+
+ itemTypeField.set(material, Suppliers.memoize(() -> Registry.ITEM.get(materialKey)));
+ blockTypeField.set(material, Suppliers.memoize(() -> Registry.BLOCK.get(materialKey)));
+
+ ((Map<Material, Item>) materialItemField.get(null)).put(material, item);
+ ((Map<Item, Material>) itemMaterialField.get(null)).put(item, material);
+
Expand Down

0 comments on commit e80e9d8

Please sign in to comment.