Fixing & Listening

This commit is contained in:
skippyall
2026-01-18 00:52:13 +01:00
parent 3f2a52fd0a
commit 382b394523
29 changed files with 284 additions and 63 deletions
@@ -5,7 +5,9 @@ import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import eu.pb4.polymer.core.api.other.PolymerComponent;
import io.github.skippyall.minions.MinionRegistries;
import io.github.skippyall.minions.Minions;
import io.github.skippyall.minions.util.SerializableListenerManager;
import net.minecraft.component.ComponentType;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtOps;
@@ -19,36 +21,33 @@ import org.jetbrains.annotations.Nullable;
import java.util.Optional;
import java.util.UUID;
public record MinionData(UUID uuid, String name, Optional<PropertyMap> skin, boolean isSpawned) {
public record MinionData(UUID uuid, String name, Optional<PropertyMap> skin, boolean isSpawned, SerializableListenerManager<MinionListener> listeners) {
public static final Codec<MinionData> CODEC = RecordCodecBuilder.create(instance ->
instance.group(
Uuids.CODEC.fieldOf("uuid").forGetter(MinionData::uuid),
Codec.STRING.fieldOf("name").forGetter(MinionData::name),
Codecs.GAME_PROFILE_PROPERTY_MAP.optionalFieldOf("skin").forGetter(MinionData::skin),
Codec.BOOL.optionalFieldOf("isSpawned", false).forGetter(MinionData::isSpawned)
Codec.BOOL.optionalFieldOf("isSpawned", false).forGetter(MinionData::isSpawned),
SerializableListenerManager.getCodec(MinionRegistries.MINION_LISTENER_CODECS).optionalFieldOf("listeners", new SerializableListenerManager<>(MinionRegistries.MINION_LISTENER_CODECS)).forGetter(MinionData::listeners)
).apply(instance, MinionData::new)
);
public static final ComponentType<UUID> COMPONENT = Registry.register(Registries.DATA_COMPONENT_TYPE, Identifier.of(Minions.MOD_ID, "minion_data"), ComponentType.<UUID>builder().codec(Uuids.CODEC).build());
public static MinionData createDefault() {
return new MinionData(UUID.randomUUID(), MinionProfileUtils.newDefaultMinionName(), Optional.empty(), false);
}
public MinionData withUuid(UUID uuid) {
return new MinionData(uuid, name, skin, isSpawned);
return new MinionData(UUID.randomUUID(), MinionProfileUtils.newDefaultMinionName(), Optional.empty(), false, new SerializableListenerManager<>(MinionRegistries.MINION_LISTENER_CODECS));
}
public MinionData withName(String name) {
return new MinionData(uuid, name, skin, isSpawned);
return new MinionData(uuid, name, skin, isSpawned, listeners);
}
public MinionData withSkin(Optional<PropertyMap> skin) {
return new MinionData(uuid, name, skin, isSpawned);
return new MinionData(uuid, name, skin, isSpawned, listeners);
}
public MinionData withSpawned(boolean isSpawned) {
return new MinionData(uuid, name, skin, isSpawned);
return new MinionData(uuid, name, skin, isSpawned, listeners);
}
public NbtCompound writeNbt() {