From 88d6b4f5c3985bd7362b429b9205eaaa9d204fbe Mon Sep 17 00:00:00 2001 From: Motschen Date: Sun, 9 Jan 2022 15:32:24 +0100 Subject: [PATCH] Puzzle 1.1.0 - Use IrisAPI, Deactivatable Integrations, Remove puzzle-blocks - Use the new Iris API - Builtin mod support is now configurable - Puzzle button in Options screen can be disabled - Remove puzzle-blocks (Already covered by Continuity) - Fix #4 - Fix #5 - Fix #6 - Fix #7 --- gradle.properties | 4 +- puzzle-base/build.gradle | 8 +- .../java/net/puzzlemc/core/PuzzleCore.java | 2 +- .../core/config/MidnightConfigLite.java | 69 -------------- .../puzzlemc/core/config/PuzzleConfig.java | 10 +- .../puzzlemc/core/mixin/MixinTitleScreen.java | 11 ++- .../net/puzzlemc/core/util/UpdateChecker.java | 1 - puzzle-blocks/build.gradle | 4 - .../net/puzzlemc/blocks/PuzzleBlocks.java | 87 ------------------ .../src/main/resources/assets/puzzle/icon.png | Bin 2387 -> 0 bytes .../src/main/resources/fabric.mod.json | 36 -------- puzzle-emissives/build.gradle | 7 +- .../java/net/puzzlemc/gui/IrisCompat.java | 30 ++---- .../java/net/puzzlemc/gui/PuzzleClient.java | 31 +++---- .../gui/config/ModMenuIntegration.java | 8 +- .../gui/mixin/MixinOptionsScreen.java | 2 + puzzle-models/build.gradle | 7 +- puzzle-splashscreen/build.gradle | 7 +- settings.gradle | 2 - .../resources/assets/puzzle/lang/en_us.json | 4 +- 20 files changed, 73 insertions(+), 257 deletions(-) delete mode 100755 puzzle-base/src/main/java/net/puzzlemc/core/config/MidnightConfigLite.java delete mode 100755 puzzle-blocks/build.gradle delete mode 100755 puzzle-blocks/src/main/java/net/puzzlemc/blocks/PuzzleBlocks.java delete mode 100644 puzzle-blocks/src/main/resources/assets/puzzle/icon.png delete mode 100755 puzzle-blocks/src/main/resources/fabric.mod.json diff --git a/gradle.properties b/gradle.properties index 407ecbb..72bf499 100755 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx1G loader_version=0.12.12 # Mod Properties - mod_version = 1.0.0 + mod_version = 1.1.0 maven_group = net.puzzlemc archives_base_name = puzzle @@ -20,7 +20,7 @@ org.gradle.jvmargs=-Xmx1G cull_leaves_version = 2.3.2 ldl_version = 2.1.0+1.17 lbg_version = 1.2.2+1.17 - iris_version = mc1.18.1-1.1.3 + iris_version = 1.18.x-v1.1.4 continuity_version = 1.0.3+1.18 animatica_version = 0.2+1.18 cit_resewn_version = 0.8.1-1.18 diff --git a/puzzle-base/build.gradle b/puzzle-base/build.gradle index 65a1e2d..b7f5bfe 100755 --- a/puzzle-base/build.gradle +++ b/puzzle-base/build.gradle @@ -1,3 +1,9 @@ archivesBaseName = "puzzle-base" -dependencies { +repositories { + maven { + url = "https://api.modrinth.com/maven" + } +} +dependencies { + modImplementation "maven.modrinth:midnightlib:${project.midnightlib_version}" } diff --git a/puzzle-base/src/main/java/net/puzzlemc/core/PuzzleCore.java b/puzzle-base/src/main/java/net/puzzlemc/core/PuzzleCore.java index 2c560ce..79c2f6f 100755 --- a/puzzle-base/src/main/java/net/puzzlemc/core/PuzzleCore.java +++ b/puzzle-base/src/main/java/net/puzzlemc/core/PuzzleCore.java @@ -11,7 +11,7 @@ public class PuzzleCore implements ClientModInitializer { public final static String name = "Puzzle"; public final static String id = "puzzle"; public final static String website = "https://github.com/PuzzleMC/Puzzle"; - public static String updateURL = "https://modrinth.com/mod/puzzle"; + public final static String updateURL = "https://modrinth.com/mod/puzzle"; public final static String UPDATE_CHECKER_URL = "https://raw.githubusercontent.com/PuzzleMC/Puzzle-Versions/main/puzzle_versions.json"; diff --git a/puzzle-base/src/main/java/net/puzzlemc/core/config/MidnightConfigLite.java b/puzzle-base/src/main/java/net/puzzlemc/core/config/MidnightConfigLite.java deleted file mode 100755 index d5d9a07..0000000 --- a/puzzle-base/src/main/java/net/puzzlemc/core/config/MidnightConfigLite.java +++ /dev/null @@ -1,69 +0,0 @@ -package net.puzzlemc.core.config; - -import com.google.gson.ExclusionStrategy; -import com.google.gson.FieldAttributes; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import net.fabricmc.loader.api.FabricLoader; - -import java.lang.annotation.*; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.*; - -// MidnightConfigLite v0.2.0 -// Just writing and parsing of config files - -/** Based on https://github.com/Minenash/TinyConfig - * Credits to Minenash */ - -public class MidnightConfigLite { - - protected static class EntryInfo { - Object defaultValue; - } - - public static final Map> configClass = new HashMap<>(); - private static Path path; - - private static final Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).excludeFieldsWithModifiers(Modifier.PRIVATE).addSerializationExclusionStrategy(new HiddenAnnotationExclusionStrategy()).setPrettyPrinting().create(); - - public static void init(String modid, Class config) { - path = FabricLoader.getInstance().getConfigDir().resolve(modid + ".json"); - configClass.put(modid, config); - - for (Field field : config.getFields()) { - EntryInfo info = new EntryInfo(); - if (field.isAnnotationPresent(Entry.class)) - try { - info.defaultValue = field.get(null); - } catch (IllegalAccessException ignored) {} - } - try { gson.fromJson(Files.newBufferedReader(path), config); } - catch (Exception e) { write(modid); } - } - - public static void write(String modid) { - path = FabricLoader.getInstance().getConfigDir().resolve(modid + ".json"); - try { - if (!Files.exists(path)) Files.createFile(path); - Files.write(path, gson.toJson(configClass.get(modid).getDeclaredConstructor().newInstance()).getBytes()); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @Retention(RetentionPolicy.RUNTIME) - @Target(ElementType.FIELD) - public @interface Entry { - } - - public static class HiddenAnnotationExclusionStrategy implements ExclusionStrategy { - public boolean shouldSkipClass(Class clazz) { return false; } - public boolean shouldSkipField(FieldAttributes fieldAttributes) { - return fieldAttributes.getAnnotation(Entry.class) == null; - } - } -} \ No newline at end of file diff --git a/puzzle-base/src/main/java/net/puzzlemc/core/config/PuzzleConfig.java b/puzzle-base/src/main/java/net/puzzlemc/core/config/PuzzleConfig.java index e555e97..451549a 100755 --- a/puzzle-base/src/main/java/net/puzzlemc/core/config/PuzzleConfig.java +++ b/puzzle-base/src/main/java/net/puzzlemc/core/config/PuzzleConfig.java @@ -1,6 +1,13 @@ package net.puzzlemc.core.config; -public class PuzzleConfig extends MidnightConfigLite { +import eu.midnightdust.lib.config.MidnightConfig; + +import java.util.ArrayList; +import java.util.List; + +public class PuzzleConfig extends MidnightConfig { + @Entry public static List disabledIntegrations = new ArrayList<>(); + @Entry public static boolean enablePuzzleButton = true; @Entry public static boolean debugMessages = false; @Entry public static boolean checkUpdates = true; @@ -8,7 +15,6 @@ public class PuzzleConfig extends MidnightConfigLite { @Entry public static boolean resourcepackSplashScreen = true; @Entry public static boolean disableSplashScreenBlend = false; @Entry public static boolean emissiveTextures = true; - @Entry public static boolean customRenderLayers = true; @Entry public static boolean unlimitedRotations = true; @Entry public static boolean biggerModels = true; diff --git a/puzzle-base/src/main/java/net/puzzlemc/core/mixin/MixinTitleScreen.java b/puzzle-base/src/main/java/net/puzzlemc/core/mixin/MixinTitleScreen.java index 0a6d46e..2ef08cb 100755 --- a/puzzle-base/src/main/java/net/puzzlemc/core/mixin/MixinTitleScreen.java +++ b/puzzle-base/src/main/java/net/puzzlemc/core/mixin/MixinTitleScreen.java @@ -1,5 +1,6 @@ package net.puzzlemc.core.mixin; +import net.fabricmc.loader.api.FabricLoader; import net.puzzlemc.core.PuzzleCore; import net.puzzlemc.core.config.PuzzleConfig; import net.puzzlemc.core.util.UpdateChecker; @@ -26,12 +27,14 @@ public abstract class MixinTitleScreen extends Screen { @Shadow private long backgroundFadeStart; private Text puzzleText; private int puzzleTextWidth; + private int yOffset = 20; protected MixinTitleScreen(Text title) { super(title); } @Inject(at = @At("TAIL"), method = "init") private void puzzle$init(CallbackInfo ci) { + if (FabricLoader.getInstance().isModLoaded("dashloader")) yOffset = yOffset + 10; if (UpdateChecker.isUpToDate) { puzzleText = Text.of(PuzzleCore.version); } @@ -47,9 +50,9 @@ public abstract class MixinTitleScreen extends Screen { float f = this.doBackgroundFade ? (float) (Util.getMeasuringTimeMs() - this.backgroundFadeStart) / 1000.0F : 1.0F; float g = this.doBackgroundFade ? MathHelper.clamp(f - 1.0F, 0.0F, 1.0F) : 1.0F; int l = MathHelper.ceil(g * 255.0F) << 24; - textRenderer.drawWithShadow(matrices, puzzleText,2,this.height - 20, 16777215 | l); - if (mouseX > 2 && mouseX < 2 + this.puzzleTextWidth && mouseY > this.height - 20 && mouseY < this.height - 10) { - fill(matrices, 2, this.height - 11, 2 + this.puzzleTextWidth, this.height-10, 16777215 | l); + textRenderer.drawWithShadow(matrices, puzzleText,2,this.height - yOffset, 16777215 | l); + if (mouseX > 2 && mouseX < 2 + this.puzzleTextWidth && mouseY > this.height - yOffset && mouseY < this.height - yOffset + 10) { + fill(matrices, 2, this.height - yOffset + 9, 2 + this.puzzleTextWidth, this.height - yOffset + 10, 16777215 | l); } } } @@ -63,7 +66,7 @@ public abstract class MixinTitleScreen extends Screen { @Inject(at = @At("HEAD"), method = "mouseClicked",cancellable = true) private void puzzle$mouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable cir) { - if (mouseX > 2 && mouseX < (double)(2 + this.puzzleTextWidth) && mouseY > (double)(this.height - 20) && mouseY < (double)this.height-10) { + if (mouseX > 2 && mouseX < (double)(2 + this.puzzleTextWidth) && mouseY > (double)(this.height - yOffset) && mouseY < (double)this.height - yOffset + 10) { if (Objects.requireNonNull(this.client).options.chatLinksPrompt) { this.client.setScreen(new ConfirmChatLinkScreen(this::confirmLink, PuzzleCore.updateURL, true)); } else { diff --git a/puzzle-base/src/main/java/net/puzzlemc/core/util/UpdateChecker.java b/puzzle-base/src/main/java/net/puzzlemc/core/util/UpdateChecker.java index f8bfa8c..4167665 100755 --- a/puzzle-base/src/main/java/net/puzzlemc/core/util/UpdateChecker.java +++ b/puzzle-base/src/main/java/net/puzzlemc/core/util/UpdateChecker.java @@ -43,7 +43,6 @@ public class UpdateChecker { latestVersion = versionMap.get(minecraftVersion); if (!latestVersion.equals(PuzzleCore.version)) { isUpToDate = false; - PuzzleCore.updateURL = PuzzleCore.website + "download/" + latestVersion.replace(PuzzleCore.name + " ",""); logger.log(Level.INFO, "There is a newer version of "+ PuzzleCore.name +" available: " + latestVersion); logger.log(Level.INFO, "Please update immediately!"); } diff --git a/puzzle-blocks/build.gradle b/puzzle-blocks/build.gradle deleted file mode 100755 index e4d8604..0000000 --- a/puzzle-blocks/build.gradle +++ /dev/null @@ -1,4 +0,0 @@ -archivesBaseName = "puzzle-blocks" -dependencies { - api project(":puzzle-base") -} diff --git a/puzzle-blocks/src/main/java/net/puzzlemc/blocks/PuzzleBlocks.java b/puzzle-blocks/src/main/java/net/puzzlemc/blocks/PuzzleBlocks.java deleted file mode 100755 index 3319ebe..0000000 --- a/puzzle-blocks/src/main/java/net/puzzlemc/blocks/PuzzleBlocks.java +++ /dev/null @@ -1,87 +0,0 @@ -package net.puzzlemc.blocks; - -import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.fabric.api.resource.ResourceManagerHelper; -import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener; -import net.fabricmc.fabric.impl.blockrenderlayer.BlockRenderLayerMapImpl; -import net.minecraft.block.Block; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.resource.ResourceManager; -import net.minecraft.resource.ResourceType; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; -import net.puzzlemc.core.config.PuzzleConfig; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import java.io.InputStream; -import java.util.Arrays; -import java.util.Properties; - -public class PuzzleBlocks implements ClientModInitializer { - Logger LOGGER = LogManager.getLogger("puzzle-blocks"); - - public void onInitializeClient() { - ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener(new SimpleSynchronousResourceReloadListener() { - @Override - public Identifier getFabricId() { - return new Identifier("puzzle", "blocks"); - } - - @Override - public void reload(ResourceManager manager) { - if (PuzzleConfig.customRenderLayers) { - for (Identifier id : manager.findResources("optifine", path -> path.contains("block.properties"))) { - try (InputStream stream = manager.getResource(id).getInputStream()) { - Properties properties = new Properties(); - properties.load(stream); - - if (properties.get("layer.solid") != null) { - String[] solid_blocks = properties.get("layer.solid").toString().split(" "); - Arrays.stream(solid_blocks).iterator().forEachRemaining(string -> { - if (PuzzleConfig.debugMessages) LOGGER.info(string + " -> solid"); - Block block = Registry.BLOCK.getOrEmpty(Identifier.tryParse(string)).get(); - if (Registry.BLOCK.getOrEmpty(Identifier.tryParse(string)).isPresent()) { - BlockRenderLayerMapImpl.INSTANCE.putBlock(block, RenderLayer.getSolid()); - } - }); - } - if (properties.get("layer.cutout") != null) { - String[] solid_blocks = properties.get("layer.cutout").toString().split(" "); - Arrays.stream(solid_blocks).iterator().forEachRemaining(string -> { - if (PuzzleConfig.debugMessages) LOGGER.info(string + " -> cutout"); - Block block = Registry.BLOCK.getOrEmpty(Identifier.tryParse(string)).get(); - if (Registry.BLOCK.getOrEmpty(Identifier.tryParse(string)).isPresent()) { - BlockRenderLayerMapImpl.INSTANCE.putBlock(block, RenderLayer.getCutout()); - } - }); - } - if (properties.get("layer.cutout_mipped") != null) { - String[] solid_blocks = properties.get("layer.cutout_mipped").toString().split(" "); - Arrays.stream(solid_blocks).iterator().forEachRemaining(string -> { - if (PuzzleConfig.debugMessages) LOGGER.info(string + " -> cutout_mipped"); - Block block = Registry.BLOCK.getOrEmpty(Identifier.tryParse(string)).get(); - if (Registry.BLOCK.getOrEmpty(Identifier.tryParse(string)).isPresent()) { - BlockRenderLayerMapImpl.INSTANCE.putBlock(block, RenderLayer.getCutoutMipped()); - } - }); - } - if (properties.get("layer.translucent") != null) { - String[] solid_blocks = properties.get("layer.translucent").toString().split(" "); - Arrays.stream(solid_blocks).iterator().forEachRemaining(string -> { - if (PuzzleConfig.debugMessages) LOGGER.info(string + " -> translucent"); - Block block = Registry.BLOCK.getOrEmpty(Identifier.tryParse(string)).get(); - if (Registry.BLOCK.getOrEmpty(Identifier.tryParse(string)).isPresent()) { - BlockRenderLayerMapImpl.INSTANCE.putBlock(block, RenderLayer.getTranslucent()); - } - }); - } - } catch (Exception e) { - LogManager.getLogger("Puzzle").error("Error occurred while loading block.properties " + id.toString(), e); - } - } - } - } - }); - } -} diff --git a/puzzle-blocks/src/main/resources/assets/puzzle/icon.png b/puzzle-blocks/src/main/resources/assets/puzzle/icon.png deleted file mode 100644 index 0050c65296e5f22a25407a433cd2679b1c85c244..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2387 zcmY*bXH=8h68%Ca3PC{HqZjF&t5S?yiWC(hy<-9wt{_B0APPto5Tz*>rHY73v(Te- zp8jAt z21rzR`LdN900_-F+5PEpx#CBq|3wd?;$TYR{t-wbI0uJ%1g}3m58fU9!Tr zeO@n}tgYPz8V0zbfwO`>!dxvE?=6s*^DpxJE}*N;W&6Innp!Lsd3E>uHNwgddHs5-gQF9 z9ip_~9E!riHH*l14NVj0`Rb9qD#t9l)-1eB2xX&62hz!?U7Ur*-7voXoDP?LoPXSB2NtV(G0L}`sfOh)9)j9(c<WQUI&O`A;c-d z8U-nq_dt!Bl|`ep3KoX+X1GE!Mh;2zd^d<16Re}O<&6;C=*7QZU6?!0zxTu^ z_i=4i*q-ilu|VuIA={Np1R4FCB7uSQ5Z>h9!iPo=`**>4{Sy)#CAHlqCQ??EOY5~&bNDF1 zNw*$f-Ho1JWRhiS?hGhgZ6Rh@k<2n)eg#!21h+-r)^oA64b&LNJ9aXIr@}Y zA73hFT{;}lpe}CltRQ+reBXC;JTRT~e$K-#32x$hp<;lAysJC5p2i$^QH_hE<-Su* zlucNL?YLAIuj!v4v1m24+%MCuXGBGr-?G)QvW$xF+dGmuBs6V5x) ztmgTc5Bc)1CNCGHoeoYJW4tNgWi!vMw8s#QX5pWgf-b%h1zLvHr{A5c=sUr$M>^IS zuOH=*-_)5as0klf*_vHv+zpx^ba(F?4eka$qMx*#Adyb_v%vx-OWzkp%8|E6QtGrx z*wxS3)2wkz95!0x;P&G3%xGR7Xrc{cSUEFew)~-;zS~+a84hJ$-%nlvxv>4mSY}H7 z7H6-N+r2cOo}Aj)`WQ>#Z8otvhq#=#2erJReY6RR%zP&Fu!M_$ zEez#W0@7GuZB($;z0S?iG$lp=ronv*_)n*TjV(Be=i|Yi;0sjgQGh7LY1|}EyiTSW zw<0_d2SZDPQNkHL6wo@(0oGKm2c?br_ zLtm_Xi1dqIN4yU_V@hw%rKYJ*G|DfXMJ>To=?@p{(xg-3_E>cL8e&0O9d^YX7WoT{G$bBUF|r}x$Jh~VmrgNp+= n=^HtDg1A-=EMmjKSxWsgD8q}1uA-a|5#VI+V)xAEeENR?b%&di diff --git a/puzzle-blocks/src/main/resources/fabric.mod.json b/puzzle-blocks/src/main/resources/fabric.mod.json deleted file mode 100755 index d8ebea8..0000000 --- a/puzzle-blocks/src/main/resources/fabric.mod.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "schemaVersion": 1, - "id": "puzzle-blocks", - "version": "${version}", - - "name": "Puzzle Blocks", - "description": "Lets resourcepacks change render layers of blocks", - "authors": [ - "PuzzleMC", - "Motschen" - ], - "contact": { - "homepage": "https://www.midnightdust.eu/", - "sources": "https://github.com/TeamMidnightDust/Puzzle", - "issues": "https://github.com/TeamMidnightDust/Puzzle/issues" - }, - - "license": "MIT", - "icon": "assets/puzzle/icon.png", - - "environment": "client", - "entrypoints": { - "client": [ - "net.puzzlemc.blocks.PuzzleBlocks" - ] - }, - "custom": { - "modmenu": { - "parent": "puzzle" - } - }, - - "depends": { - "fabric": "*" - } -} diff --git a/puzzle-emissives/build.gradle b/puzzle-emissives/build.gradle index a7cc7bc..3256a6c 100755 --- a/puzzle-emissives/build.gradle +++ b/puzzle-emissives/build.gradle @@ -1,5 +1,10 @@ archivesBaseName = "puzzle-emissives" - +repositories { + maven { + url = "https://api.modrinth.com/maven" + } +} dependencies { api project(":puzzle-base") + modImplementation "maven.modrinth:midnightlib:${project.midnightlib_version}" } diff --git a/puzzle-gui/src/main/java/net/puzzlemc/gui/IrisCompat.java b/puzzle-gui/src/main/java/net/puzzlemc/gui/IrisCompat.java index 36eed6e..041faa8 100644 --- a/puzzle-gui/src/main/java/net/puzzlemc/gui/IrisCompat.java +++ b/puzzle-gui/src/main/java/net/puzzlemc/gui/IrisCompat.java @@ -1,41 +1,25 @@ package net.puzzlemc.gui; -import net.coderbot.iris.Iris; -import net.coderbot.iris.config.IrisConfig; -import net.coderbot.iris.gui.screen.ShaderPackScreen; import net.fabricmc.loader.api.FabricLoader; +import net.irisshaders.iris.api.v0.IrisApi; +import net.irisshaders.iris.api.v0.IrisApiConfig; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.puzzlemc.gui.screen.widget.PuzzleWidget; -import java.io.IOException; - public class IrisCompat { public static void init() { if (FabricLoader.getInstance().isModLoaded("iris")) { PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.of("Iris"))); - PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.of("Enable Shaders"), (button) -> button.setMessage(Iris.getIrisConfig().areShadersEnabled() ? PuzzleClient.YES : PuzzleClient.NO), (button) -> { - IrisConfig irisConfig = Iris.getIrisConfig(); - irisConfig.setShadersEnabled(!irisConfig.areShadersEnabled()); - try { - Iris.getIrisConfig().save(); - } catch (IOException e) { - Iris.logger.error("Error saving configuration file!"); - Iris.logger.catching(e); - } - - try { - Iris.reload(); - } catch (IOException e) { - Iris.logger.error("Error reloading shader pack while applying changes!"); - Iris.logger.catching(e); - } + PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.of("Enable Shaders"), (button) -> button.setMessage(IrisApi.getInstance().getConfig().areShadersEnabled() ? PuzzleClient.YES : PuzzleClient.NO), (button) -> { + IrisApiConfig irisConfig = IrisApi.getInstance().getConfig(); + irisConfig.setShadersEnabledAndApply(!irisConfig.areShadersEnabled()); })); PuzzleApi.addToGraphicsOptions(new PuzzleWidget(new TranslatableText("options.iris.shaderPackSelection.title"), (button) -> button.setMessage(Text.of("OPEN")), (button) -> { MinecraftClient client = MinecraftClient.getInstance(); - ShaderPackScreen shaderPackPage = new ShaderPackScreen(client.currentScreen); - client.setScreen(shaderPackPage); + client.setScreen((Screen) IrisApi.getInstance().openMainIrisScreenObj(client.currentScreen)); })); } } diff --git a/puzzle-gui/src/main/java/net/puzzlemc/gui/PuzzleClient.java b/puzzle-gui/src/main/java/net/puzzlemc/gui/PuzzleClient.java index 2a7c302..840815c 100755 --- a/puzzle-gui/src/main/java/net/puzzlemc/gui/PuzzleClient.java +++ b/puzzle-gui/src/main/java/net/puzzlemc/gui/PuzzleClient.java @@ -30,6 +30,7 @@ public class PuzzleClient implements ClientModInitializer { @Override public void onInitializeClient() { + MinecraftClient client = MinecraftClient.getInstance(); PuzzleApi.addToMiscOptions(new PuzzleWidget(Text.of("Puzzle"))); PuzzleApi.addToMiscOptions(new PuzzleWidget(new TranslatableText("puzzle.option.check_for_updates"), (button) -> button.setMessage(PuzzleConfig.checkUpdates ? YES : NO), (button) -> { PuzzleConfig.checkUpdates = !PuzzleConfig.checkUpdates; @@ -39,8 +40,11 @@ public class PuzzleClient implements ClientModInitializer { PuzzleConfig.showPuzzleInfo = !PuzzleConfig.showPuzzleInfo; PuzzleConfig.write(id); })); + PuzzleApi.addToMiscOptions(new PuzzleWidget(new TranslatableText("puzzle.midnightconfig.title"), (button) -> button.setMessage(Text.of("OPEN")), (button) -> { + client.setScreen(PuzzleConfig.getScreen(client.currentScreen, "puzzle")); + })); PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("Puzzle"))); - if (FabricLoader.getInstance().isModLoaded("puzzle-splashscreen")) { + if (FabricLoader.getInstance().isModLoaded("puzzle-splashscreen") && !PuzzleConfig.disabledIntegrations.contains("puzzle-splashscreen")) { PuzzleApi.addToResourceOptions(new PuzzleWidget(new TranslatableText("puzzle.option.resourcepack_splash_screen"), (button) -> button.setMessage(PuzzleConfig.resourcepackSplashScreen ? YES : NO), (button) -> { PuzzleConfig.resourcepackSplashScreen = !PuzzleConfig.resourcepackSplashScreen; PuzzleConfig.write(id); @@ -52,13 +56,13 @@ public class PuzzleClient implements ClientModInitializer { PuzzleConfig.write(id); })); } - if (FabricLoader.getInstance().isModLoaded("puzzle-emissives")) { + if (FabricLoader.getInstance().isModLoaded("puzzle-emissives") && !PuzzleConfig.disabledIntegrations.contains("puzzle-emissives")) { PuzzleApi.addToResourceOptions(new PuzzleWidget(new TranslatableText("puzzle.option.emissive_textures"), (button) -> button.setMessage(PuzzleConfig.emissiveTextures ? YES : NO), (button) -> { PuzzleConfig.emissiveTextures = !PuzzleConfig.emissiveTextures; PuzzleConfig.write(id); })); } - if (FabricLoader.getInstance().isModLoaded("puzzle-models")) { + if (FabricLoader.getInstance().isModLoaded("puzzle-models") && !PuzzleConfig.disabledIntegrations.contains("puzzle-models")) { PuzzleApi.addToResourceOptions(new PuzzleWidget(new TranslatableText("puzzle.option.unlimited_model_rotations"), (button) -> button.setMessage(PuzzleConfig.unlimitedRotations ? YES : NO), (button) -> { PuzzleConfig.unlimitedRotations = !PuzzleConfig.unlimitedRotations; PuzzleConfig.write(id); @@ -68,14 +72,7 @@ public class PuzzleClient implements ClientModInitializer { PuzzleConfig.write(id); })); } - if (FabricLoader.getInstance().isModLoaded("puzzle-blocks")) { - PuzzleApi.addToResourceOptions(new PuzzleWidget(new TranslatableText("puzzle.option.render_layer_overrides"), (button) -> button.setMessage(PuzzleConfig.customRenderLayers ? YES : NO), (button) -> { - PuzzleConfig.customRenderLayers = !PuzzleConfig.customRenderLayers; - PuzzleConfig.write(id); - })); - } - - if (FabricLoader.getInstance().isModLoaded("cullleaves")) { + if (FabricLoader.getInstance().isModLoaded("cullleaves") && !PuzzleConfig.disabledIntegrations.contains("cullleaves")) { PuzzleApi.addToPerformanceOptions(new PuzzleWidget(Text.of("CullLeaves"))); PuzzleApi.addToPerformanceOptions(new PuzzleWidget(Text.of("Cull Leaves"), (button) -> button.setMessage(CullLeavesConfig.enabled ? YES : NO), (button) -> { CullLeavesConfig.enabled = !CullLeavesConfig.enabled; @@ -83,11 +80,11 @@ public class PuzzleClient implements ClientModInitializer { MinecraftClient.getInstance().worldRenderer.reload(); })); } - if (FabricLoader.getInstance().isModLoaded("iris")) { + if (FabricLoader.getInstance().isModLoaded("iris") && !PuzzleConfig.disabledIntegrations.contains("iris")) { IrisCompat.init(); } - if (FabricLoader.getInstance().isModLoaded("continuity")) { + if (FabricLoader.getInstance().isModLoaded("continuity") && !PuzzleConfig.disabledIntegrations.contains("continuity")) { PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("Continuity"))); ContinuityConfig contConfig = ContinuityConfig.INSTANCE; PuzzleApi.addToResourceOptions(new PuzzleWidget(new TranslatableText("options.continuity.disable_ctm"), (button) -> button.setMessage(contConfig.disableCTM.get() ? YES : NO), (button) -> { @@ -104,7 +101,7 @@ public class PuzzleClient implements ClientModInitializer { } public static boolean lateInitDone = false; public static void lateInit() { // Some mods are initialized after Puzzle, so we can't access them in our ClientModInitializer - if (FabricLoader.getInstance().isModLoaded("lambdynlights")) { + if (FabricLoader.getInstance().isModLoaded("lambdynlights") && !PuzzleConfig.disabledIntegrations.contains("lambdynlights")) { DynamicLightsConfig ldlConfig = LambDynLights.get().config; PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.of("LambDynamicLights"))); @@ -115,7 +112,7 @@ public class PuzzleClient implements ClientModInitializer { PuzzleApi.addToGraphicsOptions(new PuzzleWidget(new TranslatableText("").append("DynLights: ").append(new TranslatableText("block.minecraft.tnt")), (button) -> button.setMessage(ldlConfig.getTntLightingMode().getTranslatedText()), (button) -> ldlConfig.setTntLightingMode(ldlConfig.getTntLightingMode().next()))); PuzzleApi.addToGraphicsOptions(new PuzzleWidget(new TranslatableText("").append("DynLights: ").append(new TranslatableText("lambdynlights.option.light_sources.water_sensitive_check")), (button) -> button.setMessage(ldlConfig.getWaterSensitiveCheck().get() ? YES : NO), (button) -> ldlConfig.getWaterSensitiveCheck().set(!ldlConfig.getWaterSensitiveCheck().get()))); } - if (FabricLoader.getInstance().isModLoaded("citresewn") && CITResewn.INSTANCE != null && CITResewnConfig.INSTANCE() != null) { + if (FabricLoader.getInstance().isModLoaded("citresewn") && !PuzzleConfig.disabledIntegrations.contains("citresewn") && CITResewn.INSTANCE != null && CITResewnConfig.INSTANCE() != null) { PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("CIT Resewn"))); CITResewnConfig citConfig = CITResewnConfig.INSTANCE(); PuzzleApi.addToResourceOptions(new PuzzleWidget(new TranslatableText("config.citresewn.enabled.title"), (button) -> button.setMessage(citConfig.enabled ? YES : NO), (button) -> { @@ -145,13 +142,13 @@ public class PuzzleClient implements ClientModInitializer { citConfig.write(); })); } - if (FabricLoader.getInstance().isModLoaded("lambdabettergrass")) { + if (FabricLoader.getInstance().isModLoaded("lambdabettergrass") && !PuzzleConfig.disabledIntegrations.contains("lambdabettergrass")) { LBGConfig lbgConfig = LambdaBetterGrass.get().config; PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.of("LambdaBetterGrass"))); PuzzleApi.addToGraphicsOptions(new PuzzleWidget(new TranslatableText("lambdabettergrass.option.mode"), (button) -> button.setMessage(lbgConfig.getMode().getTranslatedText()), (button) -> lbgConfig.setMode(lbgConfig.getMode().next()))); PuzzleApi.addToGraphicsOptions(new PuzzleWidget(new TranslatableText("lambdabettergrass.option.better_snow"), (button) -> button.setMessage(lbgConfig.hasBetterLayer() ? YES : NO), (button) -> lbgConfig.setBetterLayer(!lbgConfig.hasBetterLayer()))); } - if (FabricLoader.getInstance().isModLoaded("cem") && FabricLoader.getInstance().isModLoaded("completeconfig")) { + if (FabricLoader.getInstance().isModLoaded("cem") && FabricLoader.getInstance().isModLoaded("completeconfig") && !PuzzleConfig.disabledIntegrations.contains("cem")) { PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("Custom Entity Models"))); CemConfig cemConfig = (CemConfig) CemConfigFairy.getConfig(); CemOptions cemOptions = CemConfigFairy.getConfig(); diff --git a/puzzle-gui/src/main/java/net/puzzlemc/gui/config/ModMenuIntegration.java b/puzzle-gui/src/main/java/net/puzzlemc/gui/config/ModMenuIntegration.java index 8c39869..1441636 100755 --- a/puzzle-gui/src/main/java/net/puzzlemc/gui/config/ModMenuIntegration.java +++ b/puzzle-gui/src/main/java/net/puzzlemc/gui/config/ModMenuIntegration.java @@ -11,8 +11,12 @@ import java.util.Map; @Environment(EnvType.CLIENT) public class ModMenuIntegration implements ModMenuApi { + @Override + public ConfigScreenFactory getModConfigScreenFactory() { + return PuzzleOptionsScreen::new; + } - //Used to set the config screen for all modules // + //Used to set the config screen for all modules // @Override public Map> getProvidedConfigScreenFactories() { Map> map = new HashMap<>(); @@ -21,7 +25,7 @@ public class ModMenuIntegration implements ModMenuApi { map.put("puzzle-blocks",PuzzleOptionsScreen::new); map.put("puzzle-base",PuzzleOptionsScreen::new); map.put("puzzle-models",PuzzleOptionsScreen::new); - map.put("puzzle-randomentities",PuzzleOptionsScreen::new); + map.put("puzzle-emissives",PuzzleOptionsScreen::new); map.put("puzzle-splashscreen",PuzzleOptionsScreen::new); return map; } diff --git a/puzzle-gui/src/main/java/net/puzzlemc/gui/mixin/MixinOptionsScreen.java b/puzzle-gui/src/main/java/net/puzzlemc/gui/mixin/MixinOptionsScreen.java index b12285e..1a21b43 100755 --- a/puzzle-gui/src/main/java/net/puzzlemc/gui/mixin/MixinOptionsScreen.java +++ b/puzzle-gui/src/main/java/net/puzzlemc/gui/mixin/MixinOptionsScreen.java @@ -2,6 +2,7 @@ package net.puzzlemc.gui.mixin; import eu.midnightdust.lib.util.screen.TexturedOverlayButtonWidget; import net.minecraft.util.Identifier; +import net.puzzlemc.core.config.PuzzleConfig; import net.puzzlemc.gui.PuzzleClient; import net.puzzlemc.gui.screen.PuzzleOptionsScreen; import net.minecraft.client.gui.screen.Screen; @@ -25,6 +26,7 @@ public abstract class MixinOptionsScreen extends Screen { @Inject(at = @At("HEAD"), method = "init") private void midnightlib$init(CallbackInfo ci) { + if (PuzzleConfig.enablePuzzleButton) this.addDrawableChild(new TexturedOverlayButtonWidget(this.width / 2 - 178, this.height / 6 - 12, 20, 20, 0, 0, 20, PUZZLE_ICON_TEXTURE, 32, 64, (buttonWidget) -> (Objects.requireNonNull(this.client)).setScreen(new PuzzleOptionsScreen(this)), new TranslatableText("midnightlib.overview.title"))); } } diff --git a/puzzle-models/build.gradle b/puzzle-models/build.gradle index cd4a3b7..ba7b9b1 100755 --- a/puzzle-models/build.gradle +++ b/puzzle-models/build.gradle @@ -3,7 +3,12 @@ archivesBaseName = "puzzle-models" loom { accessWidenerPath = file("src/main/resources/puzzle-models.accesswidener") } - +repositories { + maven { + url = "https://api.modrinth.com/maven" + } +} dependencies { api project(":puzzle-base") + modImplementation "maven.modrinth:midnightlib:${project.midnightlib_version}" } diff --git a/puzzle-splashscreen/build.gradle b/puzzle-splashscreen/build.gradle index 692ec32..8eef17e 100755 --- a/puzzle-splashscreen/build.gradle +++ b/puzzle-splashscreen/build.gradle @@ -1,5 +1,10 @@ archivesBaseName = "puzzle-splashscreen" - +repositories { + maven { + url = "https://api.modrinth.com/maven" + } +} dependencies { api project(":puzzle-base") + modImplementation "maven.modrinth:midnightlib:${project.midnightlib_version}" } diff --git a/settings.gradle b/settings.gradle index 55d9a0d..3f8f89c 100755 --- a/settings.gradle +++ b/settings.gradle @@ -11,7 +11,5 @@ include 'puzzle-base' include 'puzzle-splashscreen' include 'puzzle-models' -include 'puzzle-blocks' -//include 'puzzle-randomentities' include 'puzzle-gui' include 'puzzle-emissives' diff --git a/src/main/resources/assets/puzzle/lang/en_us.json b/src/main/resources/assets/puzzle/lang/en_us.json index 5d970af..85d5232 100755 --- a/src/main/resources/assets/puzzle/lang/en_us.json +++ b/src/main/resources/assets/puzzle/lang/en_us.json @@ -13,7 +13,5 @@ "puzzle.option.unlimited_model_rotations":"Unlimited Model Rotations", "puzzle.option.bigger_custom_models":"Bigger Custom Models", "puzzle.option.render_layer_overrides":"Render Layer Overrides", - "puzzle.midnightconfig.title":"Title", - "puzzle.midnightconfig.showPuzzleInfo":"Show Puzzle Info", - "puzzle.midnightconfig.showPuzzleInfo.tooltip":"Show Puzzle Info" + "puzzle.midnightconfig.title":"Puzzle Advanced Configuration" }