package net.minecraft.world.level.block.entity.vault; import com.mojang.serialization.Codec; import com.mojang.serialization.DataResult; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder.Instance; import java.util.Optional; import net.minecraft.resources.ResourceKey; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.entity.trialspawner.PlayerDetector; import net.minecraft.world.level.storage.loot.BuiltInLootTables; import net.minecraft.world.level.storage.loot.LootTable; public record VaultConfig( ResourceKey lootTable, double activationRange, double deactivationRange, ItemStack keyItem, Optional> overrideLootTableToDisplay, PlayerDetector playerDetector, PlayerDetector.EntitySelector entitySelector ) { static final String TAG_NAME = "config"; static VaultConfig DEFAULT = new VaultConfig(); static Codec CODEC = RecordCodecBuilder.create( p_391006_ -> p_391006_.group( LootTable.KEY_CODEC.lenientOptionalFieldOf("loot_table", DEFAULT.lootTable()).forGetter(VaultConfig::lootTable), Codec.DOUBLE.lenientOptionalFieldOf("activation_range", DEFAULT.activationRange()).forGetter(VaultConfig::activationRange), Codec.DOUBLE.lenientOptionalFieldOf("deactivation_range", DEFAULT.deactivationRange()).forGetter(VaultConfig::deactivationRange), ItemStack.lenientOptionalFieldOf("key_item").forGetter(VaultConfig::keyItem), LootTable.KEY_CODEC.lenientOptionalFieldOf("override_loot_table_to_display").forGetter(VaultConfig::overrideLootTableToDisplay) ) .apply(p_391006_, VaultConfig::new) ) .validate(VaultConfig::validate); private VaultConfig() { this( BuiltInLootTables.TRIAL_CHAMBERS_REWARD, 4.0, 4.5, new ItemStack(Items.TRIAL_KEY), Optional.empty(), PlayerDetector.INCLUDING_CREATIVE_PLAYERS, PlayerDetector.EntitySelector.SELECT_FROM_LEVEL ); } public VaultConfig(ResourceKey p_335368_, double p_335328_, double p_335598_, ItemStack p_328193_, Optional> p_333693_) { this(p_335368_, p_335328_, p_335598_, p_328193_, p_333693_, DEFAULT.playerDetector(), DEFAULT.entitySelector()); } private DataResult validate() { return this.activationRange > this.deactivationRange ? DataResult.error(() -> "Activation range must (" + this.activationRange + ") be less or equal to deactivation range (" + this.deactivationRange + ")") : DataResult.success(this); } }