File size: 1,605 Bytes
d46f4a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package net.minecraft.world;

import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Codec;
import com.mojang.serialization.DataResult;
import net.minecraft.advancements.critereon.ItemPredicate;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtOps;
import net.minecraft.nbt.Tag;
import net.minecraft.world.item.ItemStack;

public record LockCode(ItemPredicate predicate) {
    public static final LockCode NO_LOCK = new LockCode(ItemPredicate.Builder.item().build());
    public static final Codec<LockCode> CODEC = ItemPredicate.CODEC.xmap(LockCode::new, LockCode::predicate);
    public static final String TAG_LOCK = "lock";

    public boolean unlocksWith(ItemStack p_19108_) {
        return this.predicate.test(p_19108_);
    }

    public void addToTag(CompoundTag p_19110_, HolderLookup.Provider p_367767_) {
        if (this != NO_LOCK) {
            DataResult<Tag> dataresult = CODEC.encode(this, p_367767_.createSerializationContext(NbtOps.INSTANCE), new CompoundTag());
            dataresult.result().ifPresent(p_362847_ -> p_19110_.put("lock", p_362847_));
        }
    }

    public static LockCode fromTag(CompoundTag p_19112_, HolderLookup.Provider p_361968_) {
        if (p_19112_.contains("lock", 10)) {
            DataResult<Pair<LockCode, Tag>> dataresult = CODEC.decode(p_361968_.createSerializationContext(NbtOps.INSTANCE), p_19112_.get("lock"));
            if (dataresult.isSuccess()) {
                return dataresult.getOrThrow().getFirst();
            }
        }

        return NO_LOCK;
    }
}