End portals storage

This commit is contained in:
paulevsGitch 2021-02-19 17:38:39 +03:00
parent fb7cee1889
commit ee4c4aed73
3 changed files with 118 additions and 0 deletions

View file

@ -27,6 +27,7 @@ import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndEntities;
import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndFeatures;
import ru.betterend.registry.EndItems; import ru.betterend.registry.EndItems;
import ru.betterend.registry.EndPortals;
import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndSounds;
import ru.betterend.registry.EndStructures; import ru.betterend.registry.EndStructures;
import ru.betterend.registry.EndTags; import ru.betterend.registry.EndTags;
@ -63,6 +64,7 @@ public class BetterEnd implements ModInitializer {
Integrations.register(); Integrations.register();
BonemealUtil.init(); BonemealUtil.init();
GeneratorOptions.init(); GeneratorOptions.init();
EndPortals.loadPortals();
if (hasGuideBook()) { if (hasGuideBook()) {
GuideBookItem.register(); GuideBookItem.register();

View file

@ -0,0 +1,111 @@
package ru.betterend.registry;
import java.io.File;
import java.util.Iterator;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.Identifier;
import ru.betterend.config.ConfigWriter;
import ru.betterend.util.JsonFactory;
import ru.betterend.util.MHelper;
public class EndPortals {
private static PortalInfo[] portals;
public static void loadPortals() {
File file = new File(ConfigWriter.MOD_CONFIG_DIR, "portals.json");
JsonObject json;
if (!file.exists()) {
file.getParentFile().mkdirs();
json = makeDefault(file);
}
else {
json = JsonFactory.getJsonObject(file);
}
if (!json.has("portals") || !json.get("portals").isJsonArray()) {
json = makeDefault(file);
}
JsonArray array = json.get("portals").getAsJsonArray();
if (array.size() == 0) {
json = makeDefault(file);
array = json.get("portals").getAsJsonArray();
}
portals = new PortalInfo[array.size()];
for (int i = 0; i < portals.length; i++) {
portals[i] = new PortalInfo(array.get(i).getAsJsonObject());
}
}
public static ServerWorld getWorld(MinecraftServer server, int state) {
if (state >= portals.length) {
return server.getOverworld();
}
return portals[state].getWorld(server);
}
public static int getColor(int state) {
return portals[state].color;
}
private static JsonObject makeDefault(File file) {
JsonObject jsonObject = new JsonObject();
JsonFactory.storeJson(file, jsonObject);
JsonArray array = new JsonArray();
jsonObject.add("portals", array);
array.add(makeDefault().toJson());
JsonFactory.storeJson(file, jsonObject);
return jsonObject;
}
private static PortalInfo makeDefault() {
return new PortalInfo(new Identifier("minecraft:overworld"), 255, 255, 255);
}
private static class PortalInfo {
private final Identifier dimension;
private final int color;
private ServerWorld world;
PortalInfo(JsonObject obj) {
this(
new Identifier(JsonFactory.getString(obj, "dimension", "minecraft:overworld")),
JsonFactory.getInt(obj, "colorRed", 255),
JsonFactory.getInt(obj, "colorGreen", 255),
JsonFactory.getInt(obj, "colorBlue", 255)
);
}
PortalInfo(Identifier dimension, int r, int g, int b) {
this.dimension = dimension;
this.color = MHelper.color(r, g, b);
}
ServerWorld getWorld(MinecraftServer server) {
if (world != null) {
return world;
}
Iterator<ServerWorld> iterator = server.getWorlds().iterator();
while (iterator.hasNext()) {
ServerWorld world = iterator.next();
if (world.getRegistryKey().getValue().equals(dimension)) {
this.world = world;
return world;
}
}
return server.getOverworld();
}
JsonObject toJson() {
JsonObject obj = new JsonObject();
obj.addProperty("dimension", dimension.toString());
obj.addProperty("colorRed", (color >> 16) & 255);
obj.addProperty("colorGreen", (color >> 8) & 255);
obj.addProperty("colorBlue", color & 255);
return obj;
}
}
}

View file

@ -69,6 +69,11 @@ public class JsonFactory {
} }
} }
public static int getInt(JsonObject object, String member, int def) {
JsonElement elem = object.get(member);
return elem == null ? def : elem.getAsInt();
}
public static float getFloat(JsonObject object, String member, float def) { public static float getFloat(JsonObject object, String member, float def) {
JsonElement elem = object.get(member); JsonElement elem = object.get(member);
return elem == null ? def : elem.getAsFloat(); return elem == null ? def : elem.getAsFloat();