SPIGOT-6033: Bukkit.getUnsafe().getMaterial() won't match renamed block materials
By: md_5 <git@md-5.net>
This commit is contained in:
@@ -33,6 +33,7 @@ import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.MojangsonParser;
|
||||
import net.minecraft.server.NBTBase;
|
||||
import net.minecraft.server.NBTTagCompound;
|
||||
import net.minecraft.server.NBTTagString;
|
||||
import net.minecraft.server.SavedFile;
|
||||
import net.minecraft.server.SharedConstants;
|
||||
import org.bukkit.Bukkit;
|
||||
@@ -169,6 +170,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
|
||||
|
||||
@Override
|
||||
public Material getMaterial(String material, int version) {
|
||||
Preconditions.checkArgument(material != null, "material == null");
|
||||
Preconditions.checkArgument(version <= this.getDataVersion(), "Newer version! Server downgrades are not supported!");
|
||||
|
||||
// Fastpath up to date materials
|
||||
@@ -176,13 +178,14 @@ public final class CraftMagicNumbers implements UnsafeValues {
|
||||
return Material.getMaterial(material);
|
||||
}
|
||||
|
||||
NBTTagCompound stack = new NBTTagCompound();
|
||||
stack.setString("id", "minecraft:" + material.toLowerCase(Locale.ROOT));
|
||||
Dynamic<NBTBase> name = new Dynamic<>(DynamicOpsNBT.a, NBTTagString.a("minecraft:" + material.toLowerCase(Locale.ROOT)));
|
||||
Dynamic<NBTBase> converted = DataConverterRegistry.a().update(DataConverterTypes.ITEM_NAME, name, version, this.getDataVersion());
|
||||
|
||||
Dynamic<NBTBase> converted = DataConverterRegistry.a().update(DataConverterTypes.ITEM_STACK, new Dynamic<>(DynamicOpsNBT.a, stack), version, this.getDataVersion());
|
||||
String newId = converted.get("id").asString("");
|
||||
if (name.equals(converted)) {
|
||||
converted = DataConverterRegistry.a().update(DataConverterTypes.BLOCK_NAME, name, version, this.getDataVersion());
|
||||
}
|
||||
|
||||
return Material.matchMaterial(newId);
|
||||
return Material.matchMaterial(converted.asString(""));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user