Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
MerchantPug committed May 18, 2023
1 parent 8a6ecaf commit 65be08e
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import io.github.edwinmindcraft.calio.api.network.CalioCodecHelper;
import io.github.edwinmindcraft.calio.api.network.CodecSet;
import net.minecraft.core.Holder;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;

Expand All @@ -31,6 +33,14 @@ public final class ConfiguredItemCondition<C extends IDynamicFeatureConfiguratio
return CalioCodecHelper.registryDefaultedField(HOLDER, name, ApoliDynamicRegistries.CONFIGURED_ITEM_CONDITION_KEY, ApoliBuiltinRegistries.CONFIGURED_ITEM_CONDITIONS);
}

public static MapCodec<Holder<ConfiguredItemCondition<?, ?>>> optional(String name, ResourceKey<ConfiguredItemCondition<?, ?>> value) {
return CalioCodecHelper.registryField(HOLDER, name, value, ApoliDynamicRegistries.CONFIGURED_ITEM_CONDITION_KEY, ApoliBuiltinRegistries.CONFIGURED_ITEM_CONDITIONS);
}

public static MapCodec<Holder<ConfiguredItemCondition<?, ?>>> optional(String name, ResourceLocation key) {
return CalioCodecHelper.registryField(HOLDER, name, ResourceKey.create(ApoliDynamicRegistries.CONFIGURED_ITEM_CONDITION_KEY, key), ApoliDynamicRegistries.CONFIGURED_ITEM_CONDITION_KEY, ApoliBuiltinRegistries.CONFIGURED_ITEM_CONDITIONS);
}

public static boolean check(Holder<ConfiguredItemCondition<?, ?>> condition, Level level, ItemStack stack) {
return !condition.isBound() || condition.value().check(level, stack);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import com.mojang.serialization.codecs.RecordCodecBuilder;
import io.github.edwinmindcraft.apoli.api.IDynamicFeatureConfiguration;
import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredItemCondition;
import io.github.edwinmindcraft.apoli.api.registry.ApoliBuiltinRegistries;
import io.github.edwinmindcraft.apoli.api.registry.ApoliDynamicRegistries;
import io.github.edwinmindcraft.calio.api.network.CalioCodecHelper;
import net.minecraft.core.Holder;
Expand All @@ -18,19 +17,15 @@
import net.minecraft.world.level.Level;

import java.util.Map;
import java.util.Optional;

public record RestrictArmorConfiguration(Map<EquipmentSlot, Holder<ConfiguredItemCondition<?, ?>>> conditions,
int tickRate) implements IDynamicFeatureConfiguration {
private static Holder<ConfiguredItemCondition<?, ?>> itemDefault() {
return ApoliBuiltinRegistries.CONFIGURED_ITEM_CONDITIONS.get().getHolder(ApoliDynamicRegistries.DENY).orElseThrow();
}

private static final MapCodec<Map<EquipmentSlot, Holder<ConfiguredItemCondition<?, ?>>>> EQUIPMENT_MAP_CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group(
ConfiguredItemCondition.optional("head").forGetter(x -> Optional.ofNullable(x.get(EquipmentSlot.HEAD)).orElseGet(RestrictArmorConfiguration::itemDefault)),
ConfiguredItemCondition.optional("chest").forGetter(x -> Optional.ofNullable(x.get(EquipmentSlot.CHEST)).orElseGet(RestrictArmorConfiguration::itemDefault)),
ConfiguredItemCondition.optional("legs").forGetter(x -> Optional.ofNullable(x.get(EquipmentSlot.LEGS)).orElseGet(RestrictArmorConfiguration::itemDefault)),
ConfiguredItemCondition.optional("feet").forGetter(x -> Optional.ofNullable(x.get(EquipmentSlot.FEET)).orElseGet(RestrictArmorConfiguration::itemDefault))
ConfiguredItemCondition.optional("head", ApoliDynamicRegistries.DENY).forGetter(x -> x.get(EquipmentSlot.HEAD)),
ConfiguredItemCondition.optional("chest", ApoliDynamicRegistries.DENY).forGetter(x -> x.get(EquipmentSlot.CHEST)),
ConfiguredItemCondition.optional("legs", ApoliDynamicRegistries.DENY).forGetter(x -> x.get(EquipmentSlot.LEGS)),
ConfiguredItemCondition.optional("feet", ApoliDynamicRegistries.DENY).forGetter(x -> x.get(EquipmentSlot.FEET))
).apply(instance, (head, chest, legs, feet) -> {
ImmutableMap.Builder<EquipmentSlot, Holder<ConfiguredItemCondition<?, ?>>> builder = ImmutableMap.builder();
builder.put(EquipmentSlot.HEAD, head);
Expand Down

0 comments on commit 65be08e

Please sign in to comment.