#1250: Standardize and centralize Bukkit / Minecraft registry conversion

By: DerFrZocker <derrieple@gmail.com>
This commit is contained in:
CraftBukkit/Spigot
2023-09-22 03:02:16 +10:00
parent 0b9699cc2e
commit 4248b8a4d8
47 changed files with 468 additions and 252 deletions

View File

@@ -0,0 +1,55 @@
package org.bukkit.craftbukkit.block;
import com.google.common.base.Preconditions;
import net.minecraft.core.Holder;
import net.minecraft.core.IRegistry;
import net.minecraft.core.registries.Registries;
import net.minecraft.world.level.biome.BiomeBase;
import org.bukkit.Registry;
import org.bukkit.block.Biome;
import org.bukkit.craftbukkit.CraftRegistry;
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
public class CraftBiome {
public static Biome minecraftToBukkit(BiomeBase minecraft) {
Preconditions.checkArgument(minecraft != null);
IRegistry<BiomeBase> registry = CraftRegistry.getMinecraftRegistry(Registries.BIOME);
Biome bukkit = Registry.BIOME.get(CraftNamespacedKey.fromMinecraft(registry.getResourceKey(minecraft).orElseThrow().location()));
if (bukkit == null) {
return Biome.CUSTOM;
}
return bukkit;
}
public static Biome minecraftHolderToBukkit(Holder<BiomeBase> minecraft) {
return minecraftToBukkit(minecraft.value());
}
public static BiomeBase bukkitToMinecraft(Biome bukkit) {
if (bukkit == null || bukkit == Biome.CUSTOM) {
return null;
}
return CraftRegistry.getMinecraftRegistry(Registries.BIOME)
.getOptional(CraftNamespacedKey.toMinecraft(bukkit.getKey())).orElseThrow();
}
public static Holder<BiomeBase> bukkitToMinecraftHolder(Biome bukkit) {
if (bukkit == null || bukkit == Biome.CUSTOM) {
return null;
}
IRegistry<BiomeBase> registry = CraftRegistry.getMinecraftRegistry(Registries.BIOME);
if (registry.wrapAsHolder(bukkitToMinecraft(bukkit)) instanceof Holder.c<BiomeBase> holder) {
return holder;
}
throw new IllegalArgumentException("No Reference holder found for " + bukkit
+ ", this can happen if a plugin creates its own biome base with out properly registering it.");
}
}

View File

@@ -8,10 +8,6 @@ import java.util.List;
import java.util.stream.Collectors;
import net.minecraft.core.BlockPosition;
import net.minecraft.core.EnumDirection;
import net.minecraft.core.Holder;
import net.minecraft.core.IRegistry;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.level.WorldServer;
import net.minecraft.world.EnumHand;
import net.minecraft.world.EnumInteractionResult;
@@ -21,7 +17,6 @@ import net.minecraft.world.item.context.ItemActionContext;
import net.minecraft.world.level.EnumSkyBlock;
import net.minecraft.world.level.GeneratorAccess;
import net.minecraft.world.level.RayTrace;
import net.minecraft.world.level.biome.BiomeBase;
import net.minecraft.world.level.block.BlockRedstoneWire;
import net.minecraft.world.level.block.BlockSapling;
import net.minecraft.world.level.block.Blocks;
@@ -36,7 +31,6 @@ import org.bukkit.Chunk;
import org.bukkit.FluidCollisionMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Registry;
import org.bukkit.TreeType;
import org.bukkit.World;
import org.bukkit.block.Biome;
@@ -53,7 +47,6 @@ import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.craftbukkit.util.CraftLocation;
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
import org.bukkit.craftbukkit.util.CraftRayTraceResult;
import org.bukkit.craftbukkit.util.CraftVoxelShape;
import org.bukkit.entity.Entity;
@@ -345,27 +338,6 @@ public class CraftBlock implements Block {
getWorld().setBiome(getX(), getY(), getZ(), bio);
}
public static Biome biomeBaseToBiome(IRegistry<BiomeBase> registry, Holder<BiomeBase> base) {
return biomeBaseToBiome(registry, base.value());
}
public static Biome biomeBaseToBiome(IRegistry<BiomeBase> registry, BiomeBase base) {
if (base == null) {
return null;
}
Biome biome = Registry.BIOME.get(CraftNamespacedKey.fromMinecraft(registry.getKey(base)));
return (biome == null) ? Biome.CUSTOM : biome;
}
public static Holder<BiomeBase> biomeToBiomeBase(IRegistry<BiomeBase> registry, Biome bio) {
if (bio == null || bio == Biome.CUSTOM) {
return null;
}
return registry.getHolderOrThrow(ResourceKey.create(Registries.BIOME, CraftNamespacedKey.toMinecraft(bio.getKey())));
}
@Override
public double getTemperature() {
return world.getBiome(position).value().getTemperature(position);

View File

@@ -9,6 +9,7 @@ import net.minecraft.world.level.MobSpawnerData;
import net.minecraft.world.level.block.entity.TileEntityMobSpawner;
import org.bukkit.World;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.entity.CraftEntityType;
import org.bukkit.entity.EntityType;
public class CraftCreatureSpawner extends CraftBlockEntityState<TileEntityMobSpawner> implements CreatureSpawner {
@@ -25,7 +26,7 @@ public class CraftCreatureSpawner extends CraftBlockEntityState<TileEntityMobSpa
}
Optional<EntityTypes<?>> type = EntityTypes.by(spawnData.getEntityToSpawn());
return type.map(entityTypes -> EntityType.fromName(EntityTypes.getKey(entityTypes).getPath())).orElse(null);
return type.map(CraftEntityType::minecraftToBukkit).orElse(null);
}
@Override
@@ -38,7 +39,7 @@ public class CraftCreatureSpawner extends CraftBlockEntityState<TileEntityMobSpa
Preconditions.checkArgument(entityType != EntityType.UNKNOWN, "Can't spawn EntityType %s from mob spawners!", entityType);
RandomSource rand = (this.isPlaced()) ? this.getWorldHandle().getRandom() : RandomSource.create();
this.getSnapshot().setEntityId(EntityTypes.byString(entityType.getName()).get(), rand);
this.getSnapshot().setEntityId(CraftEntityType.bukkitToMinecraft(entityType), rand);
}
@Override