mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-30 16:19:03 +01:00
#1060: Cache Material to BlockType and ItemType conversion
By: DerFrZocker <derrieple@gmail.com>
This commit is contained in:
parent
f73b5cbdb3
commit
3ea55de712
1 changed files with 21 additions and 10 deletions
|
@ -1,12 +1,14 @@
|
||||||
package org.bukkit;
|
package org.bukkit;
|
||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
|
import com.google.common.base.Suppliers;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import java.util.function.Supplier;
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.attribute.Attribute;
|
||||||
import org.bukkit.attribute.AttributeModifier;
|
import org.bukkit.attribute.AttributeModifier;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
@ -4620,6 +4622,8 @@ public enum Material implements Keyed, Translatable {
|
||||||
public final Class<?> data;
|
public final Class<?> data;
|
||||||
private final boolean legacy;
|
private final boolean legacy;
|
||||||
private final NamespacedKey key;
|
private final NamespacedKey key;
|
||||||
|
private final Supplier<ItemType> itemType;
|
||||||
|
private final Supplier<BlockType> blockType;
|
||||||
|
|
||||||
private Material(final int id) {
|
private Material(final int id) {
|
||||||
this(id, 64);
|
this(id, 64);
|
||||||
|
@ -4660,6 +4664,21 @@ public enum Material implements Keyed, Translatable {
|
||||||
} catch (SecurityException ex) {
|
} catch (SecurityException ex) {
|
||||||
throw new AssertionError(ex);
|
throw new AssertionError(ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.itemType = Suppliers.memoize(() -> {
|
||||||
|
Material material = this;
|
||||||
|
if (isLegacy()) {
|
||||||
|
material = Bukkit.getUnsafe().fromLegacy(new MaterialData(this), true);
|
||||||
|
}
|
||||||
|
return Registry.ITEM.get(material.key);
|
||||||
|
});
|
||||||
|
this.blockType = Suppliers.memoize(() -> {
|
||||||
|
Material material = this;
|
||||||
|
if (isLegacy()) {
|
||||||
|
material = Bukkit.getUnsafe().fromLegacy(new MaterialData(this), false);
|
||||||
|
}
|
||||||
|
return Registry.BLOCK.get(material.key);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -5496,11 +5515,7 @@ public enum Material implements Keyed, Translatable {
|
||||||
@ApiStatus.Internal
|
@ApiStatus.Internal
|
||||||
@Nullable
|
@Nullable
|
||||||
public ItemType asItemType() {
|
public ItemType asItemType() {
|
||||||
Material material = this;
|
return itemType.get();
|
||||||
if (isLegacy()) {
|
|
||||||
material = Bukkit.getUnsafe().fromLegacy(this);
|
|
||||||
}
|
|
||||||
return Registry.ITEM.get(material.key);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -5512,10 +5527,6 @@ public enum Material implements Keyed, Translatable {
|
||||||
@ApiStatus.Internal
|
@ApiStatus.Internal
|
||||||
@Nullable
|
@Nullable
|
||||||
public BlockType asBlockType() {
|
public BlockType asBlockType() {
|
||||||
Material material = this;
|
return blockType.get();
|
||||||
if (isLegacy()) {
|
|
||||||
material = Bukkit.getUnsafe().fromLegacy(this);
|
|
||||||
}
|
|
||||||
return Registry.BLOCK.get(material.key);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue