geforkt von Mirrors/FastAsyncWorldEdit
Make registries Keyed.
Dieser Commit ist enthalten in:
Ursprung
5781b4cd76
Commit
5e81dd1c4c
@ -20,6 +20,7 @@
|
||||
package com.sk89q.worldedit.command.argument;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.sk89q.worldedit.registry.Keyed;
|
||||
import com.sk89q.worldedit.registry.Registry;
|
||||
import com.sk89q.worldedit.util.formatting.text.Component;
|
||||
import com.sk89q.worldedit.util.formatting.text.TextComponent;
|
||||
@ -46,7 +47,7 @@ import java.util.List;
|
||||
|
||||
import static org.enginehub.piston.converter.SuggestionHelper.limitByPrefix;
|
||||
|
||||
public class RegistryConverter<V> implements ArgumentConverter<V> {
|
||||
public final class RegistryConverter<V extends Keyed> implements ArgumentConverter<V> {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static void register(CommandManager commandManager) {
|
||||
@ -62,18 +63,18 @@ public class RegistryConverter<V> implements ArgumentConverter<V> {
|
||||
GameMode.class,
|
||||
WeatherType.class
|
||||
).stream()
|
||||
.map(c -> (Class<Object>) c)
|
||||
.map(c -> (Class<Keyed>) c)
|
||||
.forEach(registryType ->
|
||||
commandManager.registerConverter(Key.of(registryType), from(registryType))
|
||||
);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static <V> RegistryConverter<V> from(Class<V> registryType) {
|
||||
private static <V extends Keyed> RegistryConverter<V> from(Class<Keyed> registryType) {
|
||||
try {
|
||||
Field registryField = registryType.getDeclaredField("REGISTRY");
|
||||
Registry<V> registry = (Registry<V>) registryField.get(null);
|
||||
return new RegistryConverter<>(registryType, registry);
|
||||
return new RegistryConverter<>(registry);
|
||||
} catch (NoSuchFieldException e) {
|
||||
throw new IllegalArgumentException("Not a registry-backed type: " + registryType.getName());
|
||||
} catch (IllegalAccessException e) {
|
||||
@ -84,7 +85,7 @@ public class RegistryConverter<V> implements ArgumentConverter<V> {
|
||||
private final Registry<V> registry;
|
||||
private final TextComponent choices;
|
||||
|
||||
private RegistryConverter(Class<V> clazz, Registry<V> registry) {
|
||||
private RegistryConverter(Registry<V> registry) {
|
||||
this.registry = registry;
|
||||
this.choices = TextComponent.of("any " + registry.getName());
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ package com.sk89q.worldedit.registry;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public abstract class Category<T> {
|
||||
public abstract class Category<T extends Keyed> {
|
||||
private final Set<T> set = new HashSet<>();
|
||||
protected final String id;
|
||||
private boolean empty = true;
|
||||
|
32
worldedit-core/src/main/java/com/sk89q/worldedit/registry/Keyed.java
Normale Datei
32
worldedit-core/src/main/java/com/sk89q/worldedit/registry/Keyed.java
Normale Datei
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* WorldEdit, a Minecraft world manipulation toolkit
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldEdit team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
package com.sk89q.worldedit.registry;
|
||||
|
||||
/**
|
||||
* Represents an objects that can be added to a registry and referenced by an id which is unique within its registry.
|
||||
*/
|
||||
public interface Keyed {
|
||||
/**
|
||||
* The id of this object in the registry. Must be unique, and lowercase. Certain registries (e.g Namespaced ones) may have additional restrictions.
|
||||
* @return an id
|
||||
*/
|
||||
String getId();
|
||||
}
|
@ -24,7 +24,7 @@ import static java.util.Objects.requireNonNull;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public final class NamespacedRegistry<V> extends Registry<V> {
|
||||
public final class NamespacedRegistry<V extends Keyed> extends Registry<V> {
|
||||
private static final String MINECRAFT_NAMESPACE = "minecraft";
|
||||
private final String defaultNamespace;
|
||||
|
||||
@ -37,10 +37,13 @@ public final class NamespacedRegistry<V> extends Registry<V> {
|
||||
this.defaultNamespace = defaultNamespace;
|
||||
}
|
||||
|
||||
public @Nullable V get(final String key) {
|
||||
@Nullable
|
||||
@Override
|
||||
public V get(final String key) {
|
||||
return super.get(this.orDefaultNamespace(key));
|
||||
}
|
||||
|
||||
@Override
|
||||
public V register(final String key, final V value) {
|
||||
requireNonNull(key, "key");
|
||||
checkState(key.indexOf(':') > -1, "key is not namespaced");
|
||||
|
@ -32,7 +32,7 @@ import java.util.Set;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class Registry<V> implements Iterable<V> {
|
||||
public class Registry<V extends Keyed> implements Iterable<V> {
|
||||
private final Map<String, V> map = new HashMap<>();
|
||||
private final String name;
|
||||
|
||||
@ -44,7 +44,8 @@ public class Registry<V> implements Iterable<V> {
|
||||
return name;
|
||||
}
|
||||
|
||||
public @Nullable V get(final String key) {
|
||||
@Nullable
|
||||
public V get(final String key) {
|
||||
checkState(key.equals(key.toLowerCase(Locale.ROOT)), "key must be lowercase");
|
||||
return this.map.get(key);
|
||||
}
|
||||
|
@ -34,6 +34,7 @@ public abstract class PaginationBox extends MessageBox {
|
||||
|
||||
private String pageCommand;
|
||||
private int componentsPerPage = IDEAL_ROWS_FOR_PLAYER;
|
||||
private int currentPage = -1;
|
||||
|
||||
/**
|
||||
* Creates a Paginated component
|
||||
@ -57,6 +58,10 @@ public abstract class PaginationBox extends MessageBox {
|
||||
this.componentsPerPage = 20;
|
||||
}
|
||||
|
||||
protected final int getCurrentPage() {
|
||||
return currentPage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a Paginated component
|
||||
*
|
||||
@ -80,6 +85,7 @@ public abstract class PaginationBox extends MessageBox {
|
||||
if (page < 1 || page > pageCount) {
|
||||
throw new InvalidComponentException("Invalid page number.");
|
||||
}
|
||||
currentPage = page;
|
||||
final int lastComp = Math.min(page * componentsPerPage, getComponentsSize());
|
||||
for (int i = (page - 1) * componentsPerPage; i < lastComp; i++) {
|
||||
getContents().append(getComponent(i));
|
||||
|
@ -19,12 +19,13 @@
|
||||
|
||||
package com.sk89q.worldedit.world.biome;
|
||||
|
||||
import com.sk89q.worldedit.registry.Keyed;
|
||||
import com.sk89q.worldedit.registry.NamespacedRegistry;
|
||||
|
||||
/**
|
||||
* All the types of biomes in the game.
|
||||
*/
|
||||
public class BiomeType {
|
||||
public class BiomeType implements Keyed {
|
||||
|
||||
public static final NamespacedRegistry<BiomeType> REGISTRY = new NamespacedRegistry<>("biome type");
|
||||
|
||||
@ -39,6 +40,7 @@ public class BiomeType {
|
||||
*
|
||||
* @return The id
|
||||
*/
|
||||
@Override
|
||||
public String getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ package com.sk89q.worldedit.world.block;
|
||||
import com.sk89q.worldedit.WorldEdit;
|
||||
import com.sk89q.worldedit.extension.platform.Capability;
|
||||
import com.sk89q.worldedit.registry.Category;
|
||||
import com.sk89q.worldedit.registry.Keyed;
|
||||
import com.sk89q.worldedit.registry.NamespacedRegistry;
|
||||
|
||||
import java.util.Set;
|
||||
@ -30,7 +31,7 @@ import java.util.Set;
|
||||
* A category of blocks. This is due to the splitting up of
|
||||
* blocks such as wool into separate ids.
|
||||
*/
|
||||
public class BlockCategory extends Category<BlockType> {
|
||||
public class BlockCategory extends Category<BlockType> implements Keyed {
|
||||
|
||||
public static final NamespacedRegistry<BlockCategory> REGISTRY = new NamespacedRegistry<>("block tag");
|
||||
|
||||
|
@ -25,6 +25,7 @@ import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.sk89q.worldedit.WorldEdit;
|
||||
import com.sk89q.worldedit.extension.platform.Capability;
|
||||
import com.sk89q.worldedit.registry.Keyed;
|
||||
import com.sk89q.worldedit.registry.NamespacedRegistry;
|
||||
import com.sk89q.worldedit.registry.state.Property;
|
||||
import com.sk89q.worldedit.world.item.ItemType;
|
||||
@ -41,7 +42,7 @@ import java.util.function.Supplier;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class BlockType {
|
||||
public class BlockType implements Keyed {
|
||||
|
||||
public static final NamespacedRegistry<BlockType> REGISTRY = new NamespacedRegistry<>("block type");
|
||||
|
||||
@ -91,6 +92,7 @@ public class BlockType {
|
||||
*
|
||||
* @return The id
|
||||
*/
|
||||
@Override
|
||||
public String getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
@ -19,9 +19,10 @@
|
||||
|
||||
package com.sk89q.worldedit.world.entity;
|
||||
|
||||
import com.sk89q.worldedit.registry.Keyed;
|
||||
import com.sk89q.worldedit.registry.NamespacedRegistry;
|
||||
|
||||
public class EntityType {
|
||||
public class EntityType implements Keyed {
|
||||
|
||||
public static final NamespacedRegistry<EntityType> REGISTRY = new NamespacedRegistry<>("entity type");
|
||||
|
||||
@ -35,6 +36,7 @@ public class EntityType {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
package com.sk89q.worldedit.world.fluid;
|
||||
|
||||
import com.sk89q.worldedit.registry.Category;
|
||||
import com.sk89q.worldedit.registry.Keyed;
|
||||
import com.sk89q.worldedit.registry.NamespacedRegistry;
|
||||
|
||||
import java.util.Collections;
|
||||
@ -29,7 +30,7 @@ import java.util.Set;
|
||||
* A category of fluids. This is due to the splitting up of
|
||||
* blocks such as wool into separate ids.
|
||||
*/
|
||||
public class FluidCategory extends Category<FluidType> {
|
||||
public class FluidCategory extends Category<FluidType> implements Keyed {
|
||||
|
||||
public static final NamespacedRegistry<FluidCategory> REGISTRY = new NamespacedRegistry<>("fluid tag");
|
||||
|
||||
|
@ -19,13 +19,14 @@
|
||||
|
||||
package com.sk89q.worldedit.world.fluid;
|
||||
|
||||
import com.sk89q.worldedit.registry.Keyed;
|
||||
import com.sk89q.worldedit.registry.NamespacedRegistry;
|
||||
|
||||
/**
|
||||
* Minecraft now has a 'fluid' system. This is a
|
||||
* stub class to represent what it may be in the future.
|
||||
*/
|
||||
public class FluidType {
|
||||
public class FluidType implements Keyed {
|
||||
|
||||
public static final NamespacedRegistry<FluidType> REGISTRY = new NamespacedRegistry<>("fluid type");
|
||||
|
||||
@ -40,6 +41,7 @@ public class FluidType {
|
||||
*
|
||||
* @return The id
|
||||
*/
|
||||
@Override
|
||||
public String getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
@ -19,9 +19,10 @@
|
||||
|
||||
package com.sk89q.worldedit.world.gamemode;
|
||||
|
||||
import com.sk89q.worldedit.registry.Keyed;
|
||||
import com.sk89q.worldedit.registry.Registry;
|
||||
|
||||
public class GameMode {
|
||||
public class GameMode implements Keyed {
|
||||
|
||||
public static final Registry<GameMode> REGISTRY = new Registry<>("game mode");
|
||||
|
||||
@ -31,6 +32,7 @@ public class GameMode {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
@ -23,7 +23,6 @@ import javax.annotation.Nullable;
|
||||
|
||||
public class GameModes {
|
||||
|
||||
public static final GameMode NOT_SET = register("");
|
||||
public static final GameMode SURVIVAL = register("survival");
|
||||
public static final GameMode CREATIVE = register("creative");
|
||||
public static final GameMode ADVENTURE = register("adventure");
|
||||
@ -40,7 +39,8 @@ public class GameModes {
|
||||
return GameMode.REGISTRY.register(gameMode.getId(), gameMode);
|
||||
}
|
||||
|
||||
public static @Nullable GameMode get(final String id) {
|
||||
@Nullable
|
||||
public static GameMode get(final String id) {
|
||||
return GameMode.REGISTRY.get(id);
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,7 @@ import com.sk89q.worldedit.WorldEdit;
|
||||
import com.sk89q.worldedit.blocks.BaseItem;
|
||||
import com.sk89q.worldedit.extension.platform.Capability;
|
||||
import com.sk89q.worldedit.registry.Category;
|
||||
import com.sk89q.worldedit.registry.Keyed;
|
||||
import com.sk89q.worldedit.registry.NamespacedRegistry;
|
||||
|
||||
import java.util.Set;
|
||||
@ -31,7 +32,7 @@ import java.util.Set;
|
||||
* A category of items. This is due to the splitting up of
|
||||
* items such as wool into separate ids.
|
||||
*/
|
||||
public class ItemCategory extends Category<ItemType> {
|
||||
public class ItemCategory extends Category<ItemType> implements Keyed {
|
||||
|
||||
public static final NamespacedRegistry<ItemCategory> REGISTRY = new NamespacedRegistry<>("item tag");
|
||||
|
||||
|
@ -21,13 +21,14 @@ package com.sk89q.worldedit.world.item;
|
||||
|
||||
import com.sk89q.worldedit.WorldEdit;
|
||||
import com.sk89q.worldedit.extension.platform.Capability;
|
||||
import com.sk89q.worldedit.registry.Keyed;
|
||||
import com.sk89q.worldedit.registry.NamespacedRegistry;
|
||||
import com.sk89q.worldedit.world.block.BlockType;
|
||||
import com.sk89q.worldedit.world.block.BlockTypes;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class ItemType {
|
||||
public class ItemType implements Keyed {
|
||||
|
||||
public static final NamespacedRegistry<ItemType> REGISTRY = new NamespacedRegistry<>("item type");
|
||||
|
||||
@ -41,6 +42,7 @@ public class ItemType {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
@ -20,13 +20,14 @@
|
||||
package com.sk89q.worldedit.world.registry;
|
||||
|
||||
import com.sk89q.worldedit.registry.Category;
|
||||
import com.sk89q.worldedit.registry.Keyed;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* A registry of categories. Minecraft internally calls these 'Tags'.
|
||||
*/
|
||||
public interface CategoryRegistry<T> {
|
||||
public interface CategoryRegistry<T extends Keyed> {
|
||||
|
||||
/**
|
||||
* Gets a set of values with a given category.
|
||||
|
@ -19,9 +19,10 @@
|
||||
|
||||
package com.sk89q.worldedit.world.weather;
|
||||
|
||||
import com.sk89q.worldedit.registry.Keyed;
|
||||
import com.sk89q.worldedit.registry.Registry;
|
||||
|
||||
public class WeatherType {
|
||||
public class WeatherType implements Keyed {
|
||||
|
||||
public static final Registry<WeatherType> REGISTRY = new Registry<>("weather type");
|
||||
|
||||
@ -31,6 +32,7 @@ public class WeatherType {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren