diff options
author | SHsuperCM <shsupercm@gmail.com> | 2021-08-20 18:08:11 +0300 |
---|---|---|
committer | SHsuperCM <shsupercm@gmail.com> | 2021-08-20 18:08:11 +0300 |
commit | c684710b01ed4d1b9b5363c392e24f31d31c527a (patch) | |
tree | 890eafd67c923f91b7d634f3c1880a821003ae79 /src/main/java/shcm/shsupercm/fabric | |
parent | ec00a9307d3eadca3a7407173320f7f941401164 (diff) | |
download | CITResewn-c684710b01ed4d1b9b5363c392e24f31d31c527a.tar.gz CITResewn-c684710b01ed4d1b9b5363c392e24f31d31c527a.tar.bz2 CITResewn-c684710b01ed4d1b9b5363c392e24f31d31c527a.zip |
Finished parser framework and cit.properties parsing
Diffstat (limited to 'src/main/java/shcm/shsupercm/fabric')
-rw-r--r-- | src/main/java/shcm/shsupercm/fabric/citresewn/ActiveCITs.java | 17 | ||||
-rw-r--r-- | src/main/java/shcm/shsupercm/fabric/citresewn/CITResewn.java (renamed from src/main/java/shcm/shsupercm/fabric/citresewn/CITResewnClient.java) | 20 | ||||
-rw-r--r-- | src/main/java/shcm/shsupercm/fabric/citresewn/mixin/IdentifierMixin.java | 2 | ||||
-rw-r--r-- | src/main/java/shcm/shsupercm/fabric/citresewn/mixin/ReloadableResourceManagerImplMixin.java | 23 | ||||
-rw-r--r-- | src/main/java/shcm/shsupercm/fabric/citresewn/pack/CITPack.java | 48 | ||||
-rw-r--r-- | src/main/java/shcm/shsupercm/fabric/citresewn/pack/CITParser.java | 69 | ||||
-rw-r--r-- | src/main/java/shcm/shsupercm/fabric/citresewn/pack/cits/CIT.java | 4 |
7 files changed, 156 insertions, 27 deletions
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/ActiveCITs.java b/src/main/java/shcm/shsupercm/fabric/citresewn/ActiveCITs.java new file mode 100644 index 0000000..3b87619 --- /dev/null +++ b/src/main/java/shcm/shsupercm/fabric/citresewn/ActiveCITs.java @@ -0,0 +1,17 @@ +package shcm.shsupercm.fabric.citresewn; + +import shcm.shsupercm.fabric.citresewn.pack.cits.CIT; + +import java.util.Collection; + +public class ActiveCITs { + + + public ActiveCITs(Collection<CIT> cits) { + + } + + public void dispose() { + + } +} diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/CITResewnClient.java b/src/main/java/shcm/shsupercm/fabric/citresewn/CITResewn.java index 57f628e..fa084ef 100644 --- a/src/main/java/shcm/shsupercm/fabric/citresewn/CITResewnClient.java +++ b/src/main/java/shcm/shsupercm/fabric/citresewn/CITResewn.java @@ -3,21 +3,15 @@ package shcm.shsupercm.fabric.citresewn; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.item.ArmorItem; -import net.minecraft.resource.ReloadableResourceManager; -import net.minecraft.resource.ResourceManager; -import net.minecraft.resource.ResourceReloader; -import net.minecraft.util.profiler.Profiler; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; @Environment(EnvType.CLIENT) -public class CITResewnClient implements ClientModInitializer { - public static CITResewnClient INSTANCE; +public class CITResewn implements ClientModInitializer { + public static final Logger LOG = LogManager.getLogger("citresewn"); + public static CITResewn INSTANCE; + + public ActiveCITs activeCITs = null; @Override public void onInitializeClient() { diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/IdentifierMixin.java b/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/IdentifierMixin.java index 2effef9..10b67f0 100644 --- a/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/IdentifierMixin.java +++ b/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/IdentifierMixin.java @@ -11,7 +11,7 @@ public class IdentifierMixin { @Inject(method = "isPathValid(Ljava/lang/String;)Z", cancellable = true, at = @At("HEAD")) private static void isPathValid(String path, CallbackInfoReturnable<Boolean> ci) { - if(path.startsWith("optifine")) + if(path.startsWith("citresewn") || path.startsWith("optifine") || path.startsWith("mcpatcher")) ci.setReturnValue(true); return; } } diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/ReloadableResourceManagerImplMixin.java b/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/ReloadableResourceManagerImplMixin.java index 01b092b..fb5a267 100644 --- a/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/ReloadableResourceManagerImplMixin.java +++ b/src/main/java/shcm/shsupercm/fabric/citresewn/mixin/ReloadableResourceManagerImplMixin.java @@ -1,6 +1,5 @@ package shcm.shsupercm.fabric.citresewn.mixin; -import net.minecraft.client.MinecraftClient; import net.minecraft.resource.*; import net.minecraft.util.Identifier; import net.minecraft.util.Unit; @@ -10,6 +9,10 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import shcm.shsupercm.fabric.citresewn.ActiveCITs; +import shcm.shsupercm.fabric.citresewn.CITResewn; +import shcm.shsupercm.fabric.citresewn.pack.CITParser; +import shcm.shsupercm.fabric.citresewn.pack.cits.CIT; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -29,20 +32,14 @@ public abstract class ReloadableResourceManagerImplMixin implements ReloadableRe if (this.type != ResourceType.CLIENT_RESOURCES) return; - Map<String, ResourcePack> citFiles = new HashMap<>(); - for (ResourcePack pack : packs) { - for (Identifier identifier : pack.findResources(ResourceType.CLIENT_RESOURCES, "minecraft", "citresewn/cit", 5, s -> true)) - citFiles.put(identifier.getPath(), pack); - for (Identifier identifier : pack.findResources(ResourceType.CLIENT_RESOURCES, "minecraft", "mcpatcher/cit", 5, s -> true)) - citFiles.put(identifier.getPath(), pack); - for (Identifier identifier : pack.findResources(ResourceType.CLIENT_RESOURCES, "minecraft", "optifine/cit", 5, s -> true)) - citFiles.put(identifier.getPath(), pack); + if (CITResewn.INSTANCE.activeCITs != null) { + CITResewn.INSTANCE.activeCITs.dispose(); + CITResewn.INSTANCE.activeCITs = null; } - for (Map.Entry<String, ResourcePack> citFile : citFiles.entrySet()) { + Collection<CIT> cits = CITParser.parse(packs); - } - - new String(); + if (cits.size() > 0) + CITResewn.INSTANCE.activeCITs = new ActiveCITs(cits); } }
\ No newline at end of file diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/pack/CITPack.java b/src/main/java/shcm/shsupercm/fabric/citresewn/pack/CITPack.java new file mode 100644 index 0000000..27b693a --- /dev/null +++ b/src/main/java/shcm/shsupercm/fabric/citresewn/pack/CITPack.java @@ -0,0 +1,48 @@ +package shcm.shsupercm.fabric.citresewn.pack; + +import net.minecraft.resource.ResourcePack; +import shcm.shsupercm.fabric.citresewn.CITResewn; +import shcm.shsupercm.fabric.citresewn.pack.cits.CIT; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Properties; + +public class CITPack { + public final ResourcePack resourcePack; + public final Collection<CIT> cits = new ArrayList<>(); + + private EnchantmentMergeMethod method = EnchantmentMergeMethod.AVERAGE; + private int cap = 8; + private float fade = 0.5f; + private boolean useGlint = true; + + public CITPack(ResourcePack resourcePack) { + this.resourcePack = resourcePack; + } + + public void loadProperties(Properties properties) { + method = CITPack.EnchantmentMergeMethod.valueOf(properties.getProperty("method", "average")); + try { + cap = Integer.parseInt(properties.getProperty("cap", "8")); + } catch (NumberFormatException e) { + CITResewn.LOG.error("Skipped property: cap is not a whole number in cit.properties inside " + resourcePack.getName()); + } + try { + fade = Float.parseFloat(properties.getProperty("fade", "0.5")); + } catch (NumberFormatException e) { + CITResewn.LOG.error("Skipped property: fade is not a number in cit.properties inside " + resourcePack.getName()); + } + switch (properties.getProperty("useGlint", "true")) { + case "true" -> useGlint = true; + case "false" -> useGlint = false; + default -> CITResewn.LOG.error("Skipped property: useGlint is not a boolean in cit.properties inside " + resourcePack.getName()); + } + } + + public enum EnchantmentMergeMethod { + AVERAGE, + LAYERED, + CYCLE + } +} diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/pack/CITParser.java b/src/main/java/shcm/shsupercm/fabric/citresewn/pack/CITParser.java new file mode 100644 index 0000000..c3db062 --- /dev/null +++ b/src/main/java/shcm/shsupercm/fabric/citresewn/pack/CITParser.java @@ -0,0 +1,69 @@ +package shcm.shsupercm.fabric.citresewn.pack; + +import net.minecraft.resource.ResourcePack; +import net.minecraft.resource.ResourceType; +import net.minecraft.util.Identifier; +import shcm.shsupercm.fabric.citresewn.pack.cits.CIT; + +import java.io.InputStream; +import java.util.*; +import java.util.function.Predicate; + +public class CITParser { private CITParser() {} + + /** + * Parses cit entries from an ordered collection of resourcepacks. + * @param packs packs to parse + * @return a collection of parsed CITs + */ + public static Collection<CIT> parse(Collection<ResourcePack> packs) { + Collection<CIT> cits = new ArrayList<>(); + + // load cit resourcepack entries + Map<ResourcePack, Set<Identifier>> citPacks = new HashMap<>(); + final Predicate<String> isProperties = s -> s.endsWith(".properties"); + Identifier citresewnCITSettingsIdentifier = new Identifier("minecraft", "citresewn/cit.properties"), mcpatcherCITSettingsIdentifier = new Identifier("minecraft", "mcpatcher/cit.properties"), optifineCITSettingsIdentifier = new Identifier("minecraft", "optifine/cit.properties"); + for (ResourcePack pack : packs) { + Set<Identifier> packIdentifiers = new HashSet<>(); + packIdentifiers.addAll(pack.findResources(ResourceType.CLIENT_RESOURCES, "minecraft", "citresewn/cit", 5, isProperties)); + if (pack.contains(ResourceType.CLIENT_RESOURCES, citresewnCITSettingsIdentifier)) + packIdentifiers.add(citresewnCITSettingsIdentifier); + packIdentifiers.addAll(pack.findResources(ResourceType.CLIENT_RESOURCES, "minecraft", "mcpatcher/cit", 5, isProperties)); + if (pack.contains(ResourceType.CLIENT_RESOURCES, mcpatcherCITSettingsIdentifier)) + packIdentifiers.add(mcpatcherCITSettingsIdentifier); + packIdentifiers.addAll(pack.findResources(ResourceType.CLIENT_RESOURCES, "minecraft", "optifine/cit", 5, isProperties)); + if (pack.contains(ResourceType.CLIENT_RESOURCES, optifineCITSettingsIdentifier)) + packIdentifiers.add(optifineCITSettingsIdentifier); + + if (packIdentifiers.size() > 0) + citPacks.put(pack, packIdentifiers); + } + + for (Map.Entry<ResourcePack, Set<Identifier>> citPackEntry : citPacks.entrySet()) { + CITPack citPack = new CITPack(citPackEntry.getKey()); + for (Identifier citIdentifier : citPackEntry.getValue()) { + try { + InputStream is = citPackEntry.getKey().open(ResourceType.CLIENT_RESOURCES, citIdentifier); + Properties citProperties = new Properties(); + citProperties.load(is); + is.close(); + + if (citIdentifier == citresewnCITSettingsIdentifier || citIdentifier == mcpatcherCITSettingsIdentifier || citIdentifier == optifineCITSettingsIdentifier) + citPack.loadProperties(citProperties); + else + citPack.cits.add(parseCIT(citPack, citIdentifier, citProperties)); + + } catch (Exception e) { + e.printStackTrace(); + } + } + cits.addAll(citPack.cits); + } + + return cits; + } + + public static CIT parseCIT(CITPack pack, Identifier identifier, Properties properties) { + return null; + } +} diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/pack/cits/CIT.java b/src/main/java/shcm/shsupercm/fabric/citresewn/pack/cits/CIT.java new file mode 100644 index 0000000..8d4dc65 --- /dev/null +++ b/src/main/java/shcm/shsupercm/fabric/citresewn/pack/cits/CIT.java @@ -0,0 +1,4 @@ +package shcm.shsupercm.fabric.citresewn.pack.cits; + +public abstract class CIT { +} |