Paper/patches/server/0608-Added-Vanilla-Entity-Tags.patch
Shane Freeder 3aae7ef01a
Updated Upstream (Bukkit/CraftBukkit)
Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
214b9f14 SPIGOT-6605: Add method to access value of enforce-whitelist

CraftBukkit Changes:
b121d3b9 SPIGOT-6605: Add method to access value of enforce-whitelist
2021-06-29 01:31:35 +01:00

94 lines
5.0 KiB
Diff

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] Added Vanilla Entity Tags
diff --git a/src/main/java/io/papermc/paper/CraftEntityTag.java b/src/main/java/io/papermc/paper/CraftEntityTag.java
new file mode 100644
index 0000000000000000000000000000000000000000..6271586368c65250c887739d04c5fccf95fdb2d8
--- /dev/null
+++ b/src/main/java/io/papermc/paper/CraftEntityTag.java
@@ -0,0 +1,28 @@
+package io.papermc.paper;
+
+import org.bukkit.craftbukkit.tag.CraftTag;
+import org.bukkit.craftbukkit.util.CraftMagicNumbers;
+import org.bukkit.entity.EntityType;
+
+import java.util.Collections;
+import java.util.Set;
+import java.util.stream.Collectors;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.tags.TagCollection;
+
+public class CraftEntityTag extends CraftTag<net.minecraft.world.entity.EntityType<?>, EntityType> {
+
+ public CraftEntityTag(TagCollection<net.minecraft.world.entity.EntityType<?>> registry, ResourceLocation tag) {
+ super(registry, tag);
+ }
+
+ @Override
+ public boolean isTagged(EntityType item) {
+ return getHandle().contains(CraftMagicNumbers.getEntityTypes(item));
+ }
+
+ @Override
+ public Set<EntityType> getValues() {
+ return Collections.unmodifiableSet(getHandle().getValues().stream().map(CraftMagicNumbers::getEntityType).collect(Collectors.toSet()));
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 6d6ac063c78768fe8cc30e47b69795a740772e5e..52a13a702043a4cc97d650056ac8faae7bbe2afa 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -2227,6 +2227,11 @@ public final class CraftServer implements Server {
Preconditions.checkArgument(clazz == org.bukkit.Fluid.class, "Fluid namespace must have fluid type");
return (org.bukkit.Tag<T>) new CraftFluidTag(FluidTags.getAllTags(), key);
+ // Paper start
+ case org.bukkit.Tag.REGISTRY_ENTITIES:
+ Preconditions.checkArgument(clazz == org.bukkit.entity.EntityType.class, "Entity namespace must have entitytype type");
+ return (org.bukkit.Tag<T>) new io.papermc.paper.CraftEntityTag(net.minecraft.tags.EntityTypeTags.getAllTags(), key);
+ // Paper end
default:
throw new IllegalArgumentException();
}
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
index 9cbe97686394a5c4ae7b401d846b1a3525602d46..75240802d17ff6b032c8708700cb2407cca3e56f 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
@@ -116,8 +116,17 @@ public final class CraftMagicNumbers implements UnsafeValues {
private static final Map<Material, Item> MATERIAL_ITEM = new HashMap<>();
private static final Map<Material, Block> MATERIAL_BLOCK = new HashMap<>();
private static final Map<Material, net.minecraft.world.level.material.Fluid> MATERIAL_FLUID = new HashMap<>();
+ // Paper start
+ private static final Map<org.bukkit.entity.EntityType, net.minecraft.world.entity.EntityType<?>> ENTITY_TYPE_ENTITY_TYPES = new HashMap<>();
+ private static final Map<net.minecraft.world.entity.EntityType<?>, org.bukkit.entity.EntityType> ENTITY_TYPES_ENTITY_TYPE = new HashMap<>();
static {
+ for (org.bukkit.entity.EntityType type : org.bukkit.entity.EntityType.values()) {
+ if (type == org.bukkit.entity.EntityType.UNKNOWN) continue;
+ ENTITY_TYPE_ENTITY_TYPES.put(type, net.minecraft.core.Registry.ENTITY_TYPE.get(CraftNamespacedKey.toMinecraft(type.getKey())));
+ ENTITY_TYPES_ENTITY_TYPE.put(net.minecraft.core.Registry.ENTITY_TYPE.get(CraftNamespacedKey.toMinecraft(type.getKey())), type);
+ }
+ // Paper end
for (Block block : net.minecraft.core.Registry.BLOCK) {
BLOCK_MATERIAL.put(block, Material.getMaterial(net.minecraft.core.Registry.BLOCK.getKey(block).getPath().toUpperCase(Locale.ROOT)));
}
@@ -183,6 +192,14 @@ public final class CraftMagicNumbers implements UnsafeValues {
public static ResourceLocation key(Material mat) {
return CraftNamespacedKey.toMinecraft(mat.getKey());
}
+ // Paper start
+ public static net.minecraft.world.entity.EntityType<?> getEntityTypes(org.bukkit.entity.EntityType type) {
+ return ENTITY_TYPE_ENTITY_TYPES.get(type);
+ }
+ public static org.bukkit.entity.EntityType getEntityType(net.minecraft.world.entity.EntityType<?> entityTypes) {
+ return ENTITY_TYPES_ENTITY_TYPE.get(entityTypes);
+ }
+ // Paper end
// ========================================================================
// Paper start
@Override