Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * This file is part of Sponge, licensed under the MIT License (MIT).
- *
- * Copyright (c) SpongePowered <https://www.spongepowered.org>
- * Copyright (c) contributors
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
- package org.spongepowered.api.data.manipulator.immutable.common;
- import static com.google.common.base.Preconditions.checkArgument;
- import static com.google.common.base.Preconditions.checkNotNull;
- import org.spongepowered.api.CatalogType;
- import org.spongepowered.api.Sponge;
- import org.spongepowered.api.data.DataContainer;
- import org.spongepowered.api.data.key.Key;
- import org.spongepowered.api.data.manipulator.immutable.ImmutableVariantData;
- import org.spongepowered.api.data.manipulator.mutable.VariantData;
- import org.spongepowered.api.data.value.BaseValue;
- import org.spongepowered.api.data.value.immutable.ImmutableValue;
- import org.spongepowered.api.data.value.mutable.Value;
- import java.lang.reflect.Modifier;
- public abstract class AbstractImmutableSingleCatalogData<E extends CatalogType, I extends ImmutableVariantData<E, I, M>,
- M extends VariantData<E, M, I>> extends AbstractImmutableSingleData<E, I, M> implements ImmutableVariantData<E, I, M> {
- private final Class<? extends M> mutableClass;
- private final E defaultValue;
- private final ImmutableValue<E> immutableValue;
- public AbstractImmutableSingleCatalogData(Class<I> immutableClass, E value, E defaultValue, Key<? extends BaseValue<E>> usedKey, Class<? extends M> mutableClass) {
- super(immutableClass, value, usedKey);
- checkArgument(!Modifier.isAbstract(mutableClass.getModifiers()), "The immutable class cannot be abstract!");
- checkArgument(!Modifier.isInterface(mutableClass.getModifiers()), "The immutable class cannot be an interface!");
- this.mutableClass = checkNotNull(mutableClass);
- this.defaultValue = checkNotNull(defaultValue, "The default value was null! This is unacceptable! Maybe the value was not registered?");
- this.immutableValue = Sponge.getRegistry().getValueFactory().createValue((Key<Value<E>>) (Key) this.usedKey, this.defaultValue, this.value).asImmutable();
- }
- @Override
- public int compareTo(I o) {
- return o.get(this.usedKey).get().getId().compareToIgnoreCase(this.getValue().getId());
- }
- @Override
- protected ImmutableValue<E> getValueGetter() {
- return this.immutableValue;
- }
- @Override
- public M asMutable() {
- return ReflectionUtil.createInstance(this.mutableClass, this.getValue());
- }
- @Override
- public DataContainer toContainer() {
- return super.toContainer().set(this.usedKey.getQuery(), this.value.getId());
- }
- @Override
- public ImmutableValue<E> type() {
- return this.immutableValue;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement