Skip to content

Commit 79d86eb

Browse files
authored
[1.21.4] Encourage more usage of IConditionBuider (#1716)
1 parent 4d3958a commit 79d86eb

File tree

26 files changed

+232
-223
lines changed

26 files changed

+232
-223
lines changed

patches/net/minecraft/server/ReloadableServerResources.java.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
this.functionLibrary = new ServerFunctionLibrary(p_206859_, this.commands.getDispatcher());
77
+ // Neo: Store registries and create context object
88
+ this.registryLookup = p_361583_;
9-
+ this.context = new net.neoforged.neoforge.common.conditions.ConditionContext(this.postponedTags, p_250695_);
9+
+ this.context = new net.neoforged.neoforge.common.conditions.ConditionContext(this.postponedTags, p_362982_.compositeAccess(), p_250695_);
1010
}
1111

1212
public ServerFunctionLibrary getFunctionLibrary() {

src/main/java/net/neoforged/neoforge/common/NeoForgeMod.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -79,16 +79,16 @@
7979
import net.neoforged.neoforge.common.advancements.critereon.PiglinCurrencyItemPredicate;
8080
import net.neoforged.neoforge.common.advancements.critereon.PiglinNeutralArmorEntityPredicate;
8181
import net.neoforged.neoforge.common.advancements.critereon.SnowBootsEntityPredicate;
82+
import net.neoforged.neoforge.common.conditions.AlwaysCondition;
8283
import net.neoforged.neoforge.common.conditions.AndCondition;
83-
import net.neoforged.neoforge.common.conditions.FalseCondition;
8484
import net.neoforged.neoforge.common.conditions.FeatureFlagsEnabledCondition;
8585
import net.neoforged.neoforge.common.conditions.ICondition;
86-
import net.neoforged.neoforge.common.conditions.ItemExistsCondition;
8786
import net.neoforged.neoforge.common.conditions.ModLoadedCondition;
87+
import net.neoforged.neoforge.common.conditions.NeverCondition;
8888
import net.neoforged.neoforge.common.conditions.NotCondition;
8989
import net.neoforged.neoforge.common.conditions.OrCondition;
90+
import net.neoforged.neoforge.common.conditions.RegisteredCondition;
9091
import net.neoforged.neoforge.common.conditions.TagEmptyCondition;
91-
import net.neoforged.neoforge.common.conditions.TrueCondition;
9292
import net.neoforged.neoforge.common.crafting.BlockTagIngredient;
9393
import net.neoforged.neoforge.common.crafting.CompoundIngredient;
9494
import net.neoforged.neoforge.common.crafting.CustomDisplayIngredient;
@@ -357,13 +357,13 @@ public class NeoForgeMod {
357357

358358
private static final DeferredRegister<MapCodec<? extends ICondition>> CONDITION_CODECS = DeferredRegister.create(NeoForgeRegistries.Keys.CONDITION_CODECS, NeoForgeVersion.MOD_ID);
359359
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<AndCondition>> AND_CONDITION = CONDITION_CODECS.register("and", () -> AndCondition.CODEC);
360-
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<FalseCondition>> FALSE_CONDITION = CONDITION_CODECS.register("false", () -> FalseCondition.CODEC);
361-
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<ItemExistsCondition>> ITEM_EXISTS_CONDITION = CONDITION_CODECS.register("item_exists", () -> ItemExistsCondition.CODEC);
360+
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<NeverCondition>> NEVER_CONDITION = CONDITION_CODECS.register("never", () -> NeverCondition.CODEC);
361+
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<RegisteredCondition<?>>> REGISTERED_CONDITION = CONDITION_CODECS.register("registered", () -> RegisteredCondition.CODEC);
362362
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<ModLoadedCondition>> MOD_LOADED_CONDITION = CONDITION_CODECS.register("mod_loaded", () -> ModLoadedCondition.CODEC);
363363
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<NotCondition>> NOT_CONDITION = CONDITION_CODECS.register("not", () -> NotCondition.CODEC);
364364
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<OrCondition>> OR_CONDITION = CONDITION_CODECS.register("or", () -> OrCondition.CODEC);
365-
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<TagEmptyCondition>> TAG_EMPTY_CONDITION = CONDITION_CODECS.register("tag_empty", () -> TagEmptyCondition.CODEC);
366-
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<TrueCondition>> TRUE_CONDITION = CONDITION_CODECS.register("true", () -> TrueCondition.CODEC);
365+
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<TagEmptyCondition<?>>> TAG_EMPTY_CONDITION = CONDITION_CODECS.register("tag_empty", () -> TagEmptyCondition.CODEC);
366+
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<AlwaysCondition>> ALWAYS_CONDITION = CONDITION_CODECS.register("always", () -> AlwaysCondition.CODEC);
367367
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<FeatureFlagsEnabledCondition>> FEATURE_FLAGS_ENABLED_CONDITION = CONDITION_CODECS.register("feature_flags_enabled", () -> FeatureFlagsEnabledCondition.CODEC);
368368

369369
private static final DeferredRegister<MapCodec<? extends EntitySubPredicate>> ENTITY_PREDICATE_CODECS = DeferredRegister.create(Registries.ENTITY_SUB_PREDICATE_TYPE, NeoForgeVersion.MOD_ID);

src/main/java/net/neoforged/neoforge/common/conditions/TrueCondition.java renamed to src/main/java/net/neoforged/neoforge/common/conditions/AlwaysCondition.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77

88
import com.mojang.serialization.MapCodec;
99

10-
public final class TrueCondition implements ICondition {
11-
public static final TrueCondition INSTANCE = new TrueCondition();
10+
public final class AlwaysCondition implements ICondition {
11+
public static final AlwaysCondition INSTANCE = new AlwaysCondition();
1212

13-
public static MapCodec<TrueCondition> CODEC = MapCodec.unit(INSTANCE).stable();
13+
public static MapCodec<AlwaysCondition> CODEC = MapCodec.unit(INSTANCE).stable();
1414

15-
private TrueCondition() {}
15+
private AlwaysCondition() {}
1616

1717
@Override
1818
public boolean test(IContext context) {
@@ -26,6 +26,6 @@ public MapCodec<? extends ICondition> codec() {
2626

2727
@Override
2828
public String toString() {
29-
return "true";
29+
return "always";
3030
}
3131
}

src/main/java/net/neoforged/neoforge/common/conditions/ConditionContext.java

+9-10
Original file line numberDiff line numberDiff line change
@@ -10,32 +10,26 @@
1010
import java.util.Map;
1111
import net.minecraft.core.HolderLookup;
1212
import net.minecraft.core.Registry;
13+
import net.minecraft.core.RegistryAccess;
1314
import net.minecraft.resources.ResourceKey;
1415
import net.minecraft.tags.TagKey;
1516
import net.minecraft.world.flag.FeatureFlagSet;
16-
import net.minecraft.world.flag.FeatureFlags;
17-
import org.jetbrains.annotations.ApiStatus;
1817

1918
public class ConditionContext implements ICondition.IContext {
2019
private final Map<ResourceKey<? extends Registry<?>>, HolderLookup.RegistryLookup<?>> pendingTags;
2120
private final FeatureFlagSet enabledFeatures;
21+
private final RegistryAccess registryAccess;
2222

23-
public ConditionContext(List<Registry.PendingTags<?>> pendingTags, FeatureFlagSet enabledFeatures) {
23+
public ConditionContext(List<Registry.PendingTags<?>> pendingTags, RegistryAccess registryAccess, FeatureFlagSet enabledFeatures) {
2424
this.pendingTags = new IdentityHashMap<>();
25+
this.registryAccess = registryAccess;
2526
this.enabledFeatures = enabledFeatures;
2627

2728
for (var tags : pendingTags) {
2829
this.pendingTags.put(tags.key(), tags.lookup());
2930
}
3031
}
3132

32-
// Use FeatureFlagSet sensitive constructor
33-
@ApiStatus.ScheduledForRemoval(inVersion = "1.21.4")
34-
@Deprecated(forRemoval = true, since = "1.21.3")
35-
public ConditionContext(List<Registry.PendingTags<?>> pendingTags) {
36-
this(pendingTags, FeatureFlags.VANILLA_SET);
37-
}
38-
3933
public void clear() {
4034
this.pendingTags.clear();
4135
}
@@ -47,6 +41,11 @@ public <T> boolean isTagLoaded(TagKey<T> key) {
4741
return lookup != null && lookup.get((TagKey) key).isPresent();
4842
}
4943

44+
@Override
45+
public RegistryAccess registryAccess() {
46+
return registryAccess;
47+
}
48+
5049
@Override
5150
public FeatureFlagSet enabledFeatures() {
5251
return enabledFeatures;

src/main/java/net/neoforged/neoforge/common/conditions/FeatureFlagsEnabledCondition.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919
public record FeatureFlagsEnabledCondition(FeatureFlagSet flags) implements ICondition {
2020
public static final MapCodec<FeatureFlagsEnabledCondition> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group(
21-
FeatureFlags.CODEC.fieldOf("flags").forGetter(condition -> condition.flags)).apply(instance, FeatureFlagsEnabledCondition::new));
21+
FeatureFlags.CODEC.fieldOf("flags").forGetter(FeatureFlagsEnabledCondition::flags)).apply(instance, FeatureFlagsEnabledCondition::new));
2222

2323
public FeatureFlagsEnabledCondition {
2424
if (flags.isEmpty()) {

src/main/java/net/neoforged/neoforge/common/conditions/ICondition.java

+5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.util.Optional;
1717
import java.util.function.Function;
1818
import net.minecraft.core.HolderLookup;
19+
import net.minecraft.core.RegistryAccess;
1920
import net.minecraft.resources.RegistryOps;
2021
import net.minecraft.tags.TagKey;
2122
import net.minecraft.util.Unit;
@@ -95,6 +96,10 @@ public <T> boolean isTagLoaded(TagKey<T> key) {
9596
*/
9697
<T> boolean isTagLoaded(TagKey<T> key);
9798

99+
default RegistryAccess registryAccess() {
100+
return RegistryAccess.EMPTY;
101+
}
102+
98103
default FeatureFlagSet enabledFeatures() {
99104
// returning the vanilla set causes reports false positives for flags outside of vanilla
100105
// return FeatureFlags.VANILLA_SET;

src/main/java/net/neoforged/neoforge/common/conditions/IConditionBuilder.java

-62
This file was deleted.

src/main/java/net/neoforged/neoforge/common/conditions/ItemExistsCondition.java

-52
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
/*
2+
* Copyright (c) Forge Development LLC and contributors
3+
* SPDX-License-Identifier: LGPL-2.1-only
4+
*/
5+
6+
package net.neoforged.neoforge.common.conditions;
7+
8+
import java.util.List;
9+
import net.minecraft.core.Registry;
10+
import net.minecraft.core.registries.Registries;
11+
import net.minecraft.resources.ResourceKey;
12+
import net.minecraft.resources.ResourceLocation;
13+
import net.minecraft.tags.TagKey;
14+
import net.minecraft.world.flag.FeatureFlag;
15+
import net.minecraft.world.flag.FeatureFlagSet;
16+
import org.apache.commons.lang3.ArrayUtils;
17+
18+
public final class NeoForgeConditions {
19+
public static ICondition and(ICondition... values) {
20+
return new AndCondition(List.of(values));
21+
}
22+
23+
public static ICondition never() {
24+
return NeverCondition.INSTANCE;
25+
}
26+
27+
public static ICondition always() {
28+
return AlwaysCondition.INSTANCE;
29+
}
30+
31+
public static ICondition not(ICondition value) {
32+
return new NotCondition(value);
33+
}
34+
35+
public static ICondition or(ICondition... values) {
36+
return new OrCondition(List.of(values));
37+
}
38+
39+
public static <TRegistry> ICondition registered(ResourceKey<TRegistry> registryKey) {
40+
return new RegisteredCondition<>(registryKey);
41+
}
42+
43+
public static <TRegistry> ICondition registered(ResourceKey<? extends Registry<TRegistry>> registryType, ResourceLocation registryName) {
44+
return registered(ResourceKey.create(registryType, registryName));
45+
}
46+
47+
public static ICondition registered(ResourceLocation registryTypeName, ResourceLocation registryName) {
48+
return registered(ResourceKey.createRegistryKey(registryTypeName), registryName);
49+
}
50+
51+
public static ICondition itemRegistered(ResourceLocation itemName) {
52+
return registered(Registries.ITEM, itemName);
53+
}
54+
55+
public static ICondition itemRegistered(String namespace, String path) {
56+
return itemRegistered(ResourceLocation.fromNamespaceAndPath(namespace, path));
57+
}
58+
59+
public static ICondition itemRegistered(String itemName) {
60+
return itemRegistered(ResourceLocation.parse(itemName));
61+
}
62+
63+
public static ICondition modLoaded(String modid) {
64+
return new ModLoadedCondition(modid);
65+
}
66+
67+
public static <TRegistry> ICondition tagEmpty(TagKey<TRegistry> tag) {
68+
return new TagEmptyCondition<>(tag);
69+
}
70+
71+
public static <TRegistry> ICondition tagEmpty(ResourceKey<? extends Registry<TRegistry>> tagType, ResourceLocation tagName) {
72+
return tagEmpty(TagKey.create(tagType, tagName));
73+
}
74+
75+
public static ICondition itemTagEmpty(ResourceLocation tagName) {
76+
return tagEmpty(Registries.ITEM, tagName);
77+
}
78+
79+
public static ICondition itemTagEmpty(String namespace, String tagPath) {
80+
return itemTagEmpty(ResourceLocation.fromNamespaceAndPath(namespace, tagPath));
81+
}
82+
83+
public static ICondition itemTagEmpty(String tagName) {
84+
return itemTagEmpty(ResourceLocation.parse(tagName));
85+
}
86+
87+
public static ICondition featureFlagsEnabled(FeatureFlagSet requiredFeatures) {
88+
return new FeatureFlagsEnabledCondition(requiredFeatures);
89+
}
90+
91+
public static ICondition featureFlagsEnabled(FeatureFlag... requiredFlags) {
92+
if (requiredFlags.length == 0) {
93+
throw new IllegalArgumentException("FeatureFlagsEnabledCondition requires at least one feature flag.");
94+
}
95+
if (requiredFlags.length == 1) {
96+
return new FeatureFlagsEnabledCondition(FeatureFlagSet.of(requiredFlags[0]));
97+
} else {
98+
return new FeatureFlagsEnabledCondition(FeatureFlagSet.of(requiredFlags[0], ArrayUtils.remove(requiredFlags, 0)));
99+
}
100+
}
101+
102+
private NeoForgeConditions() {
103+
// NOOP - Utility class, never to be constructed
104+
}
105+
}

src/main/java/net/neoforged/neoforge/common/conditions/FalseCondition.java renamed to src/main/java/net/neoforged/neoforge/common/conditions/NeverCondition.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77

88
import com.mojang.serialization.MapCodec;
99

10-
public final class FalseCondition implements ICondition {
11-
public static final FalseCondition INSTANCE = new FalseCondition();
10+
public final class NeverCondition implements ICondition {
11+
public static final NeverCondition INSTANCE = new NeverCondition();
1212

13-
public static final MapCodec<FalseCondition> CODEC = MapCodec.unit(INSTANCE).stable();
13+
public static final MapCodec<NeverCondition> CODEC = MapCodec.unit(INSTANCE).stable();
1414

15-
private FalseCondition() {}
15+
private NeverCondition() {}
1616

1717
@Override
1818
public boolean test(IContext condition) {
@@ -25,6 +25,6 @@ public MapCodec<? extends ICondition> codec() {
2525
}
2626

2727
public String toString() {
28-
return "false";
28+
return "never";
2929
}
3030
}

0 commit comments

Comments
 (0)