Paper/patches/server/0763-Add-GameEvent-tags.patch

82 lines
4.4 KiB
Diff
Raw Normal View History

2022-03-01 06:43:03 +01:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Sun, 3 Jan 2021 20:03:35 -0800
Subject: [PATCH] Add GameEvent tags
diff --git a/src/main/java/io/papermc/paper/CraftGameEventTag.java b/src/main/java/io/papermc/paper/CraftGameEventTag.java
new file mode 100644
2022-12-08 05:24:59 +01:00
index 0000000000000000000000000000000000000000..e7d9fd2702a1ce96596580fff8f5ee4fd3d22b5b
2022-03-01 06:43:03 +01:00
--- /dev/null
+++ b/src/main/java/io/papermc/paper/CraftGameEventTag.java
2022-12-08 05:24:59 +01:00
@@ -0,0 +1,35 @@
2022-03-01 06:43:03 +01:00
+package io.papermc.paper;
+
2022-12-08 05:24:59 +01:00
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.core.registries.Registries;
2022-03-01 06:43:03 +01:00
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.tags.TagKey;
+import org.bukkit.GameEvent;
+import org.bukkit.craftbukkit.tag.CraftTag;
+import org.bukkit.craftbukkit.util.CraftNamespacedKey;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.Map;
2022-03-01 06:43:03 +01:00
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+public class CraftGameEventTag extends CraftTag<net.minecraft.world.level.gameevent.GameEvent, GameEvent> {
+
+ public CraftGameEventTag(net.minecraft.core.Registry<net.minecraft.world.level.gameevent.GameEvent> registry, TagKey<net.minecraft.world.level.gameevent.GameEvent> tag) {
+ super(registry, tag);
+ }
+
+ private static final Map<GameEvent, ResourceKey<net.minecraft.world.level.gameevent.GameEvent>> KEY_CACHE = Collections.synchronizedMap(new IdentityHashMap<>());
2022-03-01 06:43:03 +01:00
+ @Override
+ public boolean isTagged(@NotNull GameEvent gameEvent) {
2022-12-08 05:24:59 +01:00
+ return registry.getHolderOrThrow(KEY_CACHE.computeIfAbsent(gameEvent, event -> ResourceKey.create(Registries.GAME_EVENT, CraftNamespacedKey.toMinecraft(event.getKey())))).is(tag);
2022-03-01 06:43:03 +01:00
+ }
+
+ @Override
+ public @NotNull Set<GameEvent> getValues() {
2022-12-08 05:24:59 +01:00
+ return getHandle().stream().map((nms) -> Objects.requireNonNull(GameEvent.getByKey(CraftNamespacedKey.fromMinecraft(BuiltInRegistries.GAME_EVENT.getKey(nms.value()))), nms + " is not a recognized game event")).collect(Collectors.toUnmodifiableSet());
2022-03-01 06:43:03 +01:00
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 93b101b8435fed77950e508901f380e20f943b74..2fd1d5c15a5231b0f889832ff1c57156ef46816d 100644
2022-03-01 06:43:03 +01:00
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -2613,6 +2613,15 @@ public final class CraftServer implements Server {
2022-12-07 22:35:34 +01:00
return (org.bukkit.Tag<T>) new CraftEntityTag(BuiltInRegistries.ENTITY_TYPE, entityTagKey);
}
}
2022-03-01 06:43:03 +01:00
+ // Paper start
+ case org.bukkit.Tag.REGISTRY_GAME_EVENTS -> {
2022-03-01 06:43:03 +01:00
+ Preconditions.checkArgument(clazz == org.bukkit.GameEvent.class, "Game Event namespace must have GameEvent type");
2022-12-08 00:49:41 +01:00
+ TagKey<net.minecraft.world.level.gameevent.GameEvent> gameEventTagKey = TagKey.create(net.minecraft.core.registries.Registries.GAME_EVENT, key);
+ if (net.minecraft.core.registries.BuiltInRegistries.GAME_EVENT.getTag(gameEventTagKey).isPresent()) {
+ return (org.bukkit.Tag<T>) new io.papermc.paper.CraftGameEventTag(net.minecraft.core.registries.BuiltInRegistries.GAME_EVENT, gameEventTagKey);
+ }
+ }
2022-03-01 06:43:03 +01:00
+ // Paper end
default -> throw new IllegalArgumentException();
2022-03-01 06:43:03 +01:00
}
@@ -2645,6 +2654,13 @@ public final class CraftServer implements Server {
2022-12-07 22:35:34 +01:00
net.minecraft.core.Registry<EntityType<?>> entityTags = BuiltInRegistries.ENTITY_TYPE;
2022-03-01 06:43:03 +01:00
return entityTags.getTags().map(pair -> (org.bukkit.Tag<T>) new CraftEntityTag(entityTags, pair.getFirst())).collect(ImmutableList.toImmutableList());
}
2022-03-01 06:43:03 +01:00
+ // Paper start
+ case org.bukkit.Tag.REGISTRY_GAME_EVENTS -> {
2022-03-01 06:43:03 +01:00
+ Preconditions.checkArgument(clazz == org.bukkit.GameEvent.class);
2022-12-08 00:49:41 +01:00
+ net.minecraft.core.Registry<net.minecraft.world.level.gameevent.GameEvent> gameEvents = net.minecraft.core.registries.BuiltInRegistries.GAME_EVENT;
2022-03-01 06:43:03 +01:00
+ return gameEvents.getTags().map(pair -> (org.bukkit.Tag<T>) new io.papermc.paper.CraftGameEventTag(gameEvents, pair.getFirst())).collect(ImmutableList.toImmutableList());
+ // Paper end
+ }
default -> throw new IllegalArgumentException();
2022-03-01 06:43:03 +01:00
}
}