mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-18 23:01:03 +00:00
implement ephemeral addons for platform version comparison
This commit is contained in:
@@ -18,6 +18,10 @@
|
|||||||
package com.dfsek.terra;
|
package com.dfsek.terra;
|
||||||
|
|
||||||
import com.dfsek.tectonic.loading.TypeRegistry;
|
import com.dfsek.tectonic.loading.TypeRegistry;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addon.EphemeralAddon;
|
||||||
|
import com.dfsek.terra.addon.InternalAddon;
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -33,9 +37,9 @@ import java.io.UncheckedIOException;
|
|||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import com.dfsek.terra.addon.BootstrapAddonLoader;
|
import com.dfsek.terra.addon.BootstrapAddonLoader;
|
||||||
import com.dfsek.terra.addon.DependencySorter;
|
import com.dfsek.terra.addon.DependencySorter;
|
||||||
@@ -102,8 +106,8 @@ public abstract class AbstractPlatform implements Platform {
|
|||||||
return manager;
|
return manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Optional<BaseAddon> platformAddon() {
|
protected Iterable<BaseAddon> platformAddon() {
|
||||||
return Optional.empty();
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void load() {
|
protected void load() {
|
||||||
@@ -175,7 +179,7 @@ public abstract class AbstractPlatform implements Platform {
|
|||||||
|
|
||||||
addonList.add(internalAddon);
|
addonList.add(internalAddon);
|
||||||
|
|
||||||
platformAddon().ifPresent(addonList::add);
|
platformAddon().forEach(addonList::add);
|
||||||
|
|
||||||
BootstrapAddonLoader bootstrapAddonLoader = new BootstrapAddonLoader();
|
BootstrapAddonLoader bootstrapAddonLoader = new BootstrapAddonLoader();
|
||||||
|
|
||||||
@@ -214,7 +218,9 @@ public abstract class AbstractPlatform implements Platform {
|
|||||||
sorter.sort().forEach(addon -> {
|
sorter.sort().forEach(addon -> {
|
||||||
platformInjector.inject(addon);
|
platformInjector.inject(addon);
|
||||||
addon.initialize();
|
addon.initialize();
|
||||||
addonRegistry.register(addon.getID(), addon);
|
if(!(addon instanceof EphemeralAddon)) { // ephemeral addons exist only for version checking
|
||||||
|
addonRegistry.register(addon.getID(), addon);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
eventManager.getHandler(FunctionalEventHandler.class)
|
eventManager.getHandler(FunctionalEventHandler.class)
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package com.dfsek.terra.addon;
|
||||||
|
|
||||||
|
import ca.solostudios.strata.version.Version;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
|
|
||||||
|
|
||||||
|
public class EphemeralAddon implements BaseAddon {
|
||||||
|
private final Version version;
|
||||||
|
private final String id;
|
||||||
|
|
||||||
|
public EphemeralAddon(Version version, String id) {
|
||||||
|
this.version = version;
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Version getVersion() {
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getID() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -15,7 +15,7 @@
|
|||||||
* along with Terra. If not, see <https://www.gnu.org/licenses/>.
|
* along with Terra. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.dfsek.terra;
|
package com.dfsek.terra.addon;
|
||||||
|
|
||||||
import ca.solostudios.strata.Versions;
|
import ca.solostudios.strata.Versions;
|
||||||
import ca.solostudios.strata.version.Version;
|
import ca.solostudios.strata.version.Version;
|
||||||
@@ -17,15 +17,26 @@
|
|||||||
|
|
||||||
package com.dfsek.terra.fabric;
|
package com.dfsek.terra.fabric;
|
||||||
|
|
||||||
|
import ca.solostudios.strata.Versions;
|
||||||
|
import ca.solostudios.strata.parser.tokenizer.ParseException;
|
||||||
|
import ca.solostudios.strata.version.Version;
|
||||||
import com.dfsek.tectonic.exception.LoadException;
|
import com.dfsek.tectonic.exception.LoadException;
|
||||||
import com.dfsek.tectonic.loading.TypeRegistry;
|
import com.dfsek.tectonic.loading.TypeRegistry;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addon.EphemeralAddon;
|
||||||
|
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
|
import net.minecraft.MinecraftVersion;
|
||||||
import net.minecraft.server.world.ServerWorld;
|
import net.minecraft.server.world.ServerWorld;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.registry.BuiltinRegistries;
|
import net.minecraft.util.registry.BuiltinRegistries;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@@ -40,9 +51,12 @@ import com.dfsek.terra.fabric.handle.FabricItemHandle;
|
|||||||
import com.dfsek.terra.fabric.handle.FabricWorldHandle;
|
import com.dfsek.terra.fabric.handle.FabricWorldHandle;
|
||||||
import com.dfsek.terra.fabric.util.ProtoBiome;
|
import com.dfsek.terra.fabric.util.ProtoBiome;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
|
||||||
public class PlatformImpl extends AbstractPlatform {
|
public class PlatformImpl extends AbstractPlatform {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(PlatformImpl.class);
|
||||||
private final ItemHandle itemHandle = new FabricItemHandle();
|
private final ItemHandle itemHandle = new FabricItemHandle();
|
||||||
private final WorldHandle worldHandle = new FabricWorldHandle();
|
private final WorldHandle worldHandle = new FabricWorldHandle();
|
||||||
private final Lazy<File> dataFolder = Lazy.lazy(() -> new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra"));
|
private final Lazy<File> dataFolder = Lazy.lazy(() -> new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra"));
|
||||||
@@ -72,8 +86,33 @@ public class PlatformImpl extends AbstractPlatform {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Optional<BaseAddon> platformAddon() {
|
protected Iterable<BaseAddon> platformAddon() {
|
||||||
return Optional.of(new FabricAddon(this));
|
List<BaseAddon> addons = new ArrayList<>();
|
||||||
|
|
||||||
|
addons.add(new FabricAddon(this));
|
||||||
|
|
||||||
|
String mcVersion = MinecraftVersion.CURRENT.getReleaseTarget();
|
||||||
|
try {
|
||||||
|
addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion), "minecraft"));
|
||||||
|
} catch(ParseException e) {
|
||||||
|
try {
|
||||||
|
addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion + ".0"), "minecraft"));
|
||||||
|
} catch(ParseException ex) {
|
||||||
|
LOGGER.warn("Failed to parse Minecraft version", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FabricLoader.getInstance().getAllMods().forEach(mod -> {
|
||||||
|
if(mod.getMetadata().getId().equals("terra")) return;
|
||||||
|
try {
|
||||||
|
Version version = Versions.parseVersion(mod.getMetadata().getVersion().getFriendlyString());
|
||||||
|
addons.add(new EphemeralAddon(version, "fabric:" + mod.getMetadata().getId()));
|
||||||
|
} catch(ParseException e) {
|
||||||
|
LOGGER.warn("Mod {}, version {} does not follow semantic versioning specification.", mod.getMetadata().getId(), mod.getMetadata().getVersion().getFriendlyString());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return addons;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user