Skip to content

Commit 6983c81

Browse files
committed
Expand player sensor capabilities
1 parent 5f29551 commit 6983c81

File tree

1 file changed

+26
-4
lines changed

1 file changed

+26
-4
lines changed

src/main/java/com/lovetropics/extras/item/sensor/PlayerSensor.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package com.lovetropics.extras.item.sensor;
22

3+
import com.lovetropics.lib.codec.MoreCodecs;
4+
import com.lovetropics.lib.permission.PermissionsApi;
5+
import com.lovetropics.lib.permission.role.Role;
6+
import com.lovetropics.lib.permission.role.RoleReader;
37
import com.mojang.serialization.Codec;
48
import com.mojang.serialization.codecs.RecordCodecBuilder;
59
import io.netty.buffer.ByteBuf;
@@ -8,25 +12,43 @@
812
import net.minecraft.resources.ResourceLocation;
913
import net.minecraft.server.level.ServerPlayer;
1014

15+
import java.util.List;
1116
import java.util.Optional;
1217

1318
public record PlayerSensor(
14-
String tag,
19+
List<String> tags,
20+
List<String> roles,
1521
Appearance appearance
1622
) {
1723
public static final Codec<PlayerSensor> CODEC = RecordCodecBuilder.create(i -> i.group(
18-
Codec.STRING.fieldOf("tag").forGetter(PlayerSensor::tag),
24+
MoreCodecs.listOrUnit(Codec.STRING).optionalFieldOf("tag", List.of()).forGetter(PlayerSensor::tags),
25+
MoreCodecs.listOrUnit(Codec.STRING).optionalFieldOf("roles", List.of()).forGetter(PlayerSensor::roles),
1926
Appearance.CODEC.fieldOf("appearance").forGetter(PlayerSensor::appearance)
2027
).apply(i, PlayerSensor::new));
2128

2229
public static final StreamCodec<ByteBuf, PlayerSensor> STREAM_CODEC = StreamCodec.composite(
23-
ByteBufCodecs.STRING_UTF8, PlayerSensor::tag,
30+
ByteBufCodecs.STRING_UTF8.apply(ByteBufCodecs.list()), PlayerSensor::tags,
31+
ByteBufCodecs.STRING_UTF8.apply(ByteBufCodecs.list()), PlayerSensor::roles,
2432
Appearance.STREAM_CODEC, PlayerSensor::appearance,
2533
PlayerSensor::new
2634
);
2735

2836
public boolean matches(ServerPlayer player) {
29-
return player.getTags().contains(tag);
37+
for (String tag : tags) {
38+
if (player.getTags().contains(tag)) {
39+
return true;
40+
}
41+
}
42+
if (!roles.isEmpty()) {
43+
RoleReader reader = PermissionsApi.lookup().byPlayer(player);
44+
for (String roleId : roles) {
45+
Role role = PermissionsApi.provider().get(roleId);
46+
if (reader.has(role)) {
47+
return true;
48+
}
49+
}
50+
}
51+
return false;
3052
}
3153

3254
public record Appearance(

0 commit comments

Comments
 (0)