Skip to content

Commit

Permalink
[1.21.4] Encourage more usage of IConditionBuider (#1716)
Browse files Browse the repository at this point in the history
  • Loading branch information
ApexModder authored Dec 12, 2024
1 parent 4d3958a commit 79d86eb
Show file tree
Hide file tree
Showing 26 changed files with 232 additions and 223 deletions.
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<?>>> REGISTERED_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

0 comments on commit 79d86eb

Please sign in to comment.