Skip to content

Commit 8fadd30

Browse files
committed
Update to pre3
1 parent 0839343 commit 8fadd30

18 files changed

Lines changed: 196 additions & 90 deletions

gradle.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ org.gradle.jvmargs=-Xmx1G
33

44
# Fabric Properties
55
# check these on https://fabricmc.net/use
6-
minecraft_version=26.1-snapshot-7
6+
minecraft_version=26.1-pre-3
77
loader_version=0.18.4
88
loom_version=1.15-SNAPSHOT
99

1010
# Fabric API
11-
fabric_api_version=0.143.4+26.1
11+
fabric_api_version=0.143.14+26.1
1212

1313
# Mod Properties
14-
mod_version = 3.0.0-beta.1+26.1
14+
mod_version = 3.0.0-beta.2+26.1
1515
maven_group = eu.pb4
1616
archives_base_name = placeholder-api

src/main/java/eu/pb4/placeholders/api/PlaceholderContext.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,18 @@
11
package eu.pb4.placeholders.api;
22

33
import com.mojang.authlib.GameProfile;
4-
import eu.pb4.placeholders.impl.PlaceholderContextImpl;
4+
import eu.pb4.placeholders.impl.ServerPlaceholderContextImpl;
55
import eu.pb4.placeholders.impl.placeholder.ViewObjectImpl;
6-
import net.minecraft.commands.CommandSourceStack;
76
import net.minecraft.core.BlockPos;
87
import net.minecraft.core.HolderLookup;
98
import net.minecraft.resources.Identifier;
10-
import net.minecraft.server.MinecraftServer;
11-
import net.minecraft.server.level.ServerLevel;
12-
import net.minecraft.server.level.ServerPlayer;
139
import net.minecraft.server.players.NameAndId;
1410
import net.minecraft.world.entity.Entity;
1511
import net.minecraft.world.entity.player.Player;
1612
import net.minecraft.world.level.Level;
1713
import net.minecraft.world.phys.Vec3;
18-
import org.intellij.lang.annotations.Flow;
19-
import org.jetbrains.annotations.Contract;
2014
import org.jspecify.annotations.Nullable;
2115

22-
import javax.tools.Diagnostic;
23-
2416
public interface PlaceholderContext {
2517
ParserContext.Key<PlaceholderContext> COMMON_KEY = ParserContext.Key.of("placeholder_context", PlaceholderContext.class);
2618

@@ -56,7 +48,7 @@ default boolean hasPosition() {
5648
return this.position() != null;
5749
}
5850

59-
PlaceholderContext withView(PlaceholderContextImpl.ViewObject view);
51+
PlaceholderContext withView(PlaceholderContext.ViewObject view);
6052

6153

6254
default ParserContext asParserContext() {

src/main/java/eu/pb4/placeholders/api/Placeholders.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import eu.pb4.placeholders.api.parsers.NodeParser;
77
import eu.pb4.placeholders.api.parsers.TagLikeParser;
88
import eu.pb4.placeholders.impl.LoaderUtil;
9-
import eu.pb4.placeholders.impl.PlaceholderContextImpl;
109
import eu.pb4.placeholders.impl.placeholder.builtin.PlayerPlaceholders;
1110
import eu.pb4.placeholders.impl.placeholder.builtin.ServerPlaceholders;
1211
import eu.pb4.placeholders.impl.placeholder.builtin.WorldPlaceholders;

src/main/java/eu/pb4/placeholders/api/ServerPlaceholderContext.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package eu.pb4.placeholders.api;
22

33
import com.mojang.authlib.GameProfile;
4-
import eu.pb4.placeholders.impl.PlaceholderContextImpl;
4+
import eu.pb4.placeholders.impl.ServerPlaceholderContextImpl;
55
import net.minecraft.commands.CommandSource;
66
import net.minecraft.commands.CommandSourceStack;
77
import net.minecraft.network.chat.Component;
@@ -22,7 +22,7 @@ static ServerPlaceholderContext of(MinecraftServer server) {
2222
}
2323

2424
static ServerPlaceholderContext of(MinecraftServer server, ViewObject view) {
25-
return new PlaceholderContextImpl(server, server::createCommandSourceStack, null, null, null, null, view);
25+
return new ServerPlaceholderContextImpl(server, server::createCommandSourceStack, null, null, null, null, view);
2626
}
2727

2828
static ServerPlaceholderContext of(GameProfile profile, MinecraftServer server) {
@@ -31,23 +31,23 @@ static ServerPlaceholderContext of(GameProfile profile, MinecraftServer server)
3131

3232
static ServerPlaceholderContext of(GameProfile profile, MinecraftServer server, ViewObject view) {
3333
var name = profile.name() != null ? profile.name() : profile.id().toString();
34-
return new PlaceholderContextImpl(server, () -> new CommandSourceStack(CommandSource.NULL, Vec3.ZERO, Vec2.ZERO, server.overworld(), server.getProfilePermissions(new NameAndId(profile)), name, Component.literal(name), server, null), null, null, null, profile, view);
34+
return new ServerPlaceholderContextImpl(server, () -> new CommandSourceStack(CommandSource.NULL, Vec3.ZERO, Vec2.ZERO, server.overworld(), server.getProfilePermissions(new NameAndId(profile)), name, Component.literal(name), server, null), null, null, null, profile, view);
3535
}
3636

3737
static ServerPlaceholderContext of(ServerPlayer player) {
3838
return of(player, ViewObject.DEFAULT);
3939
}
4040

4141
static ServerPlaceholderContext of(ServerPlayer player, ViewObject view) {
42-
return new PlaceholderContextImpl(player.level().getServer(), player::createCommandSourceStack, player.level(), player, player, player.getGameProfile(), view);
42+
return new ServerPlaceholderContextImpl(player.level().getServer(), player::createCommandSourceStack, player.level(), player, player, player.getGameProfile(), view);
4343
}
4444

4545
static ServerPlaceholderContext of(CommandSourceStack source) {
4646
return of(source, ViewObject.DEFAULT);
4747
}
4848

4949
static ServerPlaceholderContext of(CommandSourceStack source, ViewObject view) {
50-
return new PlaceholderContextImpl(source.getServer(), () -> source, source.getLevel(), source.getPlayer(), source.getEntity(), source.getPlayer() != null ? source.getPlayer().getGameProfile() : null, view);
50+
return new ServerPlaceholderContextImpl(source.getServer(), () -> source, source.getLevel(), source.getPlayer(), source.getEntity(), source.getPlayer() != null ? source.getPlayer().getGameProfile() : null, view);
5151
}
5252

5353
static ServerPlaceholderContext of(Entity entity) {
@@ -59,7 +59,7 @@ static ServerPlaceholderContext of(Entity entity, ViewObject view) {
5959
return of(player, view);
6060
} else {
6161
var world = (ServerLevel) entity.level();
62-
return new PlaceholderContextImpl(world.getServer(), () -> entity.createCommandSourceStackForNameResolution(world), world, null, entity, null, view);
62+
return new ServerPlaceholderContextImpl(world.getServer(), () -> entity.createCommandSourceStackForNameResolution(world), world, null, entity, null, view);
6363
}
6464
}
6565

src/main/java/eu/pb4/placeholders/api/node/DynamicPlayerHeadNode.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,40 @@
11
package eu.pb4.placeholders.api.node;
22

33
import eu.pb4.placeholders.api.ParserContext;
4+
5+
import java.util.Optional;
46
import java.util.UUID;
7+
8+
import eu.pb4.placeholders.impl.GeneralUtils;
59
import net.minecraft.network.chat.Component;
610
import net.minecraft.network.chat.contents.objects.PlayerSprite;
711
import net.minecraft.world.item.component.ResolvableProfile;
812

9-
public record DynamicPlayerHeadNode(TextNode name, boolean hat, Type type) implements TextNode {
13+
public record DynamicPlayerHeadNode(TextNode name, boolean hat, Type type, Optional<TextNode> fallback) implements TextNode {
1014
@Override
1115
public Component toComponent(ParserContext context, boolean removeBackslashes) {
1216
var val = this.name.toComponent(context).getString();
17+
var fallback = this.fallback.map(x -> x.toComponent(context, removeBackslashes));
1318

1419
if (type == Type.UUID || type == Type.EITHER) {
1520
try {
16-
return Component.object(new PlayerSprite(ResolvableProfile.createUnresolved(UUID.fromString(val)), hat));
21+
return GeneralUtils.objectComponent(new PlayerSprite(ResolvableProfile.createUnresolved(UUID.fromString(val)), hat), fallback);
1722
} catch (Throwable e) {
1823
// ignore
1924
}
2025
}
2126

2227
if (type == Type.NAME || type == Type.EITHER) {
2328
try {
24-
return Component.object(new PlayerSprite(ResolvableProfile.createUnresolved(val), hat));
29+
return GeneralUtils.objectComponent(new PlayerSprite(ResolvableProfile.createUnresolved(val), hat), fallback);
2530
} catch (Throwable e) {
2631
// ignore
2732
}
2833
}
2934

30-
return Component.object(new PlayerSprite(ResolvableProfile.createUnresolved(""), hat));
35+
36+
37+
return GeneralUtils.objectComponent(new PlayerSprite(ResolvableProfile.createUnresolved(""), hat), fallback);
3138
}
3239

3340
public enum Type {

src/main/java/eu/pb4/placeholders/api/node/NbtNode.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,39 @@
11
package eu.pb4.placeholders.api.node;
22

3+
import com.mojang.datafixers.util.Either;
34
import eu.pb4.placeholders.api.ParserContext;
45
import java.util.Optional;
6+
7+
import eu.pb4.placeholders.impl.StringArgOps;
8+
import net.minecraft.commands.arguments.NbtPathArgument;
9+
import net.minecraft.commands.arguments.selector.EntitySelector;
510
import net.minecraft.network.chat.Component;
6-
import net.minecraft.network.chat.contents.data.DataSource;
11+
import net.minecraft.network.chat.contents.NbtContents;
12+
import net.minecraft.network.chat.contents.data.BlockDataSource;
13+
import net.minecraft.network.chat.contents.data.EntityDataSource;
14+
import net.minecraft.network.chat.contents.data.StorageDataSource;
15+
import net.minecraft.resources.Identifier;
716

8-
public record NbtNode(String rawPath, boolean interpret, Optional<TextNode> separator, DataSource dataSource) implements TextNode {
17+
public record NbtNode(String dataSource, String path, String sourcePath, boolean interpret, boolean plain, Optional<TextNode> separator) implements TextNode {
918
@Override
1019
public Component toComponent(ParserContext context, boolean removeBackslashes) {
11-
return Component.nbt(rawPath, interpret, separator.map(x -> x.toComponent(context, removeBackslashes)), dataSource);
20+
var lookup = context.get(ParserContext.Key.HOLDER_LOOKUP);
21+
var ops = lookup != null ? lookup.createSerializationContext(StringArgOps.INSTANCE) : StringArgOps.INSTANCE;
22+
23+
var type = switch (this.dataSource) {
24+
case "block" -> new BlockDataSource(BlockDataSource.BLOCK_POS_CODEC.decode(ops, Either.left(sourcePath)).getOrThrow().getFirst());
25+
case "entity" -> new EntityDataSource(EntitySelector.COMPILABLE_CODEC.decode(ops, Either.left(sourcePath)).getOrThrow().getFirst());
26+
case "storage" -> new StorageDataSource(Identifier.tryParse(sourcePath));
27+
default -> null;
28+
};
29+
30+
if (type == null) {
31+
return Component.empty();
32+
}
33+
34+
35+
return Component.nbt(NbtContents.NBT_PATH_CODEC.decode(ops, Either.left(path)).getOrThrow().getFirst(),
36+
interpret, plain, separator.map(x -> x.toComponent(context, removeBackslashes)), type);
1237
}
1338

1439
@Override

src/main/java/eu/pb4/placeholders/api/node/ObjectNode.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,20 @@
44
import net.minecraft.network.chat.Component;
55
import net.minecraft.network.chat.contents.objects.ObjectInfo;
66

7-
public record ObjectNode(ObjectInfo content) implements TextNode {
7+
import java.util.Optional;
8+
9+
public record ObjectNode(ObjectInfo content, Optional<TextNode> fallback) implements TextNode {
10+
11+
public ObjectNode(ObjectInfo content) {
12+
this(content, Optional.empty());
13+
}
14+
815
@Override
916
public Component toComponent(ParserContext context, boolean removeBackslashes) {
10-
return Component.object(content);
17+
if (this.fallback.isEmpty()) {
18+
return Component.object(content);
19+
}
20+
21+
return Component.object(content, fallback.orElseThrow().toComponent(context, removeBackslashes));
1122
}
1223
}

src/main/java/eu/pb4/placeholders/api/node/ScoreNode.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
import com.mojang.datafixers.util.Either;
44
import eu.pb4.placeholders.api.ParserContext;
5-
import net.minecraft.commands.arguments.selector.SelectorPattern;
5+
import net.minecraft.commands.arguments.selector.EntitySelector;
66
import net.minecraft.network.chat.Component;
7+
import net.minecraft.util.CompilableString;
78

8-
public record ScoreNode(Either<SelectorPattern, String> name, String objective) implements TextNode {
9+
public record ScoreNode(Either<CompilableString<EntitySelector>, String> name, String objective) implements TextNode {
910

1011
public ScoreNode(String name, String objective) {
11-
this(SelectorPattern.parse(name).result()
12-
.map(Either::<SelectorPattern, String>left).orElse(Either.right(name)), objective);
12+
this(Either.right(name), objective);
1313
}
1414

1515
@Override

src/main/java/eu/pb4/placeholders/api/node/SelectorNode.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,30 @@
11
package eu.pb4.placeholders.api.node;
22

3+
import com.mojang.datafixers.util.Either;
34
import eu.pb4.placeholders.api.ParserContext;
45
import java.util.Optional;
5-
import net.minecraft.commands.arguments.selector.SelectorPattern;
6+
7+
import eu.pb4.placeholders.impl.StringArgOps;
8+
import net.minecraft.commands.arguments.selector.EntitySelector;
69
import net.minecraft.network.chat.Component;
10+
import net.minecraft.util.CompilableString;
711

8-
public record SelectorNode(SelectorPattern selector, Optional<TextNode> separator) implements TextNode {
12+
public record SelectorNode(TextNode selector, Optional<TextNode> separator) implements TextNode {
913
@Override
1014
public Component toComponent(ParserContext context, boolean removeBackslashes) {
11-
return Component.selector(selector, separator.map(x -> x.toComponent(context, removeBackslashes)));
15+
var ctx = context.get(ParserContext.Key.HOLDER_LOOKUP);
16+
17+
var selectorBacking = selector.toComponent(context, removeBackslashes).getString();
18+
19+
var pattern = EntitySelector.COMPILABLE_CODEC.decode(ctx != null ? ctx.createSerializationContext(StringArgOps.INSTANCE) : StringArgOps.INSTANCE,
20+
Either.left(selectorBacking));
21+
22+
23+
if (pattern.isError()) {
24+
return Component.literal(selectorBacking);
25+
}
26+
27+
return Component.selector(pattern.getOrThrow().getFirst(), separator.map(x -> x.toComponent(context, removeBackslashes)));
1228
}
1329

1430
@Override

src/main/java/eu/pb4/placeholders/api/node/parent/ClickActionNode.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.mojang.datafixers.util.Either;
55
import com.mojang.serialization.JsonOps;
66
import eu.pb4.placeholders.api.ParserContext;
7-
import eu.pb4.placeholders.impl.PlaceholderContextImpl;
87
import eu.pb4.placeholders.api.arguments.StringArgs;
98
import eu.pb4.placeholders.api.node.TextNode;
109
import eu.pb4.placeholders.api.parsers.NodeParser;

0 commit comments

Comments
 (0)