From a6b6ecdd221b6ae7687561c84c1850aaa62473b4 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sat, 20 Apr 2024 12:57:51 -0700 Subject: [PATCH] More Raid API (#7537) --- patches/api/0473-More-Raid-API.patch | 62 ++++++++++++++ patches/server/1059-More-Raid-API.patch | 106 ++++++++++++++++++++++++ 2 files changed, 168 insertions(+) create mode 100644 patches/api/0473-More-Raid-API.patch create mode 100644 patches/server/1059-More-Raid-API.patch diff --git a/patches/api/0473-More-Raid-API.patch b/patches/api/0473-More-Raid-API.patch new file mode 100644 index 0000000000..6c0e5da000 --- /dev/null +++ b/patches/api/0473-More-Raid-API.patch @@ -0,0 +1,62 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +Date: Fri, 4 Mar 2022 09:46:40 -0800 +Subject: [PATCH] More Raid API + + +diff --git a/src/main/java/org/bukkit/Raid.java b/src/main/java/org/bukkit/Raid.java +index 983a8c20a06d2b509602b27f49c090598b8ecc42..fa98599e3eee37bf68f0e9813497c718f457485c 100644 +--- a/src/main/java/org/bukkit/Raid.java ++++ b/src/main/java/org/bukkit/Raid.java +@@ -9,7 +9,7 @@ import org.jetbrains.annotations.NotNull; + /** + * Represents a raid event. + */ +-public interface Raid { ++public interface Raid extends org.bukkit.persistence.PersistentDataHolder { // Paper + + /** + * Get whether this raid started. +@@ -131,4 +131,20 @@ public interface Raid { + */ + STOPPED; + } ++ ++ // Paper start ++ /** ++ * Gets the id of this raid. ++ * ++ * @return the raid id ++ */ ++ int getId(); ++ ++ /** ++ * Get the boss bar to be displayed for this raid. ++ * ++ * @return the boss bar ++ */ ++ org.bukkit.boss.@NotNull BossBar getBossBar(); ++ // Paper end + } +diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java +index 35fb5047dd8a8521586a9ca9f8d70881355fb7f5..e6f66d70d024cf4f0536a5bf8e51bf7b306335df 100644 +--- a/src/main/java/org/bukkit/World.java ++++ b/src/main/java/org/bukkit/World.java +@@ -4199,6 +4199,17 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient + @Nullable + public Raid locateNearestRaid(@NotNull Location location, int radius); + ++ // Paper start - more Raid API ++ /** ++ * Get a raid with the specific id from {@link Raid#getId} ++ * from this world. ++ * ++ * @param id the id of the raid ++ * @return the raid or null if none with that id ++ */ ++ @Nullable Raid getRaid(int id); ++ // Paper end - more Raid API ++ + /** + * Gets all raids that are going on over this world. + * diff --git a/patches/server/1059-More-Raid-API.patch b/patches/server/1059-More-Raid-API.patch new file mode 100644 index 0000000000..b6ad0cb22a --- /dev/null +++ b/patches/server/1059-More-Raid-API.patch @@ -0,0 +1,106 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +Date: Fri, 4 Mar 2022 09:46:33 -0800 +Subject: [PATCH] More Raid API + +== AT == +public net.minecraft.world.entity.raid.Raid raidEvent + +diff --git a/src/main/java/net/minecraft/world/entity/raid/Raid.java b/src/main/java/net/minecraft/world/entity/raid/Raid.java +index c983214d9c396585255883b764195456885a08df..bf2c23fad919820512ce031cf28a000b249b2876 100644 +--- a/src/main/java/net/minecraft/world/entity/raid/Raid.java ++++ b/src/main/java/net/minecraft/world/entity/raid/Raid.java +@@ -106,6 +106,11 @@ public class Raid { + private Raid.RaidStatus status; + private int celebrationTicks; + private Optional waveSpawnPos; ++ // Paper start ++ private static final String PDC_NBT_KEY = "BukkitValues"; ++ private static final org.bukkit.craftbukkit.persistence.CraftPersistentDataTypeRegistry PDC_TYPE_REGISTRY = new org.bukkit.craftbukkit.persistence.CraftPersistentDataTypeRegistry(); ++ public final org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer persistentDataContainer = new org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer(PDC_TYPE_REGISTRY); ++ // Paper end + + public Raid(int id, ServerLevel world, BlockPos pos) { + this.raidEvent = new ServerBossEvent(Raid.RAID_NAME_COMPONENT, BossEvent.BossBarColor.RED, BossEvent.BossBarOverlay.NOTCHED_10); +@@ -149,6 +154,11 @@ public class Raid { + this.heroesOfTheVillage.add(NbtUtils.loadUUID(nbtbase)); + } + } ++ // Paper start ++ if (nbt.contains(PDC_NBT_KEY, net.minecraft.nbt.Tag.TAG_COMPOUND)) { ++ this.persistentDataContainer.putAll(nbt.getCompound(PDC_NBT_KEY)); ++ } ++ // Paper end + + } + +@@ -859,6 +869,11 @@ public class Raid { + } + + nbt.put("HeroesOfTheVillage", nbttaglist); ++ // Paper start ++ if (!this.persistentDataContainer.isEmpty()) { ++ nbt.put(PDC_NBT_KEY, this.persistentDataContainer.toTagCompound()); ++ } ++ // Paper end + return nbt; + } + +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRaid.java b/src/main/java/org/bukkit/craftbukkit/CraftRaid.java +index 9650859b40576ff1d03b77ab3594499e47eeaf6a..611fc24ee90644359010b8d2bfb90f9eb2a04675 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftRaid.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftRaid.java +@@ -103,4 +103,34 @@ public final class CraftRaid implements Raid { + public net.minecraft.world.entity.raid.Raid getHandle() { + return this.handle; + } ++ ++ // Paper start - more Raid API ++ @Override ++ public int getId() { ++ return this.handle.getId(); ++ } ++ ++ @Override ++ public org.bukkit.boss.BossBar getBossBar() { ++ return new org.bukkit.craftbukkit.boss.CraftBossBar(this.handle.raidEvent); ++ } ++ ++ @Override ++ public org.bukkit.persistence.PersistentDataContainer getPersistentDataContainer() { ++ return this.handle.persistentDataContainer; ++ } ++ ++ @Override ++ public boolean equals(final Object o) { ++ if (this == o) return true; ++ if (o == null || this.getClass() != o.getClass()) return false; ++ final org.bukkit.craftbukkit.CraftRaid craftRaid = (org.bukkit.craftbukkit.CraftRaid) o; ++ return this.handle.equals(craftRaid.handle); ++ } ++ ++ @Override ++ public int hashCode() { ++ return this.handle.hashCode(); ++ } ++ // Paper end - more Raid API + } +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +index 01797d9791f19dfda4b168218eadeaae97f11eab..00357d78182b3ff87e3d9a45705b072af56739c8 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +@@ -2397,6 +2397,14 @@ public class CraftWorld extends CraftRegionAccessor implements World { + return (raid == null) ? null : new CraftRaid(raid); + } + ++ // Paper start - more Raid API ++ @Override ++ public @Nullable Raid getRaid(final int id) { ++ final net.minecraft.world.entity.raid.@Nullable Raid nmsRaid = this.world.getRaids().raidMap.get(id); ++ return nmsRaid != null ? new CraftRaid(nmsRaid) : null; ++ } ++ // Paper end - more Raid API ++ + @Override + public List getRaids() { + Raids persistentRaid = this.world.getRaids();