Attempt at fixing NamespacedRegistry

This commit is contained in:
MattBDev
2019-08-19 14:12:28 -04:00
parent 45f947a3b2
commit 1eec4884c8
4 changed files with 33 additions and 12 deletions

View File

@ -29,7 +29,7 @@ import java.util.List;
import java.util.Set;
import javax.annotation.Nullable;
public final class NamespacedRegistry<V extends RegistryItem & Keyed> extends Registry<V> {
public final class NamespacedRegistry<V extends Keyed> extends Registry<V> {
private static final String MINECRAFT_NAMESPACE = "minecraft";
private final Set<String> knownNamespaces = new HashSet<>();
private final String defaultNamespace;
@ -60,7 +60,9 @@ public final class NamespacedRegistry<V extends RegistryItem & Keyed> extends Re
if (existing != null) {
throw new UnsupportedOperationException("Replacing existing registrations is not supported");
}
value.setInternalId(lastInternalId++);
if (value instanceof RegistryItem) {
((RegistryItem)value).setInternalId(lastInternalId++);
}
values.add(value);
super.register(key, value);
if (key.startsWith(defaultNamespace)) {
@ -78,7 +80,10 @@ public final class NamespacedRegistry<V extends RegistryItem & Keyed> extends Re
}
public int getInternalId(V value) {
return value.getInternalId();
if (value instanceof RegistryItem) {
return ((RegistryItem)value).getInternalId();
}
return 0;
}
public int size() {

View File

@ -29,6 +29,7 @@ import com.sk89q.worldedit.function.mask.SingleBlockTypeMask;
import com.sk89q.worldedit.function.pattern.FawePattern;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.registry.Keyed;
import com.sk89q.worldedit.registry.NamespacedRegistry;
import com.sk89q.worldedit.registry.state.AbstractProperty;
import com.sk89q.worldedit.registry.state.Property;
import com.sk89q.worldedit.registry.state.PropertyKey;
@ -36,15 +37,20 @@ import com.sk89q.worldedit.world.item.ItemType;
import com.sk89q.worldedit.world.item.ItemTypes;
import com.sk89q.worldedit.world.registry.BlockMaterial;
import com.sk89q.worldedit.world.registry.LegacyMapper;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import javax.annotation.Nullable;
public class BlockType implements FawePattern, Keyed {
public static final NamespacedRegistry<BlockType> REGISTRY = new NamespacedRegistry<>("block type");
private final String id;
private final BlockTypes.Settings settings;

View File

@ -954,15 +954,14 @@ public final class BlockTypes {
try {
Field field = BlockTypes.class.getDeclaredField(enumName);
ReflectionUtils.setFailsafeFieldValue(field, null, existing);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
// register states
if (typeName.startsWith("minecraft:")) $REGISTRY.put(typeName.substring(10), existing);
$REGISTRY.put(typeName, existing);
BlockType.REGISTRY.register(typeName,existing);
String nameSpace = typeName.substring(0, typeName.indexOf(':'));
$NAMESPACES.add(nameSpace);
return existing;