Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[1.21.4] Encourage more usage of IConditionBuider #1716

Merged
merged 21 commits into from
Dec 12, 2024
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
0f1bfb2
Implement IConditionBuilder onto DataProvider
ApexModder Nov 28, 2024
c9f820d
Deprecate `TRUE` and `FALSE` conditions, renamed to `always` and `never`
ApexModder Nov 28, 2024
f8cbb4b
Encourage usage of `IConditionBuilder` more
ApexModder Nov 28, 2024
97e9962
Convert `ItemExistsCondition` back into a nonfinal class
ApexModder Nov 28, 2024
716fa23
Rename and deprecate `TRUE`/`FALSE` conditions in favour of `always`/…
ApexModder Nov 28, 2024
ab00aa1
Fix typo in deprecation markers
ApexModder Nov 28, 2024
7d48be7
Implement `IConditionBuilder` onto providers which support the condit…
ApexModder Nov 28, 2024
1f895ef
Remove deprecated elements
ApexModder Dec 3, 2024
06e1d71
Convert helpers to being static
ApexModder Dec 4, 2024
b2b70a7
Rename legacy `true`/`false` condition references
ApexModder Dec 4, 2024
65b2a5c
Remove whitespace in `NeoForgeMod`
ApexModder Dec 4, 2024
ae6452a
Fix misplaced brackets during rebase
ApexModder Dec 4, 2024
100f2e0
Remove deprecated constructor from `ConditionContext`
ApexModder Dec 4, 2024
5485d81
Expand `ItemExists` and `TagEmpty` conditions to support any registry…
ApexModder Dec 4, 2024
575b087
Prefer `optionalFieldOf` over `lenientOptionalFieldOf`
ApexModder Dec 10, 2024
5c605bb
Shorten generic type names
ApexModder Dec 10, 2024
f3d68d8
Rename `ElementExistsCondition` to `RegisteredCondition`
ApexModder Dec 10, 2024
41933a2
Rename methods to better match the `RegisteredCondition` rename
ApexModder Dec 11, 2024
e6f8eb9
Convert `NeoForgeConditions` to be a utility class
ApexModder Dec 11, 2024
e3926eb
Rename `isRegistered` -> `registered`
ApexModder Dec 11, 2024
8620fb6
Rename `ELEMENT_EXISTS_CONDITION` -> `REGISTERED_CONDITION` in `NeoFo…
ApexModder Dec 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
this.functionLibrary = new ServerFunctionLibrary(p_206859_, this.commands.getDispatcher());
+ // Neo: Store registries and create context object
+ this.registryLookup = p_361583_;
+ this.context = new net.neoforged.neoforge.common.conditions.ConditionContext(this.postponedTags, p_250695_);
+ this.context = new net.neoforged.neoforge.common.conditions.ConditionContext(this.postponedTags, p_362982_.compositeAccess(), p_250695_);
}

public ServerFunctionLibrary getFunctionLibrary() {
Expand Down
14 changes: 7 additions & 7 deletions src/main/java/net/neoforged/neoforge/common/NeoForgeMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -79,16 +79,16 @@
import net.neoforged.neoforge.common.advancements.critereon.PiglinCurrencyItemPredicate;
import net.neoforged.neoforge.common.advancements.critereon.PiglinNeutralArmorEntityPredicate;
import net.neoforged.neoforge.common.advancements.critereon.SnowBootsEntityPredicate;
import net.neoforged.neoforge.common.conditions.AlwaysCondition;
import net.neoforged.neoforge.common.conditions.AndCondition;
import net.neoforged.neoforge.common.conditions.FalseCondition;
import net.neoforged.neoforge.common.conditions.FeatureFlagsEnabledCondition;
import net.neoforged.neoforge.common.conditions.ICondition;
import net.neoforged.neoforge.common.conditions.ItemExistsCondition;
import net.neoforged.neoforge.common.conditions.ModLoadedCondition;
import net.neoforged.neoforge.common.conditions.NeverCondition;
import net.neoforged.neoforge.common.conditions.NotCondition;
import net.neoforged.neoforge.common.conditions.OrCondition;
import net.neoforged.neoforge.common.conditions.RegisteredCondition;
import net.neoforged.neoforge.common.conditions.TagEmptyCondition;
import net.neoforged.neoforge.common.conditions.TrueCondition;
import net.neoforged.neoforge.common.crafting.BlockTagIngredient;
import net.neoforged.neoforge.common.crafting.CompoundIngredient;
import net.neoforged.neoforge.common.crafting.CustomDisplayIngredient;
Expand Down Expand Up @@ -357,13 +357,13 @@ public class NeoForgeMod {

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

private static final DeferredRegister<MapCodec<? extends EntitySubPredicate>> ENTITY_PREDICATE_CODECS = DeferredRegister.create(Registries.ENTITY_SUB_PREDICATE_TYPE, NeoForgeVersion.MOD_ID);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@

import com.mojang.serialization.MapCodec;

public final class TrueCondition implements ICondition {
public static final TrueCondition INSTANCE = new TrueCondition();
public final class AlwaysCondition implements ICondition {
public static final AlwaysCondition INSTANCE = new AlwaysCondition();

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

private TrueCondition() {}
private AlwaysCondition() {}

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

@Override
public String toString() {
return "true";
return "always";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,32 +10,26 @@
import java.util.Map;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.Registry;
import net.minecraft.core.RegistryAccess;
import net.minecraft.resources.ResourceKey;
import net.minecraft.tags.TagKey;
import net.minecraft.world.flag.FeatureFlagSet;
import net.minecraft.world.flag.FeatureFlags;
import org.jetbrains.annotations.ApiStatus;

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

public ConditionContext(List<Registry.PendingTags<?>> pendingTags, FeatureFlagSet enabledFeatures) {
public ConditionContext(List<Registry.PendingTags<?>> pendingTags, RegistryAccess registryAccess, FeatureFlagSet enabledFeatures) {
this.pendingTags = new IdentityHashMap<>();
this.registryAccess = registryAccess;
this.enabledFeatures = enabledFeatures;

for (var tags : pendingTags) {
this.pendingTags.put(tags.key(), tags.lookup());
}
}

// Use FeatureFlagSet sensitive constructor
@ApiStatus.ScheduledForRemoval(inVersion = "1.21.4")
@Deprecated(forRemoval = true, since = "1.21.3")
public ConditionContext(List<Registry.PendingTags<?>> pendingTags) {
this(pendingTags, FeatureFlags.VANILLA_SET);
}

public void clear() {
this.pendingTags.clear();
}
Expand All @@ -47,6 +41,11 @@ public <T> boolean isTagLoaded(TagKey<T> key) {
return lookup != null && lookup.get((TagKey) key).isPresent();
}

@Override
public RegistryAccess registryAccess() {
return registryAccess;
}

@Override
public FeatureFlagSet enabledFeatures() {
return enabledFeatures;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
*/
public record FeatureFlagsEnabledCondition(FeatureFlagSet flags) implements ICondition {
public static final MapCodec<FeatureFlagsEnabledCondition> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group(
FeatureFlags.CODEC.fieldOf("flags").forGetter(condition -> condition.flags)).apply(instance, FeatureFlagsEnabledCondition::new));
FeatureFlags.CODEC.fieldOf("flags").forGetter(FeatureFlagsEnabledCondition::flags)).apply(instance, FeatureFlagsEnabledCondition::new));

public FeatureFlagsEnabledCondition {
if (flags.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import java.util.Optional;
import java.util.function.Function;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.RegistryAccess;
import net.minecraft.resources.RegistryOps;
import net.minecraft.tags.TagKey;
import net.minecraft.util.Unit;
Expand Down Expand Up @@ -95,6 +96,10 @@ public <T> boolean isTagLoaded(TagKey<T> key) {
*/
<T> boolean isTagLoaded(TagKey<T> key);

default RegistryAccess registryAccess() {
return RegistryAccess.EMPTY;
}

default FeatureFlagSet enabledFeatures() {
// returning the vanilla set causes reports false positives for flags outside of vanilla
// return FeatureFlags.VANILLA_SET;
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
/*
* Copyright (c) Forge Development LLC and contributors
* SPDX-License-Identifier: LGPL-2.1-only
*/

package net.neoforged.neoforge.common.conditions;

import java.util.List;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.world.flag.FeatureFlag;
import net.minecraft.world.flag.FeatureFlagSet;
import org.apache.commons.lang3.ArrayUtils;

public final class NeoForgeConditions {
public static ICondition and(ICondition... values) {
return new AndCondition(List.of(values));
}

public static ICondition never() {
return NeverCondition.INSTANCE;
}

public static ICondition always() {
return AlwaysCondition.INSTANCE;
}

public static ICondition not(ICondition value) {
return new NotCondition(value);
}

public static ICondition or(ICondition... values) {
return new OrCondition(List.of(values));
}

public static <TRegistry> ICondition registered(ResourceKey<TRegistry> registryKey) {
return new RegisteredCondition<>(registryKey);
}

public static <TRegistry> ICondition registered(ResourceKey<? extends Registry<TRegistry>> registryType, ResourceLocation registryName) {
return registered(ResourceKey.create(registryType, registryName));
}

public static ICondition registered(ResourceLocation registryTypeName, ResourceLocation registryName) {
return registered(ResourceKey.createRegistryKey(registryTypeName), registryName);
}

public static ICondition itemRegistered(ResourceLocation itemName) {
return registered(Registries.ITEM, itemName);
}

public static ICondition itemRegistered(String namespace, String path) {
return itemRegistered(ResourceLocation.fromNamespaceAndPath(namespace, path));
}

public static ICondition itemRegistered(String itemName) {
return itemRegistered(ResourceLocation.parse(itemName));
}

public static ICondition modLoaded(String modid) {
return new ModLoadedCondition(modid);
}

public static <TRegistry> ICondition tagEmpty(TagKey<TRegistry> tag) {
return new TagEmptyCondition<>(tag);
}

public static <TRegistry> ICondition tagEmpty(ResourceKey<? extends Registry<TRegistry>> tagType, ResourceLocation tagName) {
return tagEmpty(TagKey.create(tagType, tagName));
}

public static ICondition itemTagEmpty(ResourceLocation tagName) {
return tagEmpty(Registries.ITEM, tagName);
}

public static ICondition itemTagEmpty(String namespace, String tagPath) {
return itemTagEmpty(ResourceLocation.fromNamespaceAndPath(namespace, tagPath));
}

public static ICondition itemTagEmpty(String tagName) {
return itemTagEmpty(ResourceLocation.parse(tagName));
}

public static ICondition featureFlagsEnabled(FeatureFlagSet requiredFeatures) {
return new FeatureFlagsEnabledCondition(requiredFeatures);
}

public static ICondition featureFlagsEnabled(FeatureFlag... requiredFlags) {
if (requiredFlags.length == 0) {
throw new IllegalArgumentException("FeatureFlagsEnabledCondition requires at least one feature flag.");
}
if (requiredFlags.length == 1) {
return new FeatureFlagsEnabledCondition(FeatureFlagSet.of(requiredFlags[0]));
} else {
return new FeatureFlagsEnabledCondition(FeatureFlagSet.of(requiredFlags[0], ArrayUtils.remove(requiredFlags, 0)));
}
}

private NeoForgeConditions() {
// NOOP - Utility class, never to be constructed
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@

import com.mojang.serialization.MapCodec;

public final class FalseCondition implements ICondition {
public static final FalseCondition INSTANCE = new FalseCondition();
public final class NeverCondition implements ICondition {
public static final NeverCondition INSTANCE = new NeverCondition();

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

private FalseCondition() {}
private NeverCondition() {}

@Override
public boolean test(IContext condition) {
Expand All @@ -25,6 +25,6 @@ public MapCodec<? extends ICondition> codec() {
}

public String toString() {
return "false";
return "never";
}
}
Loading
Loading