Skip to content

Commit

Permalink
A bunch of features
Browse files Browse the repository at this point in the history
  • Loading branch information
SoSeDiK committed Dec 17, 2024
1 parent aaa3214 commit 8fe9d6b
Show file tree
Hide file tree
Showing 69 changed files with 2,929 additions and 108 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ version = 1.21.4-R0.1-SNAPSHOT
mcVersion = 1.21.4

# Upstream commit
purpurCommit = ba378a71bed7c8645f473a5ad19e6c7876ef6230
purpurCommit = 4a204f1bd7cde4bd1a99673bf46f2373d3bcb7e5

# Gradle
org.gradle.caching = true
Expand Down
21 changes: 5 additions & 16 deletions patches/api/0016-Data-driven-items.patch
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ index 40deffbd0930508bb04e9aedfd62ad2144855198..0e95fb15bc11aae249dd2fab77cb7785
}
diff --git a/src/main/java/me/sosedik/kiterino/registry/data/ItemRegistryEntity.java b/src/main/java/me/sosedik/kiterino/registry/data/ItemRegistryEntity.java
new file mode 100644
index 0000000000000000000000000000000000000000..8f57a4a7f52aeadf965e17cfabab1b669ab5505b
index 0000000000000000000000000000000000000000..fd8e781980e3bd585269c0816743127c2de7db2b
--- /dev/null
+++ b/src/main/java/me/sosedik/kiterino/registry/data/ItemRegistryEntity.java
@@ -0,0 +1,112 @@
@@ -0,0 +1,101 @@
+package me.sosedik.kiterino.registry.data;
+
+import io.papermc.paper.datacomponent.DataComponentType;
Expand All @@ -36,8 +36,6 @@ index 0000000000000000000000000000000000000000..8f57a4a7f52aeadf965e17cfabab1b66
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.Range;
+
+import java.util.function.Function;
+
+/**
+ * A data-centric version-specific registry entry for the {@link ItemType} type.
+ */
Expand Down Expand Up @@ -75,11 +73,11 @@ index 0000000000000000000000000000000000000000..8f57a4a7f52aeadf965e17cfabab1b66
+ @Nullable Object nmsItem();
+
+ /**
+ * Provides the function that takes constructed item properties and provides the item's nms implementation
+ * Constructs item properties with item id already set
+ *
+ * @return the item's nms implementation
+ * @return item properties
+ */
+ @Nullable Function<Object, Object> nmsItemFunction();
+ @NonNull Object constructItemProperties();
+
+ /**
+ * A mutable builder for the {@link ItemRegistryEntity} plugins may change in applicable registry events.
Expand Down Expand Up @@ -125,15 +123,6 @@ index 0000000000000000000000000000000000000000..8f57a4a7f52aeadf965e17cfabab1b66
+ @Contract(value = "_ -> this", mutates = "this")
+ @NonNull Builder nmsItem(@Nullable Object nmsItem);
+
+ /**
+ * Configures the function that takes constructed item properties and provides the item's nms implementation
+ *
+ * @param nmsItemFunction the item's nms implementation
+ * @return this builder
+ */
+ @Contract(value = "_ -> this", mutates = "this")
+ @NonNull Builder nmsItemFunction(@Nullable Function<Object, Object> nmsItemFunction);
+
+ }
+
+}
148 changes: 148 additions & 0 deletions patches/api/0017-Data-driven-blocks.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: SoSeDiK <[email protected]>
Date: Sat, 14 Dec 2024 10:10:12 +0200
Subject: [PATCH] Data-driven blocks


diff --git a/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java b/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java
index 0e95fb15bc11aae249dd2fab77cb7785cbff87e5..5972abc569e5c86089a28473edbb411e86f55ac7 100644
--- a/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java
+++ b/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java
@@ -24,6 +24,7 @@ public final class RegistryEvents {
public static final RegistryEventProvider<Enchantment, EnchantmentRegistryEntry.Builder> ENCHANTMENT = create(RegistryKey.ENCHANTMENT);
public static final RegistryEventProvider<Art, PaintingVariantRegistryEntry.Builder> PAINTING_VARIANT = create(RegistryKey.PAINTING_VARIANT);
public static final RegistryEventProvider<org.bukkit.inventory.ItemType, me.sosedik.kiterino.registry.data.ItemRegistryEntity.Builder> ITEM = create(RegistryKey.ITEM); // Kiterino - Data-driven items
+ public static final RegistryEventProvider<org.bukkit.block.BlockType, me.sosedik.kiterino.registry.data.BlockRegistryEntity.Builder> BLOCK = create(RegistryKey.BLOCK); // Kiterino - Data-driven blocks

private RegistryEvents() {
}
diff --git a/src/main/java/me/sosedik/kiterino/registry/data/BlockRegistryEntity.java b/src/main/java/me/sosedik/kiterino/registry/data/BlockRegistryEntity.java
new file mode 100644
index 0000000000000000000000000000000000000000..c75a0f1529823f2299a6519a87ff934549be9c5f
--- /dev/null
+++ b/src/main/java/me/sosedik/kiterino/registry/data/BlockRegistryEntity.java
@@ -0,0 +1,51 @@
+package me.sosedik.kiterino.registry.data;
+
+import io.papermc.paper.registry.RegistryBuilder;
+import me.sosedik.kiterino.world.block.KiterinoBlock;
+import org.bukkit.block.BlockType;
+import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.Contract;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+
+/**
+ * A data-centric version-specific registry entry for the {@link BlockType} type.
+ */
+@ApiStatus.Experimental
+@ApiStatus.NonExtendable
+@NullMarked
+public interface BlockRegistryEntity {
+
+ /**
+ * Provides the block's nms implementation
+ *
+ * @return the block's nms implementation
+ */
+ @Nullable KiterinoBlock nmsBlock();
+
+ /**
+ * Constructs block properties with block id already set
+ *
+ * @return block properties
+ */
+ Object constructBlockProperties();
+
+ /**
+ * A mutable builder for the {@link BlockRegistryEntity} plugins may change in applicable registry events.
+ */
+ @ApiStatus.Experimental
+ @ApiStatus.NonExtendable
+ interface Builder extends BlockRegistryEntity, RegistryBuilder<BlockType> {
+
+ /**
+ * Configures the block's nms implementation
+ *
+ * @param nmsBlock the block's nms implementation
+ * @return this builder
+ */
+ @Contract(value = "_ -> this", mutates = "this")
+ Builder nmsBlock(KiterinoBlock nmsBlock);
+
+ }
+
+}
diff --git a/src/main/java/me/sosedik/kiterino/registry/data/ItemRegistryEntity.java b/src/main/java/me/sosedik/kiterino/registry/data/ItemRegistryEntity.java
index fd8e781980e3bd585269c0816743127c2de7db2b..99fd597b5dbc4bad613ecf7e82aba9ae4da52359 100644
--- a/src/main/java/me/sosedik/kiterino/registry/data/ItemRegistryEntity.java
+++ b/src/main/java/me/sosedik/kiterino/registry/data/ItemRegistryEntity.java
@@ -52,6 +52,21 @@ public interface ItemRegistryEntity {
*/
@NonNull Object constructItemProperties();

+ /**
+ * Checks whether this item has a block with the same id
+ *
+ * @return whether this item has a block variant
+ */
+ boolean hasAttachedBlock();
+
+ /**
+ * Tries to find the matching block with the same id
+ *
+ * @return matching block
+ * @throws IllegalArgumentException if block does not exist
+ */
+ @NonNull Object asBlockOrThrow();
+
/**
* A mutable builder for the {@link ItemRegistryEntity} plugins may change in applicable registry events.
*/
diff --git a/src/main/java/me/sosedik/kiterino/world/block/KiterinoBlock.java b/src/main/java/me/sosedik/kiterino/world/block/KiterinoBlock.java
new file mode 100644
index 0000000000000000000000000000000000000000..149b6577a9427747346a1ee9ae5483e11582361c
--- /dev/null
+++ b/src/main/java/me/sosedik/kiterino/world/block/KiterinoBlock.java
@@ -0,0 +1,41 @@
+package me.sosedik.kiterino.world.block;
+
+import it.unimi.dsi.fastutil.Pair;
+import org.bukkit.block.BlockState;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+
+/**
+ * Represents Kiterino NMS block.
+ * <br>
+ * Extend this class with your NMS block to use it with
+ * Kiterino registry methods.
+ */
+@NullMarked
+public interface KiterinoBlock {
+
+ /**
+ * Serializes custom block to client.
+ * <br>
+ * If the resulting block state is null, you MUST
+ * replace the block in some other way, e.g. via
+ * packet listener plugins.
+ * <br>
+ * Note: this will be called for each serialization, so
+ * caching the block state is preferable.
+ *
+ * @return serialized block
+ */
+ @Nullable BlockState serializeBlockToClient();
+
+ /**
+ * Gets the block data classes for this block.
+ * Left is bukkit interface, right is craft implementation.
+ *
+ * @return block data classes
+ */
+ default @Nullable Pair<Class<?>, Class<?>> getBlockDataClasses() {
+ return null;
+ }
+
+}
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ index 0000000000000000000000000000000000000000..e34e247ae98bf9fe65485f9f2376a61a
+
+}
diff --git a/src/main/java/me/sosedik/kiterino/registry/data/ItemRegistryEntity.java b/src/main/java/me/sosedik/kiterino/registry/data/ItemRegistryEntity.java
index 8f57a4a7f52aeadf965e17cfabab1b669ab5505b..55db847c614c5e0a1bc9cab925545dbcb006e454 100644
index 99fd597b5dbc4bad613ecf7e82aba9ae4da52359..bd016db819d4c5106d2209e5038cd5599a396835 100644
--- a/src/main/java/me/sosedik/kiterino/registry/data/ItemRegistryEntity.java
+++ b/src/main/java/me/sosedik/kiterino/registry/data/ItemRegistryEntity.java
@@ -1,5 +1,7 @@
Expand All @@ -66,7 +66,7 @@ index 8f57a4a7f52aeadf965e17cfabab1b669ab5505b..55db847c614c5e0a1bc9cab925545dbc
import io.papermc.paper.datacomponent.DataComponentType;
import io.papermc.paper.registry.RegistryBuilder;
import org.bukkit.inventory.ItemType;
@@ -18,6 +20,13 @@ import java.util.function.Function;
@@ -16,6 +18,13 @@ import org.jetbrains.annotations.Range;
@ApiStatus.NonExtendable
public interface ItemRegistryEntity {

Expand All @@ -80,7 +80,7 @@ index 8f57a4a7f52aeadf965e17cfabab1b669ab5505b..55db847c614c5e0a1bc9cab925545dbc
/**
* Gets the item's component data
*
@@ -61,6 +70,15 @@ public interface ItemRegistryEntity {
@@ -74,6 +83,15 @@ public interface ItemRegistryEntity {
@ApiStatus.NonExtendable
interface Builder extends ItemRegistryEntity, RegistryBuilder<ItemType> {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ Displaying effects to the client is done on the plugin's side.
Vanilla /effect command won't show new effects in auto complete.

diff --git a/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java b/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java
index 0e95fb15bc11aae249dd2fab77cb7785cbff87e5..821f76270303304dc7a4d563f154d424546d3721 100644
index 5972abc569e5c86089a28473edbb411e86f55ac7..4eabc616a39d7aa2ceafea6a5265440da141fff3 100644
--- a/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java
+++ b/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java
@@ -24,6 +24,7 @@ public final class RegistryEvents {
public static final RegistryEventProvider<Enchantment, EnchantmentRegistryEntry.Builder> ENCHANTMENT = create(RegistryKey.ENCHANTMENT);
@@ -25,6 +25,7 @@ public final class RegistryEvents {
public static final RegistryEventProvider<Art, PaintingVariantRegistryEntry.Builder> PAINTING_VARIANT = create(RegistryKey.PAINTING_VARIANT);
public static final RegistryEventProvider<org.bukkit.inventory.ItemType, me.sosedik.kiterino.registry.data.ItemRegistryEntity.Builder> ITEM = create(RegistryKey.ITEM); // Kiterino - Data-driven items
public static final RegistryEventProvider<org.bukkit.block.BlockType, me.sosedik.kiterino.registry.data.BlockRegistryEntity.Builder> BLOCK = create(RegistryKey.BLOCK); // Kiterino - Data-driven blocks
+ public static final RegistryEventProvider<org.bukkit.potion.PotionEffectType, me.sosedik.kiterino.registry.data.MobEffectRegistryEntity.Builder> MOB_EFFECT = create(RegistryKey.MOB_EFFECT); // Kiterino - Data-driven mob effects

private RegistryEvents() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Temporary exclude UnsafeValues from annotation test


diff --git a/src/test/java/org/bukkit/AnnotationTest.java b/src/test/java/org/bukkit/AnnotationTest.java
index 4028b230e7fe1c78520f227a377a2a61e8381ecc..a631827952b0492d2397e3a552236034c0d045ff 100644
index c92dc62e16aec026f32c5a4739ac041e5c88ed03..026c87396afdae1914aec49c44b3ceb7707c403a 100644
--- a/src/test/java/org/bukkit/AnnotationTest.java
+++ b/src/test/java/org/bukkit/AnnotationTest.java
@@ -39,6 +39,7 @@ public class AnnotationTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Allow resending entity metadata


diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
index 76e1faf78a1f60534e3d607c5d78086455a4d80a..6ae57e5006dabc7c253cd0ce1386fe2bd08e2ba1 100644
index 834014642b4d7fc77545228b08f7abd2fb70e923..5031221c1208da397db1af35341f20690d30538e 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
@@ -1293,4 +1293,13 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] More resource pack API


diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index 23e705fb60bfae324cfdc62178fb8e28dc0816bb..1e9193a24e38f79f2265f3968e77dc36cae84fc1 100644
index fb190f104fa2bb714a12894c92e2c350d9e1932f..36856ce2f4123be76f1edc369d3695dfd2ae7c6d 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -3091,4 +3091,30 @@ public final class Bukkit {
Expand Down Expand Up @@ -40,7 +40,7 @@ index 23e705fb60bfae324cfdc62178fb8e28dc0816bb..1e9193a24e38f79f2265f3968e77dc36
+ // Kiterino end - More resource pack API
}
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index 49b5c78bdfc09a7c4190cd1be852eed94b99dfc4..fd232e59bb94033bf343d47881b8cb0a5a352d31 100644
index 48356b6df24e67fbe7e37a11a081db57ce44415a..3b68511c0e2851b53c933f737ac3839167835553 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2727,4 +2727,26 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Send ItemStack API


diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index dcf02cda8444f7d2ed4ac64bedc02b399f034688..05697c0668aafc58c71351dc23eb6f49e592e981 100644
index 18b30ee77fe42d7d543699eb0b5da43fcb732990..ecab002941f027a3eb168544e2e1592eaa8c3e74 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -4040,4 +4040,23 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Extra item drop method


diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java
index 488604ba1a516b477693877c74712e4a45624a8b..58f6d09a2d7fe9d733df79faa0d6d3273b5feb58 100644
index 188c8e27d724a1593dc586b58c7dcb74a1b3d926..9819d4c35064d5bac605d6ba8630156a5955df6f 100644
--- a/src/main/java/org/bukkit/entity/HumanEntity.java
+++ b/src/main/java/org/bukkit/entity/HumanEntity.java
@@ -843,4 +843,14 @@ public interface HumanEntity extends LivingEntity, AnimalTamer, InventoryHolder
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Anger nearby piglins API


diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index 05697c0668aafc58c71351dc23eb6f49e592e981..cb5992f7e186be13a0b9e1e72e6a75aefa47086a 100644
index ecab002941f027a3eb168544e2e1592eaa8c3e74..3d12c176699f86ac395f9ad1c405262a6e8c288b 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -4059,4 +4059,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Open ender chest API


diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index cb5992f7e186be13a0b9e1e72e6a75aefa47086a..413e987db00a1cc6e79ef1702e89fba4ec48bad5 100644
index 3d12c176699f86ac395f9ad1c405262a6e8c288b..68d3babd15d61d980c749e41a6367196fc21bef6 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -4068,4 +4068,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ index 0000000000000000000000000000000000000000..d920f608b9913c267cf55903413c4705
+
+}
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
index a22909446b7193b1de121bdd6d7b6fbf81dc3be4..6e74b2adacf6c8ac8efbd8d01b82c93708fcc676 100644
index a4acc3578e935cd1174474bd1f6ff14db4294fe7..97fb693e714bbf9ffbe6da39016565c43fd41734 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -1484,4 +1484,14 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
Expand Down
Loading

0 comments on commit 8fe9d6b

Please sign in to comment.