Skip to content

Commit

Permalink
Migrate BingoConditions
Browse files Browse the repository at this point in the history
  • Loading branch information
Gaming32 committed Apr 19, 2024
1 parent 2506af7 commit 2bbf0c4
Show file tree
Hide file tree
Showing 28 changed files with 116 additions and 137 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.gaming32.bingo.conditions;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import io.github.gaming32.bingo.Bingo;
import io.github.gaming32.bingo.platform.BingoPlatform;
import io.github.gaming32.bingo.platform.registry.DeferredRegister;
Expand All @@ -10,34 +10,32 @@
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;
import net.minecraft.world.level.storage.loot.predicates.LootItemConditionType;

import java.util.function.Supplier;

public final class BingoConditions {
private BingoConditions() {
}

private static final DeferredRegister<LootItemConditionType> REGISTRAR =
BingoPlatform.platform.createDeferredRegister(BuiltInRegistries.LOOT_CONDITION_TYPE);

public static final RegistryValue<LootItemConditionType> BLOCK_PATTERN = register("block_pattern", () -> BlockPatternCondition.CODEC);
public static final RegistryValue<LootItemConditionType> DISTANCE_FROM_SPAWN = register("distance_from_spawn", () -> DistanceFromSpawnCondition.CODEC);
public static final RegistryValue<LootItemConditionType> FLAMMABLE = register("flammable", () -> FlammableCondition.CODEC);
public static final RegistryValue<LootItemConditionType> HAS_ANY_EFFECT = register("has_any_effect", () -> HasAnyEffectCondition.CODEC);
public static final RegistryValue<LootItemConditionType> HAS_ONLY_BEEN_DAMAGED_BY = register("has_only_been_damaged_by", () -> HasOnlyBeenDamagedByCondition.CODEC);
public static final RegistryValue<LootItemConditionType> IN_STRUCTURE = register("in_structure", () -> InStructureCondition.CODEC);
public static final RegistryValue<LootItemConditionType> ONE_BY_ONE_HOLE = register("one_by_one_hole", () -> OneByOneHoleCondition.CODEC);
public static final RegistryValue<LootItemConditionType> PASSENGERS = register("passengers", () -> PassengersCondition.CODEC);
public static final RegistryValue<LootItemConditionType> PILLAR = register("pillar", () -> PillarCondition.CODEC);
public static final RegistryValue<LootItemConditionType> STAIRWAY_TO_HEAVEN = register("stairway_to_heaven", () -> StairwayToHeavenCondition.CODEC);
public static final RegistryValue<LootItemConditionType> TOOL_DAMAGE = register("tool_damage", () -> ToolDamageCondition.CODEC);
public static final RegistryValue<LootItemConditionType> TOOL_IS_ENCHANTED = register("tool_is_enchanted", () -> ToolIsEnchantedCondition.CODEC);
public static final RegistryValue<LootItemConditionType> VILLAGER_OWNERSHIP = register("villager_ownership", () -> VillagerOwnershipCondition.CODEC);
public static final RegistryValue<LootItemConditionType> WEARING_DIFFERENT_ARMOR = register("wearing_different_armor", () -> WearingDifferentArmorCondition.CODEC);
public static final RegistryValue<LootItemConditionType> BLOCK_PATTERN = register("block_pattern", BlockPatternCondition.CODEC);
public static final RegistryValue<LootItemConditionType> DISTANCE_FROM_SPAWN = register("distance_from_spawn", DistanceFromSpawnCondition.CODEC);
public static final RegistryValue<LootItemConditionType> FLAMMABLE = register("flammable", FlammableCondition.CODEC);
public static final RegistryValue<LootItemConditionType> HAS_ANY_EFFECT = register("has_any_effect", HasAnyEffectCondition.CODEC);
public static final RegistryValue<LootItemConditionType> HAS_ONLY_BEEN_DAMAGED_BY = register("has_only_been_damaged_by", HasOnlyBeenDamagedByCondition.CODEC);
public static final RegistryValue<LootItemConditionType> IN_STRUCTURE = register("in_structure", InStructureCondition.CODEC);
public static final RegistryValue<LootItemConditionType> ONE_BY_ONE_HOLE = register("one_by_one_hole", OneByOneHoleCondition.CODEC);
public static final RegistryValue<LootItemConditionType> PASSENGERS = register("passengers", PassengersCondition.CODEC);
public static final RegistryValue<LootItemConditionType> PILLAR = register("pillar", PillarCondition.CODEC);
public static final RegistryValue<LootItemConditionType> STAIRWAY_TO_HEAVEN = register("stairway_to_heaven", StairwayToHeavenCondition.CODEC);
public static final RegistryValue<LootItemConditionType> TOOL_DAMAGE = register("tool_damage", ToolDamageCondition.CODEC);
public static final RegistryValue<LootItemConditionType> TOOL_IS_ENCHANTED = register("tool_is_enchanted", ToolIsEnchantedCondition.CODEC);
public static final RegistryValue<LootItemConditionType> VILLAGER_OWNERSHIP = register("villager_ownership", VillagerOwnershipCondition.CODEC);
public static final RegistryValue<LootItemConditionType> WEARING_DIFFERENT_ARMOR = register("wearing_different_armor", WearingDifferentArmorCondition.CODEC);

public static void load() {
}

private static RegistryValue<LootItemConditionType> register(String registryName, Supplier<Codec<? extends LootItemCondition>> codec) {
return REGISTRAR.register(new ResourceLocation(Bingo.MOD_ID, registryName), () -> new LootItemConditionType(codec.get()));
private static RegistryValue<LootItemConditionType> register(String registryName, MapCodec<? extends LootItemCondition> codec) {
return REGISTRAR.register(new ResourceLocation(Bingo.MOD_ID, registryName), () -> new LootItemConditionType(codec));
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.github.gaming32.bingo.conditions;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import io.github.gaming32.bingo.util.BingoCodecs;
import io.github.gaming32.bingo.util.BlockPattern;
Expand All @@ -9,7 +10,6 @@
import net.minecraft.advancements.critereon.LocationPredicate;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.util.ExtraCodecs;
import net.minecraft.world.level.block.state.pattern.BlockInWorld;
import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParam;
Expand All @@ -28,11 +28,11 @@
import java.util.function.Predicate;

public class BlockPatternCondition implements LootItemCondition {
public static final Codec<BlockPatternCondition> CODEC = RecordCodecBuilder.create(instance ->
public static final MapCodec<BlockPatternCondition> CODEC = RecordCodecBuilder.mapCodec(instance ->
instance.group(
Codec.STRING.listOf().listOf().fieldOf("aisles").forGetter(BlockPatternCondition::aisles),
Codec.unboundedMap(BingoCodecs.CHAR, LocationPredicate.CODEC).fieldOf("where").forGetter(BlockPatternCondition::where),
ExtraCodecs.strictOptionalField(BlockPattern.Rotations.CODEC, "rotations", BlockPattern.Rotations.HORIZONTAL).forGetter(BlockPatternCondition::rotations)
BlockPattern.Rotations.CODEC.optionalFieldOf("rotations", BlockPattern.Rotations.HORIZONTAL).forGetter(BlockPatternCondition::rotations)
).apply(instance, BlockPatternCondition::new)
);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package io.github.gaming32.bingo.conditions;

import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.mojang.serialization.MapCodec;
import net.minecraft.advancements.critereon.DistancePredicate;
import net.minecraft.core.GlobalPos;
import net.minecraft.util.ExtraCodecs;
import net.minecraft.world.item.CompassItem;
import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParam;
Expand All @@ -18,11 +16,9 @@
import java.util.Set;

public record DistanceFromSpawnCondition(Optional<DistancePredicate> distance) implements LootItemCondition {
public static final Codec<DistanceFromSpawnCondition> CODEC = RecordCodecBuilder.create(instance ->
instance.group(
ExtraCodecs.strictOptionalField(DistancePredicate.CODEC, "distance").forGetter(DistanceFromSpawnCondition::distance)
).apply(instance, DistanceFromSpawnCondition::new)
);
public static final MapCodec<DistanceFromSpawnCondition> CODEC = DistancePredicate.CODEC
.optionalFieldOf("distance")
.xmap(DistanceFromSpawnCondition::new, DistanceFromSpawnCondition::distance);

@NotNull
@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.gaming32.bingo.conditions;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import io.github.gaming32.bingo.mixin.common.BaseFireBlockAccessor;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.Blocks;
Expand All @@ -16,7 +16,7 @@
public enum FlammableCondition implements LootItemCondition {
INSTANCE;

public static final Codec<FlammableCondition> CODEC = Codec.unit(INSTANCE);
public static final MapCodec<FlammableCondition> CODEC = MapCodec.unit(INSTANCE);

@NotNull
@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.github.gaming32.bingo.conditions;

import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.mojang.serialization.MapCodec;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParam;
Expand All @@ -12,11 +11,9 @@
import java.util.Set;

public record HasAnyEffectCondition(LootContext.EntityTarget entityTarget) implements LootItemCondition {
public static final Codec<HasAnyEffectCondition> CODEC = RecordCodecBuilder.create(instance ->
instance.group(
LootContext.EntityTarget.CODEC.fieldOf("entity").forGetter(HasAnyEffectCondition::entityTarget)
).apply(instance, HasAnyEffectCondition::new)
);
public static final MapCodec<HasAnyEffectCondition> CODEC = LootContext.EntityTarget.CODEC
.xmap(HasAnyEffectCondition::new, HasAnyEffectCondition::entityTarget)
.fieldOf("entity");

@NotNull
@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.gaming32.bingo.conditions;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import io.github.gaming32.bingo.ext.LivingEntityExt;
import io.github.gaming32.bingo.util.BingoUtil;
Expand All @@ -9,7 +9,6 @@
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.tags.TagKey;
import net.minecraft.util.ExtraCodecs;
import net.minecraft.world.damagesource.DamageType;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
Expand All @@ -32,14 +31,14 @@ public record HasOnlyBeenDamagedByCondition(
Optional<TagPredicate<DamageType>> damageTypeTag
) implements LootItemCondition {

public static final Codec<HasOnlyBeenDamagedByCondition> CODEC = RecordCodecBuilder.create(instance ->
public static final MapCodec<HasOnlyBeenDamagedByCondition> CODEC = RecordCodecBuilder.mapCodec(instance ->
instance.group(
ExtraCodecs.strictOptionalField(BuiltInRegistries.ENTITY_TYPE.byNameCodec(), "entity_type").forGetter(HasOnlyBeenDamagedByCondition::entityType),
ExtraCodecs.strictOptionalField(TagPredicate.codec(Registries.ENTITY_TYPE), "entity_type_tag").forGetter(HasOnlyBeenDamagedByCondition::entityTypeTag),
ExtraCodecs.strictOptionalField(BuiltInRegistries.ENTITY_TYPE.byNameCodec(), "direct_entity_type").forGetter(HasOnlyBeenDamagedByCondition::directEntityType),
ExtraCodecs.strictOptionalField(TagPredicate.codec(Registries.ENTITY_TYPE), "direct_entity_type_tag").forGetter(HasOnlyBeenDamagedByCondition::directEntityTypeTag),
ExtraCodecs.strictOptionalField(ResourceKey.codec(Registries.DAMAGE_TYPE), "damage_type").forGetter(HasOnlyBeenDamagedByCondition::damageType),
ExtraCodecs.strictOptionalField(TagPredicate.codec(Registries.DAMAGE_TYPE), "damage_type_tag").forGetter(HasOnlyBeenDamagedByCondition::damageTypeTag)
BuiltInRegistries.ENTITY_TYPE.byNameCodec().optionalFieldOf("entity_type").forGetter(HasOnlyBeenDamagedByCondition::entityType),
TagPredicate.codec(Registries.ENTITY_TYPE).optionalFieldOf("entity_type_tag").forGetter(HasOnlyBeenDamagedByCondition::entityTypeTag),
BuiltInRegistries.ENTITY_TYPE.byNameCodec().optionalFieldOf("direct_entity_type").forGetter(HasOnlyBeenDamagedByCondition::directEntityType),
TagPredicate.codec(Registries.ENTITY_TYPE).optionalFieldOf("direct_entity_type_tag").forGetter(HasOnlyBeenDamagedByCondition::directEntityTypeTag),
ResourceKey.codec(Registries.DAMAGE_TYPE).optionalFieldOf("damage_type").forGetter(HasOnlyBeenDamagedByCondition::damageType),
TagPredicate.codec(Registries.DAMAGE_TYPE).optionalFieldOf("damage_type_tag").forGetter(HasOnlyBeenDamagedByCondition::damageTypeTag)
).apply(instance, HasOnlyBeenDamagedByCondition::new)
);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.github.gaming32.bingo.conditions;

import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.mojang.serialization.MapCodec;
import net.minecraft.core.BlockPos;
import net.minecraft.core.registries.Registries;
import net.minecraft.tags.TagKey;
Expand All @@ -16,11 +15,9 @@
import java.util.Set;

public record InStructureCondition(TagKey<Structure> structure) implements LootItemCondition {
public static final Codec<InStructureCondition> CODEC = RecordCodecBuilder.create(
instance -> instance.group(
TagKey.hashedCodec(Registries.STRUCTURE).fieldOf("structure").forGetter(InStructureCondition::structure)
).apply(instance, InStructureCondition::new)
);
public static final MapCodec<InStructureCondition> CODEC = TagKey.hashedCodec(Registries.STRUCTURE)
.fieldOf("structure")
.xmap(InStructureCondition::new, InStructureCondition::structure);

@NotNull
@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.github.gaming32.bingo.conditions;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
Expand All @@ -15,7 +16,7 @@
import java.util.Set;

public record OneByOneHoleCondition(int bottom, int top, BlockPredicate predicate) implements LootItemCondition {
public static final Codec<OneByOneHoleCondition> CODEC = RecordCodecBuilder.create(instance ->
public static final MapCodec<OneByOneHoleCondition> CODEC = RecordCodecBuilder.mapCodec(instance ->
instance.group(
Codec.INT.fieldOf("bottom").forGetter(OneByOneHoleCondition::bottom),
Codec.INT.fieldOf("top").forGetter(OneByOneHoleCondition::top),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package io.github.gaming32.bingo.conditions;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.advancements.critereon.ContextAwarePredicate;
import net.minecraft.util.ExtraCodecs;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.LootParams;
Expand All @@ -21,10 +21,10 @@
import java.util.Set;

public record PassengersCondition(List<ContextAwarePredicate> passengers, boolean requireFull) implements LootItemCondition {
public static final Codec<PassengersCondition> CODEC = RecordCodecBuilder.create(instance ->
public static final MapCodec<PassengersCondition> CODEC = RecordCodecBuilder.mapCodec(instance ->
instance.group(
ContextAwarePredicate.CODEC.listOf().fieldOf("passengers").forGetter(PassengersCondition::passengers),
ExtraCodecs.strictOptionalField(Codec.BOOL, "require_full", false).forGetter(PassengersCondition::requireFull)
Codec.BOOL.optionalFieldOf("require_full", false).forGetter(PassengersCondition::requireFull)
).apply(instance, PassengersCondition::new)
);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package io.github.gaming32.bingo.conditions;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.advancements.critereon.BlockPredicate;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.util.ExtraCodecs;
import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParam;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
Expand All @@ -18,10 +18,10 @@
import java.util.function.BiPredicate;

public record PillarCondition(int minHeight, Optional<BlockPredicate> block) implements LootItemCondition {
public static final Codec<PillarCondition> CODEC = RecordCodecBuilder.create(instance ->
public static final MapCodec<PillarCondition> CODEC = RecordCodecBuilder.mapCodec(instance ->
instance.group(
Codec.INT.fieldOf("min_height").forGetter(PillarCondition::minHeight),
ExtraCodecs.strictOptionalField(BlockPredicate.CODEC, "block").forGetter(PillarCondition::block)
BlockPredicate.CODEC.optionalFieldOf("block").forGetter(PillarCondition::block)
).apply(instance, PillarCondition::new)
);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.gaming32.bingo.conditions;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerChunkCache;
Expand All @@ -25,7 +25,7 @@
public enum StairwayToHeavenCondition implements LootItemCondition {
INSTANCE;

public static final Codec<StairwayToHeavenCondition> CODEC = Codec.unit(INSTANCE);
public static final MapCodec<StairwayToHeavenCondition> CODEC = MapCodec.unit(INSTANCE);

@NotNull
@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.github.gaming32.bingo.conditions;

import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.mojang.serialization.MapCodec;
import net.minecraft.advancements.critereon.MinMaxBounds;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.storage.loot.LootContext;
Expand All @@ -14,11 +13,9 @@
import java.util.Set;

public record ToolDamageCondition(MinMaxBounds.Ints damage) implements LootItemCondition {
public static final Codec<ToolDamageCondition> CODEC = RecordCodecBuilder.create(instance ->
instance.group(
MinMaxBounds.Ints.CODEC.fieldOf("damage").forGetter(ToolDamageCondition::damage)
).apply(instance, ToolDamageCondition::new)
);
public static final MapCodec<ToolDamageCondition> CODEC = MinMaxBounds.Ints.CODEC
.fieldOf("damage")
.xmap(ToolDamageCondition::new, ToolDamageCondition::damage);

@NotNull
@Override
Expand Down
Loading

0 comments on commit 2bbf0c4

Please sign in to comment.