Search in sources :

Example 6 with Value

use of org.spongepowered.api.data.value.Value in project SpongeCommon by SpongePowered.

the class SpongeKeyBuilder method build0.

@Override
public Key<V> build0() {
    Objects.requireNonNull(this.valueType, "The value type must be set");
    Objects.requireNonNull(this.elementType, "The element type must be set");
    BiPredicate<? super E, ? super E> includesTester = this.includesTester;
    if (includesTester == null) {
        includesTester = (e, e2) -> false;
    }
    Comparator<? super E> comparator = this.comparator;
    if (comparator == null) {
        if (Comparable.class.isAssignableFrom(GenericTypeReflector.erase(this.elementType))) {
            // noinspection unchecked
            comparator = Comparator.comparing(o -> ((Comparable) o));
        } else {
            comparator = (o1, o2) -> {
                if (o1.equals(o2))
                    return 0;
                // There could be collisions, but yeah, what can you do about that..
                if (o1.hashCode() > o2.hashCode())
                    return 1;
                return -1;
            };
        }
    }
    Supplier<E> defaultValueSupplier = () -> null;
    final Class<?> rawType = GenericTypeReflector.erase(this.valueType);
    if (ListValue.class.isAssignableFrom(rawType)) {
        defaultValueSupplier = () -> (E) new ArrayList();
    } else if (SetValue.class.isAssignableFrom(rawType)) {
        defaultValueSupplier = () -> (E) new HashSet();
    } else if (WeightedCollectionValue.class.isAssignableFrom(rawType)) {
        defaultValueSupplier = () -> (E) new WeightedTable();
    } else if (MapValue.class.isAssignableFrom(rawType)) {
        defaultValueSupplier = () -> (E) new HashMap<>();
    }
    final SpongeKey<Value<E>, E> key = new SpongeKey<>(this.key, this.valueType, this.elementType, comparator, includesTester, defaultValueSupplier);
    KeyProvider.INSTANCE.register(this.key, (Key<Value<?>>) (Object) key);
    return (Key<V>) key;
}
Also used : KeyProvider(org.spongepowered.common.registry.provider.KeyProvider) HashMap(java.util.HashMap) Supplier(java.util.function.Supplier) Value(org.spongepowered.api.data.value.Value) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) BiPredicate(java.util.function.BiPredicate) WeightedCollectionValue(org.spongepowered.api.data.value.WeightedCollectionValue) AbstractResourceKeyedBuilder(org.spongepowered.common.util.AbstractResourceKeyedBuilder) Map(java.util.Map) Nullable(org.checkerframework.checker.nullness.qual.Nullable) TypeFactory(io.leangen.geantyref.TypeFactory) ListValue(org.spongepowered.api.data.value.ListValue) Set(java.util.Set) TypeToken(io.leangen.geantyref.TypeToken) SetValue(org.spongepowered.api.data.value.SetValue) Key(org.spongepowered.api.data.Key) Objects(java.util.Objects) List(java.util.List) ParameterizedType(java.lang.reflect.ParameterizedType) Type(java.lang.reflect.Type) WeightedTable(org.spongepowered.api.util.weighted.WeightedTable) Preconditions(com.google.common.base.Preconditions) GenericTypeReflector(io.leangen.geantyref.GenericTypeReflector) MapValue(org.spongepowered.api.data.value.MapValue) Comparator(java.util.Comparator) WeightedTable(org.spongepowered.api.util.weighted.WeightedTable) ArrayList(java.util.ArrayList) MapValue(org.spongepowered.api.data.value.MapValue) Value(org.spongepowered.api.data.value.Value) WeightedCollectionValue(org.spongepowered.api.data.value.WeightedCollectionValue) ListValue(org.spongepowered.api.data.value.ListValue) SetValue(org.spongepowered.api.data.value.SetValue) MapValue(org.spongepowered.api.data.value.MapValue) SetValue(org.spongepowered.api.data.value.SetValue) Key(org.spongepowered.api.data.Key) HashSet(java.util.HashSet)

Example 7 with Value

use of org.spongepowered.api.data.value.Value in project SpongeCommon by SpongePowered.

the class EmptyMapItemMixin method impl$createMapWithSpongeData.

@Redirect(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/MapItem;create(Lnet/minecraft/world/level/Level;IIBZZ)Lnet/minecraft/world/item/ItemStack;"))
private ItemStack impl$createMapWithSpongeData(final Level level, final int x, final int y, final byte scale, final boolean trackingPosition, final boolean unlimitedTracking, final Level level2, final net.minecraft.world.entity.player.Player playerIn, final InteractionHand usedHand) {
    if (level.isClientSide()) {
        // ignore on client
        return MapItem.create(level, x, y, scale, trackingPosition, unlimitedTracking);
    }
    final Player player = (Player) playerIn;
    try (final CauseStackManager.StackFrame frame = PhaseTracker.getCauseStackManager().pushCauseFrame()) {
        frame.addContext(EventContextKeys.PLAYER, player);
        final HandType handType = (HandType) (Object) usedHand;
        frame.addContext(EventContextKeys.USED_HAND, handType);
        frame.addContext(EventContextKeys.USED_ITEM, player.itemInHand(handType).createSnapshot());
        final Set<Value<?>> mapValues = Sets.newHashSet(Value.immutableOf(Keys.MAP_LOCATION, Vector2i.from((int) playerIn.getX(), (int) playerIn.getZ())), Value.immutableOf(Keys.MAP_WORLD, ((ServerWorld) level).key()), Value.immutableOf(Keys.MAP_TRACKS_PLAYERS, trackingPosition), Value.immutableOf(Keys.MAP_UNLIMITED_TRACKING, unlimitedTracking), Value.immutableOf(Keys.MAP_SCALE, (int) scale));
        final Optional<MapInfo> optMapInfo = SpongeCommonEventFactory.fireCreateMapEvent(frame.currentCause(), mapValues);
        if (!optMapInfo.isPresent()) {
            return ItemStack.EMPTY;
        }
        final int id = ((MapItemSavedDataBridge) optMapInfo.get()).bridge$getMapId();
        final ItemStack newMap = new ItemStack(Items.FILLED_MAP, 1);
        final CompoundTag nbt = newMap.getOrCreateTag();
        nbt.putInt(Constants.Map.MAP_ID, id);
        return newMap;
    }
}
Also used : Player(org.spongepowered.api.entity.living.player.Player) HandType(org.spongepowered.api.data.type.HandType) ServerWorld(org.spongepowered.api.world.server.ServerWorld) CauseStackManager(org.spongepowered.api.event.CauseStackManager) Value(org.spongepowered.api.data.value.Value) MapInfo(org.spongepowered.api.map.MapInfo) ItemStack(net.minecraft.world.item.ItemStack) MapItemSavedDataBridge(org.spongepowered.common.bridge.world.storage.MapItemSavedDataBridge) CompoundTag(net.minecraft.nbt.CompoundTag) Redirect(org.spongepowered.asm.mixin.injection.Redirect)

Aggregations

Value (org.spongepowered.api.data.value.Value)7 Key (org.spongepowered.api.data.Key)4 ResourceKey (org.spongepowered.api.ResourceKey)3 GenericTypeReflector (io.leangen.geantyref.GenericTypeReflector)2 TypeToken (io.leangen.geantyref.TypeToken)2 Type (java.lang.reflect.Type)2 ArrayList (java.util.ArrayList)2 List (java.util.List)2 Supplier (java.util.function.Supplier)2 Nullable (org.checkerframework.checker.nullness.qual.Nullable)2 DataHolder (org.spongepowered.api.data.DataHolder)2 DataProvider (org.spongepowered.api.data.DataProvider)2 DataRegistration (org.spongepowered.api.data.DataRegistration)2 DataTransactionResult (org.spongepowered.api.data.DataTransactionResult)2 DataStore (org.spongepowered.api.data.persistence.DataStore)2 MapValue (org.spongepowered.api.data.value.MapValue)2 Preconditions (com.google.common.base.Preconditions)1 ImmutableList (com.google.common.collect.ImmutableList)1 TypeFactory (io.leangen.geantyref.TypeFactory)1 ParameterizedType (java.lang.reflect.ParameterizedType)1