Expose a couple of mods.toml properties properly. Half-implemented
override namespace - still needs to be reviewed and determined how this might work in detail. Signed-off-by: cpw <cpw+github@weeksfamily.ca>
This commit is contained in:
parent
eefc4d3e84
commit
040cc4bf16
7 changed files with 45 additions and 13 deletions
|
@ -261,7 +261,7 @@ project(':forge') {
|
|||
installer 'cpw.mods:modlauncher:0.6.0'
|
||||
installer 'net.minecraftforge:accesstransformers:0.14.+:shadowed'
|
||||
installer 'net.minecraftforge:eventbus:0.6.+:service'
|
||||
installer 'net.minecraftforge:forgespi:0.2.+'
|
||||
installer 'net.minecraftforge:forgespi:0.4.+'
|
||||
installer 'net.minecraftforge:coremods:0.2.+'
|
||||
installer 'com.electronwill.night-config:core:3.4.2'
|
||||
installer 'com.electronwill.night-config:toml:3.4.2'
|
||||
|
|
|
@ -25,13 +25,16 @@ key="value"
|
|||
This is my mod, there may be
|
||||
others, but this one is mine
|
||||
'''
|
||||
# Override the default resourcelocation namespace with this instead
|
||||
# Currently not implemented
|
||||
namespace="invsorter"
|
||||
# A random extra property for a mod loader
|
||||
randomExtraProperty="somevalue"
|
||||
# Arbitrary key-value pairs
|
||||
[inventorysorter.properties]
|
||||
[modproperties.inventorysorter]
|
||||
key="value"
|
||||
# A list of dependencies
|
||||
[[inventorysorter.dependencies]]
|
||||
[[dependencies.inventorysorter]]
|
||||
# the modid of the dependency
|
||||
modid="forge"
|
||||
# Does this dependency have to exist - if not, ordering below must be specified
|
||||
|
@ -43,7 +46,7 @@ key="value"
|
|||
# Side this dependency is applied on - BOTH, CLIENT or SERVER
|
||||
side="BOTH"
|
||||
# Here's another dependency
|
||||
[[inventorysorter.dependencies]]
|
||||
[[dependencies.inventorysorter]]
|
||||
modid="minecraft"
|
||||
mandatory=true
|
||||
versionRange="[1.12.2]"
|
||||
|
|
|
@ -98,6 +98,11 @@ public class ModFileInfo implements IModFileInfo
|
|||
return modLoaderVersion;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getFileProperties() {
|
||||
return this.properties;
|
||||
}
|
||||
|
||||
public Optional<Manifest> getManifest() {
|
||||
return modFile.getLocator().findManifest(modFile.getFilePath());
|
||||
}
|
||||
|
|
|
@ -28,16 +28,23 @@ import java.util.Collections;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.maven.artifact.versioning.ArtifactVersion;
|
||||
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
|
||||
|
||||
public class ModInfo implements IModInfo
|
||||
{
|
||||
private static final Logger LOGGER = LogManager.getLogger();
|
||||
private static final DefaultArtifactVersion DEFAULT_VERSION = new DefaultArtifactVersion("1");
|
||||
private static final Pattern VALID_LABEL = Pattern.compile("^[a-z][a-z0-9_-]{1,63}$");
|
||||
|
||||
private final ModFileInfo owningFile;
|
||||
private final String modId;
|
||||
private final String namespace;
|
||||
private final ArtifactVersion version;
|
||||
private final String displayName;
|
||||
private final String description;
|
||||
|
@ -50,6 +57,15 @@ public class ModInfo implements IModInfo
|
|||
this.owningFile = owningFile;
|
||||
this.modConfig = modConfig;
|
||||
this.modId = modConfig.<String>getOptional("modId").orElseThrow(() -> new InvalidModFileException("Missing modId entry", owningFile));
|
||||
if (!VALID_LABEL.matcher(this.modId).matches()) {
|
||||
LOGGER.fatal("Invalid modId found in file {} - {} does not match the standard: {}", this.owningFile.getFile().getFilePath(), this.modId, VALID_LABEL.pattern());
|
||||
throw new InvalidModFileException("Invalid modId found : "+ this.modId, owningFile);
|
||||
}
|
||||
this.namespace = modConfig.<String>getOptional("namespace").orElse(this.modId);
|
||||
if (!VALID_LABEL.matcher(this.namespace).matches()) {
|
||||
LOGGER.fatal("Invalid override namespace found in file {} - {} does not match the standard: {}", this.owningFile.getFile().getFilePath(), this.namespace, VALID_LABEL.pattern());
|
||||
throw new InvalidModFileException("Invalid override namespace found : "+ this.namespace, owningFile);
|
||||
}
|
||||
this.version = modConfig.<String>getOptional("version").
|
||||
map(s->StringSubstitutor.replace(s, owningFile != null ? owningFile.getFile() : null )).
|
||||
map(DefaultArtifactVersion::new).orElse(DEFAULT_VERSION);
|
||||
|
@ -102,6 +118,16 @@ public class ModInfo implements IModInfo
|
|||
return this.modConfig;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getNamespace() {
|
||||
return this.namespace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getModProperties() {
|
||||
return this.properties;
|
||||
}
|
||||
|
||||
public Optional<String> getLogoFile()
|
||||
{
|
||||
return this.owningFile != null ? this.owningFile.getConfig().getOptional("logoFile") : this.modConfig.getOptional("logoFile");
|
||||
|
|
|
@ -29,7 +29,6 @@ import java.util.Map;
|
|||
import java.util.Optional;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* The container that wraps around mods in the system.
|
||||
|
@ -46,8 +45,8 @@ import java.util.regex.Pattern;
|
|||
|
||||
public abstract class ModContainer
|
||||
{
|
||||
private static final Pattern VALID_MODIDS = Pattern.compile("^[a-z0-9_-]{3,64}$");
|
||||
protected final String modId;
|
||||
protected final String namespace;
|
||||
protected final IModInfo modInfo;
|
||||
protected ModLoadingStage modLoadingStage;
|
||||
protected final Map<ModLoadingStage, Consumer<LifecycleEventProvider.LifecycleEvent>> triggerMap;
|
||||
|
@ -55,9 +54,9 @@ public abstract class ModContainer
|
|||
|
||||
public ModContainer(IModInfo info)
|
||||
{
|
||||
if (!VALID_MODIDS.matcher(info.getModId()).matches())
|
||||
throw new IllegalArgumentException("Invalid modid " + info.getModId() + "! Mod ids need to be lowercase alphanumeric characters or '-'/'_' and need to be between 3 and 64 chars long.");
|
||||
this.modId = info.getModId();
|
||||
// TODO: Currently not reading namespace from configuration..
|
||||
this.namespace = this.modId;
|
||||
this.modInfo = info;
|
||||
this.triggerMap = new HashMap<>();
|
||||
this.modLoadingStage = ModLoadingStage.CONSTRUCT;
|
||||
|
@ -74,9 +73,9 @@ public abstract class ModContainer
|
|||
/**
|
||||
* @return the resource prefix for the mod
|
||||
*/
|
||||
public final String getPrefix()
|
||||
public final String getNamespace()
|
||||
{
|
||||
return modId;
|
||||
return namespace;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -276,7 +276,7 @@ public class ForgeRegistry<V extends IForgeRegistryEntry<V>> implements IForgeRe
|
|||
|
||||
int add(int id, V value)
|
||||
{
|
||||
final String owner = ModThreadContext.get().getActiveContainer().getPrefix();
|
||||
final String owner = ModThreadContext.get().getActiveContainer().getNamespace();
|
||||
return add(id, value, owner);
|
||||
}
|
||||
|
||||
|
|
|
@ -56,7 +56,6 @@ import org.apache.logging.log4j.MarkerManager;
|
|||
import javax.annotation.Nullable;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
@ -821,7 +820,7 @@ public class GameData
|
|||
int index = name.lastIndexOf(':');
|
||||
String oldPrefix = index == -1 ? "" : name.substring(0, index).toLowerCase(Locale.ROOT);
|
||||
name = index == -1 ? name : name.substring(index + 1);
|
||||
String prefix = ModThreadContext.get().getActiveContainer().getPrefix();
|
||||
String prefix = ModThreadContext.get().getActiveContainer().getNamespace();
|
||||
if (!oldPrefix.equals(prefix) && oldPrefix.length() > 0)
|
||||
{
|
||||
LogManager.getLogger().info("Potentially Dangerous alternative prefix `{}` for name `{}`, expected `{}`. This could be a intended override, but in most cases indicates a broken mod.", oldPrefix, name, prefix);
|
||||
|
|
Loading…
Reference in a new issue