Skip to content

Commit aba9971

Browse files
committed
Merge branch '1.21.1' into 1.21.4
# Conflicts: # CHANGELOG.md # buildSrc/src/main/kotlin/net/modgarden/silicate/gradle/Versions.kt # common/src/main/java/net/modgarden/silicate/api/condition/GameCondition.java # common/src/main/java/net/modgarden/silicate/api/condition/TypedGameCondition.java # common/src/main/java/net/modgarden/silicate/test/SilicateGameTests.java
2 parents 2757bf7 + 62938c7 commit aba9971

File tree

6 files changed

+35
-23
lines changed

6 files changed

+35
-23
lines changed

CHANGELOG.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
## Added
2-
- Swapped ConditionTemplate out for Holders.
1+
## Changed
2+
- tweak: add `GameCondition#getTemplate` for ease of access to condition templates
33

44
## Fixed
5-
- Fixed GameConditions being unable to be sent from the server to clients.
5+
- fix(GameTest): add fake player to player list

buildSrc/src/main/kotlin/net/modgarden/silicate/gradle/Versions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package net.modgarden.silicate.gradle
22

33
object Versions {
4-
const val MOD = "0.7.0"
4+
const val MOD = "0.8.0"
55

66
const val MINECRAFT = "1.21.4"
77
const val PARCHMENT_MINECRAFT = "1.21.4"

common/src/main/java/net/modgarden/silicate/api/SilicateBuiltInRegistries.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ public static <T> HolderLookup.RegistryLookup<T> lookupOrThrow(ResourceKey<Regis
4242
return getRegistryAccess().orElseThrow().lookupOrThrow(registry);
4343
}
4444

45+
/**
46+
* Get free {@link RegistryAccess} anywhere you go!
47+
*/
4548
private static Optional<RegistryAccess> getRegistryAccess() {
4649
if (Thread.currentThread().getName().equals("Server thread")) {
4750
return Optional.of(Silicate.getServer().registryAccess());

common/src/main/java/net/modgarden/silicate/api/condition/GameCondition.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package net.modgarden.silicate.api.condition;
22

3-
import com.mojang.datafixers.util.Either;
43
import com.mojang.serialization.Codec;
5-
import com.mojang.serialization.DataResult;
64
import com.mojang.serialization.MapCodec;
75
import net.minecraft.core.Holder;
86
import net.minecraft.resources.RegistryFileCodec;
7+
import net.minecraft.core.Holder;
8+
import net.minecraft.resources.RegistryFileCodec;
99
import net.minecraft.resources.RegistryFixedCodec;
1010
import net.minecraft.resources.ResourceKey;
1111
import net.minecraft.resources.ResourceLocation;
@@ -14,10 +14,7 @@
1414
import net.modgarden.silicate.api.condition.builtin.EntityPassengerCondition;
1515
import net.modgarden.silicate.api.condition.builtin.EntityVehicleCondition;
1616
import net.modgarden.silicate.api.context.GameContext;
17-
import org.jetbrains.annotations.ApiStatus;
1817

19-
import javax.xml.crypto.Data;
20-
import java.util.function.Function;
2118
import java.util.function.Predicate;
2219

2320
/**
@@ -34,7 +31,6 @@
3431
public interface GameCondition<T extends GameCondition<T>> extends Predicate<GameContext> {
3532
Codec<GameCondition<?>> TYPED_CODEC = SilicateBuiltInRegistries.GAME_CONDITION_TYPE.byNameCodec()
3633
.dispatch("type", GameCondition::getType, GameConditionType::codec);
37-
@SuppressWarnings("unchecked") // We use ConditionTemplate which uses raw types. Everything is checked at runtime.
3834
Codec<Holder<GameCondition<?>>> CODEC = RegistryFileCodec.create(SilicateRegistries.CONDITION_TEMPLATE, TYPED_CODEC);
3935

4036
@Override
@@ -46,4 +42,20 @@ public interface GameCondition<T extends GameCondition<T>> extends Predicate<Gam
4642
MapCodec<T> getCodec();
4743

4844
GameConditionType<T> getType();
45+
46+
/**
47+
* A helper function for retrieving condition templates.
48+
* @param location The condition template's {@link ResourceLocation}.
49+
* @return The condition template.
50+
*/
51+
static Holder<GameCondition<?>> getTemplate(ResourceLocation location) {
52+
return SilicateBuiltInRegistries
53+
.lookupOrThrow(SilicateRegistries.CONDITION_TEMPLATE)
54+
.getOrThrow(
55+
ResourceKey.create(
56+
SilicateRegistries.CONDITION_TEMPLATE,
57+
location
58+
)
59+
);
60+
}
4961
}

common/src/main/java/net/modgarden/silicate/api/condition/TypedGameCondition.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ private static <P> DataResult<Holder<TypedGameCondition<?, P>>> validate(Holder<
2727
}
2828
}
2929

30-
private static GameCondition<?> toGameCondition(TypedGameCondition<?, ?> typedCondition) {
31-
return typedCondition;
30+
@SuppressWarnings("unchecked") // The underlying type can be cast.
31+
private static <P> Holder<GameCondition<?>> toGameCondition(Holder<TypedGameCondition<?, P>> typedCondition) {
32+
return (Holder<GameCondition<?>>) (Object) typedCondition;
3233
}
3334

3435
/**
@@ -37,12 +38,11 @@ private static GameCondition<?> toGameCondition(TypedGameCondition<?, ?> typedCo
3738
* @return The typed codec.
3839
* @param <P> The value type of the parameter type.
3940
*/
40-
@SuppressWarnings("unchecked")
4141
static <P> Codec<Holder<TypedGameCondition<?, P>>> getTypedCodec(Class<P> clazz) {
4242
return GameCondition.CODEC
4343
.comapFlatMap(
4444
condition -> validate(condition, clazz),
45-
holder -> (Holder<GameCondition<?>>)(Object)holder
45+
TypedGameCondition::toGameCondition
4646
);
4747
}
4848

common/src/main/java/net/modgarden/silicate/test/SilicateGameTests.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,9 @@ public static void conditions(GameTestHelper helper) throws InvalidContextParame
181181
SkeletonHorse skeletonHorse = helper.getEntities(EntityType.SKELETON_HORSE).getFirst();
182182
Skeleton skeleton = helper.getEntities(EntityType.SKELETON).getFirst();
183183
ServerPlayer player = createFakePlayer(helper);
184+
// Fake players need to be added to the player list manually
185+
// This is necessary for OwnableEntity#getOwner(UUID)
186+
helper.getLevel().players().add(player);
184187
ContextParamMap paramMap = createParamMap(
185188
createState(),
186189
createOrigin(),
@@ -310,7 +313,7 @@ public static void conditions(GameTestHelper helper) throws InvalidContextParame
310313
vehicleCondition.test(context),
311314
"EntityVehicleCondition test unexpectedly succeeded"
312315
);
313-
skeletonHorse.setOwnerUUID(Objects.requireNonNull(helper.getLevel().getRandomPlayer()).getUUID());
316+
skeletonHorse.setOwnerUUID(player.getUUID());
314317
arrow.setOwner(skeleton);
315318
skeleton.startRiding(skeletonHorse);
316319
helper.assertTrue(
@@ -394,15 +397,9 @@ public static void conditionTemplates(GameTestHelper helper) throws InvalidConte
394397
);
395398
skeleton.startRiding(skeletonHorse);
396399
GameContext context = GameContext.of(helper.getLevel(), paramMap);
397-
Holder<GameCondition<?>> always = helper.getLevel()
398-
.registryAccess()
399-
.registryOrThrow(SilicateRegistries.CONDITION_TEMPLATE)
400-
.getHolderOrThrow(ResourceKey.create(SilicateRegistries.CONDITION_TEMPLATE, ResourceLocation.fromNamespaceAndPath("test", "true")));
400+
Holder<GameCondition<?>> always = GameCondition.getTemplate(ResourceLocation.fromNamespaceAndPath("test", "true"));
401401
helper.assertTrue(always.value().test(context), "ConditionTemplate test:true failed");
402-
Holder<GameCondition<?>> ridingOnly = helper.getLevel()
403-
.registryAccess()
404-
.registryOrThrow(SilicateRegistries.CONDITION_TEMPLATE)
405-
.getHolderOrThrow(ResourceKey.create(SilicateRegistries.CONDITION_TEMPLATE, ResourceLocation.fromNamespaceAndPath("test", "riding_only")));
402+
Holder<GameCondition<?>> ridingOnly = GameCondition.getTemplate(ResourceLocation.fromNamespaceAndPath("test", "riding_only"));
406403
helper.assertTrue(ridingOnly.value().test(context), "ConditionTemplate test:riding_only failed");
407404
helper.succeed();
408405
}

0 commit comments

Comments
 (0)