rise-of-blocks-mod/src/main/java/nl/kallestruik/riseofblocks/registry/FlagRegistry.java
Kalle Struik 755473cf4e
All checks were successful
Build / build (push) Successful in 4m11s
Colored flags, flags command, end portal tp fix
2025-07-21 17:09:32 +02:00

116 lines
3.7 KiB
Java

package nl.kallestruik.riseofblocks.registry;
import net.minecraft.core.BlockPos;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.Tag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.saveddata.SavedData;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class FlagRegistry extends SavedData {
private static final String DATA_NAME = "flag_registry";
private final HashMap<String, FlagPosition> flagPositions = new HashMap<>();
private static final Factory<FlagRegistry> FACTORY = new Factory<FlagRegistry>(FlagRegistry::new, FlagRegistry::load);
public static FlagRegistry get(MinecraftServer server) {
return server.getLevel(ServerLevel.OVERWORLD).getDataStorage().computeIfAbsent(
FACTORY,
DATA_NAME
);
}
public FlagPosition get(String teamName) {
return flagPositions.get(teamName);
}
public Set<Map.Entry<String, FlagPosition>> getAll() {
return flagPositions.entrySet();
}
public void put(String teamName, FlagPosition pos) {
flagPositions.put(teamName, pos);
setDirty();
}
public void remove(String teamName) {
flagPositions.remove(teamName);
setDirty();
}
@Override
public @NotNull CompoundTag save(@NotNull CompoundTag compoundTag, HolderLookup.@NotNull Provider provider) {
ListTag list = new ListTag();
for (String teamName : flagPositions.keySet()) {
CompoundTag entry = new CompoundTag();
entry.putString("team", teamName);
FlagPosition flagPos = flagPositions.get(teamName);
entry.putInt("x", flagPos.pos.getX());
entry.putInt("y", flagPos.pos.getY());
entry.putInt("z", flagPos.pos.getZ());
entry.putString("dimension", flagPos.dimension.toString());
list.add(entry);
}
compoundTag.put("entries", list);
return compoundTag;
}
public static FlagRegistry load(CompoundTag tag, HolderLookup.Provider provider) {
FlagRegistry registry = new FlagRegistry();
ListTag list = tag.getList("entries", ListTag.TAG_COMPOUND);
for (Tag t : list) {
CompoundTag entry = (CompoundTag) t;
String teamName = entry.getString("team");
int x = entry.getInt("x");
int y = entry.getInt("y");
int z = entry.getInt("z");
ResourceLocation dimension = ResourceLocation.parse(entry.getString("dimension"));
FlagPosition flagPos = new FlagPosition(new BlockPos(x, y, z), dimension);
registry.flagPositions.put(teamName, flagPos);
}
return registry;
}
public static class FlagPosition {
private BlockPos pos;
private ResourceLocation dimension;
public FlagPosition(BlockPos pos, ResourceLocation dimension) {
this.pos = pos;
this.dimension = dimension;
}
public BlockPos getPos() {
return pos;
}
public void setPos(BlockPos pos) {
this.pos = pos;
}
public ResourceLocation getDimension() {
return dimension;
}
public void setDimension(ResourceLocation dimension) {
this.dimension = dimension;
}
@Override
public String toString() {
return "FlagPosition{" +
"pos=" + pos +
", dimension=" + dimension +
'}';
}
}
}