Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
1package net.lerariemann.infinity.item.function;
2
3import com.google.gson.JsonDeserializationContext;
4import com.google.gson.JsonObject;
5import net.lerariemann.infinity.block.custom.AltarBlock;
6import net.lerariemann.infinity.registry.core.ModItemFunctions;
7import net.minecraft.world.item.ItemStack;
8import net.minecraft.world.level.block.state.BlockState;
9import net.minecraft.world.level.storage.loot.LootContext;
10import net.minecraft.world.level.storage.loot.functions.LootItemConditionalFunction;
11import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType;
12import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
13import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;
14import org.jetbrains.annotations.NotNull;
15
16//? if >1.21 {
17import com.mojang.serialization.MapCodec;
18import com.mojang.serialization.codecs.RecordCodecBuilder;
19import java.util.List;
20//?}
21
22public class SetAltarStateLootFunction extends LootItemConditionalFunction {
23 //? if >1.21 {
24 public static final MapCodec<SetAltarStateLootFunction> CODEC = RecordCodecBuilder.mapCodec(
25 instance -> commonFields(instance).apply(instance, SetAltarStateLootFunction::new)
26 );
27 private SetAltarStateLootFunction(List<LootItemCondition> conditions) {
28 super(conditions);
29 }
30 //?} else {
31 /*protected SetAltarStateLootFunction(LootItemCondition[] lootItemConditions) {
32 super(lootItemConditions);
33 }
34 *///?}
35
36 @Override
37 public @NotNull LootItemFunctionType
38 //? if >1.21 {
39 <? extends LootItemConditionalFunction>
40 //?}
41 getType() {
42 return ModItemFunctions.SET_ALTAR_STATE.get();
43 }
44
45 @Override
46 protected @NotNull ItemStack run(ItemStack stack, LootContext context) {
47 //? if >1.21.2 {
48 BlockState st = context.getOptionalParameter(LootContextParams.BLOCK_STATE);
49 //?} else {
50 /*BlockState st = context.getParamOrNull(LootContextParams.BLOCK_STATE);
51 *///?}
52 if (st != null) {
53 //? if >1.21 {
54 stack.applyComponentsAndValidate(AltarBlock.toComponentChanges(st));
55 //?} else {
56 /*stack.setTag(AltarBlock.toComponentChanges(st));
57 *///?}
58 }
59 return stack;
60 }
61
62 //? if <1.21 {
63 /*public static class Serializer extends LootItemConditionalFunction.Serializer<SetAltarStateLootFunction> {
64 public Serializer() {
65 }
66 public @NotNull SetAltarStateLootFunction deserialize(JsonObject object, JsonDeserializationContext deserializationContext, LootItemCondition[] conditions) {
67 return new SetAltarStateLootFunction(new LootItemCondition[0]);
68 }
69 }
70 *///?}
71}
72