abstract addon id

This commit is contained in:
Zoë 2022-07-03 13:44:53 -07:00
parent 7a4bf38cbc
commit 21d8be4726
6 changed files with 67 additions and 27 deletions

View File

@ -0,0 +1,16 @@
package com.dfsek.terra.fabric;
import com.dfsek.terra.mod.MinecraftAddon;
import com.dfsek.terra.mod.ModPlatform;
public class FabricAddon extends MinecraftAddon {
public FabricAddon(ModPlatform modPlatform) {
super(modPlatform);
}
@Override
public String getID() {
return "terra-fabric";
}
}

View File

@ -143,4 +143,9 @@ public class PlatformImpl extends ModPlatform {
public @NotNull ItemHandle getItemHandle() { public @NotNull ItemHandle getItemHandle() {
return itemHandle; return itemHandle;
} }
@Override
public BaseAddon getPlatformAddon() {
return new FabricAddon(this);
}
} }

View File

@ -0,0 +1,16 @@
package com.dfsek.terra.forge;
import com.dfsek.terra.mod.MinecraftAddon;
import com.dfsek.terra.mod.ModPlatform;
public class ForgeAddon extends MinecraftAddon {
public ForgeAddon(ModPlatform modPlatform) {
super(modPlatform);
}
@Override
public String getID() {
return "terra-forge";
}
}

View File

@ -49,33 +49,33 @@ public class PlatformImpl extends ModPlatform {
private final ItemHandle itemHandle = new MinecraftItemHandle(); private final ItemHandle itemHandle = new MinecraftItemHandle();
private final WorldHandle worldHandle = new MinecraftWorldHandle(); private final WorldHandle worldHandle = new MinecraftWorldHandle();
private final Lazy<File> dataFolder = Lazy.lazy(() -> new File("./config/Terra")); private final Lazy<File> dataFolder = Lazy.lazy(() -> new File("./config/Terra"));
public PlatformImpl() { public PlatformImpl() {
CommonPlatform.initialize(this); CommonPlatform.initialize(this);
load(); load();
} }
@Override @Override
public MinecraftServer getServer() { public MinecraftServer getServer() {
return ServerLifecycleHooks.getCurrentServer(); return ServerLifecycleHooks.getCurrentServer();
} }
@Override @Override
public boolean reload() { public boolean reload() {
getTerraConfig().load(this); getTerraConfig().load(this);
getRawConfigRegistry().clear(); getRawConfigRegistry().clear();
boolean succeed = getRawConfigRegistry().loadAll(this); boolean succeed = getRawConfigRegistry().loadAll(this);
MinecraftServer server = getServer(); MinecraftServer server = getServer();
if(server != null) { if (server != null) {
server.reloadResources(server.getDataPackManager().getNames()).exceptionally(throwable -> { server.reloadResources(server.getDataPackManager().getNames()).exceptionally(throwable -> {
LOGGER.warn("Failed to execute reload", throwable); LOGGER.warn("Failed to execute reload", throwable);
return null; return null;
}).join(); }).join();
//BiomeUtil.registerBiomes(); //BiomeUtil.registerBiomes();
server.getWorlds().forEach(world -> { server.getWorlds().forEach(world -> {
if(world.getChunkManager().getChunkGenerator() instanceof MinecraftChunkGeneratorWrapper chunkGeneratorWrapper) { if (world.getChunkManager().getChunkGenerator() instanceof MinecraftChunkGeneratorWrapper chunkGeneratorWrapper) {
getConfigRegistry().get(chunkGeneratorWrapper.getPack().getRegistryKey()).ifPresent(pack -> { getConfigRegistry().get(chunkGeneratorWrapper.getPack().getRegistryKey()).ifPresent(pack -> {
chunkGeneratorWrapper.setPack(pack); chunkGeneratorWrapper.setPack(pack);
LOGGER.info("Replaced pack in chunk generator for world {}", world); LOGGER.info("Replaced pack in chunk generator for world {}", world);
@ -85,51 +85,57 @@ public class PlatformImpl extends ModPlatform {
} }
return succeed; return succeed;
} }
@Override @Override
protected Iterable<BaseAddon> platformAddon() { protected Iterable<BaseAddon> platformAddon() {
List<BaseAddon> addons = new ArrayList<>(); List<BaseAddon> addons = new ArrayList<>();
super.platformAddon().forEach(addons::add); super.platformAddon().forEach(addons::add);
String mcVersion = MinecraftVersion.CURRENT.getReleaseTarget(); String mcVersion = MinecraftVersion.CURRENT.getReleaseTarget();
try { try {
addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion), "minecraft")); addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion), "minecraft"));
} catch(ParseException e) { } catch (ParseException e) {
try { try {
addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion + ".0"), "minecraft")); addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion + ".0"), "minecraft"));
} catch(ParseException ex) { } catch (ParseException ex) {
LOGGER.warn("Failed to parse Minecraft version", e); LOGGER.warn("Failed to parse Minecraft version", e);
} }
} }
FMLLoader.getLoadingModList().getMods().forEach(mod -> { FMLLoader.getLoadingModList().getMods().forEach(mod -> {
String id = mod.getModId(); String id = mod.getModId();
if(id.equals("terra") || id.equals("minecraft") || id.equals("java")) return; if (id.equals("terra") || id.equals("minecraft") || id.equals("java")) return;
Version version = Versions.getVersion(mod.getVersion().getMajorVersion(), mod.getVersion().getMinorVersion(), mod.getVersion().getIncrementalVersion()); Version version = Versions.getVersion(mod.getVersion().getMajorVersion(), mod.getVersion().getMinorVersion(), mod.getVersion().getIncrementalVersion());
addons.add(new EphemeralAddon(version, "forge:" + id)); addons.add(new EphemeralAddon(version, "forge:" + id));
}); });
return addons; return addons;
} }
@Override @Override
public @NotNull String platformName() { public @NotNull String platformName() {
return "Forge"; return "Forge";
} }
@Override @Override
public @NotNull WorldHandle getWorldHandle() { public @NotNull WorldHandle getWorldHandle() {
return worldHandle; return worldHandle;
} }
@Override @Override
public @NotNull File getDataFolder() { public @NotNull File getDataFolder() {
return dataFolder.value(); return dataFolder.value();
} }
@Override @Override
public @NotNull ItemHandle getItemHandle() { public @NotNull ItemHandle getItemHandle() {
return itemHandle; return itemHandle;
} }
@Override
public BaseAddon getPlatformAddon() {
return new ForgeAddon(this);
}
} }

View File

@ -33,7 +33,7 @@ import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions;
import com.dfsek.terra.mod.config.VanillaBiomeProperties; import com.dfsek.terra.mod.config.VanillaBiomeProperties;
public final class MinecraftAddon implements BaseAddon { public abstract class MinecraftAddon implements BaseAddon {
private static final Version VERSION = Versions.getVersion(1, 0, 0); private static final Version VERSION = Versions.getVersion(1, 0, 0);
private static final Logger logger = LoggerFactory.getLogger(MinecraftAddon.class); private static final Logger logger = LoggerFactory.getLogger(MinecraftAddon.class);
private final ModPlatform modPlatform; private final ModPlatform modPlatform;
@ -72,9 +72,4 @@ public final class MinecraftAddon implements BaseAddon {
public Version getVersion() { public Version getVersion() {
return VERSION; return VERSION;
} }
@Override
public String getID() {
return "terra-mod";
}
} }

View File

@ -86,9 +86,11 @@ public abstract class ModPlatform extends AbstractPlatform {
if(BuiltinRegistries.BIOME.get(identifier) == null) throw new LoadException("Invalid Biome ID: " + identifier, tracker); // failure. if(BuiltinRegistries.BIOME.get(identifier) == null) throw new LoadException("Invalid Biome ID: " + identifier, tracker); // failure.
return new ProtoPlatformBiome(identifier); return new ProtoPlatformBiome(identifier);
} }
@Override @Override
protected Iterable<BaseAddon> platformAddon() { protected Iterable<BaseAddon> platformAddon() {
return List.of(new MinecraftAddon(this)); return List.of(getPlatformAddon());
} }
protected abstract BaseAddon getPlatformAddon();
} }