From 210e9abc7080edb8d7359d6b975f8eba21019f63 Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Mon, 27 Oct 2025 14:58:56 +0300 Subject: [PATCH 01/21] Fixed bug with sounds_volume section translation Partial added Turkish and Vietnamese --- patpat-languages-files | 2 +- src/main/java/net/lopymine/patpat/modmenu/PatConfig.java | 2 +- src/main/resources/fabric.mod.json | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/patpat-languages-files b/patpat-languages-files index 5650bf6..3ef9393 160000 --- a/patpat-languages-files +++ b/patpat-languages-files @@ -1 +1 @@ -Subproject commit 5650bf6f4877d1288344cfb0675aa5744d509f7c +Subproject commit 3ef9393fd8757b0b23ecf5574c071ea4c3ac1bb5 diff --git a/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java b/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java index 8aca79f..7cfbf13 100644 --- a/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java +++ b/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java @@ -69,7 +69,7 @@ public static PatConfig generate() { .build() ) .addOption(SliderNumberOption.builder() - .key("enable_sounds") + .key("sounds_volume") .defaultValue(defConfig.getSoundsConfig().getSoundsVolume()) .getter(() -> config.getSoundsConfig().getSoundsVolume()) .setter(config.getSoundsConfig()::setSoundsVolume) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 0be4f52..674f640 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -42,7 +42,9 @@ ], "custom": { "translators": { - "MrLemonHog": "Ukrainian" + "okunamayanad": "Turkish (24%)", + "MrLemonHog": "Ukrainian", + "Balojan": "Vietnamese (21%)" }, "modmenu": { "links": { From ee2ac256adda67cd14128bac7a14b8ebf608a5c0 Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Fri, 7 Nov 2025 21:25:52 +0300 Subject: [PATCH 02/21] Fixed bug with ProxLibServersWhitelistConfig Fixed bug with proximity_packets_list_is_blacklist translation Added condition for server pats Update Vietnamese translation --- patpat-languages-files | 2 +- ...atClientProxLibServersWhitelistConfig.java | 3 +- .../CustomAnimationSettingsConfig.java | 2 +- .../PatPatClientKeybindingManager.java | 2 +- .../client/keybinding/PatPatKeybinding.java | 2 +- .../packet/PatPatClientPacketManager.java | 30 ++++++++++++++----- .../config/list/AbstractListConfig.java | 8 +++-- .../lopymine/patpat/modmenu/PatConfig.java | 6 ++-- src/main/resources/fabric.mod.json | 2 +- 9 files changed, 37 insertions(+), 20 deletions(-) diff --git a/patpat-languages-files b/patpat-languages-files index 3ef9393..d04c682 160000 --- a/patpat-languages-files +++ b/patpat-languages-files @@ -1 +1 @@ -Subproject commit 3ef9393fd8757b0b23ecf5574c071ea4c3ac1bb5 +Subproject commit d04c6825512a8484d32d0325f636eec72f399055 diff --git a/src/main/java/net/lopymine/patpat/client/config/list/PatPatClientProxLibServersWhitelistConfig.java b/src/main/java/net/lopymine/patpat/client/config/list/PatPatClientProxLibServersWhitelistConfig.java index 4ee04c6..a7ae087 100644 --- a/src/main/java/net/lopymine/patpat/client/config/list/PatPatClientProxLibServersWhitelistConfig.java +++ b/src/main/java/net/lopymine/patpat/client/config/list/PatPatClientProxLibServersWhitelistConfig.java @@ -13,11 +13,12 @@ @Getter public class PatPatClientProxLibServersWhitelistConfig extends AbstractListConfig { + public static final List DEFAULT_VALUES = List.of("127.0.0.1", "localhost"); private static final PatLogger LOGGER = PatPatClient.LOGGER.extend(PatPatClientProxLibServersWhitelistConfig.class.getSimpleName()); private static final File CONFIG_FILE = PatPatConfigManager.CONFIG_PATH.resolve("proximity_packet_servers_whitelist.txt").toFile(); private static final PatPatClientProxLibServersWhitelistConfig INSTANCE = new PatPatClientProxLibServersWhitelistConfig(); - public static final List DEFAULT_VALUES = List.of("127.0.0.1", "localhost"); + private final List values = new ArrayList<>(); diff --git a/src/main/java/net/lopymine/patpat/client/config/resourcepack/CustomAnimationSettingsConfig.java b/src/main/java/net/lopymine/patpat/client/config/resourcepack/CustomAnimationSettingsConfig.java index 3ee847a..2114453 100644 --- a/src/main/java/net/lopymine/patpat/client/config/resourcepack/CustomAnimationSettingsConfig.java +++ b/src/main/java/net/lopymine/patpat/client/config/resourcepack/CustomAnimationSettingsConfig.java @@ -93,7 +93,7 @@ private void loadSize() { return; } //?} - InputStream inputStream = resource/*? >=1.19 {*/.get().open();/*?} else {*//*.getInputStream()*//*?}*/; + InputStream inputStream = resource/*? if >=1.19 {*/.get().open()/*?} else {*//*.getInputStream()*//*?}*/; NativeImage nativeImage = NativeImage.read(inputStream); this.textureWidth = nativeImage.getWidth(); this.textureHeight = nativeImage.getHeight(); diff --git a/src/main/java/net/lopymine/patpat/client/keybinding/PatPatClientKeybindingManager.java b/src/main/java/net/lopymine/patpat/client/keybinding/PatPatClientKeybindingManager.java index c89635b..4a3f22d 100644 --- a/src/main/java/net/lopymine/patpat/client/keybinding/PatPatClientKeybindingManager.java +++ b/src/main/java/net/lopymine/patpat/client/keybinding/PatPatClientKeybindingManager.java @@ -15,7 +15,7 @@ public class PatPatClientKeybindingManager { //? if >=1.21.9 { - public static net.minecraft.client.KeyMapping.Category CATEGORY = net.minecraft.client.KeyMapping.Category.register(IdentifierUtils.modId(PatPat.MOD_ID)); + public static final net.minecraft.client.KeyMapping.Category CATEGORY = net.minecraft.client.KeyMapping.Category.register(IdentifierUtils.modId(PatPat.MOD_ID)); //?} @Getter diff --git a/src/main/java/net/lopymine/patpat/client/keybinding/PatPatKeybinding.java b/src/main/java/net/lopymine/patpat/client/keybinding/PatPatKeybinding.java index c433e75..61a75ec 100644 --- a/src/main/java/net/lopymine/patpat/client/keybinding/PatPatKeybinding.java +++ b/src/main/java/net/lopymine/patpat/client/keybinding/PatPatKeybinding.java @@ -34,7 +34,7 @@ public class PatPatKeybinding extends KeyMapping { private boolean canStartBinding = true; public PatPatKeybinding(KeybindingCombination patCombination) { - super("patpat.keybinding.pat", -1, /*? if <1.21.9 {*//*PatPat.MOD_NAME + "." + PatPat.MOD_NAME*//*?} else {*/PatPatClientKeybindingManager.CATEGORY/*?}*/); + super("patpat.keybinding.pat", -1, /*? if <1.21.9 {*//*PatPat.MOD_NAME*//*?} else {*/PatPatClientKeybindingManager.CATEGORY/*?}*/); this.combination.setAttributeKey(patCombination.getAttributeKey()); this.combination.setKey(patCombination.getKey()); } diff --git a/src/main/java/net/lopymine/patpat/client/packet/PatPatClientPacketManager.java b/src/main/java/net/lopymine/patpat/client/packet/PatPatClientPacketManager.java index c51c744..71c8b12 100644 --- a/src/main/java/net/lopymine/patpat/client/packet/PatPatClientPacketManager.java +++ b/src/main/java/net/lopymine/patpat/client/packet/PatPatClientPacketManager.java @@ -1,7 +1,7 @@ package net.lopymine.patpat.client.packet; -import lombok.*; -import net.lopymine.patpat.PatLogger; +import lombok.Getter; +import lombok.Setter; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.social.PlayerSocialManager; import net.minecraft.client.multiplayer.ClientLevel; @@ -10,16 +10,19 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; + +import net.lopymine.patpat.PatLogger; import net.lopymine.patpat.client.PatPatClient; import net.lopymine.patpat.client.config.PatPatClientConfig; -import net.lopymine.patpat.client.config.resourcepack.*; import net.lopymine.patpat.client.config.list.PatPatClientPlayerListConfig; +import net.lopymine.patpat.client.config.resourcepack.ListMode; +import net.lopymine.patpat.client.config.resourcepack.PlayerConfig; import net.lopymine.patpat.client.render.PatPatClientRenderer; import net.lopymine.patpat.client.render.PatPatClientRenderer.PatPacket; import net.lopymine.patpat.common.Version; import net.lopymine.patpat.compat.flashback.FlashbackManager; import net.lopymine.patpat.compat.replaymod.ReplayModManager; -import net.lopymine.patpat.packet.*; +import net.lopymine.patpat.packet.S2CPatPacket; import net.lopymine.patpat.packet.c2s.*; import net.lopymine.patpat.packet.s2c.*; @@ -32,7 +35,7 @@ private PatPatClientPacketManager() { } public static final PatLogger LOGGER = PatPatClient.LOGGER.extend("PacketManager"); - + @Getter @Setter private static Version currentPatPatServerPacketVersion = Version.PACKET_V1_VERSION; @@ -102,8 +105,19 @@ public static void handlePatting(S2CPatPacket packet, boolean replayModPacket } LOGGER.debug("Patted entity with name {} ", pattedEntity.getName().getString()); Entity whoPattedEntity = packet.getWhoPattedEntity(clientWorld); - if(whoPattedEntity == null) { - LOGGER.debug("Packet declined, because who patted entity is null"); + if (whoPattedEntity == null) { + if (!(packet instanceof PatEntityS2CPacketV2 packetV2)) { + LOGGER.debug("Packet declined, because packetV1 and whoPattedEntity is null"); + return; + } + if (packetV2.getWhoPattedId() != Integer.MIN_VALUE) { + LOGGER.debug("Packet declined, because who patted entity is null"); + return; + } + + PatPacket patPacket = new PatPacket(pattedLivingEntity, PlayerConfig.of(null, null), player, replayModPacket); + PatPatClientRenderer.registerServerPacket(patPacket); + LOGGER.debug("Packet handled! (Pat from server) Packet Data: {}", patPacket.toString()); return; } LOGGER.debug("Who patted entity with name {}", whoPattedEntity.getName().getString()); @@ -137,7 +151,7 @@ public static boolean isBlocked(UUID playerUuid) { || (config.getMultiPlayerConfig().getListMode() == ListMode.BLACKLIST && playerListConfig.getValues().containsKey(playerUuid)) || socialManager.isBlocked(playerUuid) || socialManager.isHidden(playerUuid) - /*? >=1.17 {*/ || socialManager.shouldHideMessageFrom(playerUuid)/*?}*/; + /*? if >=1.17 {*/ || socialManager.shouldHideMessageFrom(playerUuid)/*?}*/; } public static net.lopymine.patpat.packet.PatPacket getPatPacket(Entity pattedEntity) { diff --git a/src/main/java/net/lopymine/patpat/common/config/list/AbstractListConfig.java b/src/main/java/net/lopymine/patpat/common/config/list/AbstractListConfig.java index ad1a5b8..bc18495 100644 --- a/src/main/java/net/lopymine/patpat/common/config/list/AbstractListConfig.java +++ b/src/main/java/net/lopymine/patpat/common/config/list/AbstractListConfig.java @@ -6,19 +6,21 @@ import java.util.concurrent.CompletableFuture; import lombok.*; import net.lopymine.patpat.PatLogger; + +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @Getter @Setter public abstract class AbstractListConfig { - private final Collection standardValues; + private final @NotNull Collection standardValues; private final PatLogger logger; private final File configFile; private boolean initialized = false; - public AbstractListConfig(Collection standardValues, PatLogger logger, File configFile) { + protected AbstractListConfig(@NotNull Collection standardValues, PatLogger logger, File configFile) { this.standardValues = standardValues; this.logger = logger; this.configFile = configFile; @@ -29,7 +31,7 @@ public static > B getInitialized(B config) { return config; } config.read(); - config.setInitialized(true);; + config.setInitialized(true); return config; } diff --git a/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java b/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java index 7cfbf13..d074686 100644 --- a/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java +++ b/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java @@ -214,15 +214,15 @@ public static PatConfig generate() { .build() ) .addOption(BooleanOption.builder() - .key("proximity_packets_list_is_blacklist") + .name(ModMenuUtils.getOptionName("proximity_packets_list_is_blacklist")) + .description(getDescriptionWithWarn("proximity_packets_list_is_blacklist")) .defaultValue(defConfig.getProximityPacketsConfig().isBlacklist()) .getter(() -> config.getProximityPacketsConfig().isBlacklist()) .setter(config.getProximityPacketsConfig()::setBlacklist) .build() ) .addOption(PatListOption.builder() - .name(ModMenuUtils.getOptionName("proximity_packets_servers_whitelist")) - .description(getDescriptionWithWarn("proximity_packets_servers_whitelist")) + .key("proximity_packets_servers_whitelist") .defaultValue(PatPatClientProxLibServersWhitelistConfig.DEFAULT_VALUES) .getter(() -> new ArrayList<>(PatPatClientProxLibServersWhitelistConfig.getInstance().getValues())) .setter(PatPatClientProxLibServersWhitelistConfig::rewriteServersList) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 674f640..50ebcd5 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -44,7 +44,7 @@ "translators": { "okunamayanad": "Turkish (24%)", "MrLemonHog": "Ukrainian", - "Balojan": "Vietnamese (21%)" + "Balojan": "Vietnamese (46%)" }, "modmenu": { "links": { From db34257dfdfd808e61cea31a79ea79267246cfa2 Mon Sep 17 00:00:00 2001 From: LopyMine Date: Wed, 24 Dec 2025 22:09:47 +0300 Subject: [PATCH 03/21] Replace buildSrc with MossyPlugin --- build.gradle | 12 +- buildSettings/build.gradle | 52 --- buildSettings/gradle.properties | 13 - .../mossy/settings/MossySettingsPlugin.java | 86 ----- .../settings/api/FabricDependenciesAPI.java | 18 - .../mossy/settings/api/JsonHelper.java | 21 -- .../settings/api/ModrinthDependenciesAPI.java | 37 --- .../manager/AccessWidenerManager.java | 59 ---- .../settings/manager/StonecutterManager.java | 18 - .../VersionedGradlePropertiesManager.java | 186 ----------- buildSrc/build.gradle | 58 ---- buildSrc/gradle.properties | 17 - .../java/net/lopymine/mossy/MossyLogger.java | 23 -- .../java/net/lopymine/mossy/MossyPlugin.java | 312 ------------------ .../mossy/MossyPluginStonecutter.java | 132 -------- .../MossyAdditionalDependencies.java | 24 -- .../extension/MossyDependenciesExtension.java | 31 -- .../MossyProcessResourcesExtension.java | 16 - .../manager/MossyDependenciesManager.java | 119 ------- .../mossy/manager/MossyJ52JManager.java | 18 - .../mossy/manager/MossyJavaManager.java | 29 -- .../mossy/manager/MossyLoomManager.java | 94 ------ .../mossy/manager/MossyModPublishManager.java | 148 --------- .../manager/MossyProcessResourcesManager.java | 67 ---- .../manager/MossyStonecutterManager.java | 41 --- .../lopymine/mossy/multi/MultiVersion.java | 45 --- .../tasks/GeneratePersonalPropertiesTask.java | 55 --- ...atePublishWorkflowsForEachVersionTask.java | 64 ---- .../java/net/lopymine/utils/MossyUtils.java | 57 ++++ gradle.properties | 12 +- gradle/wrapper/gradle-wrapper.properties | 2 +- patpat-languages-files | 2 +- settings.gradle | 13 +- stonecutter.gradle | 4 +- 34 files changed, 83 insertions(+), 1802 deletions(-) delete mode 100644 buildSettings/build.gradle delete mode 100644 buildSettings/gradle.properties delete mode 100644 buildSettings/src/main/java/net/lopymine/mossy/settings/MossySettingsPlugin.java delete mode 100644 buildSettings/src/main/java/net/lopymine/mossy/settings/api/FabricDependenciesAPI.java delete mode 100644 buildSettings/src/main/java/net/lopymine/mossy/settings/api/JsonHelper.java delete mode 100644 buildSettings/src/main/java/net/lopymine/mossy/settings/api/ModrinthDependenciesAPI.java delete mode 100644 buildSettings/src/main/java/net/lopymine/mossy/settings/manager/AccessWidenerManager.java delete mode 100644 buildSettings/src/main/java/net/lopymine/mossy/settings/manager/StonecutterManager.java delete mode 100644 buildSettings/src/main/java/net/lopymine/mossy/settings/manager/VersionedGradlePropertiesManager.java delete mode 100644 buildSrc/build.gradle delete mode 100644 buildSrc/gradle.properties delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/MossyLogger.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/MossyPlugin.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/MossyPluginStonecutter.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/extension/MossyAdditionalDependencies.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/extension/MossyDependenciesExtension.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/extension/MossyProcessResourcesExtension.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/manager/MossyDependenciesManager.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/manager/MossyJ52JManager.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/manager/MossyJavaManager.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/manager/MossyLoomManager.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/manager/MossyModPublishManager.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/manager/MossyProcessResourcesManager.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/manager/MossyStonecutterManager.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/multi/MultiVersion.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/tasks/GeneratePersonalPropertiesTask.java delete mode 100644 buildSrc/src/main/java/net/lopymine/mossy/tasks/GeneratePublishWorkflowsForEachVersionTask.java create mode 100644 buildSrc/src/main/java/net/lopymine/utils/MossyUtils.java diff --git a/build.gradle b/build.gradle index 4f3940e..af25950 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,13 @@ -import net.lopymine.mossy.MossyPlugin +import net.lopymine.utils.MossyUtils plugins { - id("net.lopymine.mossy-plugin") + id "net.lopymine.mossy-plugin-core" version "$mossy_plugin_version" } mossyDependencies { def mcVersion = stonecutter.current.version.toString() minecraft = mcVersion - mappings = prop("build.yarn") + mappings = "mojang" lombok = prop("base.lombok_version") fabricApi = prop("build.fabric_api") fabricLoader = prop("build.fabric_loader") @@ -66,8 +66,6 @@ repositories { dependencies { def mcVersion = stonecutter.current.version.toString() - mappings loom.officialMojangMappings() - // Fabric permission api def fpaVersion = prop("build.fabric-permissions-api") include(modImplementation('me.lucko:fabric-permissions-api:' + fpaVersion)){ @@ -76,7 +74,7 @@ dependencies { // Cloth Config def clothConfigVersion = prop("dep.cloth-config") - modApi("me.shedaniel.cloth:cloth-config-fabric:${stonecutter.compare("1.19", mcVersion) == 1 ? clothConfigVersion : MossyPlugin.substringBefore(clothConfigVersion, "+")}") { + modApi("me.shedaniel.cloth:cloth-config-fabric:${stonecutter.compare("1.19", mcVersion) == 1 ? clothConfigVersion : MossyUtils.substringBefore(clothConfigVersion, "+")}") { exclude(group: "net.fabricmc.fabric-api") } @@ -122,6 +120,8 @@ stonecutter { var buildTime = (int) (System.currentTimeMillis() / 10000) - 174611089 var buildCodeTime = String.format("%07x", buildTime & 0xFFFFFFF) swap("build_code_time", "\"${buildCodeTime}\";") + + dependency("yacl", MossyUtils.substringBefore(prop("dep.yacl"), "+")) } diff --git a/buildSettings/build.gradle b/buildSettings/build.gradle deleted file mode 100644 index b703c9c..0000000 --- a/buildSettings/build.gradle +++ /dev/null @@ -1,52 +0,0 @@ -plugins { - id 'java' - id 'java-gradle-plugin' -} - -def mainModuleId = property("main_module_id").toString() -def pluginMavenPackage = property("plugin_maven_package").toString() -def pluginPackage = property("plugin_package").toString() -def pluginClass = property("plugin_class").toString() -def pluginVersion = property("plugin_version").toString() - -group = pluginPackage -version = pluginVersion - -repositories { - mavenLocal() - mavenCentral() - gradlePluginPortal() - maven { - name "Fabric" - url "https://maven.fabricmc.net/" - } - maven { - name "Kiku Snapshots" - url "https://maven.kikugie.dev/snapshots" - } - maven { - name "Kiku Releases" - url "https://maven.kikugie.dev/releases" - } -} - -dependencies { - compileOnly "org.projectlombok:lombok:${property("lombok_version")}" - annotationProcessor "org.projectlombok:lombok:${property("lombok_version")}" - - implementation "com.google.code.gson:gson:${property("gson_version")}" - - implementation "dev.kikugie.stonecutter:dev.kikugie.stonecutter.gradle.plugin:${property("stonecutter_version")}" -} - -test { - useJUnitPlatform() -} -gradlePlugin { - plugins { - create(mainModuleId) { - id = "${pluginMavenPackage}.${mainModuleId}" - implementationClass = "${pluginPackage}.${pluginClass}" - } - } -} diff --git a/buildSettings/gradle.properties b/buildSettings/gradle.properties deleted file mode 100644 index 939734e..0000000 --- a/buildSettings/gradle.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Gradle Plugin properties - -# Plugin Properties -main_module_id = mossy-settings-plugin -plugin_maven_package = net.lopymine -plugin_package = net.lopymine.mossy.settings -plugin_class = MossySettingsPlugin -plugin_version = 1.0.0 - -# Dependencies -lombok_version = 1.18.42 -gson_version = 2.13.1 -stonecutter_version = 0.7.1 \ No newline at end of file diff --git a/buildSettings/src/main/java/net/lopymine/mossy/settings/MossySettingsPlugin.java b/buildSettings/src/main/java/net/lopymine/mossy/settings/MossySettingsPlugin.java deleted file mode 100644 index a4cb657..0000000 --- a/buildSettings/src/main/java/net/lopymine/mossy/settings/MossySettingsPlugin.java +++ /dev/null @@ -1,86 +0,0 @@ -package net.lopymine.mossy.settings; - -import java.io.*; -import java.util.*; -import lombok.Getter; -import net.lopymine.mossy.settings.manager.*; -import org.gradle.api.*; - -import org.gradle.api.initialization.Settings; -import org.jetbrains.annotations.NotNull; - -@Getter -public class MossySettingsPlugin implements Plugin { - - @Override - public void apply(@NotNull Settings settings) { - Properties gradleProperties = getGradleProperties(settings.getRootDir()); - - settings.getRootProject().setName(getProperty(gradleProperties, "data.mod_name")); - - List additionalDependencies = getAdditionalDependencies(gradleProperties); - if (additionalDependencies.isEmpty()) { - System.out.println("No additional dependencies!"); - } else { - System.out.println("Found additional dependencies: [%s]".formatted(String.join(", ", additionalDependencies))); - } - - List multiVersions = getMultiVersions(gradleProperties); - - System.out.println("Found MC versions: [%s]".formatted(String.join(", ", multiVersions))); - - StonecutterManager.apply(settings, multiVersions); - AccessWidenerManager.apply(settings, multiVersions); - VersionedGradlePropertiesManager.apply(settings, gradleProperties, multiVersions, additionalDependencies); - } - - public List getAdditionalDependencies(Properties properties) { - List additionalDepends = new ArrayList<>(); - - for (Map.Entry entry : properties.entrySet()) { - String key = entry.getKey().toString(); - if (key.startsWith("dep.")) { - int i = key.indexOf(".") + 1; - String modId = key.substring(i); - additionalDepends.add(modId); - } - } - - return additionalDepends; - } - - public static List getMultiVersions(Properties gradleProperties) { - String multiVersions = getProperty(gradleProperties, "multi_versions"); - - List versions = new ArrayList<>(); - - for (String s : multiVersions.split(" ")) { - int index = s.indexOf("["); - if (index == -1) { - versions.add(s); - } else { - versions.add(s.substring(0, index)); - } - } - - return versions; - } - - public static String getProperty(Properties gradleProperties, String id) { - if (!gradleProperties.containsKey(id)) { - throw new IllegalArgumentException("Missing important property with id \"%s\" !".formatted(id)); - } - return gradleProperties.get(id).toString(); - } - - public static @NotNull Properties getGradleProperties(File project) { - Properties properties = new Properties(); - try (FileReader reader = new FileReader(project.toPath().resolve("gradle.properties").toFile())) { - properties.load(reader); - } catch (Exception e) { - throw new RuntimeException(e); - } - return properties; - } - -} diff --git a/buildSettings/src/main/java/net/lopymine/mossy/settings/api/FabricDependenciesAPI.java b/buildSettings/src/main/java/net/lopymine/mossy/settings/api/FabricDependenciesAPI.java deleted file mode 100644 index 66cf72c..0000000 --- a/buildSettings/src/main/java/net/lopymine/mossy/settings/api/FabricDependenciesAPI.java +++ /dev/null @@ -1,18 +0,0 @@ -package net.lopymine.mossy.settings.api; - -public class FabricDependenciesAPI { - - public static String getYarnVersion(String minecraftVersion) { - try { - return JsonHelper.get("https://meta.fabricmc.net/v2/versions/yarn/%s?limit=1".formatted(minecraftVersion)) - .getAsJsonArray() - .get(0) - .getAsJsonObject() - .get("version") - .getAsString(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - -} diff --git a/buildSettings/src/main/java/net/lopymine/mossy/settings/api/JsonHelper.java b/buildSettings/src/main/java/net/lopymine/mossy/settings/api/JsonHelper.java deleted file mode 100644 index 2291f5f..0000000 --- a/buildSettings/src/main/java/net/lopymine/mossy/settings/api/JsonHelper.java +++ /dev/null @@ -1,21 +0,0 @@ -package net.lopymine.mossy.settings.api; - -import com.google.gson.*; -import com.google.gson.reflect.TypeToken; -import com.google.gson.stream.JsonReader; -import java.io.*; -import java.net.*; -import java.nio.charset.StandardCharsets; - - -public class JsonHelper { - - public static JsonElement get(String url) throws Exception { - URI uri = URI.create(url); - HttpURLConnection connection = (HttpURLConnection) uri.toURL().openConnection(); - connection.setRequestMethod("GET"); - JsonReader jsonReader = new JsonReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); - return new Gson().fromJson(jsonReader, TypeToken.get(JsonElement.class)); - } - -} diff --git a/buildSettings/src/main/java/net/lopymine/mossy/settings/api/ModrinthDependenciesAPI.java b/buildSettings/src/main/java/net/lopymine/mossy/settings/api/ModrinthDependenciesAPI.java deleted file mode 100644 index 3e61dc3..0000000 --- a/buildSettings/src/main/java/net/lopymine/mossy/settings/api/ModrinthDependenciesAPI.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.lopymine.mossy.settings.api; - -import com.google.gson.*; -import java.io.*; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; -import org.jetbrains.annotations.NotNull; - -public class ModrinthDependenciesAPI { - - @NotNull - public static String getVersion(String modId, String minecraftVersion, String loader) { - String encodedLoader = URLEncoder.encode("[\"%s\"]".formatted(loader), StandardCharsets.UTF_8); - String encodedMinecraftVersion = URLEncoder.encode("[\"%s\"]".formatted(minecraftVersion), StandardCharsets.UTF_8); - String url = "https://api.modrinth.com/v2/project/%s/version?loaders=%s&game_versions=%s".formatted(modId, encodedLoader, encodedMinecraftVersion); - JsonElement element; - try { - element = JsonHelper.get(url); - } catch (FileNotFoundException e) { - System.out.printf("\nFailed to find Modrinth project with id \"%s\"%n", modId); - e.printStackTrace(System.out); - return "unknown"; - } catch (Exception e) { - e.printStackTrace(System.out); - return "unknown"; - } - JsonArray array = element.getAsJsonArray(); - if (array.isEmpty()) { - return "unknown"; - } - JsonElement jsonElement = array.get(0); - JsonObject jsonObject = jsonElement.getAsJsonObject(); - - return jsonObject.get("version_number").getAsString(); - } - -} diff --git a/buildSettings/src/main/java/net/lopymine/mossy/settings/manager/AccessWidenerManager.java b/buildSettings/src/main/java/net/lopymine/mossy/settings/manager/AccessWidenerManager.java deleted file mode 100644 index 8aa33bb..0000000 --- a/buildSettings/src/main/java/net/lopymine/mossy/settings/manager/AccessWidenerManager.java +++ /dev/null @@ -1,59 +0,0 @@ -package net.lopymine.mossy.settings.manager; - -import java.io.*; -import java.nio.file.Path; -import java.util.List; -import org.gradle.api.initialization.Settings; -import org.jetbrains.annotations.*; - -public class AccessWidenerManager { - - public static void apply(@NotNull Settings settings, List multiVersions) { - Path path = settings.getRootDir().toPath(); - for (String version : multiVersions) { - createExampleAccessWidener(path, version); - } - } - - public static void createExampleAccessWidener(Path rootProject, String version) { - File awFile = createAWFile(rootProject, version); - if (awFile == null) { - return; - } - - try (FileWriter writer = new FileWriter(awFile)) { - writer.write("accessWidener v2 named\n"); - writer.write("# " + version + " AW\n"); - } catch (Exception e) { - throw new RuntimeException(e); - } - - System.out.println("Successfully created AW for " + version); - } - - @Nullable - private static File createAWFile(Path rootProject, String version) { - Path awsFolder = rootProject.resolve("src/main/resources/aws/"); - File awsFolderFile = awsFolder.toFile(); - if (!awsFolderFile.exists() && !awsFolderFile.mkdirs()) { - System.out.println("Failed to get or create AW folder for " + version); - return null; - } - - File versionedAWFile = awsFolder.resolve(version + ".accesswidener").toFile(); - if (versionedAWFile.exists()) { - return null; - } - - try { - if (!versionedAWFile.createNewFile()) { - System.out.println("Failed to create AW file for " + version); - return null; - } - } catch (Exception e) { - throw new RuntimeException(e); - } - - return versionedAWFile; - } -} diff --git a/buildSettings/src/main/java/net/lopymine/mossy/settings/manager/StonecutterManager.java b/buildSettings/src/main/java/net/lopymine/mossy/settings/manager/StonecutterManager.java deleted file mode 100644 index 8277af3..0000000 --- a/buildSettings/src/main/java/net/lopymine/mossy/settings/manager/StonecutterManager.java +++ /dev/null @@ -1,18 +0,0 @@ -package net.lopymine.mossy.settings.manager; - -import dev.kikugie.stonecutter.settings.StonecutterSettingsExtension; -import java.util.List; -import org.gradle.api.initialization.Settings; -import org.jetbrains.annotations.NotNull; - -public class StonecutterManager { - - public static void apply(@NotNull Settings settings, List versions) { - StonecutterSettingsExtension stonecutter = settings.getExtensions().getByType(StonecutterSettingsExtension.class); - stonecutter.create(settings.getRootProject(), (builder) -> { - builder.versions(versions); - builder.getVcsVersion().set(versions.get(versions.size() - 1)); - }); - } - -} diff --git a/buildSettings/src/main/java/net/lopymine/mossy/settings/manager/VersionedGradlePropertiesManager.java b/buildSettings/src/main/java/net/lopymine/mossy/settings/manager/VersionedGradlePropertiesManager.java deleted file mode 100644 index c3e46f0..0000000 --- a/buildSettings/src/main/java/net/lopymine/mossy/settings/manager/VersionedGradlePropertiesManager.java +++ /dev/null @@ -1,186 +0,0 @@ -package net.lopymine.mossy.settings.manager; - -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.nio.file.*; -import java.util.*; -import java.util.function.*; -import net.lopymine.mossy.settings.api.*; -import org.gradle.api.initialization.Settings; -import org.jetbrains.annotations.NotNull; - -public class VersionedGradlePropertiesManager { - - public static void apply(@NotNull Settings settings, Properties gradleProperties, List multiVersions, List additionalDependencies) { - Path path = settings.getRootDir().toPath(); - - for (String version : multiVersions) { - try { - createGradleProperties( - path, - version, - additionalDependencies, - gradleProperties, - (modId, ver) -> ModrinthDependenciesAPI.getVersion(modId, version, "fabric"), - FabricDependenciesAPI::getYarnVersion - ); - } catch (Exception e) { - throw new RuntimeException("Failed to create versioned gradle properties for " + version + ", reason: " + e.getMessage(), e); - } - } - } - - public static void createGradleProperties(Path rootPath, String version, List additionalDependencies, Properties rootGradleProperties, BiFunction dependResolver, Function yarnResolver) throws IOException { - File file = getOrCreateGradlePropertiesFile(rootPath, version); - if (file == null) { - return; - } - - Properties gradleProperties = new Properties(); - try (InputStream in = new FileInputStream(file)) { - gradleProperties.load(in); - } - - String fileText = Files.readString(file.toPath(), StandardCharsets.UTF_8); - boolean isEmpty = fileText.isBlank(); - - List missingDependencies = new ArrayList<>(); - for (String id : additionalDependencies) { - String key = "dep." + id; - String markerVal = rootGradleProperties.getProperty(key); - if (!"[VERSIONED]".equals(markerVal)) { - continue; - } - if (!gradleProperties.containsKey(key)) { - missingDependencies.add(id); - } - } - - List oldDependencies = new ArrayList<>(); - for (String key : gradleProperties.stringPropertyNames()) { - if (!key.startsWith("dep.")) { - continue; - } - String markerVal = rootGradleProperties.getProperty(key); - if (markerVal != null && !"[VERSIONED]".equals(markerVal)) { - oldDependencies.add(key); - continue; - } - String shortId = substringSince(key, "."); - if (!additionalDependencies.contains(shortId)) { - oldDependencies.add(key); - } - } - - boolean update = fileText.replace(" ", "").contains("=[UPDATE]"); - - if (!isEmpty && !update && missingDependencies.isEmpty() && oldDependencies.isEmpty()) { - return; - } - - if (isEmpty) { - StringBuilder builder = new StringBuilder(); - builder.append("# Versioned Properties\n"); - builder.append("# Tip: You can set any dependency value to \"[UPDATE]\"\n"); - builder.append("# and reload Gradle to update only it's value.\n\n"); - builder.append("# Fabric Properties, check https://fabricmc.net/develop/\n"); - builder.append("build.yarn=").append(yarnResolver.apply(version)).append("\n"); - builder.append("build.fabric_api=").append(dependResolver.apply("fabric-api", version)); - if (!additionalDependencies.isEmpty()) { - builder.append("\n\n"); - builder.append("# Additional Dependencies Properties\n"); - for (String depend : additionalDependencies) { - builder.append("# ").append(depend).append(", check https://modrinth.com/mod/").append(depend).append("/versions?g=").append(version).append("&l=fabric\n"); - builder.append("dep.").append(depend).append("=").append(dependResolver.apply(depend, version)).append("\n"); - } - } - Files.writeString(file.toPath(), builder.toString(), StandardCharsets.UTF_8); - System.out.println("Successfully created gradle.properties for " + version); - return; - } - - if (update) { - String text = fileText.replace(" ", "ㅤ").trim(); - for (String key : gradleProperties.stringPropertyNames()) { - String value = gradleProperties.getProperty(key); - if (!"[UPDATE]".equals(value)) { - continue; - } - String oldLine = key + "=[UPDATE]"; - String updatedLine = null; - if (key.startsWith("dep.")) { - String depId = substringSince(key, "."); - updatedLine = key + "=" + dependResolver.apply(depId, version); - } else if (key.startsWith("build.")) { - String buildProp = substringSince(key, "."); - if ("yarn".equals(buildProp)) { - updatedLine = key + "=" + yarnResolver.apply(version); - } else if ("fabric_api".equals(buildProp)) { - updatedLine = key + "=" + dependResolver.apply("fabric-api", version); - } - } - if (updatedLine == null) { - continue; - } - text = text.replace(oldLine, updatedLine); - } - String finalText = text.replace("ㅤ", " "); - Files.writeString(file.toPath(), finalText, StandardCharsets.UTF_8); - System.out.println("Successfully updated gradle.properties for " + version); - } - - if (!missingDependencies.isEmpty()) { - String text = Files.readString(file.toPath(), StandardCharsets.UTF_8); - if (!text.endsWith("\n")) text = text + "\n"; - StringBuilder builder = new StringBuilder(text); - for (String depend : missingDependencies) { - builder.append("# ").append(depend).append(", check https://modrinth.com/mod/").append(depend).append("/versions?g=").append(version).append("&l=fabric\n"); - builder.append("dep.").append(depend).append("=").append(dependResolver.apply(depend, version)).append("\n"); - } - Files.writeString(file.toPath(), builder.toString(), StandardCharsets.UTF_8); - System.out.println("Successfully added new depends " + missingDependencies + " to gradle.properties for " + version); - } - - if (!oldDependencies.isEmpty()) { - String text = Files.readString(file.toPath(), StandardCharsets.UTF_8); - List removed = new ArrayList<>(); - for (String fullKey : oldDependencies) { - String dep = substringSince(fullKey, "."); - String propValue = gradleProperties.getProperty(fullKey); - String block = "# " + dep + ", check https://modrinth.com/mod/" + dep + "/versions?g=" + version + "&l=fabric\n" + "dep." + dep + "=" + propValue + "\n"; - text = text.replace(block, ""); - removed.add(dep); - } - Files.writeString(file.toPath(), text, StandardCharsets.UTF_8); - System.out.println("Successfully removed old depends " + removed + " from gradle.properties for " + version); - } - } - - private static File getOrCreateGradlePropertiesFile(Path path, String version) { - try { - Path folder = path.resolve("versions/" + version); - File folderFile = folder.toFile(); - if (!folderFile.exists() && !folderFile.mkdirs()) { - System.out.println("Failed to get or create folder for " + version); - return null; - } - File gradlePropertiesFile = folder.resolve("gradle.properties").toFile(); - if (!gradlePropertiesFile.exists() && !gradlePropertiesFile.createNewFile()) { - System.out.println("Failed to get or create gradle.properties for " + version); - return null; - } - return gradlePropertiesFile; - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - @SuppressWarnings("all") - private static String substringSince(String text, String since) { - int index = text.indexOf(since); - if (index == -1) { - return text; - } - return text.substring(index + 1); - } -} diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle deleted file mode 100644 index ece3d83..0000000 --- a/buildSrc/build.gradle +++ /dev/null @@ -1,58 +0,0 @@ -plugins { - id 'java' - id 'java-gradle-plugin' -} - -def mainModuleId = property("main_module_id").toString() -def stonecutterModuleId = property("stonecutter_module_id").toString() -def pluginMavenPackage = property("plugin_maven_package").toString() -def pluginPackage = property("plugin_package").toString() -def pluginClass = property("plugin_class").toString() -def pluginVersion = property("plugin_version").toString() - -group = pluginPackage -version = pluginVersion - -repositories { - mavenLocal() - mavenCentral() - gradlePluginPortal() - maven { - name "Fabric" - url "https://maven.fabricmc.net/" - } - maven { - name "Kiku Snapshots" - url "https://maven.kikugie.dev/snapshots" - } - maven { - name "Kiku Releases" - url "https://maven.kikugie.dev/releases" - } -} - -dependencies { - compileOnly "org.projectlombok:lombok:${property("lombok_version")}" - annotationProcessor "org.projectlombok:lombok:${property("lombok_version")}" - - implementation "me.modmuss50.mod-publish-plugin:me.modmuss50.mod-publish-plugin.gradle.plugin:${property("mod_publish_plugin_version")}" - implementation "dev.kikugie.stonecutter:dev.kikugie.stonecutter.gradle.plugin:${property("stonecutter_version")}" - implementation "dev.kikugie.fletching-table:dev.kikugie.fletching-table.gradle.plugin:${property("fletching_table_version")}" - implementation "fabric-loom:fabric-loom.gradle.plugin:${property("fabric_loom_version")}" -} - -test { - useJUnitPlatform() -} -gradlePlugin { - plugins { - create(mainModuleId) { - id = "${pluginMavenPackage}.${mainModuleId}" - implementationClass = "${pluginPackage}.${pluginClass}" - } - create(stonecutterModuleId) { - id = "${pluginMavenPackage}.${stonecutterModuleId}" - implementationClass = "${pluginPackage}.${pluginClass}Stonecutter" - } - } -} diff --git a/buildSrc/gradle.properties b/buildSrc/gradle.properties deleted file mode 100644 index 79333b8..0000000 --- a/buildSrc/gradle.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Gradle Plugin properties - -# Plugin Properties -main_module_id = mossy-plugin -stonecutter_module_id = mossy-plugin-stonecutter -plugin_maven_package = net.lopymine -plugin_package = net.lopymine.mossy -plugin_class = MossyPlugin - -plugin_version = 1.0.0 - -# Dependencies -lombok_version = 1.18.42 -mod_publish_plugin_version = 0.7.4 -stonecutter_version = 0.7.1 -fabric_loom_version = 1.11-SNAPSHOT -fletching_table_version = 0.1.0-alpha.17 \ No newline at end of file diff --git a/buildSrc/src/main/java/net/lopymine/mossy/MossyLogger.java b/buildSrc/src/main/java/net/lopymine/mossy/MossyLogger.java deleted file mode 100644 index 32dd311..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/MossyLogger.java +++ /dev/null @@ -1,23 +0,0 @@ -package net.lopymine.mossy; - -import org.gradle.api.Project; - -public class MossyLogger { - - private Project project; - - public void setup(Project project) { - this.project = project; - } - - @SuppressWarnings("all") - public void log(String text, Object... objects) { - System.out.println("[Mossy/%s] %s".formatted(this.project.getName(), text.formatted(objects))); - } - - @SuppressWarnings("all") - public void logModule(String module, String text, Object... objects) { - System.out.println("[Mossy/%s/%s] %s".formatted(this.project.getName(), module, text.formatted(objects))); - } - -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/MossyPlugin.java b/buildSrc/src/main/java/net/lopymine/mossy/MossyPlugin.java deleted file mode 100644 index 3e9d27c..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/MossyPlugin.java +++ /dev/null @@ -1,312 +0,0 @@ -package net.lopymine.mossy; - -import dev.kikugie.stonecutter.build.StonecutterBuildExtension; -import lombok.Getter; -import me.modmuss50.mpp.ModPublishExtension; -import org.gradle.api.*; -import org.gradle.api.plugins.*; -import org.gradle.api.tasks.*; -import org.gradle.jvm.tasks.Jar; - -import net.fabricmc.loom.api.LoomGradleExtensionAPI; -import net.fabricmc.loom.task.RemapJarTask; - -import net.lopymine.mossy.manager.*; -import net.lopymine.mossy.multi.MultiVersion; -import net.lopymine.mossy.tasks.*; - -import java.io.*; -import java.nio.file.Files; -import java.util.*; -import java.util.Map.Entry; -import org.jetbrains.annotations.NotNull; - -@Getter -public class MossyPlugin implements Plugin { - - public static final MossyLogger LOGGER = new MossyLogger(); - - private MultiVersion projectMultiVersion; - private int javaVersionIndex; - private JavaVersion javaVersion; - - @Override - public void apply(@NotNull Project project) { - LOGGER.setup(project); - - // - - PluginContainer plugins = project.getPlugins(); - plugins.apply("dev.kikugie.stonecutter"); - plugins.apply("fabric-loom"); - plugins.apply("me.modmuss50.mod-publish-plugin"); - plugins.apply("dev.kikugie.fletching-table"); - - // - - this.projectMultiVersion = MossyPlugin.getProjectMultiVersion(project); - this.javaVersionIndex = MossyPlugin.getJavaVersion(project); - this.javaVersion = JavaVersion.toVersion(this.javaVersionIndex); - - // - - MossyPlugin.configureProject(project, this); - - MossyJavaManager.apply(project,this); - MossyJ52JManager.apply(project); - MossyProcessResourcesManager.apply(project, this); - - MossyDependenciesManager.apply(project); - MossyStonecutterManager.apply(project, this); - - // - - MossyPlugin.configureExtensions(project, this); - MossyPlugin.configureTasks(project, this); - - LOGGER.log("Project Version: %s", project.getVersion()); - LOGGER.log("Java Version: %s", this.javaVersionIndex); - } - - private static void configureExtensions(@NotNull Project project, MossyPlugin plugin) { - project.getExtensions().configure(LoomGradleExtensionAPI.class, (loom) -> { - MossyLoomManager.apply(project, plugin, loom); - }); - - project.getExtensions().configure(ModPublishExtension.class, (mpe) -> { - MossyModPublishManager.apply(project, plugin, mpe); - }); - } - - private static void configureTasks(@NotNull Project project, MossyPlugin plugin) { - project.getTasks().register("generatePublishWorkflowsForEachVersion", GeneratePublishWorkflowsForEachVersionTask.class, (task) -> { - task.setGroup("mossy"); - }); - project.getTasks().register("generatePersonalProperties", GeneratePersonalPropertiesTask.class, (task) -> { - task.setGroup("mossy"); - }); - project.getTasks().register("regenerateRunConfigurations", Delete.class, (task) -> { - task.setGroup("mossy"); - String version = plugin.getProjectMultiVersion().projectVersion(); - task.delete(getRootFile(project, ".idea/runConfigurations/Minecraft_Client___%s__%s.xml".formatted(version.replace(".", "_"), version))); - task.delete(getRootFile(project, ".idea/runConfigurations/Minecraft_Server___%s__%s.xml".formatted(version.replace(".", "_"), version))); - task.finalizedBy("ideaSyncTask"); - }); - project.getTasks().register("rebuildLibs", Delete.class, task -> { - task.setGroup("build"); - String modName = getProperty(project, "data.mod_name").replace(" ", ""); - String version = project.getVersion().toString(); - - String jarFileName = "libs/%s-%s.jar".formatted(modName, version); - String sourcesJarFileName = "libs/%s-%s-sources.jar".formatted(modName, version); - - task.delete(getRootFile(project, jarFileName)); - task.delete(project.getLayout().getBuildDirectory().file(jarFileName)); - task.delete(project.getLayout().getBuildDirectory().file(sourcesJarFileName)); - }); - project.getTasks().named("build", task -> { - task.mustRunAfter("rebuildLibs"); - }); - project.getTasks().register("buildAndCollect", Copy.class, task -> { - task.setGroup("build"); - task.dependsOn("rebuildLibs", "build"); - task.from(((RemapJarTask) project.getTasks().getByName("remapJar")).getArchiveFile().get()); - task.into(getRootFile(project, "libs/")); - }); - for (String publishTask : List.of("publishModrinth", "publishCurseforge")) { - project.getTasks().named(publishTask).configure((task) -> { - task.doLast((t) -> { - try { - Thread.sleep(1000L); - } catch (Exception e) { - MossyPlugin.LOGGER.log("Failed to wait before publishing!"); - e.printStackTrace(); - } - }); - }); - } - } - - private static void configureProject(@NotNull Project project, MossyPlugin plugin) { - String projectVersion = plugin.getMossyProjectVersion(project); - String mavenGroup = getProperty(project, "data.mod_maven_group"); - project.setVersion(projectVersion); - project.setGroup(mavenGroup); - - BasePluginExtension base = project.getExtensions().getByType(BasePluginExtension.class); - base.getArchivesName().set(getProperty(project, "data.mod_name").replace(" ", "")); - - Jar jar = (Jar) project.getTasks().getByName("jar"); - jar.getArchiveBaseName().set(base.getArchivesName().get()); - jar.from(getRootFile(project, "LICENSE"), (spec) -> { - spec.rename(s -> "%s_%s".formatted(s, base.getArchivesName().get())); - }); - } - - public static int getJavaVersion(Project project) { - String currentMCVersion = getCurrentMCVersion(project); - StonecutterBuildExtension stonecutter = getStonecutter(project); - return stonecutter.compare("1.20.5", currentMCVersion) == 1 ? - stonecutter.compare("1.18", currentMCVersion) == 1 ? - stonecutter.compare("1.16.5", currentMCVersion) == 1 ? - 8 - : - 16 - : - 17 - : - 21; - } - - - public static MultiVersion getProjectMultiVersion(@NotNull Project currentProject) { - String currentMCVersion = getCurrentMCVersion(currentProject); - - String[] versions = getProperty(currentProject, "versions_specifications").split(" "); - for (String version : versions) { - String[] split = (substringBeforeLast(version, ".") + ".").split("\\["); - String project = split[0]; - if (Objects.equals(project, currentMCVersion)) { - String supportedVersionsString = split[1]; - if (supportedVersionsString.contains("-")) { - String[] supportedVersions = supportedVersionsString.split("-"); - return new MultiVersion(currentMCVersion, supportedVersions[0], supportedVersions[1]); - } else if (supportedVersionsString.contains(".")) { - return new MultiVersion(currentMCVersion, currentMCVersion, supportedVersionsString); - } else { - int a = project.indexOf("."); - int i = project.lastIndexOf("."); - if (a == i) { - i = project.length(); - } - String p = project.substring(0, i); - String supportedMaxVersion = "%s.%s".formatted(p, supportedVersionsString); - return new MultiVersion(currentMCVersion, currentMCVersion, supportedMaxVersion); - } - } - } - return new MultiVersion(currentMCVersion, currentMCVersion, currentMCVersion); - } - - public static Properties getPersonalProperties(@NotNull Project project) { - File file = project.getRootProject().file("personal/personal.properties"); - Properties personalProperties = new Properties(); - - if (!file.exists()) { - return personalProperties; - } - - try (InputStream stream = new FileInputStream(file)) { - personalProperties.load(stream); - } catch (IOException e) { - LOGGER.log("Something went wrong when parsing personal properties:"); - LOGGER.log(e.getMessage()); - } - - try { - String mixinPath = "absolute_path_to_sponge_mixin"; - - for (String line : Files.readAllLines(file.toPath())) { - if (!line.startsWith(mixinPath)) { - continue; - } - personalProperties.setProperty(mixinPath, line.substring(mixinPath.length() + 1)); - } - } catch (Exception e) { - LOGGER.log("Something went wrong when parsing personal properties mixin path:"); - LOGGER.log(e.getMessage()); - } - - return personalProperties; - } - - public static Map getMossyProperties(Project project, String prefix) { - HashMap dependencies = new HashMap<>(); - - Map properties = project.getProperties(); - for (Entry entry : properties.entrySet()) { - String key = entry.getKey(); - Object value = entry.getValue(); - if (!key.startsWith(prefix + ".")) { - continue; - } - dependencies.put(substringSince(key, "."), value.toString()); - } - - return dependencies; - } - - public static String getCurrentMCVersion(@NotNull Project project) { - return getStonecutter(project).getCurrent().getProject(); - } - - public static @NotNull StonecutterBuildExtension getStonecutter(@NotNull Project project) { - return (StonecutterBuildExtension) project.getExtensions().getByName("stonecutter"); - } - - public static String getProperty(@NotNull Project project, String id) { - Map properties = project.getProperties(); - if (!properties.containsKey(id)) { - throw new IllegalArgumentException("Missing important property with id \"%s\" !".formatted(id)); - } - return properties.get(id).toString(); - } - - public static String[] getMultiVersions(@NotNull Project project) { - return getProperty(project, "multi_versions").split(" "); - } - - public static List getVersionsSpecifications(@NotNull Project project) { - return Arrays.stream(getProperty(project, "versions_specifications") - .split(" ")) - .map((version) -> substringBefore(version, "[")) - .toList(); - } - - @SuppressWarnings("unused") - public static String substringBeforeLast(String value, String since) { - int i = value.lastIndexOf(since); - if (i == -1) { - return value; - } - return value.substring(0, i); - } - - @SuppressWarnings("unused") - public static String substringSinceLast(String value, String since) { - int i = value.lastIndexOf(since); - if (i == -1) { - return value; - } - return value.substring(i + 1); - } - - @SuppressWarnings("unused") - public static String substringBefore(String value, String since) { - int i = value.indexOf(since); - if (i == -1) { - return value; - } - return value.substring(0, i); - } - - @SuppressWarnings("unused") - public static String substringSince(String value, String since) { - int i = value.indexOf(since); - if (i == -1) { - return value; - } - return value.substring(i + 1); - } - - public String getMossyProjectVersion(Project project) { - String modVersion = getProperty(project, "data.mod_version"); - MultiVersion multiVersion = this.getProjectMultiVersion(); - return "%s+%s".formatted(modVersion, multiVersion.projectVersion()); - } - - public static File getRootFile(@NotNull Project project, String path) { - return project.getRootProject().file(path); - } - -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/MossyPluginStonecutter.java b/buildSrc/src/main/java/net/lopymine/mossy/MossyPluginStonecutter.java deleted file mode 100644 index 497f475..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/MossyPluginStonecutter.java +++ /dev/null @@ -1,132 +0,0 @@ -package net.lopymine.mossy; - -import dev.kikugie.stonecutter.controller.StonecutterControllerExtension; -import dev.kikugie.stonecutter.data.StonecutterProject; -import java.io.IOException; -import lombok.experimental.ExtensionMethod; -import org.gradle.*; -import org.gradle.api.*; -import org.gradle.api.initialization.Settings; -import org.gradle.api.invocation.Gradle; -import org.gradle.api.tasks.*; - -import java.util.List; -import org.jetbrains.annotations.NotNull; - -@ExtensionMethod(MossyPlugin.class) -public class MossyPluginStonecutter implements Plugin { - - @Override - public void apply(@NotNull Project project) { - TaskContainer tasks = project.getTasks(); - StonecutterControllerExtension controller = project.getExtensions().getByType(StonecutterControllerExtension.class); - - tasks.register("submodulesUpdate", (task) -> { - task.doFirst((a) -> { - try { - Runtime.getRuntime().exec(new String[]{"git", "submodule", "update", "--init", "--force", "--remote"}); - } catch (IOException e) { - throw new RuntimeException(e); - } - }); - }); - - for (StonecutterProject version : controller.getVersions()) { - tasks.register("buildAndCollect+%s".formatted(version.getProject()), (task) -> { - task.dependsOn("submodulesUpdate"); - task.dependsOn(":%s:buildAndCollect".formatted(version.getProject())); - task.setGroup("mossy-build"); - }); - } - - for (StonecutterProject version : controller.getVersions()) { - tasks.register("publish+%s".formatted(version.getProject()), (task) -> { - task.dependsOn("submodulesUpdate"); - task.dependsOn(":%s:publishMods".formatted(version.getProject())); - task.setGroup("mossy-publish"); - }); - } - - tasks.register("buildAndCollect+All", (task) -> { - task.dependsOn("submodulesUpdate"); - controller.getVersions().forEach((version) -> { - task.dependsOn(":%s:buildAndCollect".formatted(version.getProject())); - }); - task.setGroup("mossy-build"); - }); - - tasks.register("buildAndCollect+Specified", (task) -> { - task.dependsOn("submodulesUpdate"); - List versionsSpecifications = project.getVersionsSpecifications(); - controller.getVersions().forEach((version) -> { - if (!versionsSpecifications.contains(version.getProject())) { - return; - } - task.dependsOn(":%s:buildAndCollect".formatted(version.getProject())); - }); - task.setGroup("mossy-build"); - }); - - tasks.register("publish+All", (task) -> { - task.dependsOn("submodulesUpdate"); - List versions = controller.getVersions() - .stream() - .sorted((a, b) -> controller.compare(a.getProject(), b.getProject())) - .toList(); - - for (String publishTask : List.of("publishModrinth", "publishCurseforge")) { - for (int i = 1; i < versions.size(); i++) { - StonecutterProject first = versions.get(i - 1); - StonecutterProject second = versions.get(i); - - TaskProvider firstTask = project.getChildProjects().get(first.getProject()).getTasks().named(publishTask); - TaskProvider secondTask = project.getChildProjects().get(second.getProject()).getTasks().named(publishTask); - task.dependsOn(firstTask, secondTask); - - secondTask.configure((t) -> t.setMustRunAfter(List.of(firstTask))); - } - } - - task.setGroup("mossy-publish"); - }); - - tasks.register("publish+Specified", (task) -> { - task.dependsOn("submodulesUpdate"); - List versionsSpecifications = project.getVersionsSpecifications(); - controller.getVersions().forEach((version) -> { - if (!versionsSpecifications.contains(version.getProject())) { - return; - } - task.dependsOn(":%s:publishMods".formatted(version.getProject())); - }); - task.setGroup("mossy-publish"); - }); - - project.getGradle().addBuildListener(new BuildListener() { - @Override - public void settingsEvaluated(@NotNull Settings settings) { - - } - - @Override - public void projectsLoaded(@NotNull Gradle gradle) { - - } - - @Override - public void projectsEvaluated(@NotNull Gradle gradle) { - for (Task task : tasks) { - if (!"stonecutter".equals(task.getGroup())) { - continue; - } - task.setGroup("mossy-stonecutter"); - } - } - - @Override - public void buildFinished(@NotNull BuildResult result) { - - } - }); - } -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/extension/MossyAdditionalDependencies.java b/buildSrc/src/main/java/net/lopymine/mossy/extension/MossyAdditionalDependencies.java deleted file mode 100644 index 1bbd41b..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/extension/MossyAdditionalDependencies.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.lopymine.mossy.extension; - -import lombok.Getter; - -import java.util.*; - -@Getter -public class MossyAdditionalDependencies { - - private final Map overrides = new HashMap<>(); - private final Set disabled = new HashSet<>(); - - public void override(String configurationName, String modId) { - this.overrides.put(modId, new AdditionalDependencyOverride(modId, configurationName)); - } - - public void disable(String modId) { - this.disabled.add(modId); - } - - public record AdditionalDependencyOverride(String modId, String configurationName) { - - } -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/extension/MossyDependenciesExtension.java b/buildSrc/src/main/java/net/lopymine/mossy/extension/MossyDependenciesExtension.java deleted file mode 100644 index 2622f70..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/extension/MossyDependenciesExtension.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.lopymine.mossy.extension; - -import lombok.Getter; -import org.gradle.api.Action; -import org.gradle.api.tasks.*; - -@Getter -public class MossyDependenciesExtension { - - @Input - String minecraft; - - @Input - String mappings; - - @Input - String fabricApi; - - @Input - String fabricLoader; - - @Input - String lombok; - - @Nested - MossyAdditionalDependencies additional = new MossyAdditionalDependencies(); - - public void additional(Action action) { - action.execute(this.additional); - } -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/extension/MossyProcessResourcesExtension.java b/buildSrc/src/main/java/net/lopymine/mossy/extension/MossyProcessResourcesExtension.java deleted file mode 100644 index 51a1b19..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/extension/MossyProcessResourcesExtension.java +++ /dev/null @@ -1,16 +0,0 @@ -package net.lopymine.mossy.extension; - -import lombok.Getter; -import org.gradle.api.tasks.Input; - -import java.util.List; -import org.jetbrains.annotations.Nullable; - -@Getter -public class MossyProcessResourcesExtension { - - @Input - @Nullable - List expandFiles; - -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyDependenciesManager.java b/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyDependenciesManager.java deleted file mode 100644 index 815bc82..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyDependenciesManager.java +++ /dev/null @@ -1,119 +0,0 @@ -package net.lopymine.mossy.manager; - -import lombok.experimental.ExtensionMethod; -import org.gradle.api.*; -import org.gradle.api.artifacts.dsl.DependencyHandler; -import org.gradle.api.artifacts.repositories.MavenArtifactRepository; - -import net.lopymine.mossy.*; -import net.lopymine.mossy.extension.*; -import net.lopymine.mossy.extension.MossyAdditionalDependencies.AdditionalDependencyOverride; - -import java.util.*; -import java.util.function.Consumer; -import org.jetbrains.annotations.NotNull; - -@ExtensionMethod(MossyPlugin.class) -public class MossyDependenciesManager { - - private static void addDependencies(MossyDependenciesExtension extension, Project project) { - String minecraft = extension.getMinecraft(); - String fabricApi = extension.getFabricApi(); - String fabricLoader = extension.getFabricLoader(); - String lombok = extension.getLombok(); - - DependencyHandler dependencies = project.getDependencies(); - dependencies.add("minecraft", "com.mojang:minecraft:%s".formatted(minecraft)); - dependencies.add("modImplementation", "net.fabricmc.fabric-api:fabric-api:%s".formatted(fabricApi)); - dependencies.add("modImplementation", "net.fabricmc:fabric-loader:%s".formatted(fabricLoader)); - dependencies.add("compileOnly", "org.projectlombok:lombok:%s".formatted(lombok)); - dependencies.add("annotationProcessor", "org.projectlombok:lombok:%s".formatted(lombok)); - - Map properties = project.getMossyProperties("dep"); - MossyAdditionalDependencies additional = extension.getAdditional(); - additional.disable("yacl"); - - Map overrides = additional.getOverrides(); - Set disabled = additional.getDisabled(); - properties.forEach((modId, version) -> { - if (disabled.contains(modId)) { - //System.out.println("Disabling auto-dependency for %s !".formatted(modId)); - return; - } - - if (version.equals("unknown")) { - return; - } - - AdditionalDependencyOverride override = overrides.get(modId); - String configurationName = override != null ? override.configurationName() : "modImplementation"; - dependencies.add(configurationName, "maven.modrinth:%s:%s".formatted(modId, version)); - }); - - project.getConfigurations().forEach((configuration) -> { - configuration.resolutionStrategy((strategy) -> { - strategy.force("com.twelvemonkeys.common:common-io:3.10.0"); - strategy.force("com.twelvemonkeys.common:common-lang:3.10.0"); - strategy.force("com.twelvemonkeys.common:common-image:3.10.0"); - strategy.force("com.twelvemonkeys.imageio:imageio-metadata:3.10.0"); - strategy.force("com.twelvemonkeys.imageio:imageio-webp:3.10.0"); - strategy.force("com.twelvemonkeys.imageio:imageio-core:3.10.0"); - }); - }); - - String yaclVersion = properties.get("yacl"); - if (yaclVersion != null && !yaclVersion.equals("unknown")) { - Set oldMavenVersions = Set.of("1.19.4", "1.20", "1.20.2", "1.20.3"); - if (oldMavenVersions.contains(minecraft)) { - dependencies.add("modImplementation", "dev.isxander.yacl:yet-another-config-lib-fabric:%s".formatted(MossyPlugin.substringBeforeLast(yaclVersion, "-"))); - } else { - dependencies.add("modImplementation", "dev.isxander:yet-another-config-lib:%s".formatted(yaclVersion)); - } - } - } - - private static void addRepositories(Project project) { - project.getRepositories().mavenCentral(); - addRepository(project, "Quilt", "https://maven.quiltmc.org/repository/release/"); - addRepository(project, "Sonatype", "https://oss.sonatype.org/content/repositories/snapshots/"); - addRepository(project, "Terraformers", "https://maven.terraformersmc.com/"); - addRepository(project, "YACL", "https://maven.isxander.dev/releases"); - addRepository(project, "Nucleoid", "https://maven.nucleoid.xyz/"); - addRepository(project, "Modrinth", "https://api.modrinth.com/maven", (repository) -> { - repository.content((descriptor) -> { - descriptor.includeGroup("maven.modrinth"); - }); - }); - - } - - private static void addRepository(Project project, String name, String url) { - addRepository(project, name, url, (repository) -> {}); - } - - private static void addRepository(Project project, String name, String url, Consumer consumer) { - project.getRepositories().maven((repository) -> { - repository.setName(name); - repository.setUrl(url); - consumer.accept(repository); - }); - } - - public static void apply(@NotNull Project project) { - project.getExtensions().create("mossyDependencies", MossyDependenciesExtension.class); - - addRepositories(project); - project.getGradle().addProjectEvaluationListener(new ProjectEvaluationListener() { - @Override - public void beforeEvaluate(@NotNull Project project) { - } - - @Override - public void afterEvaluate(@NotNull Project project, @NotNull ProjectState state) { - MossyDependenciesExtension extension = project.getExtensions().getByType(MossyDependenciesExtension.class); - MossyDependenciesManager.addDependencies(extension, project); - project.getGradle().removeProjectEvaluationListener(this); - } - }); - } -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyJ52JManager.java b/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyJ52JManager.java deleted file mode 100644 index e77e652..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyJ52JManager.java +++ /dev/null @@ -1,18 +0,0 @@ -package net.lopymine.mossy.manager; - -import dev.kikugie.fletching_table.extension.FletchingTableExtension; -import lombok.experimental.ExtensionMethod; -import net.lopymine.mossy.MossyPlugin; -import org.gradle.api.Project; - -@ExtensionMethod(MossyPlugin.class) -public class MossyJ52JManager { - - public static void apply(Project project) { - project.getExtensions().configure(FletchingTableExtension.class, (extension) -> { - var main = extension.getJ52j().register("main"); - main.configure((container) -> container.extension("json", "**/*.json5")); - }); - } - -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyJavaManager.java b/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyJavaManager.java deleted file mode 100644 index da89d8a..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyJavaManager.java +++ /dev/null @@ -1,29 +0,0 @@ -package net.lopymine.mossy.manager; - -import lombok.experimental.ExtensionMethod; -import org.gradle.api.*; -import org.gradle.api.plugins.*; -import org.gradle.api.tasks.TaskCollection; -import org.gradle.api.tasks.compile.JavaCompile; - -import net.lopymine.mossy.MossyPlugin; - -import org.jetbrains.annotations.NotNull; - -@ExtensionMethod(MossyPlugin.class) -public class MossyJavaManager { - - public static void apply(@NotNull Project project, MossyPlugin mossyPlugin) { - int javaVersionIndex = mossyPlugin.getJavaVersionIndex(); - JavaVersion javaVersion = mossyPlugin.getJavaVersion(); - - TaskCollection collection = project.getTasks().withType(JavaCompile.class); - for (JavaCompile javaCompile : collection) { - javaCompile.getOptions().getRelease().set(javaVersionIndex); - } - - JavaPluginExtension javaExtension = project.getExtensions().getByType(JavaPluginExtension.class); - javaExtension.setSourceCompatibility(javaVersion); - javaExtension.setTargetCompatibility(javaVersion); - } -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyLoomManager.java b/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyLoomManager.java deleted file mode 100644 index 4f63a65..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyLoomManager.java +++ /dev/null @@ -1,94 +0,0 @@ -package net.lopymine.mossy.manager; - -import lombok.experimental.ExtensionMethod; -import org.gradle.api.*; - -import net.fabricmc.loom.api.LoomGradleExtensionAPI; -import net.fabricmc.loom.configuration.ide.RunConfigSettings; - -import net.lopymine.mossy.MossyPlugin; - -import java.io.File; -import java.util.*; -import java.util.regex.Pattern; -import org.jetbrains.annotations.*; - -@ExtensionMethod(MossyPlugin.class) -public class MossyLoomManager { - - private static final Pattern PLAYER_NICKNAME_PATTERN = Pattern.compile("[a-zA-Z0-9_]{2,16}$"); - - @SuppressWarnings("UnstableApiUsage") - public static void apply(@NotNull Project project, MossyPlugin plugin, LoomGradleExtensionAPI loom) { - String modId = project.getProperty("data.mod_id"); - String currentVersion = plugin.getProjectMultiVersion().projectVersion(); - File file = project.getRootFile("src/main/resources/aws/%s.accesswidener".formatted(currentVersion)); - - // Mixins and AWs - - loom.getMixin().getDefaultRefmapName().set("%s.refmap.json".formatted(modId)); - loom.getAccessWidenerPath().set(file); - - // Run Configs - - Properties personalProperties = project.getPersonalProperties(); - - String playerNickname = getPlayerNickname(personalProperties); - UUID playerUuid = getPlayerUuid(personalProperties); - Object quickPlayWorld = personalProperties.get("quick_play_world"); - Object pathToSpongeMixin = personalProperties.get("absolute_path_to_sponge_mixin"); - - for (RunConfigSettings runConfig : loom.getRunConfigs()) { - runConfig.setIdeConfigGenerated(true); - runConfig.setRunDir("../../runs/" + runConfig.getEnvironment()); - - if (runConfig.getEnvironment().equals("client")) { - addProgramArg(runConfig, "--username", playerNickname); - addProgramArg(runConfig, "--uuid", playerUuid); - addProgramArg(runConfig, "--quickPlaySingleplayer", quickPlayWorld); - addVMArg(runConfig, "-javaagent", pathToSpongeMixin); - } - } - } - - private static String getPlayerNickname(Properties personalProperties) { - Object o = personalProperties.get("player_nickname"); - if (o == null) { - return "Player"; - } - String playerNickname = o.toString(); - if (!PLAYER_NICKNAME_PATTERN.matcher(playerNickname).matches()) { - return "Player"; - } - return playerNickname; - } - - private static @Nullable UUID getPlayerUuid(Properties personalProperties) { - try { - Object o = personalProperties.get("player_uuid"); - if (o == null) { - return null; - } - return UUID.fromString(o.toString()); - } catch (Exception e) { - return null; - } - } - - @SuppressWarnings("all") - private static void addVMArg(RunConfigSettings settings, String propertyKey, @Nullable Object propertyValue) { - if (propertyValue == null || propertyValue.toString().equals("none")) { - return; - } - settings.getVmArgs().add("%s:%s".formatted(propertyKey, propertyValue.toString())); - } - - private static void addProgramArg(RunConfigSettings settings, String propertyKey, @Nullable Object propertyValue) { - if (propertyValue == null || propertyValue.toString().equals("none")) { - return; - } - List programArgs = settings.getProgramArgs(); - programArgs.add(propertyKey); - programArgs.add(propertyValue.toString()); - } -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyModPublishManager.java b/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyModPublishManager.java deleted file mode 100644 index 7210153..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyModPublishManager.java +++ /dev/null @@ -1,148 +0,0 @@ -package net.lopymine.mossy.manager; - -import lombok.experimental.ExtensionMethod; -import me.modmuss50.mpp.*; -import org.codehaus.groovy.runtime.ResourceGroovyMethods; -import org.gradle.api.*; -import org.gradle.api.file.RegularFile; -import org.gradle.api.provider.Provider; - -import net.fabricmc.loom.task.RemapJarTask; - -import net.lopymine.mossy.MossyPlugin; -import net.lopymine.mossy.multi.MultiVersion; - -import java.io.*; -import java.util.Arrays; -import org.jetbrains.annotations.NotNull; - -@ExtensionMethod(MossyPlugin.class) -public class MossyModPublishManager { - - public static void apply(@NotNull Project project, MossyPlugin mossyPlugin, ModPublishExtension mpe) { - MultiVersion projectMultiVersion = mossyPlugin.getProjectMultiVersion(); - String name = "[%s] %s v%s".formatted(projectMultiVersion.toVersionRange(), project.getProperty("data.mod_name"), project.getProperty("data.mod_version")); - - String[] loaders = project.getProperty("loaders").split(" "); - String modrinthId = project.getProperty("modrinth_id"); - String curseForgeId = project.getProperty("curseforge_id"); - String[] dependsEmbeds = project.getProperty("depends_embeds").split(" "); - String[] dependsRequires = project.getProperty("depends_requires").split(" "); - String[] dependsOptional = project.getProperty("depends_optional").split(" "); - String[] dependsIncompatible = project.getProperty("depends_incompatible").split(" "); - String versionType = project.getProperty("version_type"); - int maxJavaVersion = Integer.parseInt(project.getProperty("max_java_version")); - Boolean isForClient = Boolean.parseBoolean(project.getProperty("is_for_client")); - Boolean isForServer = Boolean.parseBoolean(project.getProperty("is_for_server")); - boolean testPublish = Boolean.parseBoolean(project.getProperty("test_publish")); - - String curseForgeApiKey = project.getProviders().environmentVariable("CURSEFORGE_API_KEY").getOrNull(); - String modrinthApiKey = project.getProviders().environmentVariable("MODRINTH_API_KEY").getOrNull(); - - boolean cannotUpload = testPublish || ((curseForgeApiKey == null && !curseForgeId.equals("none")) || (modrinthApiKey == null && !modrinthId.equals("none"))); - - mpe.getDisplayName().set(name); - mpe.getFile().set(getModFile(project)); - mpe.getChangelog().set(getChangeLog(project)); - mpe.getType().set(getType(versionType)); - mpe.getModLoaders().set(Arrays.asList(loaders)); - mpe.getDryRun().set(cannotUpload); - - if (!curseForgeId.equals("none")) { - mpe.curseforge((curseforge) -> { - curseforge.getProjectId().set(curseForgeId); - curseforge.getAccessToken().set(curseForgeApiKey); - - for (int i = 17; i < maxJavaVersion + 1; i++) { - curseforge.getJavaVersions().add(JavaVersion.values()[i]); - } - - curseforge.getClientRequired().set(isForClient); - curseforge.getServerRequired().set(isForServer); - - if (projectMultiVersion.minIsMax()) { - curseforge.getMinecraftVersions().add(projectMultiVersion.maxVersion()); - } else { - curseforge.minecraftVersionRange((options) -> { - options.getStart().set(projectMultiVersion.minVersion()); - options.getEnd().set(projectMultiVersion.maxVersion()); - }); - } - - if (!dependsEmbeds[0].equals("none")) { - curseforge.embeds(dependsEmbeds); - } - if (!dependsRequires[0].equals("none")) { - curseforge.requires(dependsRequires); - } - if (!dependsOptional[0].equals("none")) { - curseforge.optional(dependsOptional); - } - if (!dependsIncompatible[0].equals("none")) { - curseforge.incompatible(dependsIncompatible); - } - }); - } - - if (!modrinthId.equals("none")) { - mpe.modrinth((modrinth) -> { - modrinth.getProjectId().set(modrinthId); - modrinth.getAccessToken().set(modrinthApiKey); - - if (projectMultiVersion.minIsMax()) { - modrinth.getMinecraftVersions().add(projectMultiVersion.maxVersion()); - } else { - modrinth.minecraftVersionRange((options) -> { - options.getStart().set(projectMultiVersion.minVersion()); - options.getEnd().set(projectMultiVersion.maxVersion()); - }); - } - - if (!dependsEmbeds[0].equals("none")) { - modrinth.embeds(dependsEmbeds); - } - if (!dependsRequires[0].equals("none")) { - modrinth.requires(dependsRequires); - } - if (!dependsOptional[0].equals("none")) { - modrinth.optional(dependsOptional); - } - if (!dependsIncompatible[0].equals("none")) { - modrinth.incompatible(dependsIncompatible); - } - }); - } - - MossyPlugin.LOGGER.logModule("MPP","Configuring \"%s\"", mpe.getDisplayName().get()); - MossyPlugin.LOGGER.logModule("MPP","Dry Run: %s", mpe.getDryRun().get()); - } - - private static Provider getModFile(@NotNull Project project) { - return ((RemapJarTask) project.getTasks().getByName("remapJar")).getArchiveFile(); - } - - private static ReleaseType getType(String versionType) { - return switch (versionType) { - case "RELEASE" -> ReleaseType.STABLE; - case "BETA" -> ReleaseType.BETA; - case "ALPHA" -> ReleaseType.ALPHA; - default -> throw new IllegalArgumentException("Unknown version type!"); - }; - } - - private static String getChangeLog(@NotNull Project project) { - try { - File file = project.getRootFile("CHANGELOG.md"); - if (file.exists()) { - String text = ResourceGroovyMethods.getText(file); - if (!text.isBlank()) { - return text; - } - } - } catch (IOException e) { - throw new RuntimeException("Failed to read changelog:", e); - } - return "No changelog specified."; - } - -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyProcessResourcesManager.java b/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyProcessResourcesManager.java deleted file mode 100644 index 14a54f4..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyProcessResourcesManager.java +++ /dev/null @@ -1,67 +0,0 @@ -package net.lopymine.mossy.manager; - -import lombok.experimental.ExtensionMethod; -import org.gradle.api.*; -import org.gradle.api.internal.TaskInputsInternal; -import org.gradle.language.jvm.tasks.ProcessResources; - -import net.lopymine.mossy.MossyPlugin; -import net.lopymine.mossy.extension.*; - -import java.util.*; -import org.jetbrains.annotations.NotNull; - -@ExtensionMethod(MossyPlugin.class) -public class MossyProcessResourcesManager { - - public static void apply(@NotNull Project project, MossyPlugin plugin) { - project.getExtensions().create("mossyResources", MossyProcessResourcesExtension.class); - - project.getGradle().addProjectEvaluationListener(new ProjectEvaluationListener() { - @Override - public void beforeEvaluate(@NotNull Project project) { - } - - @Override - public void afterEvaluate(@NotNull Project project, @NotNull ProjectState state) { - MossyProcessResourcesExtension extension = project.getExtensions().getByType(MossyProcessResourcesExtension.class); - MossyProcessResourcesManager.processResources(project, plugin, extension); - project.getGradle().removeProjectEvaluationListener(this); - } - }); - } - - private static void processResources(Project project, MossyPlugin plugin, MossyProcessResourcesExtension extension) { - ProcessResources processResources = (ProcessResources) project.getTasks().getByName("processResources"); - TaskInputsInternal inputs = processResources.getInputs(); - - String mcVersion = plugin.getProjectMultiVersion().projectVersion(); - String modId = project.getProperty("data.mod_id"); - - Map properties = project.getMossyProperties("data"); - properties.putAll(project.getMossyProperties("build")); - properties.putAll(project.getMossyProperties("dep")); - properties.put("java", String.valueOf(plugin.getJavaVersionIndex())); - properties.put("minecraft", mcVersion); - properties.put("fabric_api_id", project.getStonecutter().compare("1.19.1", mcVersion) >= 0 ? "fabric" : "fabric-api"); - properties.put("mod_version", project.getVersion().toString()); - - properties.forEach(inputs::property); - - List patterns = new ArrayList<>(List.of("*.json5", "*.json", "assets/%s/lang/*.json".formatted(modId))); - List expandFiles = extension.getExpandFiles(); - if (expandFiles != null) { - patterns.addAll(expandFiles); - } - - processResources.filesMatching(patterns, (details) -> { - details.expand(properties); - }); - - processResources.filesMatching("aws/*.accesswidener", (details) -> { - if (!details.getName().startsWith(mcVersion)) { - details.exclude(); - } - }); - } -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyStonecutterManager.java b/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyStonecutterManager.java deleted file mode 100644 index d1cd110..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/manager/MossyStonecutterManager.java +++ /dev/null @@ -1,41 +0,0 @@ -package net.lopymine.mossy.manager; - -import dev.kikugie.stonecutter.build.StonecutterBuildExtension; -import lombok.experimental.ExtensionMethod; -import org.gradle.api.Project; - -import net.lopymine.mossy.MossyPlugin; - -import java.util.Map; -import org.jetbrains.annotations.NotNull; - -@ExtensionMethod(MossyPlugin.class) -public class MossyStonecutterManager { - - public static void apply(@NotNull Project project, MossyPlugin plugin) { - StonecutterBuildExtension stonecutter = project.getStonecutter(); - - String mcVersion = plugin.getProjectMultiVersion().projectVersion(); - Map properties = project.getMossyProperties("data"); - properties.putAll(project.getMossyProperties("build")); - Map dependencies = project.getMossyProperties("dep"); - properties.putAll(dependencies); - properties.put("java", String.valueOf(plugin.getJavaVersionIndex())); - properties.put("minecraft", mcVersion); - properties.put("fabric_api_id", project.getStonecutter().compare("1.19.1", mcVersion) >= 0 ? "fabric" : "fabric-api"); - properties.put("mod_version", project.getVersion().toString()); - - properties.forEach((key, value) -> { - stonecutter.getSwaps().put(key, getFormatted(value)); - }); - - dependencies.forEach((modId, version) -> { - stonecutter.getConstants().put(modId, !version.equals("unknown")); - stonecutter.getDependencies().put(modId, version); - }); - } - - private static @NotNull String getFormatted(String modVersion) { - return "\"%s\";".formatted(modVersion); - } -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/multi/MultiVersion.java b/buildSrc/src/main/java/net/lopymine/mossy/multi/MultiVersion.java deleted file mode 100644 index 334a809..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/multi/MultiVersion.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.lopymine.mossy.multi; - -import java.util.Objects; - -public record MultiVersion(String projectVersion, String minVersion, String maxVersion) { - - @Override - public String toString() { - if (!this.minVersion().equals(this.maxVersion())) { - return "%s[%s-%s]".formatted(this.projectVersion(), this.minVersion(), this.maxVersion()); - } - return "%s[%s]".formatted(this.projectVersion(), this.maxVersion()); - } - - public String toVersionRange() { - if (Objects.equals(this.minVersion(), this.maxVersion())) { - return this.maxVersion(); - } - - int aMin = this.minVersion().indexOf("."); - int bMin = this.minVersion().lastIndexOf("."); - if (aMin == bMin) { - bMin = this.minVersion().length(); - } - String minMain = this.minVersion().substring(0, bMin); - - int aMax = this.maxVersion().indexOf("."); - int bMax = this.maxVersion().lastIndexOf("."); - if (aMax == bMax) { - bMax = this.maxVersion().length(); - } - - String maxMain = this.maxVersion().substring(0, bMax); - String maxMinor = this.maxVersion().substring(bMax+1); - if (minMain.equals(maxMain)) { - return "%s-%s".formatted(this.minVersion(), maxMinor); - } - return "%s-%s".formatted(this.minVersion(), this.maxVersion()); - } - - public boolean minIsMax() { - return this.minVersion().equals(this.maxVersion()); - } - -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/tasks/GeneratePersonalPropertiesTask.java b/buildSrc/src/main/java/net/lopymine/mossy/tasks/GeneratePersonalPropertiesTask.java deleted file mode 100644 index c8fdce4..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/tasks/GeneratePersonalPropertiesTask.java +++ /dev/null @@ -1,55 +0,0 @@ -package net.lopymine.mossy.tasks; - -import lombok.experimental.ExtensionMethod; -import org.gradle.api.*; -import org.gradle.api.tasks.TaskAction; - -import net.lopymine.mossy.MossyPlugin; - -import java.io.*; -import java.nio.file.Files; - -@ExtensionMethod(MossyPlugin.class) -public class GeneratePersonalPropertiesTask extends DefaultTask { - - @TaskAction - public void generate() { - Project project = this.getProject(); - File file = project.getRootFile("personal/"); - if (!file.exists() && !file.mkdirs()) { - return; - } - try { - File personalPropertiesFile = file.toPath().resolve("personal.properties").toFile(); - if (personalPropertiesFile.exists()) { - return; - } - if (!personalPropertiesFile.createNewFile()) { - return; - } - - String strip = """ - # # # # # # # # # # # # # # - # Personal Properties # - # # # # # # # # # # # # # # - - # If you don't want to set up any property, just set it to "none". - # Remember to run "regenerateRunConfigurations" task after changing this file! - - # Player properties - player_nickname=Steve - player_uuid=8667ba71-b85a-4004-af54-457a9734eed7 - - # Hot Swapping - absolute_path_to_sponge_mixin=none - - # Quick Play - quick_play_world=none - """.stripIndent().strip(); - - Files.write(personalPropertiesFile.toPath(), strip.getBytes()); - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/buildSrc/src/main/java/net/lopymine/mossy/tasks/GeneratePublishWorkflowsForEachVersionTask.java b/buildSrc/src/main/java/net/lopymine/mossy/tasks/GeneratePublishWorkflowsForEachVersionTask.java deleted file mode 100644 index 9358ece..0000000 --- a/buildSrc/src/main/java/net/lopymine/mossy/tasks/GeneratePublishWorkflowsForEachVersionTask.java +++ /dev/null @@ -1,64 +0,0 @@ -package net.lopymine.mossy.tasks; - -import lombok.experimental.ExtensionMethod; -import org.gradle.api.*; -import org.gradle.api.tasks.TaskAction; - -import net.lopymine.mossy.MossyPlugin; - -import java.io.*; -import java.nio.file.Files; - -@ExtensionMethod(MossyPlugin.class) -public class GeneratePublishWorkflowsForEachVersionTask extends DefaultTask { - - @TaskAction - public void generate() { - Project project = this.getProject(); - File file = project.getRootFile(".github/workflows/"); - if (!file.exists() && !file.mkdirs()) { - return; - } - String[] multiVersions = project.getMultiVersions(); - for (String multiVersion : multiVersions) { - try { - File workflowFile = file.toPath().resolve("publish_%s.yml".formatted(multiVersion)).toFile(); - if (workflowFile.exists()) { - continue; - } - if (!workflowFile.createNewFile()) { - continue; - } - String strip = """ - # Generated workflow by task - - name: Publish MULTI_VERSION_ID Version - on: [workflow_dispatch] # Manual trigger - - permissions: - contents: write - - jobs: - build: - runs-on: ubuntu-22.04 - container: - image: mcr.microsoft.com/openjdk/jdk:21-ubuntu - options: --user root - steps: - - uses: actions/checkout@v4 - - name: make gradle wrapper executable - run: chmod +x ./gradlew - - name: Publish MULTI_VERSION_ID Mod Version - run: ./gradlew chiseledBuildAndCollect+MULTI_VERSION_ID chiseledPublish+MULTI_VERSION_ID - env: - CURSEFORGE_API_KEY: ${{ secrets.CURSEFORGE_API_KEY }} - MODRINTH_API_KEY: ${{ secrets.MODRINTH_API_KEY }} - """.replaceAll("MULTI_VERSION_ID", multiVersion).stripIndent().strip(); - Files.write(workflowFile.toPath(), strip.getBytes()); - } catch (Exception ignored) { - } - - } - } - -} diff --git a/buildSrc/src/main/java/net/lopymine/utils/MossyUtils.java b/buildSrc/src/main/java/net/lopymine/utils/MossyUtils.java new file mode 100644 index 0000000..b68db6c --- /dev/null +++ b/buildSrc/src/main/java/net/lopymine/utils/MossyUtils.java @@ -0,0 +1,57 @@ +package net.lopymine.utils; + +import java.util.*; +import org.gradle.api.Project; +import org.jetbrains.annotations.NotNull; + +@SuppressWarnings("unused") +public class MossyUtils { + + public static String getProperty(@NotNull Properties properties, String id) { + if (!properties.containsKey(id)) { + throw new IllegalArgumentException("Missing important property with id \"%s\" !".formatted(id)); + } + return properties.get(id).toString(); + } + + public static String getProperty(@NotNull Project project, String id) { + Map properties = project.getProperties(); + if (!properties.containsKey(id)) { + throw new IllegalArgumentException("Missing important property with id \"%s\" !".formatted(id)); + } + return properties.get(id).toString(); + } + + public static String substringBeforeLast(String value, String since) { + int i = value.lastIndexOf(since); + if (i == -1) { + return value; + } + return value.substring(0, i); + } + + public static String substringSinceLast(String value, String since) { + int i = value.lastIndexOf(since); + if (i == -1) { + return value; + } + return value.substring(i + 1); + } + + public static String substringBefore(String value, String since) { + int i = value.indexOf(since); + if (i == -1) { + return value; + } + return value.substring(0, i); + } + + public static String substringSince(String value, String since) { + int i = value.indexOf(since); + if (i == -1) { + return value; + } + return value.substring(i + 1); + } + +} diff --git a/gradle.properties b/gradle.properties index 35b048c..c3a6d40 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,12 +2,16 @@ # Gradle Properties # # # # # # # # # # # # # # # -current_mossy_build_version = 1.0.0 - # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx16G org.gradle.parallel=true +# Mossy Plugin +mossy_plugin_version = 1.1.1.0 + +# Stonecutter +dev.kikugie.stonecutter.hard_mode=true + # Mod Properties data.mod_id = patpat data.mod_name = PatPat @@ -25,7 +29,7 @@ data.client_config_version = 1.0.1 base.lombok_version = 1.18.42 # Multi-Versions Properties -multi_versions = 1.16.5 1.17 1.17.1 1.18 1.18.1 1.18.2 1.19 1.19.1 1.19.2 1.19.3 1.19.4 1.20 1.20.1 1.20.2 1.20.3 1.20.4 1.20.5 1.20.6 1.21 1.21.1 1.21.2 1.21.3 1.21.4 1.21.5 1.21.6 1.21.7 1.21.8 1.21.9 1.21.10 +multi_versions = 1.21.10 1.21.11 # Build Dependencies build.yarn = [VERSIONED] @@ -49,7 +53,7 @@ dep.proxlib = [VERSIONED] # Mod Loaders loaders = fabric # Versions Specifications -versions_specifications = 1.16.5 1.17 1.17.1 1.18 1.18.1 1.18.2 1.19 1.19.1 1.19.2 1.19.3 1.19.4 1.20 1.20.1 1.20.2 1.20.3 1.20.4 1.20.5 1.20.6 1.21 1.21.1 1.21.2 1.21.3 1.21.4 1.21.5 1.21.6 1.21.7 1.21.8 1.21.9 1.21.10 +versions_specifications = 1.16.5 1.17 1.17.1 1.18 1.18.1 1.18.2 1.19 1.19.1 1.19.2 1.19.3 1.19.4 1.20 1.20.1 1.20.2 1.20.3 1.20.4 1.20.5 1.20.6 1.21 1.21.1 1.21.2 1.21.3 1.21.4 1.21.5 1.21.6 1.21.7 1.21.8 1.21.9 1.21.10 1.21.11 # Version Type [RELEASE, BETA, ALPHA] version_type = RELEASE diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ca025c8..bad7c24 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/patpat-languages-files b/patpat-languages-files index 3ef9393..5650bf6 160000 --- a/patpat-languages-files +++ b/patpat-languages-files @@ -1 +1 @@ -Subproject commit 3ef9393fd8757b0b23ecf5574c071ea4c3ac1bb5 +Subproject commit 5650bf6f4877d1288344cfb0675aa5744d509f7c diff --git a/settings.gradle b/settings.gradle index d42fb72..1346303 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,8 +1,5 @@ pluginManagement { repositories { - mavenLocal() - mavenCentral() - gradlePluginPortal() maven { name "Fabric" url "https://maven.fabricmc.net/" @@ -15,11 +12,17 @@ pluginManagement { name "Kiku Releases" url "https://maven.kikugie.dev/releases" } + maven { + name "Mossy Projects" + url "https://maven.lopymine.net/releases" + } + mavenLocal() + mavenCentral() + gradlePluginPortal() } - includeBuild("buildSettings") } plugins { id "dev.kikugie.stonecutter" version "0.7.1" - id "net.lopymine.mossy-settings-plugin" + id "net.lopymine.mossy-plugin-settings" version "$mossy_plugin_version" } \ No newline at end of file diff --git a/stonecutter.gradle b/stonecutter.gradle index 19880d1..2d70fc5 100644 --- a/stonecutter.gradle +++ b/stonecutter.gradle @@ -1,5 +1,5 @@ plugins { id "dev.kikugie.stonecutter" - id "net.lopymine.mossy-plugin-stonecutter" + id "net.lopymine.mossy-plugin-stonecutter" version "$mossy_plugin_version" } -stonecutter.active "1.21.10" /* [SC] DO NOT EDIT */ +stonecutter.active "1.21.11" /* [SC] DO NOT EDIT */ From 7c0c4fd973802d1522df1258606f95c05ae6289c Mon Sep 17 00:00:00 2001 From: LopyMine Date: Wed, 24 Dec 2025 22:10:49 +0300 Subject: [PATCH 04/21] "Push rejected" moment --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index c3a6d40..9447c26 100644 --- a/gradle.properties +++ b/gradle.properties @@ -73,4 +73,4 @@ max_java_version = 21 depends_requires = fabric-api depends_optional = modmenu yacl cloth-config depends_incompatible = none -depends_embeds = none \ No newline at end of file +depends_embeds = none From a154e1f73a033c58c6537a3aad23634020b4ae48 Mon Sep 17 00:00:00 2001 From: LopyMine Date: Fri, 26 Dec 2025 13:08:14 +0300 Subject: [PATCH 05/21] 1.2.4 Update (+ 1.21.11) --- CHANGELOG.md | 16 ++--- build.gradle | 44 ++++++++++++- gradle.properties | 10 +-- patpat-languages-files | 2 +- settings.gradle | 1 - src/main/java/net/lopymine/patpat/PatPat.java | 4 +- .../argument/EntityTypeArgumentType.java | 4 +- .../config/PatPatClientStatsConfig.java | 4 +- .../list/PatPatClientIgnoreMobListConfig.java | 6 +- .../CustomAnimationSettingsConfig.java | 12 ++-- .../PatPatClientKeybindingManager.java | 52 ++++++++++++++- .../client/keybinding/PatPatKeybinding.java | 2 +- .../client/manager/PatPatClientManager.java | 16 +++-- .../client/render/PatPatClientRenderer.java | 2 +- .../render/feature/PatFeatureRenderer.java | 19 ++++-- .../render/feature/PatFeatureRequest.java | 4 +- .../PatPatClientReloadListener.java | 8 +-- .../PatPatClientResourcePackManager.java | 4 +- .../PatPatClientSoundManager.java | 2 +- .../lopymine/patpat/compat/LoadedMods.java | 1 + .../controlling/ControllingCompatPlugin.java | 11 ++++ .../patpat/extension/EntityExtension.java | 4 +- .../patpat/extension/PoseExtension.java | 4 +- .../AbstractClientPlayerEntityMixin.java | 6 +- .../patpat/mixin/GameRendererMixin.java | 11 ++-- .../patpat/mixin/KeyBindsScreenMixin.java | 45 +++++-------- ...istWidgetMixin.java => KeyEntryMixin.java} | 3 +- .../patpat/mixin/LocalPlayerMixin.java | 35 +++++++++++ .../patpat/mixin/ParentElementMixin.java | 8 +-- ...ollingKeyBindingListWidgetNewAccessor.java | 16 +++++ .../controlling/ControllingKeyEntryMixin.java | 38 +++++++++++ .../ControllingOptionsScreenMixin.java | 27 ++++++++ .../ControlsSettingsGuiNewMixin.java | 37 +++++++++++ .../controlling/IPlatformHelperMixin.java | 26 ++++++++ .../controlling/KeyBindsScreenAccessor.java | 16 +++++ .../controlling/NewKeyBindsListAccessor.java | 17 +++++ .../controlling/NewKeyBindsListMixin.java | 28 +++++++++ .../controlling/NewKeyBindsScreenMixin.java | 56 +++++++++++++++++ .../mixin/controlling/NewKeyEntryMixin.java | 63 +++++++++++++++++++ .../modmenu/NoConfigLibrariesScreen.java | 5 +- .../patpat/modmenu/common/image/PatImage.java | 4 +- .../patpat/packet/PatPatPacketType.java | 6 +- .../c2s/HelloPatPatServerC2SPacket.java | 4 +- .../patpat/packet/c2s/PatEntityC2SPacket.java | 4 +- .../packet/c2s/PatEntityC2SPacketV2.java | 4 +- .../s2c/HelloPatPatPlayerS2CPacket.java | 4 +- .../patpat/packet/s2c/PatEntityS2CPacket.java | 2 +- .../packet/s2c/PatEntityS2CPacketV2.java | 4 +- .../packet/s2c/SelfPatEntityS2CPacket.java | 2 +- .../packet/s2c/SelfPatEntityS2CPacketV2.java | 2 +- .../packet/PatPatServerNetworkManager.java | 2 +- .../lopymine/patpat/utils/CommandText.java | 4 +- .../lopymine/patpat/utils/ConfigUtils.java | 4 +- .../patpat/utils/IdentifierUtils.java | 37 ----------- .../lopymine/patpat/utils/ModMenuUtils.java | 6 +- .../net/lopymine/patpat/utils/RLUtils.java | 45 +++++++++++++ .../patpat/utils/ResourceLocationUtils.java | 17 ----- .../net/lopymine/patpat/utils/SoundUtils.java | 4 +- .../mixin/ScreenWithPatPatKeybinding.java | 2 +- src/main/resources/aws/1.16.5.accesswidener | 2 + src/main/resources/aws/1.17.1.accesswidener | 4 +- src/main/resources/aws/1.17.accesswidener | 4 +- src/main/resources/aws/1.18.1.accesswidener | 4 +- src/main/resources/aws/1.18.2.accesswidener | 4 +- src/main/resources/aws/1.18.accesswidener | 4 +- src/main/resources/aws/1.19.1.accesswidener | 4 +- src/main/resources/aws/1.19.2.accesswidener | 4 +- src/main/resources/aws/1.19.3.accesswidener | 4 +- src/main/resources/aws/1.19.4.accesswidener | 4 +- src/main/resources/aws/1.19.accesswidener | 4 +- src/main/resources/aws/1.20.1.accesswidener | 4 +- src/main/resources/aws/1.20.2.accesswidener | 4 +- src/main/resources/aws/1.20.3.accesswidener | 4 +- src/main/resources/aws/1.20.4.accesswidener | 4 +- src/main/resources/aws/1.20.5.accesswidener | 3 +- src/main/resources/aws/1.20.6.accesswidener | 3 +- src/main/resources/aws/1.20.accesswidener | 4 +- src/main/resources/aws/1.21.1.accesswidener | 3 +- src/main/resources/aws/1.21.10.accesswidener | 3 +- src/main/resources/aws/1.21.11.accesswidener | 7 +++ src/main/resources/aws/1.21.2.accesswidener | 3 +- src/main/resources/aws/1.21.3.accesswidener | 3 +- src/main/resources/aws/1.21.4.accesswidener | 3 +- src/main/resources/aws/1.21.5.accesswidener | 3 +- src/main/resources/aws/1.21.6.accesswidener | 3 +- src/main/resources/aws/1.21.7.accesswidener | 1 + src/main/resources/aws/1.21.8.accesswidener | 1 + src/main/resources/aws/1.21.9.accesswidener | 3 +- src/main/resources/aws/1.21.accesswidener | 1 + src/main/resources/fabric.mod.json | 3 +- .../resources/patpat-controlling.mixins.json5 | 48 ++++++++++++++ src/main/resources/patpat.mixins.json5 | 28 +++++---- .../patpat/modmenu/bridge/YACLBridgeTest.java | 5 +- versions/1.16.5/gradle.properties | 6 +- versions/1.17.1/gradle.properties | 6 +- versions/1.17/gradle.properties | 6 +- versions/1.18.1/gradle.properties | 6 +- versions/1.18.2/gradle.properties | 6 +- versions/1.18/gradle.properties | 6 +- versions/1.19.1/gradle.properties | 6 +- versions/1.19.2/gradle.properties | 6 +- versions/1.19.3/gradle.properties | 6 +- versions/1.19.4/gradle.properties | 6 +- versions/1.19/gradle.properties | 6 +- versions/1.20.1/gradle.properties | 6 +- versions/1.20.2/gradle.properties | 6 +- versions/1.20.3/gradle.properties | 6 +- versions/1.20.4/gradle.properties | 6 +- versions/1.20.5/gradle.properties | 6 +- versions/1.20.6/gradle.properties | 6 +- versions/1.20/gradle.properties | 6 +- versions/1.21.1/gradle.properties | 6 +- versions/1.21.10/gradle.properties | 4 ++ versions/1.21.11/gradle.properties | 28 +++++++++ versions/1.21.2/gradle.properties | 6 +- versions/1.21.3/gradle.properties | 6 +- versions/1.21.4/gradle.properties | 6 +- versions/1.21.5/gradle.properties | 6 +- versions/1.21.6/gradle.properties | 6 +- versions/1.21.7/gradle.properties | 4 ++ versions/1.21.8/gradle.properties | 6 +- versions/1.21.9/gradle.properties | 6 +- versions/1.21/gradle.properties | 6 +- 123 files changed, 958 insertions(+), 252 deletions(-) create mode 100644 src/main/java/net/lopymine/patpat/compat/controlling/ControllingCompatPlugin.java rename src/main/java/net/lopymine/patpat/mixin/{ControlsListWidgetMixin.java => KeyEntryMixin.java} (97%) create mode 100644 src/main/java/net/lopymine/patpat/mixin/LocalPlayerMixin.java create mode 100644 src/main/java/net/lopymine/patpat/mixin/controlling/ControllingKeyBindingListWidgetNewAccessor.java create mode 100644 src/main/java/net/lopymine/patpat/mixin/controlling/ControllingKeyEntryMixin.java create mode 100644 src/main/java/net/lopymine/patpat/mixin/controlling/ControllingOptionsScreenMixin.java create mode 100644 src/main/java/net/lopymine/patpat/mixin/controlling/ControlsSettingsGuiNewMixin.java create mode 100644 src/main/java/net/lopymine/patpat/mixin/controlling/IPlatformHelperMixin.java create mode 100644 src/main/java/net/lopymine/patpat/mixin/controlling/KeyBindsScreenAccessor.java create mode 100644 src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyBindsListAccessor.java create mode 100644 src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyBindsListMixin.java create mode 100644 src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyBindsScreenMixin.java create mode 100644 src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyEntryMixin.java delete mode 100644 src/main/java/net/lopymine/patpat/utils/IdentifierUtils.java create mode 100644 src/main/java/net/lopymine/patpat/utils/RLUtils.java delete mode 100644 src/main/java/net/lopymine/patpat/utils/ResourceLocationUtils.java create mode 100644 src/main/resources/aws/1.21.11.accesswidener create mode 100644 src/main/resources/patpat-controlling.mixins.json5 create mode 100644 versions/1.21.11/gradle.properties diff --git a/CHANGELOG.md b/CHANGELOG.md index d12501b..158fe70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,10 @@ -# v1.2.3 Update +# v1.2.4 Update -## Misc -- Ported to 1.21.9+ - -## Fixes -- Fixed some issues with leashing mobs -- Fixed *wrong* min/max sound pitch id options in custom animations, now you can use both `min_pitch` and `minPitch`. \ No newline at end of file +- Ported to 1.21.11 +- Fixed interaction with mobs while patting them. So, your dog will no longer accidentally stand up or sit down. +- Added compatibility between Controlling and PatPat's keybinding. +- Fixed patting yourself, now it's only in development mode with "Debug Mode" enabled. +- Fixed bug with proximity_packets_list_is_blacklist translation +- Added better handling for pat packets, made by server. +- Updated translations. +- Little bug fixes. \ No newline at end of file diff --git a/build.gradle b/build.gradle index af25950..da72cdc 100644 --- a/build.gradle +++ b/build.gradle @@ -110,6 +110,10 @@ if (stonecutter.compare(stonecutter.current.version.toString(), "1.18.2") >= 0) } } +test { + failOnNoDiscoveredTests = false +} + configurations.configureEach { resolutionStrategy { force("net.fabricmc:fabric-loader:${prop("build.fabric_loader")}") @@ -119,11 +123,47 @@ configurations.configureEach { stonecutter { var buildTime = (int) (System.currentTimeMillis() / 10000) - 174611089 var buildCodeTime = String.format("%07x", buildTime & 0xFFFFFFF) - swap("build_code_time", "\"${buildCodeTime}\";") + swaps["build_code_time"] = "\"${buildCodeTime}\";".toString() + dependencies["yacl"] = MossyUtils.substringBefore(prop("dep.yacl"), "+") + +// replacements.regex(current.parsed.matches(">=1.21.11")) { +// replace( +// "(^|[^A-Za-z0-9_])ResourceLocation([^A-Za-z0-9_]|\$)", "\$1Identifier\$2", +// "(^|[^A-Za-z0-9_])Identifier([^A-Za-z0-9_]|\$)", "\$1ResourceLocation\$2" +// ) +// } + + replacements.string(current.parsed < "1.17") { + replace("ControllingOptionsScreenMixin", "ControllingOptionsScreenMixin") + replace("ControllingOptionsScreen", "ControlsSettingsGuiNew") + } + + replacements.string(current.parsed >= "1.21.9") { + replace("int keyCode, int scanCode, int modifiers", "net.minecraft.client.input.KeyEvent event") + replace("double mouseX, double mouseY, int button", "net.minecraft.client.input.MouseButtonEvent event, boolean bl") + } + + replacements.string(current.parsed >= "1.21.11") { + replace("ProxPacketIdentifier", "ProxPacketIdentifier") + replace("ResourceLocation", "Identifier") + replace(".location()", ".identifier()") + } + + replacements.string(current.parsed >= "1.18") { + replace("KeyBindsScreenAccessor", "KeyBindsScreenAccessor") + replace("KeyBindsScreenMixin", "KeyBindsScreenMixin") + replace("NewKeyBindsScreen", "NewKeyBindsScreen") + replace("ControlsScreen", "KeyBindsScreen") + } + + replacements.string(current.parsed >= "1.21") { + replace("import net.minecraft.client.gui.screens.controls.*;", "import net.minecraft.client.gui.screens.options.controls.*;") + } - dependency("yacl", MossyUtils.substringBefore(prop("dep.yacl"), "+")) } +stonecutter.filters.exclude("**/*.accesswidener") + jar { duplicatesStrategy = DuplicatesStrategy.EXCLUDE diff --git a/gradle.properties b/gradle.properties index 9447c26..31bf73a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ org.gradle.jvmargs=-Xmx16G org.gradle.parallel=true # Mossy Plugin -mossy_plugin_version = 1.1.1.0 +mossy_plugin_version = 1.1.3.0 # Stonecutter dev.kikugie.stonecutter.hard_mode=true @@ -15,7 +15,7 @@ dev.kikugie.stonecutter.hard_mode=true # Mod Properties data.mod_id = patpat data.mod_name = PatPat -data.mod_version = 1.2.3 +data.mod_version = 1.2.4 data.mod_group = net.lopymine.patpat data.mod_maven_group = net.lopymine @@ -29,11 +29,11 @@ data.client_config_version = 1.0.1 base.lombok_version = 1.18.42 # Multi-Versions Properties -multi_versions = 1.21.10 1.21.11 +multi_versions = 1.16.5 1.17 1.17.1 1.18 1.18.1 1.18.2 1.19 1.19.1 1.19.2 1.19.3 1.19.4 1.20 1.20.1 1.20.2 1.20.3 1.20.4 1.20.5 1.20.6 1.21 1.21.1 1.21.2 1.21.3 1.21.4 1.21.5 1.21.6 1.21.7 1.21.8 1.21.9 1.21.10 1.21.11 # Build Dependencies build.yarn = [VERSIONED] -build.fabric_loader = 0.17.2 +build.fabric_loader = 0.18.4 build.fabric_api = [VERSIONED] build.fabric-permissions-api = [VERSIONED] @@ -45,6 +45,8 @@ dep.replaymod = [VERSIONED] dep.geckolib = [VERSIONED] dep.flashback = [VERSIONED] dep.proxlib = [VERSIONED] +dep.controlling = [VERSIONED] +dep.searchables = [VERSIONED] # # # # # # # # # # # # # # # Publication Properties # diff --git a/patpat-languages-files b/patpat-languages-files index 5650bf6..1bf14dd 160000 --- a/patpat-languages-files +++ b/patpat-languages-files @@ -1 +1 @@ -Subproject commit 5650bf6f4877d1288344cfb0675aa5744d509f7c +Subproject commit 1bf14ddb1fbdb4c8950ba614b11cbb9352312319 diff --git a/settings.gradle b/settings.gradle index 1346303..0b31ac6 100644 --- a/settings.gradle +++ b/settings.gradle @@ -23,6 +23,5 @@ pluginManagement { } plugins { - id "dev.kikugie.stonecutter" version "0.7.1" id "net.lopymine.mossy-plugin-settings" version "$mossy_plugin_version" } \ No newline at end of file diff --git a/src/main/java/net/lopymine/patpat/PatPat.java b/src/main/java/net/lopymine/patpat/PatPat.java index fd5f8a0..0c6786b 100644 --- a/src/main/java/net/lopymine/patpat/PatPat.java +++ b/src/main/java/net/lopymine/patpat/PatPat.java @@ -9,8 +9,8 @@ public class PatPat implements ModInitializer { - public static final String MOD_VERSION = /*$ mod_version*/ "1.2.3+1.21.10"; - public static final String BUILD_CODE_TIME = /*$ build_code_time*/ "0159b04"; + public static final String MOD_VERSION = /*$ mod_version*/ "1.2.3+1.21.11"; + public static final String BUILD_CODE_TIME = /*$ build_code_time*/ "01f7b27"; public static final String MOD_NAME = /*$ mod_name*/ "PatPat"; public static final String MOD_ID = /*$ mod_id*/ "patpat"; public static final String SERVER_CONFIG_VERSION = /*$ server_config_version*/ "1.0.0"; diff --git a/src/main/java/net/lopymine/patpat/client/command/argument/EntityTypeArgumentType.java b/src/main/java/net/lopymine/patpat/client/command/argument/EntityTypeArgumentType.java index d0f983d..f7d144a 100644 --- a/src/main/java/net/lopymine/patpat/client/command/argument/EntityTypeArgumentType.java +++ b/src/main/java/net/lopymine/patpat/client/command/argument/EntityTypeArgumentType.java @@ -1,6 +1,6 @@ package net.lopymine.patpat.client.command.argument; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.EntityType; import com.mojang.brigadier.StringReader; @@ -33,7 +33,7 @@ public static EntityType getEntityType(String name, @NotNull CommandConte @Override public EntityType parse(@NotNull StringReader reader) throws CommandSyntaxException { try { - ResourceLocation s = ResourceLocation.read(reader); + Identifier s = Identifier.read(reader); PatPatClientCommandManager.LOGGER.debug("Parsed EntityType from EntityTypeArgumentType: {}", s); EntityType entityType = VersionedThings.ENTITY_TYPE.getOptional(s).orElse(null); if (entityType == null) { diff --git a/src/main/java/net/lopymine/patpat/client/config/PatPatClientStatsConfig.java b/src/main/java/net/lopymine/patpat/client/config/PatPatClientStatsConfig.java index 819d08c..29f75dc 100644 --- a/src/main/java/net/lopymine/patpat/client/config/PatPatClientStatsConfig.java +++ b/src/main/java/net/lopymine/patpat/client/config/PatPatClientStatsConfig.java @@ -3,7 +3,7 @@ import java.util.function.Supplier; import lombok.*; import net.lopymine.patpat.*; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.*; import com.mojang.serialization.Codec; @@ -44,7 +44,7 @@ private PatPatClientStatsConfig() { public void count(LivingEntity pattedEntity) { this.totalPatsCounter.totalPats++; - ResourceLocation id = VersionedThings.ENTITY_TYPE.getKey(pattedEntity.getType()); + Identifier id = VersionedThings.ENTITY_TYPE.getKey(pattedEntity.getType()); if (id == null) { return; } diff --git a/src/main/java/net/lopymine/patpat/client/config/list/PatPatClientIgnoreMobListConfig.java b/src/main/java/net/lopymine/patpat/client/config/list/PatPatClientIgnoreMobListConfig.java index 79c69b2..73ac3e0 100644 --- a/src/main/java/net/lopymine/patpat/client/config/list/PatPatClientIgnoreMobListConfig.java +++ b/src/main/java/net/lopymine/patpat/client/config/list/PatPatClientIgnoreMobListConfig.java @@ -3,7 +3,7 @@ import lombok.Getter; import net.lopymine.patpat.common.config.list.AbstractListConfig; import net.lopymine.patpat.utils.*; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.EntityType; import net.lopymine.patpat.PatLogger; @@ -45,7 +45,7 @@ public boolean isIgnored(@NotNull EntityType type) { @Override protected String encode(EntityType element) { - ResourceLocation entityTypeResource = VersionedThings.ENTITY_TYPE.getKey(element); + Identifier entityTypeResource = VersionedThings.ENTITY_TYPE.getKey(element); if (entityTypeResource == null) { return null; } @@ -54,7 +54,7 @@ protected String encode(EntityType element) { @Override protected EntityType decode(String line) { - EntityType entityType = VersionedThings.ENTITY_TYPE.getOptional(ResourceLocationUtils.parse(line)).orElse(null); + EntityType entityType = VersionedThings.ENTITY_TYPE.getOptional(RLUtils.parse(line)).orElse(null); if (entityType == null) { this.getLogger().error("Failed to find entity type from line: \"{}\"", line); return null; diff --git a/src/main/java/net/lopymine/patpat/client/config/resourcepack/CustomAnimationSettingsConfig.java b/src/main/java/net/lopymine/patpat/client/config/resourcepack/CustomAnimationSettingsConfig.java index 2114453..2585326 100644 --- a/src/main/java/net/lopymine/patpat/client/config/resourcepack/CustomAnimationSettingsConfig.java +++ b/src/main/java/net/lopymine/patpat/client/config/resourcepack/CustomAnimationSettingsConfig.java @@ -7,9 +7,9 @@ import net.lopymine.patpat.client.PatPatClient; import net.lopymine.patpat.client.resourcepack.PatPatClientResourcePackManager; -import net.lopymine.patpat.utils.IdentifierUtils; +import net.lopymine.patpat.utils.RLUtils; import net.minecraft.client.Minecraft; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.server.packs.resources.Resource; import net.minecraft.world.entity.LivingEntity; import java.io.*; @@ -20,20 +20,20 @@ public final class CustomAnimationSettingsConfig { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - Codec.STRING.fieldOf("texture").xmap(IdentifierUtils::vanillaId, ResourceLocation::toString).forGetter(CustomAnimationSettingsConfig::getTexture), + Codec.STRING.fieldOf("texture").xmap(RLUtils::vanillaId, Identifier::toString).forGetter(CustomAnimationSettingsConfig::getTexture), Codec.INT.fieldOf("duration").forGetter(CustomAnimationSettingsConfig::getDuration), FrameConfig.CODEC.fieldOf("frame").forGetter(CustomAnimationSettingsConfig::getFrameConfig), SoundConfig.STRINGED_CODEC.optionalFieldOf("sound").forGetter(CustomAnimationSettingsConfig::getOptionalSoundConfig) ).apply(instance, CustomAnimationSettingsConfig::new)); public static final CustomAnimationSettingsConfig DEFAULT_PATPAT_ANIMATION = new CustomAnimationSettingsConfig( - IdentifierUtils.modId("textures/default/patpat.png"), + RLUtils.modId("textures/default/patpat.png"), 240, FrameConfig.DEFAULT_FRAME, Optional.of(SoundConfig.PAT_PAT_SOUND) ); - private final ResourceLocation texture; + private final Identifier texture; private final int duration; private final FrameConfig frameConfig; @Nullable @@ -41,7 +41,7 @@ public final class CustomAnimationSettingsConfig { private int textureWidth; private int textureHeight; - public CustomAnimationSettingsConfig(ResourceLocation texture, int duration, FrameConfig frameConfig, Optional soundConfig) { + public CustomAnimationSettingsConfig(Identifier texture, int duration, FrameConfig frameConfig, Optional soundConfig) { this.texture = texture; this.duration = duration; this.frameConfig = frameConfig; diff --git a/src/main/java/net/lopymine/patpat/client/keybinding/PatPatClientKeybindingManager.java b/src/main/java/net/lopymine/patpat/client/keybinding/PatPatClientKeybindingManager.java index 4a3f22d..08008af 100644 --- a/src/main/java/net/lopymine/patpat/client/keybinding/PatPatClientKeybindingManager.java +++ b/src/main/java/net/lopymine/patpat/client/keybinding/PatPatClientKeybindingManager.java @@ -1,6 +1,11 @@ package net.lopymine.patpat.client.keybinding; import lombok.Getter; +import com.mojang.blaze3d.platform.InputConstants; +//? if >=1.19.4 { +import net.lopymine.patpat.mixin.controlling.KeyBindsScreenAccessor; +//?} +import net.minecraft.client.gui.screens./*? if >=1.21 {*/options./*?}*/controls.*; import net.minecraft.client.KeyMapping; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; @@ -9,13 +14,13 @@ import net.lopymine.patpat.client.config.PatPatClientConfig; //? if >=1.21.9 { import net.lopymine.patpat.PatPat; -import net.lopymine.patpat.utils.IdentifierUtils; +import net.lopymine.patpat.utils.RLUtils; //?} public class PatPatClientKeybindingManager { //? if >=1.21.9 { - public static final net.minecraft.client.KeyMapping.Category CATEGORY = net.minecraft.client.KeyMapping.Category.register(IdentifierUtils.modId(PatPat.MOD_ID)); + public static final net.minecraft.client.KeyMapping.Category CATEGORY = net.minecraft.client.KeyMapping.Category.register(RLUtils.modId("keybinding")); //?} @Getter @@ -38,4 +43,47 @@ private static void registerKeybinding(KeyMapping keyBinding) { KeyBindingHelper.registerKeyBinding(keyBinding); } + public static void handlePatPatKeybindingOnKeyPressed( + KeyMapping mapping, + /*? if >=1.18 {*/KeyBindsScreen/*?} else {*/ /*ControlsScreen *//*?}*/ screen, + int keyCode, + int scanCode, + Runnable cancel + ) { + if (mapping instanceof PatPatKeybinding keybinding) { + boolean bl = keybinding.addBindingKey(getKey(keyCode, scanCode)); + if (bl) { + keybinding.sendBindingKeys(); + screen.selectedKey = null; + } + //? if >=1.19.4 { + ((KeyBindsScreenAccessor) (screen)).getList().refreshEntries(); + //?} + cancel.run(); + } + } + + public static void handlePatPatKeybindingOnMouseClick( + KeyMapping mapping, + /*? if >=1.18 {*/KeyBindsScreen/*?} else {*/ /*ControlsScreen *//*?}*/ screen, + int button, + Runnable cancel + ) { + if (mapping instanceof PatPatKeybinding keybinding) { + boolean bl = keybinding.addBindingKey(InputConstants.Type.MOUSE.getOrCreate(button)); + if (bl) { + keybinding.sendBindingKeys(); + screen.selectedKey = null; + } + //? if >=1.19.4 { + ((KeyBindsScreenAccessor) (screen)).getList().refreshEntries(); + //?} + cancel.run(); + } + } + + public static InputConstants.Key getKey(int keyCode, int scanCode) { + return keyCode == -1 ? InputConstants.Type.SCANCODE.getOrCreate(scanCode) : InputConstants.Type.KEYSYM.getOrCreate(keyCode); + } + } \ No newline at end of file diff --git a/src/main/java/net/lopymine/patpat/client/keybinding/PatPatKeybinding.java b/src/main/java/net/lopymine/patpat/client/keybinding/PatPatKeybinding.java index 61a75ec..18a37fe 100644 --- a/src/main/java/net/lopymine/patpat/client/keybinding/PatPatKeybinding.java +++ b/src/main/java/net/lopymine/patpat/client/keybinding/PatPatKeybinding.java @@ -136,7 +136,7 @@ public Component getTranslatedKeyMessage() { /*if (this.combination.onlyOneKey()) { return this.getFullTranslatedKeyMessage(); } else { - return TextUtils.literal("..."); + return TextUtils.literal("< ... >"); } *///?} } diff --git a/src/main/java/net/lopymine/patpat/client/manager/PatPatClientManager.java b/src/main/java/net/lopymine/patpat/client/manager/PatPatClientManager.java index b7508cb..5c951a6 100644 --- a/src/main/java/net/lopymine/patpat/client/manager/PatPatClientManager.java +++ b/src/main/java/net/lopymine/patpat/client/manager/PatPatClientManager.java @@ -142,6 +142,8 @@ public static void requestPat() { PatPatClientRenderer.registerClientPacket(new PatPacket(pattedEntity, PlayerConfig.currentSession(), player, false)); PatPatClientManager.patCooldown = 4; + Minecraft.getInstance().options.keyUse.setDown(false); + Minecraft.getInstance().options.keyUse.clickCount = 0; } public static boolean canPat() { @@ -175,10 +177,10 @@ public static LivingEntity getPatEntityFromHitResult() { } ProfilerUtils.push("patpat$pick"); - //? if >=1.20.5 { - double blockInteractionRange = player.blockInteractionRange(); + //? if >=1.20.5 && <=1.21.10 { + /*double blockInteractionRange = player.blockInteractionRange(); double entityInteractionRange = player.entityInteractionRange(); - //?} + *///?} //? if >=1.21.2 { float tickDelta = minecraft.getDeltaTracker().getGameTimeDeltaPartialTick(true); @@ -189,9 +191,11 @@ public static LivingEntity getPatEntityFromHitResult() { *///?} cameraEntity.mark(true); - //? if >=1.20.5 { - HitResult result = minecraft.gameRenderer.pick(cameraEntity, blockInteractionRange, entityInteractionRange, tickDelta); - //?} else { + //? if >=1.21.11 { + HitResult result = player.raycastHitResult(tickDelta, cameraEntity); + //?} elif >=1.20.5 { + /*HitResult result = minecraft.gameRenderer.pick(cameraEntity, blockInteractionRange, entityInteractionRange, tickDelta); + *///?} else { /*HitResult oldResult = minecraft.hitResult; minecraft.gameRenderer.pick(tickDelta); HitResult result = minecraft.hitResult; diff --git a/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java b/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java index 3b7b824..5289933 100644 --- a/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java +++ b/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java @@ -130,7 +130,7 @@ public static void register() { } LocalPlayer player = Minecraft.getInstance().player; - if (!empty && player != null && FabricLoader.getInstance().isDevelopmentEnvironment()) { + if (!empty && player != null && FabricLoader.getInstance().isDevelopmentEnvironment() && config.getMainConfig().isDebugLogEnabled()) { PatPatClientManager.pat(player, PlayerConfig.currentSession()); ReplayModCompat.onPat(player.getId(), player.getId()); FlashbackCompat.onPat(player.getId(), player.getId()); diff --git a/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java b/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java index df1ccab..7e1f878 100644 --- a/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java +++ b/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java @@ -7,9 +7,16 @@ import net.lopymine.patpat.extension.*; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource.BufferSource; -import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; + +//? if >=1.21.11 { +import net.minecraft.client.renderer.rendertype.RenderTypes; +//?} else { + +/*import net.minecraft.client.renderer.RenderType; + +*///?} @ExtensionMethod(value = {VertexConsumerExtension.class, PoseExtension.class}) public class PatFeatureRenderer { @@ -26,7 +33,11 @@ public void render() { BufferSource source = Minecraft.getInstance().renderBuffers().bufferSource(); for (PatFeatureRequest request : this.requests) { - VertexConsumer buffer = source.getBuffer(RenderType.entityTranslucent(request.texture())); + //? if >=1.21.11 { + VertexConsumer buffer = source.getBuffer(RenderTypes.entityTranslucent(request.texture())); + //?} else { + /*VertexConsumer buffer = source.getBuffer(RenderType.entityTranslucent(request.texture())); + *///?} /*? if >=1.19.3 {*/ org.joml.Matrix4f /*?} else {*/ /*com.mojang.math.Matrix4f*//*?}*/ matrix = request.poseStack().pose(); buffer.withVertex(matrix, request.x1(), request.y1(), request.z()).withColor(255, 255, 255, 255).withUv(request.u1(), request.v1()).withOverlay(OverlayTexture.NO_OVERLAY).withLight(request.light()).withNormal(0, 1, 0).end(); @@ -40,7 +51,7 @@ public void render() { } public void request( - ResourceLocation texture, + Identifier texture, Pose poseStack, float x1, float y1, diff --git a/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRequest.java b/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRequest.java index beee6ce..37c6c8e 100644 --- a/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRequest.java +++ b/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRequest.java @@ -1,10 +1,10 @@ package net.lopymine.patpat.client.render.feature; import com.mojang.blaze3d.vertex.PoseStack.Pose; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; public record PatFeatureRequest( - ResourceLocation texture, + Identifier texture, Pose poseStack, float x1, float y1, diff --git a/src/main/java/net/lopymine/patpat/client/resourcepack/PatPatClientReloadListener.java b/src/main/java/net/lopymine/patpat/client/resourcepack/PatPatClientReloadListener.java index 939e7c8..82975a7 100644 --- a/src/main/java/net/lopymine/patpat/client/resourcepack/PatPatClientReloadListener.java +++ b/src/main/java/net/lopymine/patpat/client/resourcepack/PatPatClientReloadListener.java @@ -1,14 +1,14 @@ package net.lopymine.patpat.client.resourcepack; import net.lopymine.patpat.PatPat; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.server.packs.PackResources; import net.minecraft.server.packs.PackType; import net.minecraft.server.packs.resources.*; import net.fabricmc.fabric.api.resource.*; import net.lopymine.patpat.client.config.PatPatClientConfig; -import net.lopymine.patpat.utils.IdentifierUtils; +import net.lopymine.patpat.utils.RLUtils; import java.util.*; @@ -27,8 +27,8 @@ public static void register() { } /*? if <=1.21.8 {*//*@Override*//*?}*/ - public /*? if >=1.21.9 {*/ static /*?}*/ ResourceLocation getFabricId() { - return IdentifierUtils.modId("%s-reload-listener".formatted(PatPat.MOD_ID)); + public /*? if >=1.21.9 {*/ static /*?}*/ Identifier getFabricId() { + return RLUtils.modId("%s-reload-listener".formatted(PatPat.MOD_ID)); } @Override diff --git a/src/main/java/net/lopymine/patpat/client/resourcepack/PatPatClientResourcePackManager.java b/src/main/java/net/lopymine/patpat/client/resourcepack/PatPatClientResourcePackManager.java index e9cc886..cb7e576 100644 --- a/src/main/java/net/lopymine/patpat/client/resourcepack/PatPatClientResourcePackManager.java +++ b/src/main/java/net/lopymine/patpat/client/resourcepack/PatPatClientResourcePackManager.java @@ -4,7 +4,7 @@ import com.google.gson.*; import lombok.experimental.ExtensionMethod; import net.lopymine.patpat.*; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.server.packs.PackResources; import net.minecraft.server.packs.PackType; import net.minecraft.server.packs.resources.ResourceManager; @@ -33,7 +33,7 @@ public class PatPatClientResourcePackManager { private PatPatClientResourcePackManager() { } - public static void parseConfig(String packName, ResourceLocation identifier, Supplier inputStreamInputSupplier, List configs, PatPatClientConfig config) { + public static void parseConfig(String packName, Identifier identifier, Supplier inputStreamInputSupplier, List configs, PatPatClientConfig config) { String path = identifier.getPath(); if (!path.endsWith(".json") && !path.endsWith(".json5")) { return; diff --git a/src/main/java/net/lopymine/patpat/client/resourcepack/PatPatClientSoundManager.java b/src/main/java/net/lopymine/patpat/client/resourcepack/PatPatClientSoundManager.java index f313cdf..25bf035 100644 --- a/src/main/java/net/lopymine/patpat/client/resourcepack/PatPatClientSoundManager.java +++ b/src/main/java/net/lopymine/patpat/client/resourcepack/PatPatClientSoundManager.java @@ -46,7 +46,7 @@ public static SoundEvent getPatPatSoundEvent() { private static SoundEvent registerModSound(String id) { return Registry.register( VersionedThings.SOUND_EVENT, - IdentifierUtils.modId(id), + RLUtils.modId(id), SoundUtils.getSoundEvent(id) ); } diff --git a/src/main/java/net/lopymine/patpat/compat/LoadedMods.java b/src/main/java/net/lopymine/patpat/compat/LoadedMods.java index 5113bb6..b973b68 100644 --- a/src/main/java/net/lopymine/patpat/compat/LoadedMods.java +++ b/src/main/java/net/lopymine/patpat/compat/LoadedMods.java @@ -6,6 +6,7 @@ import net.lopymine.patpat.client.config.PatPatClientConfig; public final class LoadedMods { + public static final boolean REPLAY_MOD_LOADED = FabricLoader.getInstance().isModLoaded("replaymod"); public static final boolean FLASHBACK_MOD_LOADED = FabricLoader.getInstance().isModLoaded("flashback"); public static final boolean PROX_LIB_MOD_LOADED = FabricLoader.getInstance().isModLoaded("proxlib"); diff --git a/src/main/java/net/lopymine/patpat/compat/controlling/ControllingCompatPlugin.java b/src/main/java/net/lopymine/patpat/compat/controlling/ControllingCompatPlugin.java new file mode 100644 index 0000000..8da4ab3 --- /dev/null +++ b/src/main/java/net/lopymine/patpat/compat/controlling/ControllingCompatPlugin.java @@ -0,0 +1,11 @@ +package net.lopymine.patpat.compat.controlling; + +import net.lopymine.patpat.compat.CompatPlugin; + +public class ControllingCompatPlugin extends CompatPlugin { + + @Override + protected String getCompatModId() { + return "controlling"; + } +} diff --git a/src/main/java/net/lopymine/patpat/extension/EntityExtension.java b/src/main/java/net/lopymine/patpat/extension/EntityExtension.java index 63e0b19..d67ad17 100644 --- a/src/main/java/net/lopymine/patpat/extension/EntityExtension.java +++ b/src/main/java/net/lopymine/patpat/extension/EntityExtension.java @@ -1,6 +1,6 @@ package net.lopymine.patpat.extension; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.lopymine.patpat.client.PatPatClient; @@ -18,7 +18,7 @@ public static String getTypeId(Entity entity) { } public static String getId(EntityType entityType) { - ResourceLocation id = VersionedThings.ENTITY_TYPE.getKey(entityType); + Identifier id = VersionedThings.ENTITY_TYPE.getKey(entityType); if (id == null) { PatPatClient.LOGGER.warn("Failed to find entity type {}", entityType.getDescription()); return "null"; diff --git a/src/main/java/net/lopymine/patpat/extension/PoseExtension.java b/src/main/java/net/lopymine/patpat/extension/PoseExtension.java index 5569bdf..429fdff 100644 --- a/src/main/java/net/lopymine/patpat/extension/PoseExtension.java +++ b/src/main/java/net/lopymine/patpat/extension/PoseExtension.java @@ -12,9 +12,9 @@ public static Pose copy(Pose entry) { /*PoseStack poseStack = new PoseStack(); Pose copy = poseStack.last(); //? if >=1.19.3 { - /^copy.pose().set(entry.pose()); + copy.pose().set(entry.pose()); copy.normal().set(entry.normal()); - ^///?} elif >=1.17 { + //?} elif >=1.17 { /^copy.pose().load(entry.pose()); copy.normal().load(entry.normal()); ^///?} diff --git a/src/main/java/net/lopymine/patpat/mixin/AbstractClientPlayerEntityMixin.java b/src/main/java/net/lopymine/patpat/mixin/AbstractClientPlayerEntityMixin.java index 12c3606..386776f 100644 --- a/src/main/java/net/lopymine/patpat/mixin/AbstractClientPlayerEntityMixin.java +++ b/src/main/java/net/lopymine/patpat/mixin/AbstractClientPlayerEntityMixin.java @@ -2,7 +2,7 @@ import net.minecraft.client.multiplayer.PlayerInfo; import net.minecraft.client.player.AbstractClientPlayer; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; @@ -20,13 +20,13 @@ *///?} import net.lopymine.patpat.client.PatPatClient; -import net.lopymine.patpat.utils.IdentifierUtils; +import net.lopymine.patpat.utils.RLUtils; @Mixin(AbstractClientPlayer.class) public abstract class AbstractClientPlayerEntityMixin { @Unique - private static final ResourceLocation PATPAT_CAPE_ID = IdentifierUtils.modId("textures/cape/patpat_cape_hand.png"); + private static final Identifier PATPAT_CAPE_ID = RLUtils.modId("textures/cape/patpat_cape_hand.png"); //? if >=1.21.9 { @WrapOperation(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/PlayerInfo;getSkin()Lnet/minecraft/world/entity/player/PlayerSkin;"), method = "getSkin") diff --git a/src/main/java/net/lopymine/patpat/mixin/GameRendererMixin.java b/src/main/java/net/lopymine/patpat/mixin/GameRendererMixin.java index 64b2f9f..bf86eb8 100644 --- a/src/main/java/net/lopymine/patpat/mixin/GameRendererMixin.java +++ b/src/main/java/net/lopymine/patpat/mixin/GameRendererMixin.java @@ -1,6 +1,8 @@ package net.lopymine.patpat.mixin; -import com.llamalad7.mixinextras.injector.wrapoperation.*; +//? if <=1.21.10 { + +/*import com.llamalad7.mixinextras.injector.wrapoperation.*; import lombok.experimental.ExtensionMethod; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.world.entity.*; @@ -19,9 +21,9 @@ public class GameRendererMixin { //? if >=1.20.5 { @WrapOperation(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/projectile/ProjectileUtil;getEntityHitResult(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/AABB;Ljava/util/function/Predicate;D)Lnet/minecraft/world/phys/EntityHitResult;"), method = "pick(Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult;") - //?} else { - /*@WrapOperation(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/projectile/ProjectileUtil;getEntityHitResult(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/AABB;Ljava/util/function/Predicate;D)Lnet/minecraft/world/phys/EntityHitResult;"), method = "pick") - *///?} + //?} else { + /^@WrapOperation(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/projectile/ProjectileUtil;getEntityHitResult(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/AABB;Ljava/util/function/Predicate;D)Lnet/minecraft/world/phys/EntityHitResult;"), method = "pick") + ^///?} private @Nullable EntityHitResult makeAllMobsPattable(Entity entity, Vec3 vec3, Vec3 vec32, AABB aABB, Predicate predicate, double d, Operation original) { if (!entity.isMarked()) { return original.call(entity, vec3, vec32, aABB, predicate, d); @@ -29,3 +31,4 @@ public class GameRendererMixin { return original.call(entity, vec3, vec32, aABB, EntitySelector.NO_SPECTATORS, d); } } +*///?} diff --git a/src/main/java/net/lopymine/patpat/mixin/KeyBindsScreenMixin.java b/src/main/java/net/lopymine/patpat/mixin/KeyBindsScreenMixin.java index 88172c0..8f0490f 100644 --- a/src/main/java/net/lopymine/patpat/mixin/KeyBindsScreenMixin.java +++ b/src/main/java/net/lopymine/patpat/mixin/KeyBindsScreenMixin.java @@ -1,19 +1,17 @@ package net.lopymine.patpat.mixin; +import net.lopymine.patpat.client.keybinding.*; import net.minecraft.client.KeyMapping; -import net.minecraft.client.gui.screens./*? if >=1.21 {*/options./*?}*/controls.*; +import net.minecraft.client.gui.screens.options.controls.*; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import com.mojang.blaze3d.platform.InputConstants; - -import net.lopymine.patpat.client.keybinding.PatPatKeybinding; import net.lopymine.patpat.utils.mixin.ScreenWithPatPatKeybinding; import org.jetbrains.annotations.Nullable; -@Mixin(/*? if >=1.18 {*/KeyBindsScreen/*?} else {*/ /*ControlsScreen *//*?}*/.class) +@Mixin(KeyBindsScreen.class) public class KeyBindsScreenMixin implements ScreenWithPatPatKeybinding { @Shadow @Nullable public KeyMapping selectedKey; @@ -24,37 +22,24 @@ public class KeyBindsScreenMixin implements ScreenWithPatPatKeybinding { //?} @Inject(at = @At("HEAD"), method = "keyPressed", cancellable = true) - private void handlePatPatKeybindingOnKeyPressed(/*? if >=1.21.9 {*/net.minecraft.client.input.KeyEvent event, /*?} else {*/ /*int keyCode, int scanCode, int modifiers, *//*?}*/ CallbackInfoReturnable cir) { - if (this.selectedKey instanceof PatPatKeybinding keybinding) { - boolean bl = keybinding.addBindingKey(InputConstants.getKey(/*? if >=1.21.9 {*/event/*?} else {*/ /*keyCode, scanCode *//*?}*/)); - if (bl) { - keybinding.sendBindingKeys(); - this.selectedKey = null; - } - //? if >=1.19.4 { - this.keyBindsList.refreshEntries(); - //?} - cir.setReturnValue(false); - } + private void handlePatPatKeybindingOnKeyPressed(net.minecraft.client.input.KeyEvent event, CallbackInfoReturnable cir) { + //? if >=1.21.9 { + int keyCode = event.key(); + int scanCode = event.scancode(); + //?} + PatPatClientKeybindingManager.handlePatPatKeybindingOnKeyPressed(this.selectedKey, (KeyBindsScreen) (Object) (this), keyCode, scanCode, () -> cir.setReturnValue(false)); } @Inject(at = @At("HEAD"), method = "mouseClicked", cancellable = true) - private void handlePatPatKeybindingOnMouseClick(/*? if >=1.21.9 {*/net.minecraft.client.input.MouseButtonEvent event, boolean b, /*?} else {*/ /*double mouseX, double mouseY, int button, *//*?}*/ CallbackInfoReturnable cir) { - if (this.selectedKey instanceof PatPatKeybinding keybinding) { - boolean bl = keybinding.addBindingKey(InputConstants.Type.MOUSE.getOrCreate(/*? if >=1.21.9 {*/ event.button() /*?} else {*/ /*button *//*?}*/)); - if (bl) { - keybinding.sendBindingKeys(); - this.selectedKey = null; - } - //? if >=1.19.4 { - this.keyBindsList.refreshEntries(); - //?} - cir.setReturnValue(false); - } + private void handlePatPatKeybindingOnMouseClick(net.minecraft.client.input.MouseButtonEvent event, boolean bl, CallbackInfoReturnable cir) { + //? if >=1.21.9 { + int button = event.button(); + //?} + PatPatClientKeybindingManager.handlePatPatKeybindingOnMouseClick(this.selectedKey, (KeyBindsScreen) (Object) (this), button, () -> cir.setReturnValue(false)); } @Override - public void patPat$onKeyReleased(int keyCode, int scanCode, int modifiers) { + public void patPat$onKeyReleased() { if (this.selectedKey instanceof PatPatKeybinding keybinding && keybinding.isBinding()) { keybinding.sendBindingKeys(); this.selectedKey = null; diff --git a/src/main/java/net/lopymine/patpat/mixin/ControlsListWidgetMixin.java b/src/main/java/net/lopymine/patpat/mixin/KeyEntryMixin.java similarity index 97% rename from src/main/java/net/lopymine/patpat/mixin/ControlsListWidgetMixin.java rename to src/main/java/net/lopymine/patpat/mixin/KeyEntryMixin.java index 7c39a5d..7d28ff7 100644 --- a/src/main/java/net/lopymine/patpat/mixin/ControlsListWidgetMixin.java +++ b/src/main/java/net/lopymine/patpat/mixin/KeyEntryMixin.java @@ -15,7 +15,7 @@ import net.lopymine.patpat.client.keybinding.PatPatKeybinding; @Mixin(KeyEntry.class) -public class ControlsListWidgetMixin { +public class KeyEntryMixin { @Shadow @Final @@ -45,7 +45,6 @@ private void init(/^? if >=1.18 {^/ KeyBindsList /^?} else {^/ /^ControlList ^// } *///?} - @Inject(at = @At(/*? if >=1.19.4 {*/ "TAIL" /*?} else {*/ /*"HEAD" *//*?}*/), method = /*? if >=1.19.4 {*/ "refreshEntry" /*?} else {*/ /*"render" *//*?}*/) private void addPatPatTooltipToPatPatKey(CallbackInfo ci) { //? if >=1.19.4 { diff --git a/src/main/java/net/lopymine/patpat/mixin/LocalPlayerMixin.java b/src/main/java/net/lopymine/patpat/mixin/LocalPlayerMixin.java new file mode 100644 index 0000000..41db390 --- /dev/null +++ b/src/main/java/net/lopymine/patpat/mixin/LocalPlayerMixin.java @@ -0,0 +1,35 @@ +package net.lopymine.patpat.mixin; + +//? if >=1.21.11 { + +import com.llamalad7.mixinextras.injector.wrapoperation.*; +import java.util.function.Predicate; +import lombok.experimental.ExtensionMethod; +import net.lopymine.patpat.extension.EntityExtension; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.*; +import net.minecraft.world.item.component.AttackRange; +import net.minecraft.world.phys.HitResult; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@ExtensionMethod(EntityExtension.class) +@Mixin(LocalPlayer.class) +public class LocalPlayerMixin { + + @WrapOperation( + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/item/component/AttackRange;getClosesetHit(Lnet/minecraft/world/entity/Entity;FLjava/util/function/Predicate;)Lnet/minecraft/world/phys/HitResult;" + ), + method = "raycastHitResult" + ) + private HitResult makeAllMobsPattable(AttackRange instance, Entity entity, float f, Predicate predicate, Operation original) { + if (!entity.isMarked()) { + return original.call(instance, entity, f, predicate); + } + return original.call(instance, entity, f, EntitySelector.NO_SPECTATORS); + } + +} +//?} diff --git a/src/main/java/net/lopymine/patpat/mixin/ParentElementMixin.java b/src/main/java/net/lopymine/patpat/mixin/ParentElementMixin.java index faf8815..4bac99b 100644 --- a/src/main/java/net/lopymine/patpat/mixin/ParentElementMixin.java +++ b/src/main/java/net/lopymine/patpat/mixin/ParentElementMixin.java @@ -6,16 +6,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import net.lopymine.patpat.utils.mixin.ScreenWithPatPatKeybinding; -/*? if >=1.21.9 {*/ -import net.minecraft.client.input.KeyEvent; -/*?}*/ + @Mixin(ContainerEventHandler.class) public interface ParentElementMixin { @Inject(at = @At("HEAD"), method = "keyReleased") - private void handleScreenWithPatPatKeybindings(/*? if <1.21.9 {*//*int keyCode, int scanCode, int modifiers*//*?} else {*/KeyEvent keyEvent/*?}*/, CallbackInfoReturnable cir) { + private void handleScreenWithPatPatKeybindings(net.minecraft.client.input.KeyEvent event, CallbackInfoReturnable cir) { if (this instanceof ScreenWithPatPatKeybinding screen) { - screen.patPat$onKeyReleased(/*? if <1.21.9 {*//*keyCode, scanCode, modifiers*//*?} else {*/keyEvent.key(), keyEvent.scancode(), keyEvent.modifiers()/*?}*/); + screen.patPat$onKeyReleased(); } } diff --git a/src/main/java/net/lopymine/patpat/mixin/controlling/ControllingKeyBindingListWidgetNewAccessor.java b/src/main/java/net/lopymine/patpat/mixin/controlling/ControllingKeyBindingListWidgetNewAccessor.java new file mode 100644 index 0000000..6223f27 --- /dev/null +++ b/src/main/java/net/lopymine/patpat/mixin/controlling/ControllingKeyBindingListWidgetNewAccessor.java @@ -0,0 +1,16 @@ +package net.lopymine.patpat.mixin.controlling; + +//? if =1.16.5 && controlling { + +/*import com.blamejared.controlling.client.gui.*; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(KeyBindingListWidgetNew.class) +public interface ControllingKeyBindingListWidgetNewAccessor { + + @Accessor("gui") + ControlsSettingsGuiNew getScreenPleaseThanks(); + +} +*///?} diff --git a/src/main/java/net/lopymine/patpat/mixin/controlling/ControllingKeyEntryMixin.java b/src/main/java/net/lopymine/patpat/mixin/controlling/ControllingKeyEntryMixin.java new file mode 100644 index 0000000..f7e1e2c --- /dev/null +++ b/src/main/java/net/lopymine/patpat/mixin/controlling/ControllingKeyEntryMixin.java @@ -0,0 +1,38 @@ +package net.lopymine.patpat.mixin.controlling; + +//? if =1.16.5 && controlling { + +/*import com.blamejared.controlling.client.gui.KeyBindingListWidgetNew; +import com.blamejared.controlling.client.gui.KeyBindingListWidgetNew.KeyEntry; +import net.lopymine.patpat.client.keybinding.PatPatKeybinding; +import net.lopymine.patpat.utils.mixin.IRequestableTooltipScreen; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.gui.components.*; +import net.minecraft.client.gui.screens.controls.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(KeyEntry.class) +public class ControllingKeyEntryMixin { + + @Shadow @Final public KeyMapping binding; + + @Shadow @Final public Button editButton; + + @Inject(at = @At("TAIL"), method = "(Lcom/blamejared/controlling/client/gui/KeyBindingListWidgetNew;Lnet/minecraft/client/KeyMapping;)V") + private void init(KeyBindingListWidgetNew list, KeyMapping name, CallbackInfo ci) { + if (!(this.binding instanceof PatPatKeybinding patPatKeybinding)) { + return; + } + + this.editButton.onTooltip = (button, poseStack, a, b) -> { + ControlsScreen screen = ((ControllingKeyBindingListWidgetNewAccessor) list).getScreenPleaseThanks(); + ((IRequestableTooltipScreen) screen).myTotemDoll$requestTooltip((pose, x, y, d) -> { + screen.renderTooltip(poseStack, patPatKeybinding.getFullTranslatedKeyMessage(), x, y); + }); + }; + } + +} +*///?} diff --git a/src/main/java/net/lopymine/patpat/mixin/controlling/ControllingOptionsScreenMixin.java b/src/main/java/net/lopymine/patpat/mixin/controlling/ControllingOptionsScreenMixin.java new file mode 100644 index 0000000..2e8d9d8 --- /dev/null +++ b/src/main/java/net/lopymine/patpat/mixin/controlling/ControllingOptionsScreenMixin.java @@ -0,0 +1,27 @@ +package net.lopymine.patpat.mixin.controlling; + +//? if <=1.17 && controlling { + +/*import com.blamejared.controlling.client.gui.ControlsSettingsGuiNew; +import com.mojang.blaze3d.vertex.PoseStack; +import net.lopymine.patpat.utils.mixin.*; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ControlsSettingsGuiNew.class) +public class ControllingOptionsScreenMixin { + + @Inject(at = @At("TAIL"), method = "render") + private void renderWithTooltip(PoseStack poseStack, int mouseX, int mouseY, float partialTick, CallbackInfo ci) { + if (this instanceof IRequestableTooltipScreen screen) { + TooltipRequest tooltipRequest = screen.myTotemDoll$getCurrentRequest(); + if (tooltipRequest != null) { + tooltipRequest.render(poseStack, mouseX, mouseY, partialTick); + screen.myTotemDoll$requestTooltip(null); + } + } + } + +} +*///?} diff --git a/src/main/java/net/lopymine/patpat/mixin/controlling/ControlsSettingsGuiNewMixin.java b/src/main/java/net/lopymine/patpat/mixin/controlling/ControlsSettingsGuiNewMixin.java new file mode 100644 index 0000000..b44a8ec --- /dev/null +++ b/src/main/java/net/lopymine/patpat/mixin/controlling/ControlsSettingsGuiNewMixin.java @@ -0,0 +1,37 @@ +package net.lopymine.patpat.mixin.controlling; + +//? if =1.16.5 && controlling { + +/*import com.blamejared.controlling.client.gui.ControlsSettingsGuiNew; +import net.lopymine.patpat.client.keybinding.PatPatClientKeybindingManager; +import net.minecraft.client.Options; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.controls.ControlsScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.At.Shift; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ControlsSettingsGuiNew.class) +public class ControlsSettingsGuiNewMixin extends ControlsScreen { + + public ControlsSettingsGuiNewMixin(Screen screen, Options options) { + super(screen, options); + } + + @Inject( + at = @At( + value = "FIELD", + target = "Lcom/blamejared/controlling/client/gui/ControlsSettingsGuiNew;selectedKey:Lnet/minecraft/client/KeyMapping;", + ordinal = 1, + shift = Shift.AFTER + ), + method = "keyPressed", + cancellable = true + ) + private void handlePatPatKeybindingOnKeyPressed(int keyCode, int scanCode, int mods, CallbackInfoReturnable cir) { + PatPatClientKeybindingManager.handlePatPatKeybindingOnKeyPressed(this.selectedKey, this, keyCode, scanCode, () -> cir.setReturnValue(false)); + } + +} +*///?} diff --git a/src/main/java/net/lopymine/patpat/mixin/controlling/IPlatformHelperMixin.java b/src/main/java/net/lopymine/patpat/mixin/controlling/IPlatformHelperMixin.java new file mode 100644 index 0000000..9cd0e45 --- /dev/null +++ b/src/main/java/net/lopymine/patpat/mixin/controlling/IPlatformHelperMixin.java @@ -0,0 +1,26 @@ +package net.lopymine.patpat.mixin.controlling; + +//? if >=1.21 && controlling { + +import com.blamejared.controlling.client.NewKeyBindsScreen; +import com.blamejared.controlling.platform.IPlatformHelper; +import net.lopymine.patpat.client.keybinding.*; +import net.minecraft.client.Options; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; + +@Mixin(IPlatformHelper.class) +public interface IPlatformHelperMixin { + + @Inject(at = @At("HEAD"), method = "handleKeyPress", cancellable = true) + private void handlePatPatKeybindingOnKeyPressed(NewKeyBindsScreen screen, Options options, /*? if >=1.21.9 {*/net.minecraft.client.input.KeyEvent event /*?} else {*/ /*int keyCode, int scanCode, int modifiers *//*?}*/, CallbackInfo ci) { + //? if >=1.21.9 { + int keyCode = event.key(); + int scanCode = event.scancode(); + //?} + PatPatClientKeybindingManager.handlePatPatKeybindingOnKeyPressed(screen.selectedKey, screen, keyCode, scanCode, ci::cancel); + } + +} +//?} diff --git a/src/main/java/net/lopymine/patpat/mixin/controlling/KeyBindsScreenAccessor.java b/src/main/java/net/lopymine/patpat/mixin/controlling/KeyBindsScreenAccessor.java new file mode 100644 index 0000000..0540be7 --- /dev/null +++ b/src/main/java/net/lopymine/patpat/mixin/controlling/KeyBindsScreenAccessor.java @@ -0,0 +1,16 @@ +package net.lopymine.patpat.mixin.controlling; + +//? if >=1.19.4 && controlling { + +import net.minecraft.client.gui.screens.options.controls.*; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(KeyBindsScreen.class) +public interface KeyBindsScreenAccessor { + + @Accessor("keyBindsList") + KeyBindsList getList(); + +} +//?} diff --git a/src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyBindsListAccessor.java b/src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyBindsListAccessor.java new file mode 100644 index 0000000..4c54f25 --- /dev/null +++ b/src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyBindsListAccessor.java @@ -0,0 +1,17 @@ +package net.lopymine.patpat.mixin.controlling; + +//? if =1.17.1 && controlling { + +/*import com.blamejared.controlling.client.NewKeyBindsList; +import net.minecraft.client.gui.screens.controls.ControlsScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(NewKeyBindsList.class) +public interface NewKeyBindsListAccessor { + + @Accessor("controlsScreen") + ControlsScreen getScreenPleaseThanks(); + +} +*///?} diff --git a/src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyBindsListMixin.java b/src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyBindsListMixin.java new file mode 100644 index 0000000..84ffca0 --- /dev/null +++ b/src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyBindsListMixin.java @@ -0,0 +1,28 @@ +package net.lopymine.patpat.mixin.controlling; + +//? if >=1.17.1 && <1.19.3 && controlling { +/*import com.blamejared.controlling.client.NewKeyBindsList; +import com.blamejared.controlling.client.NewKeyBindsList.KeyEntry; +import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; +import com.llamalad7.mixinextras.sugar.Local; +import com.mojang.blaze3d.vertex.PoseStack; +import net.lopymine.patpat.client.keybinding.*; +import net.lopymine.patpat.utils.mixin.IRequestableTooltipScreen; +import net.minecraft.client.gui.screens.controls.KeyBindsScreen; +import net.minecraft.network.chat.Component; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(NewKeyBindsList.class) +public class NewKeyBindsListMixin { + + @WrapWithCondition(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/controls/KeyBindsScreen;renderTooltip(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/network/chat/Component;II)V"), method = "renderDecorations") + private boolean cancelUselessTooltip(KeyBindsScreen instance, PoseStack stack, Component component, int x, int y, @Local KeyEntry entry) { + if (instance instanceof IRequestableTooltipScreen screen) { + return screen.myTotemDoll$getCurrentRequest() == null; + } + return true; + } + +} +*///?} diff --git a/src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyBindsScreenMixin.java b/src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyBindsScreenMixin.java new file mode 100644 index 0000000..91f7586 --- /dev/null +++ b/src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyBindsScreenMixin.java @@ -0,0 +1,56 @@ +package net.lopymine.patpat.mixin.controlling; + +//? if >=1.17.1 && <=1.20.6 && controlling { + +/*import com.blamejared.controlling.client.NewKeyBindsScreen; +import com.mojang.blaze3d.platform.InputConstants; +import com.mojang.blaze3d.vertex.PoseStack; +import net.lopymine.patpat.client.keybinding.*; +import net.lopymine.patpat.utils.mixin.*; +import net.minecraft.client.*; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.controls.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.At.Shift; +import org.spongepowered.asm.mixin.injection.callback.*; + +@Debug(export = true) +@Mixin(NewKeyBindsScreen.class) +// Ignore the "Cannot find 'KeyBindsScreen' in the hierarchy of target class 'NewKeyBindsScreen'" +// That's fine +public abstract class NewKeyBindsScreenMixin extends KeyBindsScreen { + + public NewKeyBindsScreenMixin(Screen screen, Options options) { + super(screen, options); + } + + @Inject( + at = @At( + value = "FIELD", + target = "Lcom/blamejared/controlling/client/NewKeyBindsScreen;selectedKey:Lnet/minecraft/client/KeyMapping;", + ordinal = 1, + shift = Shift.AFTER + ), + method = "keyPressed", + cancellable = true + ) + private void handlePatPatKeybindingOnKeyPressed(int keyCode, int scanCode, int mods, CallbackInfoReturnable cir) { + PatPatClientKeybindingManager.handlePatPatKeybindingOnKeyPressed(this.selectedKey, this, keyCode, scanCode, () -> cir.setReturnValue(false)); + } + + //? if <1.19.3 { + /^@Inject(at = @At("TAIL"), method = "render") + private void renderWithTooltip(PoseStack poseStack, int mouseX, int mouseY, float partialTick, CallbackInfo ci) { + if (this instanceof IRequestableTooltipScreen screen) { + TooltipRequest tooltipRequest = screen.myTotemDoll$getCurrentRequest(); + if (tooltipRequest != null) { + tooltipRequest.render(poseStack, mouseX, mouseY, partialTick); + screen.myTotemDoll$requestTooltip(null); + } + } + } + ^///?} + +} +*///?} diff --git a/src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyEntryMixin.java b/src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyEntryMixin.java new file mode 100644 index 0000000..7caa3b4 --- /dev/null +++ b/src/main/java/net/lopymine/patpat/mixin/controlling/NewKeyEntryMixin.java @@ -0,0 +1,63 @@ +package net.lopymine.patpat.mixin.controlling; + +//? if >=1.17.1 && controlling { + +import com.blamejared.controlling.client.NewKeyBindsList; +import com.blamejared.controlling.client.NewKeyBindsList.KeyEntry; +import net.lopymine.patpat.client.keybinding.PatPatKeybinding; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.gui.components.*; +import net.minecraft.client.gui.screens.options.controls.*; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(KeyEntry.class) +public class NewKeyEntryMixin { + + //? if >=1.19.4 { + @Shadow + @Final + private KeyMapping key; + //?} else { + /*@Shadow + @Final + private KeyMapping keybinding; + *///?} + + @Shadow + @Final + private Button btnChangeKeyBinding; + + //? if <1.19.3 { + /*@Inject(at = @At("TAIL"), method = "") + private void init(NewKeyBindsList list, KeyMapping name, CallbackInfo ci) { + if (!(this.keybinding instanceof PatPatKeybinding patPatKeybinding)) { + return; + } + + this.btnChangeKeyBinding.onTooltip = (button, poseStack, a, b) -> { + /^? if >=1.18 {^/ + KeyBindsScreen screen = list.keyBindsScreen; + /^?} else {^/ + /^ControlsScreen screen = ((NewKeyBindsListAccessor) list).getScreenPleaseThanks(); + ^//^?}^/ + ((net.lopymine.patpat.utils.mixin.IRequestableTooltipScreen) screen).myTotemDoll$requestTooltip((pose, x, y, d) -> { + screen.renderTooltip(poseStack, patPatKeybinding.getFullTranslatedKeyMessage(), x, y); + }); + }; + } + *///?} + + @Inject(at = @At(/*? if >=1.19.4 {*/ "TAIL" /*?} else {*/ /*"HEAD" *//*?}*/), method = /*? if >=1.19.4 {*/ "refreshEntry" /*?} else {*/ /*"render" *//*?}*/) + private void addPatPatTooltipToPatPatKey(CallbackInfo ci) { + //? if >=1.19.4 { + if (!(this.key instanceof PatPatKeybinding patPatKeybinding)) { + return; + } + this.btnChangeKeyBinding.setTooltip(Tooltip.create(patPatKeybinding.getTranslatedKeyMessage())); + //?} + } + +} +//?} diff --git a/src/main/java/net/lopymine/patpat/modmenu/NoConfigLibrariesScreen.java b/src/main/java/net/lopymine/patpat/modmenu/NoConfigLibrariesScreen.java index ee78346..42b602b 100644 --- a/src/main/java/net/lopymine/patpat/modmenu/NoConfigLibrariesScreen.java +++ b/src/main/java/net/lopymine/patpat/modmenu/NoConfigLibrariesScreen.java @@ -5,6 +5,7 @@ import net.minecraft.client.gui.screens.ConfirmScreen; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.*; +import net.minecraft.util.*; import net.lopymine.patpat.client.PatPatClient; import net.lopymine.patpat.utils.*; @@ -12,9 +13,9 @@ import java.net.*; import java.util.*; -/*? if >=1.21.9 {*/ +//? if >=1.21.9 { import net.minecraft.client.input.KeyEvent; -/*?}*/ +//?} public class NoConfigLibrariesScreen { diff --git a/src/main/java/net/lopymine/patpat/modmenu/common/image/PatImage.java b/src/main/java/net/lopymine/patpat/modmenu/common/image/PatImage.java index 8f7ae4e..69f86a4 100644 --- a/src/main/java/net/lopymine/patpat/modmenu/common/image/PatImage.java +++ b/src/main/java/net/lopymine/patpat/modmenu/common/image/PatImage.java @@ -2,12 +2,12 @@ import lombok.Getter; import lombok.experimental.SuperBuilder; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; @Getter @SuperBuilder public class PatImage extends AbstractPatImage{ - private final ResourceLocation resource; + private final Identifier resource; } diff --git a/src/main/java/net/lopymine/patpat/packet/PatPatPacketType.java b/src/main/java/net/lopymine/patpat/packet/PatPatPacketType.java index 0a7d1d3..dadd71c 100644 --- a/src/main/java/net/lopymine/patpat/packet/PatPatPacketType.java +++ b/src/main/java/net/lopymine/patpat/packet/PatPatPacketType.java @@ -2,14 +2,14 @@ import lombok.Getter; import net.minecraft.network.*; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import java.util.function.Function; @Getter public class PatPatPacketType> { private final Function factory; - private final ResourceLocation id; + private final Identifier id; //? >=1.20.5 { private final net.minecraft.network.protocol.common.custom.CustomPacketPayload.Type packetId; @@ -18,7 +18,7 @@ public class PatPatPacketType> { /*private final net.fabricmc.fabric.api.networking.v1.PacketType packetId; *///?} - public PatPatPacketType(ResourceLocation id, Function factory) { + public PatPatPacketType(Identifier id, Function factory) { this.id = id; this.factory = factory; //? >=1.20.5 { diff --git a/src/main/java/net/lopymine/patpat/packet/c2s/HelloPatPatServerC2SPacket.java b/src/main/java/net/lopymine/patpat/packet/c2s/HelloPatPatServerC2SPacket.java index b6a4373..3a2816a 100644 --- a/src/main/java/net/lopymine/patpat/packet/c2s/HelloPatPatServerC2SPacket.java +++ b/src/main/java/net/lopymine/patpat/packet/c2s/HelloPatPatServerC2SPacket.java @@ -4,7 +4,7 @@ import net.lopymine.patpat.PatPat; import net.lopymine.patpat.common.Version; import net.lopymine.patpat.packet.*; -import net.lopymine.patpat.utils.IdentifierUtils; +import net.lopymine.patpat.utils.RLUtils; import net.minecraft.network.FriendlyByteBuf; import net.fabricmc.fabric.api.networking.v1.PacketSender; @@ -14,7 +14,7 @@ public class HelloPatPatServerC2SPacket implements PongPatPacket TYPE = new PatPatPacketType<>(IdentifierUtils.modId(PACKET_ID), HelloPatPatServerC2SPacket::new); + public static final PatPatPacketType TYPE = new PatPatPacketType<>(RLUtils.modId(PACKET_ID), HelloPatPatServerC2SPacket::new); private final Version version; diff --git a/src/main/java/net/lopymine/patpat/packet/c2s/PatEntityC2SPacket.java b/src/main/java/net/lopymine/patpat/packet/c2s/PatEntityC2SPacket.java index 3437a9d..56b5f52 100644 --- a/src/main/java/net/lopymine/patpat/packet/c2s/PatEntityC2SPacket.java +++ b/src/main/java/net/lopymine/patpat/packet/c2s/PatEntityC2SPacket.java @@ -5,7 +5,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; import net.lopymine.patpat.packet.*; -import net.lopymine.patpat.utils.IdentifierUtils; +import net.lopymine.patpat.utils.RLUtils; import java.util.UUID; import org.jetbrains.annotations.Nullable; @@ -15,7 +15,7 @@ public class PatEntityC2SPacket implements C2SPatPacket { public static final String PACKET_ID = "pat_entity_c2s_packet"; - public static final PatPatPacketType TYPE = new PatPatPacketType<>(IdentifierUtils.modId(PACKET_ID), PatEntityC2SPacket::new); + public static final PatPatPacketType TYPE = new PatPatPacketType<>(RLUtils.modId(PACKET_ID), PatEntityC2SPacket::new); private final UUID pattedEntityUuid; diff --git a/src/main/java/net/lopymine/patpat/packet/c2s/PatEntityC2SPacketV2.java b/src/main/java/net/lopymine/patpat/packet/c2s/PatEntityC2SPacketV2.java index d454ba2..d276954 100644 --- a/src/main/java/net/lopymine/patpat/packet/c2s/PatEntityC2SPacketV2.java +++ b/src/main/java/net/lopymine/patpat/packet/c2s/PatEntityC2SPacketV2.java @@ -7,7 +7,7 @@ import net.minecraft.world.entity.Entity; import net.lopymine.patpat.extension.EntityExtension; import net.lopymine.patpat.packet.*; -import net.lopymine.patpat.utils.IdentifierUtils; +import net.lopymine.patpat.utils.RLUtils; import org.jetbrains.annotations.Nullable; @@ -17,7 +17,7 @@ public class PatEntityC2SPacketV2 implements C2SPatPacket public static final String PACKET_ID = "pat_entity_c2s_packet_v2"; - public static final PatPatPacketType TYPE = new PatPatPacketType<>(IdentifierUtils.modId(PACKET_ID), PatEntityC2SPacketV2::new); + public static final PatPatPacketType TYPE = new PatPatPacketType<>(RLUtils.modId(PACKET_ID), PatEntityC2SPacketV2::new); private final int pattedEntityId; diff --git a/src/main/java/net/lopymine/patpat/packet/s2c/HelloPatPatPlayerS2CPacket.java b/src/main/java/net/lopymine/patpat/packet/s2c/HelloPatPatPlayerS2CPacket.java index 22675d2..391e9c5 100644 --- a/src/main/java/net/lopymine/patpat/packet/s2c/HelloPatPatPlayerS2CPacket.java +++ b/src/main/java/net/lopymine/patpat/packet/s2c/HelloPatPatPlayerS2CPacket.java @@ -9,14 +9,14 @@ import net.lopymine.patpat.common.Version; import net.lopymine.patpat.packet.*; import net.lopymine.patpat.packet.c2s.HelloPatPatServerC2SPacket; -import net.lopymine.patpat.utils.IdentifierUtils; +import net.lopymine.patpat.utils.RLUtils; @Getter public class HelloPatPatPlayerS2CPacket implements PingPatPacket { public static final String PACKET_ID = "hello_patpat_player_s2c_packet"; - public static final PatPatPacketType TYPE = new PatPatPacketType<>(IdentifierUtils.modId(PACKET_ID), HelloPatPatPlayerS2CPacket::new); + public static final PatPatPacketType TYPE = new PatPatPacketType<>(RLUtils.modId(PACKET_ID), HelloPatPatPlayerS2CPacket::new); private final Version version; diff --git a/src/main/java/net/lopymine/patpat/packet/s2c/PatEntityS2CPacket.java b/src/main/java/net/lopymine/patpat/packet/s2c/PatEntityS2CPacket.java index 33f211a..aded44a 100644 --- a/src/main/java/net/lopymine/patpat/packet/s2c/PatEntityS2CPacket.java +++ b/src/main/java/net/lopymine/patpat/packet/s2c/PatEntityS2CPacket.java @@ -15,7 +15,7 @@ public class PatEntityS2CPacket implements S2CPatPacket { public static final String PACKET_ID = "pat_entity_s2c_packet"; - public static final PatPatPacketType TYPE = new PatPatPacketType<>(IdentifierUtils.modId(PACKET_ID), PatEntityS2CPacket::new); + public static final PatPatPacketType TYPE = new PatPatPacketType<>(RLUtils.modId(PACKET_ID), PatEntityS2CPacket::new); private final UUID pattedEntityUuid; private final UUID whoPattedUuid; diff --git a/src/main/java/net/lopymine/patpat/packet/s2c/PatEntityS2CPacketV2.java b/src/main/java/net/lopymine/patpat/packet/s2c/PatEntityS2CPacketV2.java index 9d31bda..1d8d3a5 100644 --- a/src/main/java/net/lopymine/patpat/packet/s2c/PatEntityS2CPacketV2.java +++ b/src/main/java/net/lopymine/patpat/packet/s2c/PatEntityS2CPacketV2.java @@ -7,7 +7,7 @@ import net.minecraft.world.entity.Entity; import net.lopymine.patpat.packet.*; import net.lopymine.patpat.extension.EntityExtension; -import net.lopymine.patpat.utils.IdentifierUtils; +import net.lopymine.patpat.utils.RLUtils; import org.jetbrains.annotations.Nullable; @@ -18,7 +18,7 @@ public class PatEntityS2CPacketV2 implements S2CPatPacket public static final String PACKET_ID = "pat_entity_s2c_packet_v2"; - public static final PatPatPacketType TYPE = new PatPatPacketType<>(IdentifierUtils.modId(PACKET_ID), PatEntityS2CPacketV2::new); + public static final PatPatPacketType TYPE = new PatPatPacketType<>(RLUtils.modId(PACKET_ID), PatEntityS2CPacketV2::new); private final int pattedEntityId; private final int whoPattedId; diff --git a/src/main/java/net/lopymine/patpat/packet/s2c/SelfPatEntityS2CPacket.java b/src/main/java/net/lopymine/patpat/packet/s2c/SelfPatEntityS2CPacket.java index b3e0dc2..8aceddb 100644 --- a/src/main/java/net/lopymine/patpat/packet/s2c/SelfPatEntityS2CPacket.java +++ b/src/main/java/net/lopymine/patpat/packet/s2c/SelfPatEntityS2CPacket.java @@ -15,7 +15,7 @@ public class SelfPatEntityS2CPacket implements S2CPatPacket TYPE = new PatPatPacketType<>(IdentifierUtils.modId(PACKET_ID), SelfPatEntityS2CPacket::new); + public static final PatPatPacketType TYPE = new PatPatPacketType<>(RLUtils.modId(PACKET_ID), SelfPatEntityS2CPacket::new); private final UUID pattedEntityUuid; private final UUID whoPattedUuid; diff --git a/src/main/java/net/lopymine/patpat/packet/s2c/SelfPatEntityS2CPacketV2.java b/src/main/java/net/lopymine/patpat/packet/s2c/SelfPatEntityS2CPacketV2.java index e77a539..5701ebc 100644 --- a/src/main/java/net/lopymine/patpat/packet/s2c/SelfPatEntityS2CPacketV2.java +++ b/src/main/java/net/lopymine/patpat/packet/s2c/SelfPatEntityS2CPacketV2.java @@ -14,7 +14,7 @@ public class SelfPatEntityS2CPacketV2 implements S2CPatPacket TYPE = new PatPatPacketType<>(IdentifierUtils.modId(PACKET_ID), SelfPatEntityS2CPacketV2::new); + public static final PatPatPacketType TYPE = new PatPatPacketType<>(RLUtils.modId(PACKET_ID), SelfPatEntityS2CPacketV2::new); private final int pattedEntityId; private final int whoPattedId; diff --git a/src/main/java/net/lopymine/patpat/server/packet/PatPatServerNetworkManager.java b/src/main/java/net/lopymine/patpat/server/packet/PatPatServerNetworkManager.java index eb1472e..ff768d4 100644 --- a/src/main/java/net/lopymine/patpat/server/packet/PatPatServerNetworkManager.java +++ b/src/main/java/net/lopymine/patpat/server/packet/PatPatServerNetworkManager.java @@ -5,7 +5,7 @@ import net.lopymine.patpat.packet.*; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.server.level.ServerPlayer; public class PatPatServerNetworkManager { diff --git a/src/main/java/net/lopymine/patpat/utils/CommandText.java b/src/main/java/net/lopymine/patpat/utils/CommandText.java index ed8bc3a..c6a2321 100644 --- a/src/main/java/net/lopymine/patpat/utils/CommandText.java +++ b/src/main/java/net/lopymine/patpat/utils/CommandText.java @@ -22,7 +22,7 @@ //? if >=1.21.6 { import net.minecraft.server.dialog.Dialog; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.core.Holder; //?} @@ -129,7 +129,7 @@ public static ClickEvent getClickEvent(ClickEvent.Action action, Object value) { yield new OpenFile((String) value); } //? if >=1.21.6 { - case CUSTOM -> new Custom((ResourceLocation) value, Optional.empty()); + case CUSTOM -> new Custom((Identifier) value, Optional.empty()); case SHOW_DIALOG -> new ShowDialog((Holder) value); //?} }; diff --git a/src/main/java/net/lopymine/patpat/utils/ConfigUtils.java b/src/main/java/net/lopymine/patpat/utils/ConfigUtils.java index 190be54..18e27c7 100644 --- a/src/main/java/net/lopymine/patpat/utils/ConfigUtils.java +++ b/src/main/java/net/lopymine/patpat/utils/ConfigUtils.java @@ -45,7 +45,7 @@ private static A create(Codec codec, File location, PatLogger logger) { return config; } try (FileWriter writer = new FileWriter(location, StandardCharsets.UTF_8)) { - String json = GSON.toJson(codec.encode(config, JsonOps.INSTANCE, JsonOps.INSTANCE.empty())/*? if >=1.20.5 {*/.getOrThrow());/*?} else*//*.getOrThrow(false, logger::error));*/ + String json = GSON.toJson(codec.encode(config, JsonOps.INSTANCE, JsonOps.INSTANCE.empty())/*? if >=1.20.5 {*/.getOrThrow());/*?} else*///.getOrThrow(false, logger::error)); writer.write(json); } catch (Exception e) { logger.error("Failed to create config", e); @@ -69,7 +69,7 @@ public static A readConfig(Codec codec, File location, PatLogger logger) public static void saveConfig(A config, Codec codec, File location, PatLogger logger) { logger.debug("Saving config..."); try (FileWriter writer = new FileWriter(location, StandardCharsets.UTF_8)) { - String json = GSON.toJson(codec.encode(config, JsonOps.INSTANCE, JsonOps.INSTANCE.empty())/*? if >=1.20.5 {*/.getOrThrow());/*?} else*//*.getOrThrow(false, logger::error));*/ + String json = GSON.toJson(codec.encode(config, JsonOps.INSTANCE, JsonOps.INSTANCE.empty())/*? if >=1.20.5 {*/.getOrThrow());/*?} else*///.getOrThrow(false, logger::error)); writer.write(json); } catch (Exception e) { logger.error("Failed to save config:", e); diff --git a/src/main/java/net/lopymine/patpat/utils/IdentifierUtils.java b/src/main/java/net/lopymine/patpat/utils/IdentifierUtils.java deleted file mode 100644 index 64fea4c..0000000 --- a/src/main/java/net/lopymine/patpat/utils/IdentifierUtils.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.lopymine.patpat.utils; - -import net.lopymine.patpat.PatPat; -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.*; - -public class IdentifierUtils { - - private IdentifierUtils() { - throw new IllegalStateException("Utility class"); - } - - public static ResourceLocation modId(@NotNull String path) { - return IdentifierUtils.id(PatPat.MOD_ID, path); - } - - public static ResourceLocation vanillaId(@NotNull String path) { - return IdentifierUtils.id("minecraft", path); - } - - public static ResourceLocation id(String namespace, String path) { - String name = namespace; - String location = path; - - String[] split = path.split(":"); - if (split.length >= 2) { - name = split[0]; - location = split[1]; - } - - //? >=1.21 { - return ResourceLocation.fromNamespaceAndPath(name, location); - //?} else { - /*return new ResourceLocation(name, location); - *///?} - } -} diff --git a/src/main/java/net/lopymine/patpat/utils/ModMenuUtils.java b/src/main/java/net/lopymine/patpat/utils/ModMenuUtils.java index 0442822..b296975 100644 --- a/src/main/java/net/lopymine/patpat/utils/ModMenuUtils.java +++ b/src/main/java/net/lopymine/patpat/utils/ModMenuUtils.java @@ -4,7 +4,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.lopymine.patpat.PatTranslation; @@ -64,8 +64,8 @@ public static MutableComponent getModTitle() { return PatTranslation.text("modmenu.title"); } - public static ResourceLocation getContentId(String filename) { - return IdentifierUtils.modId("textures/config/" + filename); + public static Identifier getContentId(String filename) { + return RLUtils.modId("textures/config/" + filename); } public static Function getEnabledOrDisabledFormatter() { diff --git a/src/main/java/net/lopymine/patpat/utils/RLUtils.java b/src/main/java/net/lopymine/patpat/utils/RLUtils.java new file mode 100644 index 0000000..8b2edc0 --- /dev/null +++ b/src/main/java/net/lopymine/patpat/utils/RLUtils.java @@ -0,0 +1,45 @@ +package net.lopymine.patpat.utils; + +import net.lopymine.patpat.PatPat; +import net.minecraft.resources.Identifier; +import org.jetbrains.annotations.*; + +public class RLUtils { + + private RLUtils() { + throw new IllegalStateException("Utility class"); + } + + public static Identifier parse(String string){ + /*? if >1.20.6 {*/ + return Identifier.parse(string); + /*?} else {*/ + /*return new ResourceLocation(string); + *//*?}*/ + } + + public static Identifier modId(@NotNull String path) { + return RLUtils.id(PatPat.MOD_ID, path); + } + + public static Identifier vanillaId(@NotNull String path) { + return RLUtils.id("minecraft", path); + } + + public static Identifier id(String namespace, String path) { + String name = namespace; + String location = path; + + String[] split = path.split(":"); + if (split.length >= 2) { + name = split[0]; + location = split[1]; + } + + //? >=1.21 { + return Identifier.fromNamespaceAndPath(name, location); + //?} else { + /*return new ResourceLocation(name, location); + *///?} + } +} diff --git a/src/main/java/net/lopymine/patpat/utils/ResourceLocationUtils.java b/src/main/java/net/lopymine/patpat/utils/ResourceLocationUtils.java deleted file mode 100644 index 3b72b0d..0000000 --- a/src/main/java/net/lopymine/patpat/utils/ResourceLocationUtils.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.lopymine.patpat.utils; - -import lombok.experimental.UtilityClass; -import net.minecraft.resources.ResourceLocation; - -@UtilityClass -public class ResourceLocationUtils { - - public static ResourceLocation parse(String string){ - /*? if >1.20.6 {*/ - return ResourceLocation.parse(string); - /*?} else {*/ - /*return new ResourceLocation(string); - *//*?}*/ - } - -} diff --git a/src/main/java/net/lopymine/patpat/utils/SoundUtils.java b/src/main/java/net/lopymine/patpat/utils/SoundUtils.java index 51fdbb2..294e6d1 100644 --- a/src/main/java/net/lopymine/patpat/utils/SoundUtils.java +++ b/src/main/java/net/lopymine/patpat/utils/SoundUtils.java @@ -1,6 +1,6 @@ package net.lopymine.patpat.utils; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.sounds.SoundEvent; import org.jetbrains.annotations.*; @@ -12,7 +12,7 @@ private SoundUtils() { @NotNull public static SoundEvent getSoundEvent(@NotNull String value) { - ResourceLocation id = IdentifierUtils.modId(value); + Identifier id = RLUtils.modId(value); return /*? >=1.19.3 {*/SoundEvent.createVariableRangeEvent(id)/*?} else {*/ /*new SoundEvent(id)*//*?}*/; } diff --git a/src/main/java/net/lopymine/patpat/utils/mixin/ScreenWithPatPatKeybinding.java b/src/main/java/net/lopymine/patpat/utils/mixin/ScreenWithPatPatKeybinding.java index cec64ad..ed8ca0c 100644 --- a/src/main/java/net/lopymine/patpat/utils/mixin/ScreenWithPatPatKeybinding.java +++ b/src/main/java/net/lopymine/patpat/utils/mixin/ScreenWithPatPatKeybinding.java @@ -2,6 +2,6 @@ public interface ScreenWithPatPatKeybinding { - void patPat$onKeyReleased(int keyCode, int scanCode, int modifiers); + void patPat$onKeyReleased(); } diff --git a/src/main/resources/aws/1.16.5.accesswidener b/src/main/resources/aws/1.16.5.accesswidener index 42fc5f5..2ac85b3 100644 --- a/src/main/resources/aws/1.16.5.accesswidener +++ b/src/main/resources/aws/1.16.5.accesswidener @@ -9,3 +9,5 @@ mutable field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraf accessible field net/minecraft/client/gui/screens/controls/ControlList controlsScreen Lnet/minecraft/client/gui/screens/controls/ControlsScreen; accessible method com/mojang/blaze3d/vertex/PoseStack$Pose (Lcom/mojang/math/Matrix4f;Lcom/mojang/math/Matrix3f;)V + +accessible field net/minecraft/client/KeyMapping clickCount I diff --git a/src/main/resources/aws/1.17.1.accesswidener b/src/main/resources/aws/1.17.1.accesswidener index 45d8836..fca9ffc 100644 --- a/src/main/resources/aws/1.17.1.accesswidener +++ b/src/main/resources/aws/1.17.1.accesswidener @@ -6,4 +6,6 @@ accessible field net/minecraft/client/Camera eyeHeight F accessible field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; mutable field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; -accessible field net/minecraft/client/gui/screens/controls/ControlList controlsScreen Lnet/minecraft/client/gui/screens/controls/ControlsScreen; \ No newline at end of file +accessible field net/minecraft/client/gui/screens/controls/ControlList controlsScreen Lnet/minecraft/client/gui/screens/controls/ControlsScreen; + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.17.accesswidener b/src/main/resources/aws/1.17.accesswidener index aa48ff6..483c923 100644 --- a/src/main/resources/aws/1.17.accesswidener +++ b/src/main/resources/aws/1.17.accesswidener @@ -6,4 +6,6 @@ accessible field net/minecraft/client/Camera eyeHeight F accessible field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; mutable field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; -accessible field net/minecraft/client/gui/screens/controls/ControlList controlsScreen Lnet/minecraft/client/gui/screens/controls/ControlsScreen; \ No newline at end of file +accessible field net/minecraft/client/gui/screens/controls/ControlList controlsScreen Lnet/minecraft/client/gui/screens/controls/ControlsScreen; + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.18.1.accesswidener b/src/main/resources/aws/1.18.1.accesswidener index bbac3e1..0c80e05 100644 --- a/src/main/resources/aws/1.18.1.accesswidener +++ b/src/main/resources/aws/1.18.1.accesswidener @@ -6,4 +6,6 @@ accessible field net/minecraft/client/Camera eyeHeight F accessible field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; mutable field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; -accessible field net/minecraft/client/gui/screens/controls/KeyBindsList keyBindsScreen Lnet/minecraft/client/gui/screens/controls/KeyBindsScreen; \ No newline at end of file +accessible field net/minecraft/client/gui/screens/controls/KeyBindsList keyBindsScreen Lnet/minecraft/client/gui/screens/controls/KeyBindsScreen; + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.18.2.accesswidener b/src/main/resources/aws/1.18.2.accesswidener index 1169eff..d26e815 100644 --- a/src/main/resources/aws/1.18.2.accesswidener +++ b/src/main/resources/aws/1.18.2.accesswidener @@ -6,4 +6,6 @@ accessible field net/minecraft/client/Camera eyeHeight F accessible field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; mutable field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; -accessible field net/minecraft/client/gui/screens/controls/KeyBindsList keyBindsScreen Lnet/minecraft/client/gui/screens/controls/KeyBindsScreen; \ No newline at end of file +accessible field net/minecraft/client/gui/screens/controls/KeyBindsList keyBindsScreen Lnet/minecraft/client/gui/screens/controls/KeyBindsScreen; + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.18.accesswidener b/src/main/resources/aws/1.18.accesswidener index 3ccd4a4..26a4cd7 100644 --- a/src/main/resources/aws/1.18.accesswidener +++ b/src/main/resources/aws/1.18.accesswidener @@ -6,4 +6,6 @@ accessible field net/minecraft/client/Camera eyeHeight F accessible field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; mutable field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; -accessible field net/minecraft/client/gui/screens/controls/KeyBindsList keyBindsScreen Lnet/minecraft/client/gui/screens/controls/KeyBindsScreen; \ No newline at end of file +accessible field net/minecraft/client/gui/screens/controls/KeyBindsList keyBindsScreen Lnet/minecraft/client/gui/screens/controls/KeyBindsScreen; + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.19.1.accesswidener b/src/main/resources/aws/1.19.1.accesswidener index 99bd0e2..e13a77f 100644 --- a/src/main/resources/aws/1.19.1.accesswidener +++ b/src/main/resources/aws/1.19.1.accesswidener @@ -6,4 +6,6 @@ accessible field net/minecraft/client/Camera eyeHeight F accessible field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; mutable field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; -accessible field net/minecraft/client/gui/screens/controls/KeyBindsList keyBindsScreen Lnet/minecraft/client/gui/screens/controls/KeyBindsScreen; \ No newline at end of file +accessible field net/minecraft/client/gui/screens/controls/KeyBindsList keyBindsScreen Lnet/minecraft/client/gui/screens/controls/KeyBindsScreen; + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.19.2.accesswidener b/src/main/resources/aws/1.19.2.accesswidener index 3b7ff14..1d1d3f1 100644 --- a/src/main/resources/aws/1.19.2.accesswidener +++ b/src/main/resources/aws/1.19.2.accesswidener @@ -6,4 +6,6 @@ accessible field net/minecraft/client/Camera eyeHeight F accessible field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; mutable field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; -accessible field net/minecraft/client/gui/screens/controls/KeyBindsList keyBindsScreen Lnet/minecraft/client/gui/screens/controls/KeyBindsScreen; \ No newline at end of file +accessible field net/minecraft/client/gui/screens/controls/KeyBindsList keyBindsScreen Lnet/minecraft/client/gui/screens/controls/KeyBindsScreen; + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.19.3.accesswidener b/src/main/resources/aws/1.19.3.accesswidener index ca8200a..a4b2126 100644 --- a/src/main/resources/aws/1.19.3.accesswidener +++ b/src/main/resources/aws/1.19.3.accesswidener @@ -2,4 +2,6 @@ accessWidener v2 named # 1.19.3 AW accessible field net/minecraft/client/Camera eyeHeightOld F -accessible field net/minecraft/client/Camera eyeHeight F \ No newline at end of file +accessible field net/minecraft/client/Camera eyeHeight F + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.19.4.accesswidener b/src/main/resources/aws/1.19.4.accesswidener index edebca4..d04c8d6 100644 --- a/src/main/resources/aws/1.19.4.accesswidener +++ b/src/main/resources/aws/1.19.4.accesswidener @@ -2,4 +2,6 @@ accessWidener v2 named # 1.19.4 AW accessible field net/minecraft/client/Camera eyeHeightOld F -accessible field net/minecraft/client/Camera eyeHeight F \ No newline at end of file +accessible field net/minecraft/client/Camera eyeHeight F + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.19.accesswidener b/src/main/resources/aws/1.19.accesswidener index 7aa4cbb..0fac52d 100644 --- a/src/main/resources/aws/1.19.accesswidener +++ b/src/main/resources/aws/1.19.accesswidener @@ -6,4 +6,6 @@ accessible field net/minecraft/client/Camera eyeHeight F accessible field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; mutable field net/minecraft/client/gui/components/Button onTooltip Lnet/minecraft/client/gui/components/Button$OnTooltip; -accessible field net/minecraft/client/gui/screens/controls/KeyBindsList keyBindsScreen Lnet/minecraft/client/gui/screens/controls/KeyBindsScreen; \ No newline at end of file +accessible field net/minecraft/client/gui/screens/controls/KeyBindsList keyBindsScreen Lnet/minecraft/client/gui/screens/controls/KeyBindsScreen; + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.20.1.accesswidener b/src/main/resources/aws/1.20.1.accesswidener index cd5b511..b9dee54 100644 --- a/src/main/resources/aws/1.20.1.accesswidener +++ b/src/main/resources/aws/1.20.1.accesswidener @@ -2,4 +2,6 @@ accessWidener v2 named # 1.20.1 AW accessible field net/minecraft/client/Camera eyeHeightOld F -accessible field net/minecraft/client/Camera eyeHeight F \ No newline at end of file +accessible field net/minecraft/client/Camera eyeHeight F + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.20.2.accesswidener b/src/main/resources/aws/1.20.2.accesswidener index e448fcf..30e70f5 100644 --- a/src/main/resources/aws/1.20.2.accesswidener +++ b/src/main/resources/aws/1.20.2.accesswidener @@ -2,4 +2,6 @@ accessWidener v2 named # 1.20.2 AW accessible field net/minecraft/client/Camera eyeHeightOld F -accessible field net/minecraft/client/Camera eyeHeight F \ No newline at end of file +accessible field net/minecraft/client/Camera eyeHeight F + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.20.3.accesswidener b/src/main/resources/aws/1.20.3.accesswidener index d34ec33..38e3023 100644 --- a/src/main/resources/aws/1.20.3.accesswidener +++ b/src/main/resources/aws/1.20.3.accesswidener @@ -2,4 +2,6 @@ accessWidener v2 named # 1.20.3 AW accessible field net/minecraft/client/Camera eyeHeightOld F -accessible field net/minecraft/client/Camera eyeHeight F \ No newline at end of file +accessible field net/minecraft/client/Camera eyeHeight F + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.20.4.accesswidener b/src/main/resources/aws/1.20.4.accesswidener index 3b6e067..6e21564 100644 --- a/src/main/resources/aws/1.20.4.accesswidener +++ b/src/main/resources/aws/1.20.4.accesswidener @@ -2,4 +2,6 @@ accessWidener v2 named # 1.20.4 AW accessible field net/minecraft/client/Camera eyeHeightOld F -accessible field net/minecraft/client/Camera eyeHeight F \ No newline at end of file +accessible field net/minecraft/client/Camera eyeHeight F + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.20.5.accesswidener b/src/main/resources/aws/1.20.5.accesswidener index e7b71c8..6df4868 100644 --- a/src/main/resources/aws/1.20.5.accesswidener +++ b/src/main/resources/aws/1.20.5.accesswidener @@ -4,4 +4,5 @@ accessWidener v2 named accessible field net/minecraft/client/Camera eyeHeightOld F accessible field net/minecraft/client/Camera eyeHeight F -accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; \ No newline at end of file +accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.20.6.accesswidener b/src/main/resources/aws/1.20.6.accesswidener index 86795ce..492c684 100644 --- a/src/main/resources/aws/1.20.6.accesswidener +++ b/src/main/resources/aws/1.20.6.accesswidener @@ -4,4 +4,5 @@ accessWidener v2 named accessible field net/minecraft/client/Camera eyeHeightOld F accessible field net/minecraft/client/Camera eyeHeight F -accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; \ No newline at end of file +accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.20.accesswidener b/src/main/resources/aws/1.20.accesswidener index 56e141b..483c456 100644 --- a/src/main/resources/aws/1.20.accesswidener +++ b/src/main/resources/aws/1.20.accesswidener @@ -2,4 +2,6 @@ accessWidener v2 named # 1.20 AW accessible field net/minecraft/client/Camera eyeHeightOld F -accessible field net/minecraft/client/Camera eyeHeight F \ No newline at end of file +accessible field net/minecraft/client/Camera eyeHeight F + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.21.1.accesswidener b/src/main/resources/aws/1.21.1.accesswidener index 60019a8..264e997 100644 --- a/src/main/resources/aws/1.21.1.accesswidener +++ b/src/main/resources/aws/1.21.1.accesswidener @@ -4,4 +4,5 @@ accessWidener v2 named accessible field net/minecraft/client/Camera eyeHeightOld F accessible field net/minecraft/client/Camera eyeHeight F -accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; \ No newline at end of file +accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.21.10.accesswidener b/src/main/resources/aws/1.21.10.accesswidener index 8dab152..da8cefd 100644 --- a/src/main/resources/aws/1.21.10.accesswidener +++ b/src/main/resources/aws/1.21.10.accesswidener @@ -4,4 +4,5 @@ accessWidener v2 named accessible field net/minecraft/client/Camera eyeHeightOld F accessible field net/minecraft/client/Camera eyeHeight F -accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; \ No newline at end of file +accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.21.11.accesswidener b/src/main/resources/aws/1.21.11.accesswidener new file mode 100644 index 0000000..eafe356 --- /dev/null +++ b/src/main/resources/aws/1.21.11.accesswidener @@ -0,0 +1,7 @@ +accessWidener v2 named +# 1.21.11 AW + +accessible field net/minecraft/client/Camera eyeHeightOld F +accessible field net/minecraft/client/Camera eyeHeight F + +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.21.2.accesswidener b/src/main/resources/aws/1.21.2.accesswidener index 12de189..1a1042a 100644 --- a/src/main/resources/aws/1.21.2.accesswidener +++ b/src/main/resources/aws/1.21.2.accesswidener @@ -4,4 +4,5 @@ accessWidener v2 named accessible field net/minecraft/client/Camera eyeHeightOld F accessible field net/minecraft/client/Camera eyeHeight F -accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; \ No newline at end of file +accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.21.3.accesswidener b/src/main/resources/aws/1.21.3.accesswidener index 6e16072..f158d9f 100644 --- a/src/main/resources/aws/1.21.3.accesswidener +++ b/src/main/resources/aws/1.21.3.accesswidener @@ -4,4 +4,5 @@ accessWidener v2 named accessible field net/minecraft/client/Camera eyeHeightOld F accessible field net/minecraft/client/Camera eyeHeight F -accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; \ No newline at end of file +accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.21.4.accesswidener b/src/main/resources/aws/1.21.4.accesswidener index a9fa4da..9fa82f0 100644 --- a/src/main/resources/aws/1.21.4.accesswidener +++ b/src/main/resources/aws/1.21.4.accesswidener @@ -4,4 +4,5 @@ accessWidener v2 named accessible field net/minecraft/client/Camera eyeHeightOld F accessible field net/minecraft/client/Camera eyeHeight F -accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; \ No newline at end of file +accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.21.5.accesswidener b/src/main/resources/aws/1.21.5.accesswidener index b04c010..d02100d 100644 --- a/src/main/resources/aws/1.21.5.accesswidener +++ b/src/main/resources/aws/1.21.5.accesswidener @@ -4,4 +4,5 @@ accessWidener v2 named accessible field net/minecraft/client/Camera eyeHeightOld F accessible field net/minecraft/client/Camera eyeHeight F -accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; \ No newline at end of file +accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.21.6.accesswidener b/src/main/resources/aws/1.21.6.accesswidener index 53e99d4..e01aa8c 100644 --- a/src/main/resources/aws/1.21.6.accesswidener +++ b/src/main/resources/aws/1.21.6.accesswidener @@ -4,4 +4,5 @@ accessWidener v2 named accessible field net/minecraft/client/Camera eyeHeightOld F accessible field net/minecraft/client/Camera eyeHeight F -accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; \ No newline at end of file +accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.21.7.accesswidener b/src/main/resources/aws/1.21.7.accesswidener index f8ad847..8888806 100644 --- a/src/main/resources/aws/1.21.7.accesswidener +++ b/src/main/resources/aws/1.21.7.accesswidener @@ -5,3 +5,4 @@ accessible field net/minecraft/client/Camera eyeHeightOld F accessible field net/minecraft/client/Camera eyeHeight F accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; +accessible field net/minecraft/client/KeyMapping clickCount I diff --git a/src/main/resources/aws/1.21.8.accesswidener b/src/main/resources/aws/1.21.8.accesswidener index 87b8c9c..ca1090f 100644 --- a/src/main/resources/aws/1.21.8.accesswidener +++ b/src/main/resources/aws/1.21.8.accesswidener @@ -5,3 +5,4 @@ accessible field net/minecraft/client/Camera eyeHeightOld F accessible field net/minecraft/client/Camera eyeHeight F accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; +accessible field net/minecraft/client/KeyMapping clickCount I diff --git a/src/main/resources/aws/1.21.9.accesswidener b/src/main/resources/aws/1.21.9.accesswidener index 2753858..4cff127 100644 --- a/src/main/resources/aws/1.21.9.accesswidener +++ b/src/main/resources/aws/1.21.9.accesswidener @@ -4,4 +4,5 @@ accessWidener v2 named accessible field net/minecraft/client/Camera eyeHeightOld F accessible field net/minecraft/client/Camera eyeHeight F -accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; \ No newline at end of file +accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; +accessible field net/minecraft/client/KeyMapping clickCount I \ No newline at end of file diff --git a/src/main/resources/aws/1.21.accesswidener b/src/main/resources/aws/1.21.accesswidener index 59d466f..50f90cf 100644 --- a/src/main/resources/aws/1.21.accesswidener +++ b/src/main/resources/aws/1.21.accesswidener @@ -5,3 +5,4 @@ accessible field net/minecraft/client/Camera eyeHeightOld F accessible field net/minecraft/client/Camera eyeHeight F accessible method net/minecraft/client/renderer/GameRenderer pick (Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult; +accessible field net/minecraft/client/KeyMapping clickCount I diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 50ebcd5..da276c7 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -38,7 +38,8 @@ "accessWidener": "aws/${minecraft}.accesswidener", "mixins": [ "${mod_id}.mixins.json", - "${mod_id}-geckolib.mixins.json" + "${mod_id}-geckolib.mixins.json", + "${mod_id}-controlling.mixins.json" ], "custom": { "translators": { diff --git a/src/main/resources/patpat-controlling.mixins.json5 b/src/main/resources/patpat-controlling.mixins.json5 new file mode 100644 index 0000000..accc117 --- /dev/null +++ b/src/main/resources/patpat-controlling.mixins.json5 @@ -0,0 +1,48 @@ +{ + "required": true, + "package": "net.lopymine.patpat.mixin.controlling", + "refmap": "${mod_id}.refmap.json", + "plugin": "net.lopymine.patpat.compat.controlling.ControllingCompatPlugin", + "compatibilityLevel": "JAVA_${java}", + "mixins": [ + ], + "client": [ + //? controlling && >=1.17.1 { + + //? if >=1.19.4 { + "KeyBindsScreenAccessor", + //?} + + //? if >=1.21 { + "IPlatformHelperMixin", + //?} else { + /*"NewKeyBindsScreenMixin", + *///?} + + //? if <1.19.3 { + /*"NewKeyBindsListMixin", + *///?} + + //? if =1.17.1 { + /*"NewKeyBindsListAccessor", + *///?} + + "NewKeyEntryMixin" + //?} + + //? if controlling && <=1.17 { + + /*//? if =1.16.5 { + /^"ControllingKeyBindingListWidgetNewAccessor", + "ControllingKeyEntryMixin", + "ControlsSettingsGuiNewMixin", + ^///?} + + "ControllingOptionsScreenMixin" + + *///?} + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/patpat.mixins.json5 b/src/main/resources/patpat.mixins.json5 index e9fa367..1964001 100644 --- a/src/main/resources/patpat.mixins.json5 +++ b/src/main/resources/patpat.mixins.json5 @@ -4,33 +4,39 @@ "refmap": "${mod_id}.refmap.json", "compatibilityLevel": "JAVA_${java}", "plugin": "net.lopymine.patpat.compat.PatPatMixinConfigPlugin", - "mixins": [ - ], + "mixins": [], "client": [ "EntityRendererMixin", "LivingEntityRendererMixin", /*? if =1.16.5*/ - /*"TitleScreenMixin",*/ + //"TitleScreenMixin", /*? if >=1.21.2*/ "EntityRenderStateMixin", /*? if <1.19.3*/ - /*"ScreenMixin",*/ + //"ScreenMixin", "MinecraftClientMixin", "CameraMixin", "AbstractClientPlayerEntityMixin", - "ControlsListWidgetMixin", + "KeyEntryMixin", "KeybindingMixin", "ParentElementMixin", "KeyBindsScreenMixin", - "GameRendererMixin", - "EntityMixin", - "EnderDragonRendererMixin", - "ModMenuMixin", - "MultiPlayerGameModeMixin", + + //? if <=1.21.10 { + /*"GameRendererMixin", + *///?} else { + "LocalPlayerMixin", + //?} + /*? if >=1.21.9 {*/ "LevelRendererMixin", - "FeatureRenderDispatcherMixin" + "FeatureRenderDispatcherMixin", /*?}*/ + + "EntityMixin", + "EnderDragonRendererMixin", + "ModMenuMixin", + "MultiPlayerGameModeMixin" ], "injectors": { "defaultRequire": 1 diff --git a/src/test/java/net/lopymine/patpat/modmenu/bridge/YACLBridgeTest.java b/src/test/java/net/lopymine/patpat/modmenu/bridge/YACLBridgeTest.java index 8174a22..c6b8d23 100644 --- a/src/test/java/net/lopymine/patpat/modmenu/bridge/YACLBridgeTest.java +++ b/src/test/java/net/lopymine/patpat/modmenu/bridge/YACLBridgeTest.java @@ -3,13 +3,14 @@ //? if >=1.20.1 { import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import net.lopymine.patpat.modmenu.bridge.YACLBridge; class YACLBridgeTest { @Test void testYACLScreenCreate() { - Assertions.assertNotNull(YACLBridge.getScreen(null)); + //? if <=1.21.10 { + /*Assertions.assertNotNull(YACLBridge.getScreen(null)); + *///?} } } diff --git a/versions/1.16.5/gradle.properties b/versions/1.16.5/gradle.properties index 79a19f3..33b20a2 100644 --- a/versions/1.16.5/gradle.properties +++ b/versions/1.16.5/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.16.4-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.16.5&l=fabric dep.geckolib=3.0.106 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.16.5&l=fabric -dep.proxlib=unknown \ No newline at end of file +dep.proxlib=unknown +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.16.5&l=fabric +dep.controlling=Qt19ymXV +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.16.5&l=fabric +dep.searchables=tRemkGX1 diff --git a/versions/1.17.1/gradle.properties b/versions/1.17.1/gradle.properties index b970f36..c8d9eba 100644 --- a/versions/1.17.1/gradle.properties +++ b/versions/1.17.1/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.17.1-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.17.1&l=fabric dep.geckolib=3.0.15 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.17.1&l=fabric -dep.proxlib=unknown \ No newline at end of file +dep.proxlib=unknown +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.17.1&l=fabric +dep.controlling=yhUO28QC +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.17.1&l=fabric +dep.searchables=YrZSPg5T diff --git a/versions/1.17/gradle.properties b/versions/1.17/gradle.properties index 8d2948e..c2d5b63 100644 --- a/versions/1.17/gradle.properties +++ b/versions/1.17/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.17-2.6.11 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.17&l=fabric dep.geckolib=unknown # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.17&l=fabric -dep.proxlib=unknown \ No newline at end of file +dep.proxlib=unknown +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.17&l=fabric +dep.controlling=lmlQP29s +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.17&l=fabric +dep.searchables=unknown diff --git a/versions/1.18.1/gradle.properties b/versions/1.18.1/gradle.properties index a3ed03c..75c36bd 100644 --- a/versions/1.18.1/gradle.properties +++ b/versions/1.18.1/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.18.1-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.18.1&l=fabric dep.geckolib=unknown # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.18.1&l=fabric -dep.proxlib=unknown \ No newline at end of file +dep.proxlib=unknown +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.18.1&l=fabric +dep.controlling=Rp48Zp8p +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.18.1&l=fabric +dep.searchables=unknown diff --git a/versions/1.18.2/gradle.properties b/versions/1.18.2/gradle.properties index 48774af..54d53b5 100644 --- a/versions/1.18.2/gradle.properties +++ b/versions/1.18.2/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.18.2-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.18.2&l=fabric dep.geckolib=3.0.57 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.18.2&l=fabric -dep.proxlib=unknown \ No newline at end of file +dep.proxlib=unknown +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.18.2&l=fabric +dep.controlling=dK5FXxsD +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.18.2&l=fabric +dep.searchables=usRpLoA5 diff --git a/versions/1.18/gradle.properties b/versions/1.18/gradle.properties index 03744f4..e652e67 100644 --- a/versions/1.18/gradle.properties +++ b/versions/1.18/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.18.1-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.18&l=fabric dep.geckolib=unknown # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.18&l=fabric -dep.proxlib=unknown \ No newline at end of file +dep.proxlib=unknown +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.18&l=fabric +dep.controlling=QOYsDWIJ +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.18&l=fabric +dep.searchables=unknown diff --git a/versions/1.19.1/gradle.properties b/versions/1.19.1/gradle.properties index 6a26e31..4e2d4c0 100644 --- a/versions/1.19.1/gradle.properties +++ b/versions/1.19.1/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.19.1-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.19.1&l=fabric dep.geckolib=3.1.14 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.19.1&l=fabric -dep.proxlib=unknown \ No newline at end of file +dep.proxlib=unknown +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.19.1&l=fabric +dep.controlling=WfFtQ8gK +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.19.1&l=fabric +dep.searchables=o21YP3As diff --git a/versions/1.19.2/gradle.properties b/versions/1.19.2/gradle.properties index 0e4bec1..b56a156 100644 --- a/versions/1.19.2/gradle.properties +++ b/versions/1.19.2/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.19.2-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.19.2&l=fabric dep.geckolib=3.1.40 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.19.2&l=fabric -dep.proxlib=unknown \ No newline at end of file +dep.proxlib=unknown +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.19.2&l=fabric +dep.controlling=7mGcFotW +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.19.2&l=fabric +dep.searchables=YtzPnOQv diff --git a/versions/1.19.3/gradle.properties b/versions/1.19.3/gradle.properties index 505dd36..746f166 100644 --- a/versions/1.19.3/gradle.properties +++ b/versions/1.19.3/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.19.3-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.19.3&l=fabric dep.geckolib=4.0.6 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.19.3&l=fabric -dep.proxlib=unknown \ No newline at end of file +dep.proxlib=unknown +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.19.3&l=fabric +dep.controlling=jsC1DP4W +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.19.3&l=fabric +dep.searchables=mhqbneQi diff --git a/versions/1.19.4/gradle.properties b/versions/1.19.4/gradle.properties index 3419c4f..cfffcfd 100644 --- a/versions/1.19.4/gradle.properties +++ b/versions/1.19.4/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.19.4-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.19.4&l=fabric dep.geckolib=4.2 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.19.4&l=fabric -dep.proxlib=unknown \ No newline at end of file +dep.proxlib=unknown +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.19.4&l=fabric +dep.controlling=yM2MSDnc +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.19.4&l=fabric +dep.searchables=ve9kcBZR diff --git a/versions/1.19/gradle.properties b/versions/1.19/gradle.properties index 2d9220a..18210be 100644 --- a/versions/1.19/gradle.properties +++ b/versions/1.19/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.19-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.19&l=fabric dep.geckolib=unknown # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.19&l=fabric -dep.proxlib=unknown \ No newline at end of file +dep.proxlib=unknown +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.19&l=fabric +dep.controlling=ZxUMXo6Z +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.19&l=fabric +dep.searchables=unknown diff --git a/versions/1.20.1/gradle.properties b/versions/1.20.1/gradle.properties index 525d79c..d82c804 100644 --- a/versions/1.20.1/gradle.properties +++ b/versions/1.20.1/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.20.1-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.20.1&l=fabric dep.geckolib=4.7.1.2 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.20.1&l=fabric -dep.proxlib=0.2.4+1.20.1 \ No newline at end of file +dep.proxlib=0.2.4+1.20.1 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.20.1&l=fabric +dep.controlling=6ipZLQSK +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.20.1&l=fabric +dep.searchables=eh4IBlu2 diff --git a/versions/1.20.2/gradle.properties b/versions/1.20.2/gradle.properties index e114995..5b18db2 100644 --- a/versions/1.20.2/gradle.properties +++ b/versions/1.20.2/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.20.2-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.20.2&l=fabric dep.geckolib=4.3.1 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.20.2&l=fabric -dep.proxlib=unknown \ No newline at end of file +dep.proxlib=unknown +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.20.2&l=fabric +dep.controlling=YsBamiIM +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.20.2&l=fabric +dep.searchables=gcqBz3gR diff --git a/versions/1.20.3/gradle.properties b/versions/1.20.3/gradle.properties index 71e656b..e950ec0 100644 --- a/versions/1.20.3/gradle.properties +++ b/versions/1.20.3/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.20.4-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.20.3&l=fabric dep.geckolib=4.3.1 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.20.3&l=fabric -dep.proxlib=0.2.4+1.20.4 \ No newline at end of file +dep.proxlib=0.2.4+1.20.4 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.20.3&l=fabric +dep.controlling=lJ4HK2Pd +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.20.3&l=fabric +dep.searchables=xTkfl3Dx diff --git a/versions/1.20.4/gradle.properties b/versions/1.20.4/gradle.properties index bdce9ef..d3bfc26 100644 --- a/versions/1.20.4/gradle.properties +++ b/versions/1.20.4/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.20.4-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.20.4&l=fabric dep.geckolib=4.4.4 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.20.4&l=fabric -dep.proxlib=0.2.4+1.20.4 \ No newline at end of file +dep.proxlib=0.2.4+1.20.4 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.20.4&l=fabric +dep.controlling=LfVlaR2u +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.20.4&l=fabric +dep.searchables=CESw4Xj5 diff --git a/versions/1.20.5/gradle.properties b/versions/1.20.5/gradle.properties index 7a576d6..2340cf8 100644 --- a/versions/1.20.5/gradle.properties +++ b/versions/1.20.5/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=unknown # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.20.5&l=fabric dep.geckolib=4.5 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.20.5&l=fabric -dep.proxlib=0.2.4+1.20.6 \ No newline at end of file +dep.proxlib=0.2.4+1.20.6 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.20.5&l=fabric +dep.controlling=a2IDHJHE +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.20.5&l=fabric +dep.searchables=LkVw14ih diff --git a/versions/1.20.6/gradle.properties b/versions/1.20.6/gradle.properties index 31a0af4..4c0b104 100644 --- a/versions/1.20.6/gradle.properties +++ b/versions/1.20.6/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.20.6-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.20.6&l=fabric dep.geckolib=4.5.4 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.20.6&l=fabric -dep.proxlib=0.2.4+1.20.6 \ No newline at end of file +dep.proxlib=0.2.4+1.20.6 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.20.6&l=fabric +dep.controlling=Nnw4hU10 +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.20.6&l=fabric +dep.searchables=8O5zvtt2 diff --git a/versions/1.20/gradle.properties b/versions/1.20/gradle.properties index 9a29a7e..7cfafe6 100644 --- a/versions/1.20/gradle.properties +++ b/versions/1.20/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.20.1-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.20&l=fabric dep.geckolib=4.2.2 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.20&l=fabric -dep.proxlib=0.2.4+1.20.1 \ No newline at end of file +dep.proxlib=0.2.4+1.20.1 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.20&l=fabric +dep.controlling=h9rn8nia +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.20&l=fabric +dep.searchables=KssuuPQj diff --git a/versions/1.21.1/gradle.properties b/versions/1.21.1/gradle.properties index 782ee1d..220ec53 100644 --- a/versions/1.21.1/gradle.properties +++ b/versions/1.21.1/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.21-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.21.1&l=fabric dep.geckolib=4.7.5.1 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.21.1&l=fabric -dep.proxlib=0.2.4+1.21 \ No newline at end of file +dep.proxlib=0.2.4+1.21 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.21.1&l=fabric +dep.controlling=hGJDoW2W +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.1&l=fabric +dep.searchables=tRdr8Bg3 diff --git a/versions/1.21.10/gradle.properties b/versions/1.21.10/gradle.properties index 2a6842a..0493efd 100644 --- a/versions/1.21.10/gradle.properties +++ b/versions/1.21.10/gradle.properties @@ -22,3 +22,7 @@ dep.yacl=3.8.0+1.21.9-fabric dep.replaymod=1.21.7-2.6.23 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.21.10&l=fabric dep.geckolib=5.3-alpha-1 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.21.10&l=fabric +dep.controlling=FEy417jo +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.10&l=fabric +dep.searchables=tV7Ai2Tq diff --git a/versions/1.21.11/gradle.properties b/versions/1.21.11/gradle.properties new file mode 100644 index 0000000..59e7353 --- /dev/null +++ b/versions/1.21.11/gradle.properties @@ -0,0 +1,28 @@ +# Versioned Properties +# Tip: You can set any dependency value to "[UPDATE]" +# and reload Gradle to update only it's value. + +# Fabric Properties, check https://fabricmc.net/develop/ +build.yarn=1.21.11+build.3 +build.fabric_api=0.140.2+1.21.11 +build.fabric-permissions-api = 0.6.0 + +# Additional Dependencies Properties +# cloth-config, check https://modrinth.com/mod/cloth-config/versions?g=1.21.11&l=fabric +dep.cloth-config=21.11.153+fabric +# flashback, check https://modrinth.com/mod/flashback/versions?g=1.21.11&l=fabric +dep.flashback=0.39.1 +# proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.21.11&l=fabric +dep.proxlib=0.2.4+1.21 +# modmenu, check https://modrinth.com/mod/modmenu/versions?g=1.21.11&l=fabric +dep.modmenu=17.0.0-beta.1 +# yacl, check https://modrinth.com/mod/yacl/versions?g=1.21.11&l=fabric +dep.yacl=3.8.1+1.21.11-fabric +# replaymod, check https://modrinth.com/mod/replaymod/versions?g=1.21.11&l=fabric +dep.replaymod=1.21.11-2.6.25 +# geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.21.11&l=fabric +dep.geckolib=5.4-alpha-1 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.21.11&l=fabric +dep.controlling=A6W4m3vi +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.11&l=fabric +dep.searchables=lBaUf76M diff --git a/versions/1.21.2/gradle.properties b/versions/1.21.2/gradle.properties index fe302f8..3f37f0a 100644 --- a/versions/1.21.2/gradle.properties +++ b/versions/1.21.2/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.21.2-2.6.21 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.21.2&l=fabric dep.geckolib=unknown # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.21.2&l=fabric -dep.proxlib=0.2.4+1.21 \ No newline at end of file +dep.proxlib=0.2.4+1.21 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.21.2&l=fabric +dep.controlling=2siFLP0e +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.2&l=fabric +dep.searchables=MzkwDfbe diff --git a/versions/1.21.3/gradle.properties b/versions/1.21.3/gradle.properties index 5a1a3f6..b7116c2 100644 --- a/versions/1.21.3/gradle.properties +++ b/versions/1.21.3/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.21.2-2.6.21 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.21.3&l=fabric dep.geckolib=4.7.1 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.21.3&l=fabric -dep.proxlib=0.2.4+1.21 \ No newline at end of file +dep.proxlib=0.2.4+1.21 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.21.3&l=fabric +dep.controlling=7uMjHmML +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.3&l=fabric +dep.searchables=f7NEJ73Z diff --git a/versions/1.21.4/gradle.properties b/versions/1.21.4/gradle.properties index 4cc7f16..c00d6f1 100644 --- a/versions/1.21.4/gradle.properties +++ b/versions/1.21.4/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.21.4-2.6.21 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.21.4&l=fabric dep.geckolib=4.8.4 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.21.4&l=fabric -dep.proxlib=0.2.4+1.21 \ No newline at end of file +dep.proxlib=0.2.4+1.21 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.21.4&l=fabric +dep.controlling=sLtmudOk +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.4&l=fabric +dep.searchables=7QUINkOj diff --git a/versions/1.21.5/gradle.properties b/versions/1.21.5/gradle.properties index 7736d3e..d3da44e 100644 --- a/versions/1.21.5/gradle.properties +++ b/versions/1.21.5/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.21.4-2.6.21 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.21.5&l=fabric dep.geckolib=5.0-alpha1 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.21.5&l=fabric -dep.proxlib=0.2.4+1.21 \ No newline at end of file +dep.proxlib=0.2.4+1.21 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.21.5&l=fabric +dep.controlling=3qTTC7U1 +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.5&l=fabric +dep.searchables=Z4JnRLbU diff --git a/versions/1.21.6/gradle.properties b/versions/1.21.6/gradle.properties index 06a2f58..ea4ddd5 100644 --- a/versions/1.21.6/gradle.properties +++ b/versions/1.21.6/gradle.properties @@ -21,4 +21,8 @@ dep.yacl=3.7.1+1.21.6-fabric # replaymod, check https://modrinth.com/mod/replaymod/versions?g=1.21.6&l=fabric dep.replaymod=1.21.7-2.6.23 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.21.6&l=fabric -dep.geckolib=5.1.0 \ No newline at end of file +dep.geckolib=5.1.0 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.21.6&l=fabric +dep.controlling=IzCLUaM4 +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.6&l=fabric +dep.searchables=shmjV0gp diff --git a/versions/1.21.7/gradle.properties b/versions/1.21.7/gradle.properties index 299a698..f84da9a 100644 --- a/versions/1.21.7/gradle.properties +++ b/versions/1.21.7/gradle.properties @@ -22,3 +22,7 @@ dep.yacl=3.7.1+1.21.6-fabric dep.replaymod=1.21.7-2.6.23 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.21.7&l=fabric dep.geckolib=5.2.1 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.21.7&l=fabric +dep.controlling=rJyUf9kw +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.7&l=fabric +dep.searchables=SMSx9bul diff --git a/versions/1.21.8/gradle.properties b/versions/1.21.8/gradle.properties index 4f90271..ab54066 100644 --- a/versions/1.21.8/gradle.properties +++ b/versions/1.21.8/gradle.properties @@ -21,4 +21,8 @@ dep.yacl=3.7.1+1.21.6-fabric # replaymod, check https://modrinth.com/mod/replaymod/versions?g=1.21.8&l=fabric dep.replaymod=1.21.7-2.6.23 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.21.8&l=fabric -dep.geckolib=5.2.2 \ No newline at end of file +dep.geckolib=5.2.2 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.21.8&l=fabric +dep.controlling=15AHrwi3 +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.8&l=fabric +dep.searchables=LLzPBiwT diff --git a/versions/1.21.9/gradle.properties b/versions/1.21.9/gradle.properties index a1ceff3..95f182f 100644 --- a/versions/1.21.9/gradle.properties +++ b/versions/1.21.9/gradle.properties @@ -21,4 +21,8 @@ dep.yacl=3.8.0+1.21.9-fabric # replaymod, check https://modrinth.com/mod/replaymod/versions?g=1.21.9&l=fabric dep.replaymod=1.21.7-2.6.23 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.21.9&l=fabric -dep.geckolib=unknown \ No newline at end of file +dep.geckolib=unknown +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.21.9&l=fabric +dep.controlling=gu0M6XOF +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.9&l=fabric +dep.searchables=WkSxSOMO diff --git a/versions/1.21/gradle.properties b/versions/1.21/gradle.properties index 576541a..7990210 100644 --- a/versions/1.21/gradle.properties +++ b/versions/1.21/gradle.properties @@ -21,4 +21,8 @@ dep.replaymod=1.21-2.6.20 # geckolib, check https://modrinth.com/mod/geckolib/versions?g=1.21&l=fabric dep.geckolib=4.5.8 # proxlib, check https://modrinth.com/mod/proxlib/versions?g=1.21&l=fabric -dep.proxlib=0.2.4+1.21 \ No newline at end of file +dep.proxlib=0.2.4+1.21 +# controlling, check https://modrinth.com/mod/controlling/versions?g=1.21&l=fabric +dep.controlling=xl0PX3KR +# searchables, check https://modrinth.com/mod/searchables/versions?g=1.21&l=fabric +dep.searchables=8zrcFuRP From aeaff815e6e0bcee73180f4c6ba298866e7c866b Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Sun, 28 Dec 2025 18:42:06 +0300 Subject: [PATCH 06/21] Update language and language info (Added Germany, Polish and French) --- patpat-languages-files | 2 +- src/main/resources/fabric.mod.json | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/patpat-languages-files b/patpat-languages-files index 1bf14dd..5650bf6 160000 --- a/patpat-languages-files +++ b/patpat-languages-files @@ -1 +1 @@ -Subproject commit 1bf14ddb1fbdb4c8950ba614b11cbb9352312319 +Subproject commit 5650bf6f4877d1288344cfb0675aa5744d509f7c diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index da276c7..81e28d2 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -43,9 +43,12 @@ ], "custom": { "translators": { - "okunamayanad": "Turkish (24%)", + "TastyPommesLul": "Germany", + "Hamka": "Polish", "MrLemonHog": "Ukrainian", - "Balojan": "Vietnamese (46%)" + "Balojan": "Vietnamese (46%)", + "okunamayanad": "Turkish (25%)", + "Gallium": "French (19%)" }, "modmenu": { "links": { From f498a44611eefebfb0b9be8ede9682ec4d28c0e9 Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Sun, 28 Dec 2025 22:10:42 +0300 Subject: [PATCH 07/21] Added debug config --- build.gradle | 23 +- .../client/config/PatPatDebugConfig.java | 64 +++ .../client/render/PatPatClientRenderer.java | 8 +- .../common/config/PatPatConfigManager.java | 3 + .../lopymine/patpat/modmenu/PatConfig.java | 428 ++++++++++-------- 5 files changed, 322 insertions(+), 204 deletions(-) create mode 100644 src/main/java/net/lopymine/patpat/client/config/PatPatDebugConfig.java diff --git a/build.gradle b/build.gradle index da72cdc..159eb5a 100644 --- a/build.gradle +++ b/build.gradle @@ -138,6 +138,17 @@ stonecutter { replace("ControllingOptionsScreen", "ControlsSettingsGuiNew") } + replacements.string(current.parsed >= "1.18") { + replace("KeyBindsScreenAccessor", "KeyBindsScreenAccessor") + replace("KeyBindsScreenMixin", "KeyBindsScreenMixin") + replace("NewKeyBindsScreen", "NewKeyBindsScreen") + replace("ControlsScreen", "KeyBindsScreen") + } + + replacements.string(current.parsed >= "1.21") { + replace("import net.minecraft.client.gui.screens.controls.*;", "import net.minecraft.client.gui.screens.options.controls.*;") + } + replacements.string(current.parsed >= "1.21.9") { replace("int keyCode, int scanCode, int modifiers", "net.minecraft.client.input.KeyEvent event") replace("double mouseX, double mouseY, int button", "net.minecraft.client.input.MouseButtonEvent event, boolean bl") @@ -149,16 +160,8 @@ stonecutter { replace(".location()", ".identifier()") } - replacements.string(current.parsed >= "1.18") { - replace("KeyBindsScreenAccessor", "KeyBindsScreenAccessor") - replace("KeyBindsScreenMixin", "KeyBindsScreenMixin") - replace("NewKeyBindsScreen", "NewKeyBindsScreen") - replace("ControlsScreen", "KeyBindsScreen") - } - - replacements.string(current.parsed >= "1.21") { - replace("import net.minecraft.client.gui.screens.controls.*;", "import net.minecraft.client.gui.screens.options.controls.*;") - } + // TODO: Сделать эту опцию доступной только при использовании Minecraft Client/Server, либо отдельный запуск, либо с атрибутом в gradle + constants["debug_mode"] = false } diff --git a/src/main/java/net/lopymine/patpat/client/config/PatPatDebugConfig.java b/src/main/java/net/lopymine/patpat/client/config/PatPatDebugConfig.java new file mode 100644 index 0000000..a73078f --- /dev/null +++ b/src/main/java/net/lopymine/patpat/client/config/PatPatDebugConfig.java @@ -0,0 +1,64 @@ +package net.lopymine.patpat.client.config; + +//? if debug_mode { + +import lombok.*; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; + +import net.lopymine.patpat.PatLogger; +import net.lopymine.patpat.PatPat; +import net.lopymine.patpat.client.PatPatClient; +import net.lopymine.patpat.common.config.PatPatConfigManager; +import net.lopymine.patpat.utils.CodecUtils; +import net.lopymine.patpat.utils.ConfigUtils; + +import java.io.File; +import java.util.concurrent.CompletableFuture; +import java.util.function.Supplier; + +import static net.lopymine.patpat.utils.CodecUtils.option; + +@Setter +@Getter +@AllArgsConstructor +public class PatPatDebugConfig { + + public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( + option("selfPat", false, Codec.BOOL, PatPatDebugConfig::isSelfPat) + ).apply(inst, PatPatDebugConfig::new)); + + private static final PatLogger LOGGER = PatPatClient.LOGGER.extend("Debug-Config"); + private static final File CONFIG_FILE = PatPatConfigManager.CONFIG_PATH.resolve(PatPat.MOD_ID + "-debug.json5").toFile(); + private static PatPatDebugConfig instance; + + private boolean selfPat; + + public static PatPatDebugConfig getInstance() { + return instance == null ? reload() : instance; + } + + public static PatPatDebugConfig reload() { + instance = PatPatDebugConfig.read(); + return instance; + } + + public static Supplier getNewInstance() { + return () -> CodecUtils.parseNewInstanceHacky(CODEC); + } + + private static PatPatDebugConfig read() { + return ConfigUtils.readConfig(CODEC, CONFIG_FILE, LOGGER); + } + + public void saveAsync() { + CompletableFuture.runAsync(this::save); + } + + public void save() { + ConfigUtils.saveConfig(this, CODEC, CONFIG_FILE, LOGGER); + } + +} +//?} diff --git a/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java b/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java index 5289933..7361cfc 100644 --- a/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java +++ b/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java @@ -2,6 +2,8 @@ import lombok.experimental.ExtensionMethod; import net.fabricmc.loader.api.FabricLoader; + +import net.lopymine.patpat.client.config.*; import net.lopymine.patpat.client.config.sub.PatPatClientVisualConfig; import net.lopymine.patpat.client.render.feature.*; import net.minecraft.client.Camera; @@ -17,9 +19,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.lopymine.patpat.client.config.PatPatClientConfig; import net.lopymine.patpat.client.config.resourcepack.*; -import net.lopymine.patpat.client.config.PatPatClientStatsConfig; import net.lopymine.patpat.client.manager.PatPatClientManager; import net.lopymine.patpat.client.packet.*; import net.lopymine.patpat.client.resourcepack.PatPatClientSoundManager; @@ -129,12 +129,14 @@ public static void register() { } } + //? if debug_mode { LocalPlayer player = Minecraft.getInstance().player; - if (!empty && player != null && FabricLoader.getInstance().isDevelopmentEnvironment() && config.getMainConfig().isDebugLogEnabled()) { + if (!empty && player != null && PatPatDebugConfig.getInstance().isSelfPat()) { PatPatClientManager.pat(player, PlayerConfig.currentSession()); ReplayModCompat.onPat(player.getId(), player.getId()); FlashbackCompat.onPat(player.getId(), player.getId()); } + //?} if (!frozen) { PatPatClientManager.tickEntities(); diff --git a/src/main/java/net/lopymine/patpat/common/config/PatPatConfigManager.java b/src/main/java/net/lopymine/patpat/common/config/PatPatConfigManager.java index b026fb4..0e080c0 100644 --- a/src/main/java/net/lopymine/patpat/common/config/PatPatConfigManager.java +++ b/src/main/java/net/lopymine/patpat/common/config/PatPatConfigManager.java @@ -44,5 +44,8 @@ public static void reloadClient() { PatPatClientConfig config = PatPatClientConfig.reload(); PatPatClientProxLibServersWhitelistConfig.getInstance().reload(); PatPatClient.LOGGER.setDebugMode(config.getMainConfig().isDebugLogEnabled()); + + //? if debug_mode + net.lopymine.patpat.client.config.PatPatDebugConfig.reload(); } } diff --git a/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java b/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java index d074686..70c4ebd 100644 --- a/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java +++ b/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java @@ -1,16 +1,25 @@ package net.lopymine.patpat.modmenu; -import java.util.*; import lombok.*; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; + import net.lopymine.patpat.client.config.PatPatClientConfig; + import net.lopymine.patpat.client.config.list.PatPatClientProxLibServersWhitelistConfig; import net.lopymine.patpat.client.config.sub.PatPatClientFunConfig; import net.lopymine.patpat.modmenu.common.*; -import net.lopymine.patpat.modmenu.common.image.*; +import net.lopymine.patpat.modmenu.common.image.ImageType; +import net.lopymine.patpat.modmenu.common.image.PatImage; import net.lopymine.patpat.modmenu.common.option.*; -import net.lopymine.patpat.utils.*; -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.Component; +import net.lopymine.patpat.utils.ModMenuUtils; +import net.lopymine.patpat.utils.TextUtils; + +import java.util.ArrayList; +import java.util.List; + +//? if debug_mode +import net.lopymine.patpat.client.config.PatPatDebugConfig; @Getter @Builder @@ -23,220 +32,257 @@ public class PatConfig { public static PatConfig generate() { PatPatClientConfig config = PatPatClientConfig.getInstance(); - PatPatClientConfig defConfig = PatPatClientConfig.getNewInstance().get(); + Runnable saveFunction = config::saveAsync; + + //? if debug_mode { + PatPatDebugConfig debugConfig = PatPatDebugConfig.getInstance(); + saveFunction = () -> { + config.saveAsync(); + debugConfig.saveAsync(); + }; + //?} + return PatConfig.builder() .title(ModMenuUtils.getModTitle()) - .onSave(config::saveAsync) - .addCategory(PatCategory.builder() + .onSave(saveFunction) + .addCategory(generateMainCategory(config)) + //? if debug_mode + .addCategory(generateDebugCategory(debugConfig)) + .build(); + } + + private static PatCategory generateMainCategory(PatPatClientConfig config) { + PatPatClientConfig defConfig = PatPatClientConfig.getNewInstance().get(); + + return PatCategory.builder() + .key("main") + .addElement(PatGroup.builder() .key("main") - .addElement(PatGroup.builder() - .key("main") - .addOption(BooleanOption.builder() - .key("enable_mod") - .defaultValue(defConfig.getMainConfig().isModEnabled()) - .getter(() -> config.getMainConfig().isModEnabled()) - .setter(config.getMainConfig()::setModEnabled) - .build() - ) - .addOption(BooleanOption.builder() - .key("debug_log_enabled") - .defaultValue(defConfig.getMainConfig().isDebugLogEnabled()) - .getter(() -> config.getMainConfig().isDebugLogEnabled()) - .setter(config.getMainConfig()::setDebugLogEnabled) - .build() - ) + .addOption(BooleanOption.builder() + .key("enable_mod") + .defaultValue(defConfig.getMainConfig().isModEnabled()) + .getter(() -> config.getMainConfig().isModEnabled()) + .setter(config.getMainConfig()::setModEnabled) .build() ) - .addElement(PatGroup.builder() - .key("custom_animations") - .addOption(BooleanOption.builder() - .key("skip_outdated_animations_enabled") - .defaultValue(defConfig.getResourcePacksConfig().isSkipOldAnimationsEnabled()) - .getter(() -> config.getResourcePacksConfig().isSkipOldAnimationsEnabled()) - .setter(config.getResourcePacksConfig()::setSkipOldAnimationsEnabled) - .build() - ) + .addOption(BooleanOption.builder() + .key("debug_log_enabled") + .defaultValue(defConfig.getMainConfig().isDebugLogEnabled()) + .getter(() -> config.getMainConfig().isDebugLogEnabled()) + .setter(config.getMainConfig()::setDebugLogEnabled) .build() ) - .addElement(PatGroup.builder() - .key("sound") - .addOption(BooleanOption.builder() - .key("enable_sounds") - .defaultValue(defConfig.getSoundsConfig().isSoundsEnabled()) - .getter(() -> config.getSoundsConfig().isSoundsEnabled()) - .setter(config.getSoundsConfig()::setSoundsEnabled) - .build() - ) - .addOption(SliderNumberOption.builder() - .key("sounds_volume") - .defaultValue(defConfig.getSoundsConfig().getSoundsVolume()) - .getter(() -> config.getSoundsConfig().getSoundsVolume()) - .setter(config.getSoundsConfig()::setSoundsVolume) - .min(0F).max(2F).step(0.01F) - .build() - ) + .build() + ) + .addElement(PatGroup.builder() + .key("custom_animations") + .addOption(BooleanOption.builder() + .key("skip_outdated_animations_enabled") + .defaultValue(defConfig.getResourcePacksConfig().isSkipOldAnimationsEnabled()) + .getter(() -> config.getResourcePacksConfig().isSkipOldAnimationsEnabled()) + .setter(config.getResourcePacksConfig()::setSkipOldAnimationsEnabled) .build() ) - .addElement(PatGroup.builder() - .key("visual") - .addOption(BooleanOption.builder() - .key("hiding_nickname_enabled") - .defaultValue(defConfig.getVisualConfig().isHidingNicknameEnabled()) - .getter(() -> config.getVisualConfig().isHidingNicknameEnabled()) - .setter(config.getVisualConfig()::setHidingNicknameEnabled) - .build() - ) - .addOption(BooleanOption.builder() - .key("client_swing_hand_enabled") - .defaultValue(defConfig.getVisualConfig().isClientSwingHandEnabled()) - .getter(() -> config.getVisualConfig().isClientSwingHandEnabled()) - .setter(config.getVisualConfig()::setClientSwingHandEnabled) - .build() - ) - .addOption(BooleanOption.builder() - .key("server_swing_hand_enabled") - .defaultValue(defConfig.getVisualConfig().isServerSwingHandEnabled()) - .getter(() -> config.getVisualConfig().isServerSwingHandEnabled()) - .setter(config.getVisualConfig()::setServerSwingHandEnabled) - .build() - ) - .addOption(SliderNumberOption.builder() - .key("animation_offset_x") - .defaultValue(defConfig.getVisualConfig().getAnimationOffsets().getX()) - .getter(() -> config.getVisualConfig().getAnimationOffsets().getX()) - .setter(config.getVisualConfig().getAnimationOffsets()::setX) - .min(-5F).max(5F).step(0.01F) - .addImage(PatImage.builder() - .resource(ModMenuUtils.getContentId("animation_offset_x.png")) - .type(ImageType.IMAGE) - .width(500) - .height(500) - .build() - ) - .build() - ) - .addOption(SliderNumberOption.builder() - .key("animation_offset_y") - .defaultValue(defConfig.getVisualConfig().getAnimationOffsets().getY()) - .getter(() -> config.getVisualConfig().getAnimationOffsets().getY()) - .setter(config.getVisualConfig().getAnimationOffsets()::setY) - .min(-5F).max(5F).step(0.01F) - .addImage(PatImage.builder() - .resource(ModMenuUtils.getContentId("animation_offset_y.png")) - .type(ImageType.IMAGE) - .width(500) - .height(500) - .build() - ) - .build() - ) - .addOption(SliderNumberOption.builder() - .key("animation_offset_z") - .defaultValue(defConfig.getVisualConfig().getAnimationOffsets().getZ()) - .getter(() -> config.getVisualConfig().getAnimationOffsets().getZ()) - .setter(config.getVisualConfig().getAnimationOffsets()::setZ) - .min(-5F).max(5F).step(0.01F) - .addImage(PatImage.builder() - .resource(ModMenuUtils.getContentId("animation_offset_z.png")) - .type(ImageType.IMAGE) - .width(500) - .height(500) - .build() - ) - .build() - ) - .addOption(BooleanOption.builder() - .key("camera_shacking") - .defaultValue(defConfig.getVisualConfig().isCameraShackingEnabled()) - .getter(() -> config.getVisualConfig().isCameraShackingEnabled()) - .setter(config.getVisualConfig()::setCameraShackingEnabled) - .build() - ) - .addOption(NumberOption.builder() - .key("pat_weight") - .defaultValue(defConfig.getVisualConfig().getPatWeight()) - .getter(() -> config.getVisualConfig().getPatWeight()) - .setter(config.getVisualConfig()::setPatWeight) - .min(0F).max(5F) - .build() - ) + .build() + ) + .addElement(PatGroup.builder() + .key("sound") + .addOption(BooleanOption.builder() + .key("enable_sounds") + .defaultValue(defConfig.getSoundsConfig().isSoundsEnabled()) + .getter(() -> config.getSoundsConfig().isSoundsEnabled()) + .setter(config.getSoundsConfig()::setSoundsEnabled) .build() ) - .addElement(PatGroup.builder() - .key("multiplayer") - .addOption(BooleanOption.builder() - .key("pat_me_enabled") - .defaultValue(defConfig.getMultiPlayerConfig().isPatMeEnabled()) - .getter(() -> config.getMultiPlayerConfig().isPatMeEnabled()) - .setter(config.getMultiPlayerConfig()::setPatMeEnabled) - .build() - ) - .addOption(BooleanOption.builder() - .key("bypass_server_animations_priority_enabled") - .defaultValue(defConfig.getMultiPlayerConfig().isBypassServerResourcePackPriorityEnabled()) - .getter(() -> config.getMultiPlayerConfig().isBypassServerResourcePackPriorityEnabled()) - .setter(config.getMultiPlayerConfig()::setBypassServerResourcePackEnabled) - .build() - ) + .addOption(SliderNumberOption.builder() + .key("sounds_volume") + .defaultValue(defConfig.getSoundsConfig().getSoundsVolume()) + .getter(() -> config.getSoundsConfig().getSoundsVolume()) + .setter(config.getSoundsConfig()::setSoundsVolume) + .min(0F).max(2F).step(0.01F) .build() ) - .addElement(PatGroup.builder() - .key("fun") - .addOption(EnumOption.builder() - .key("pvp_mode") - .enumClass(PatPatClientFunConfig.PvpMode.class) - .enumNameProvider(PatPatClientFunConfig.PvpMode::getText) - .defaultValue(defConfig.getFunConfig().getPvpMode()) - .getter(() -> config.getFunConfig().getPvpMode()) - .setter(config.getFunConfig()::setPvpMode) - .build() - ) + .build() + ) + .addElement(PatGroup.builder() + .key("visual") + .addOption(BooleanOption.builder() + .key("hiding_nickname_enabled") + .defaultValue(defConfig.getVisualConfig().isHidingNicknameEnabled()) + .getter(() -> config.getVisualConfig().isHidingNicknameEnabled()) + .setter(config.getVisualConfig()::setHidingNicknameEnabled) .build() ) - //? if proxlib { - .addElement(PatGroup.builder() - .key("proximity_packets") - .addOption(BooleanOption.builder() - .name(ModMenuUtils.getOptionName("proximity_packets_enabled")) - .description(getDescriptionWithWarn("proximity_packets_enabled")) - .defaultValue(defConfig.getProximityPacketsConfig().isProximityPacketsEnabled()) - .getter(() -> config.getProximityPacketsConfig().isProximityPacketsEnabled()) - .setter(config.getProximityPacketsConfig()::setProximityPacketsEnabled) - .build() - ) - .addOption(SliderNumberOption.builder() - .key("max_packets_per_second") - .defaultValue(defConfig.getProximityPacketsConfig().getMaxPacketsPerSecond()) - .getter(() -> config.getProximityPacketsConfig().getMaxPacketsPerSecond()) - .setter(config.getProximityPacketsConfig()::setMaxPacketsPerSecond) - .min(1).max(50).step(1) + .addOption(BooleanOption.builder() + .key("client_swing_hand_enabled") + .defaultValue(defConfig.getVisualConfig().isClientSwingHandEnabled()) + .getter(() -> config.getVisualConfig().isClientSwingHandEnabled()) + .setter(config.getVisualConfig()::setClientSwingHandEnabled) + .build() + ) + .addOption(BooleanOption.builder() + .key("server_swing_hand_enabled") + .defaultValue(defConfig.getVisualConfig().isServerSwingHandEnabled()) + .getter(() -> config.getVisualConfig().isServerSwingHandEnabled()) + .setter(config.getVisualConfig()::setServerSwingHandEnabled) + .build() + ) + .addOption(SliderNumberOption.builder() + .key("animation_offset_x") + .defaultValue(defConfig.getVisualConfig().getAnimationOffsets().getX()) + .getter(() -> config.getVisualConfig().getAnimationOffsets().getX()) + .setter(config.getVisualConfig().getAnimationOffsets()::setX) + .min(-5F).max(5F).step(0.01F) + .addImage(PatImage.builder() + .resource(ModMenuUtils.getContentId("animation_offset_x.png")) + .type(ImageType.IMAGE) + .width(500) + .height(500) .build() ) - .addOption(BooleanOption.builder() - .name(ModMenuUtils.getOptionName("proximity_packets_list_is_blacklist")) - .description(getDescriptionWithWarn("proximity_packets_list_is_blacklist")) - .defaultValue(defConfig.getProximityPacketsConfig().isBlacklist()) - .getter(() -> config.getProximityPacketsConfig().isBlacklist()) - .setter(config.getProximityPacketsConfig()::setBlacklist) + .build() + ) + .addOption(SliderNumberOption.builder() + .key("animation_offset_y") + .defaultValue(defConfig.getVisualConfig().getAnimationOffsets().getY()) + .getter(() -> config.getVisualConfig().getAnimationOffsets().getY()) + .setter(config.getVisualConfig().getAnimationOffsets()::setY) + .min(-5F).max(5F).step(0.01F) + .addImage(PatImage.builder() + .resource(ModMenuUtils.getContentId("animation_offset_y.png")) + .type(ImageType.IMAGE) + .width(500) + .height(500) .build() ) - .addOption(PatListOption.builder() - .key("proximity_packets_servers_whitelist") - .defaultValue(PatPatClientProxLibServersWhitelistConfig.DEFAULT_VALUES) - .getter(() -> new ArrayList<>(PatPatClientProxLibServersWhitelistConfig.getInstance().getValues())) - .setter(PatPatClientProxLibServersWhitelistConfig::rewriteServersList) - .initial("") - .maxEntries(2000) + .build() + ) + .addOption(SliderNumberOption.builder() + .key("animation_offset_z") + .defaultValue(defConfig.getVisualConfig().getAnimationOffsets().getZ()) + .getter(() -> config.getVisualConfig().getAnimationOffsets().getZ()) + .setter(config.getVisualConfig().getAnimationOffsets()::setZ) + .min(-5F).max(5F).step(0.01F) + .addImage(PatImage.builder() + .resource(ModMenuUtils.getContentId("animation_offset_z.png")) + .type(ImageType.IMAGE) + .width(500) + .height(500) .build() ) .build() ) - //?} + .addOption(BooleanOption.builder() + .key("camera_shacking") + .defaultValue(defConfig.getVisualConfig().isCameraShackingEnabled()) + .getter(() -> config.getVisualConfig().isCameraShackingEnabled()) + .setter(config.getVisualConfig()::setCameraShackingEnabled) + .build() + ) + .addOption(NumberOption.builder() + .key("pat_weight") + .defaultValue(defConfig.getVisualConfig().getPatWeight()) + .getter(() -> config.getVisualConfig().getPatWeight()) + .setter(config.getVisualConfig()::setPatWeight) + .min(0F).max(5F) + .build() + ) + .build() + ) + .addElement(PatGroup.builder() + .key("multiplayer") + .addOption(BooleanOption.builder() + .key("pat_me_enabled") + .defaultValue(defConfig.getMultiPlayerConfig().isPatMeEnabled()) + .getter(() -> config.getMultiPlayerConfig().isPatMeEnabled()) + .setter(config.getMultiPlayerConfig()::setPatMeEnabled) + .build() + ) + .addOption(BooleanOption.builder() + .key("bypass_server_animations_priority_enabled") + .defaultValue(defConfig.getMultiPlayerConfig().isBypassServerResourcePackPriorityEnabled()) + .getter(() -> config.getMultiPlayerConfig().isBypassServerResourcePackPriorityEnabled()) + .setter(config.getMultiPlayerConfig()::setBypassServerResourcePackEnabled) + .build() + ) + .build() + ) + .addElement(PatGroup.builder() + .key("fun") + .addOption(EnumOption.builder() + .key("pvp_mode") + .enumClass(PatPatClientFunConfig.PvpMode.class) + .enumNameProvider(PatPatClientFunConfig.PvpMode::getText) + .defaultValue(defConfig.getFunConfig().getPvpMode()) + .getter(() -> config.getFunConfig().getPvpMode()) + .setter(config.getFunConfig()::setPvpMode) + .build() + ) + .build() + ) + //? if proxlib { + .addElement(PatGroup.builder() + .key("proximity_packets") + .addOption(BooleanOption.builder() + .name(ModMenuUtils.getOptionName("proximity_packets_enabled")) + .description(getDescriptionWithWarn("proximity_packets_enabled")) + .defaultValue(defConfig.getProximityPacketsConfig().isProximityPacketsEnabled()) + .getter(() -> config.getProximityPacketsConfig().isProximityPacketsEnabled()) + .setter(config.getProximityPacketsConfig()::setProximityPacketsEnabled) + .build() + ) + .addOption(SliderNumberOption.builder() + .key("max_packets_per_second") + .defaultValue(defConfig.getProximityPacketsConfig().getMaxPacketsPerSecond()) + .getter(() -> config.getProximityPacketsConfig().getMaxPacketsPerSecond()) + .setter(config.getProximityPacketsConfig()::setMaxPacketsPerSecond) + .min(1).max(50).step(1) + .build() + ) + .addOption(BooleanOption.builder() + .name(ModMenuUtils.getOptionName("proximity_packets_list_is_blacklist")) + .description(getDescriptionWithWarn("proximity_packets_list_is_blacklist")) + .defaultValue(defConfig.getProximityPacketsConfig().isBlacklist()) + .getter(() -> config.getProximityPacketsConfig().isBlacklist()) + .setter(config.getProximityPacketsConfig()::setBlacklist) + .build() + ) + .addOption(PatListOption.builder() + .key("proximity_packets_servers_whitelist") + .defaultValue(PatPatClientProxLibServersWhitelistConfig.DEFAULT_VALUES) + .getter(() -> new ArrayList<>(PatPatClientProxLibServersWhitelistConfig.getInstance().getValues())) + .setter(PatPatClientProxLibServersWhitelistConfig::rewriteServersList) + .initial("") + .maxEntries(2000) + .build() + ) + .build() + ) + //?} + .build(); + } + + //? if debug_mode { + public static PatCategory generateDebugCategory(PatPatDebugConfig debugConfig) { + PatPatDebugConfig defDebugConfig = PatPatDebugConfig.getNewInstance().get(); + + return PatCategory.builder() + .key("debug") + .addElement(PatGroup.builder() + .key("main") + .addOption(BooleanOption.builder() + .key("selfPat") + .defaultValue(defDebugConfig.isSelfPat()) + .getter(debugConfig::isSelfPat) + .setter(debugConfig::setSelfPat) + .build() + ) .build() ) .build(); } + //?} public static PatDescription getDescriptionWithWarn(String key) { return PatDescription.of( From c877a01e74236af046ab2d848cf5c43a0d92f340 Mon Sep 17 00:00:00 2001 From: LopyMine Date: Mon, 29 Dec 2025 02:36:16 +0300 Subject: [PATCH 08/21] damn it --- build.gradle | 10 +++++--- patpat-languages-files | 2 +- .../client/config/PatPatDebugConfig.java | 3 --- .../client/render/PatPatClientRenderer.java | 2 -- .../common/config/PatPatConfigManager.java | 6 ++--- .../lopymine/patpat/modmenu/PatConfig.java | 25 +++++++++++-------- 6 files changed, 25 insertions(+), 23 deletions(-) diff --git a/build.gradle b/build.gradle index 159eb5a..40c5cbf 100644 --- a/build.gradle +++ b/build.gradle @@ -63,6 +63,13 @@ repositories { } } +loom.runConfigs.configureEach { config -> + if (config.getEnvironment() == "client") { + config.vmArg("-Dpatpat.debug=true") + } +} + + dependencies { def mcVersion = stonecutter.current.version.toString() @@ -160,9 +167,6 @@ stonecutter { replace(".location()", ".identifier()") } - // TODO: Сделать эту опцию доступной только при использовании Minecraft Client/Server, либо отдельный запуск, либо с атрибутом в gradle - constants["debug_mode"] = false - } stonecutter.filters.exclude("**/*.accesswidener") diff --git a/patpat-languages-files b/patpat-languages-files index 5650bf6..c4c5558 160000 --- a/patpat-languages-files +++ b/patpat-languages-files @@ -1 +1 @@ -Subproject commit 5650bf6f4877d1288344cfb0675aa5744d509f7c +Subproject commit c4c5558b03ead619d754dcac99ed40798547459f diff --git a/src/main/java/net/lopymine/patpat/client/config/PatPatDebugConfig.java b/src/main/java/net/lopymine/patpat/client/config/PatPatDebugConfig.java index a73078f..2f169f6 100644 --- a/src/main/java/net/lopymine/patpat/client/config/PatPatDebugConfig.java +++ b/src/main/java/net/lopymine/patpat/client/config/PatPatDebugConfig.java @@ -1,7 +1,5 @@ package net.lopymine.patpat.client.config; -//? if debug_mode { - import lombok.*; import com.mojang.serialization.Codec; @@ -61,4 +59,3 @@ public void save() { } } -//?} diff --git a/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java b/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java index 7361cfc..b395dd5 100644 --- a/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java +++ b/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java @@ -129,14 +129,12 @@ public static void register() { } } - //? if debug_mode { LocalPlayer player = Minecraft.getInstance().player; if (!empty && player != null && PatPatDebugConfig.getInstance().isSelfPat()) { PatPatClientManager.pat(player, PlayerConfig.currentSession()); ReplayModCompat.onPat(player.getId(), player.getId()); FlashbackCompat.onPat(player.getId(), player.getId()); } - //?} if (!frozen) { PatPatClientManager.tickEntities(); diff --git a/src/main/java/net/lopymine/patpat/common/config/PatPatConfigManager.java b/src/main/java/net/lopymine/patpat/common/config/PatPatConfigManager.java index 0e080c0..22440f6 100644 --- a/src/main/java/net/lopymine/patpat/common/config/PatPatConfigManager.java +++ b/src/main/java/net/lopymine/patpat/common/config/PatPatConfigManager.java @@ -5,7 +5,7 @@ import net.lopymine.patpat.PatPat; import net.lopymine.patpat.client.PatPatClient; -import net.lopymine.patpat.client.config.PatPatClientConfig; +import net.lopymine.patpat.client.config.*; import net.lopymine.patpat.client.config.list.PatPatClientProxLibServersWhitelistConfig; import net.lopymine.patpat.client.config.migrate.PatPatClientConfigMigrateManager; import net.lopymine.patpat.server.config.*; @@ -44,8 +44,6 @@ public static void reloadClient() { PatPatClientConfig config = PatPatClientConfig.reload(); PatPatClientProxLibServersWhitelistConfig.getInstance().reload(); PatPatClient.LOGGER.setDebugMode(config.getMainConfig().isDebugLogEnabled()); - - //? if debug_mode - net.lopymine.patpat.client.config.PatPatDebugConfig.reload(); + PatPatDebugConfig.reload(); } } diff --git a/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java b/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java index 70c4ebd..40bb6e0 100644 --- a/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java +++ b/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java @@ -18,7 +18,6 @@ import java.util.ArrayList; import java.util.List; -//? if debug_mode import net.lopymine.patpat.client.config.PatPatDebugConfig; @Getter @@ -32,23 +31,19 @@ public class PatConfig { public static PatConfig generate() { PatPatClientConfig config = PatPatClientConfig.getInstance(); - Runnable saveFunction = config::saveAsync; - - //? if debug_mode { PatPatDebugConfig debugConfig = PatPatDebugConfig.getInstance(); - saveFunction = () -> { + + Runnable saveFunction = () -> { config.saveAsync(); debugConfig.saveAsync(); }; - //?} return PatConfig.builder() .title(ModMenuUtils.getModTitle()) .onSave(saveFunction) .addCategory(generateMainCategory(config)) - //? if debug_mode - .addCategory(generateDebugCategory(debugConfig)) + .addCategoryIf(generateDebugCategory(debugConfig), Boolean.getBoolean("patpat.debug")) .build(); } @@ -263,7 +258,6 @@ private static PatCategory generateMainCategory(PatPatClientConfig config) { .build(); } - //? if debug_mode { public static PatCategory generateDebugCategory(PatPatDebugConfig debugConfig) { PatPatDebugConfig defDebugConfig = PatPatDebugConfig.getNewInstance().get(); @@ -282,7 +276,6 @@ public static PatCategory generateDebugCategory(PatPatDebugConfig debugConfig) { ) .build(); } - //?} public static PatDescription getDescriptionWithWarn(String key) { return PatDescription.of( @@ -292,4 +285,16 @@ public static PatDescription getDescriptionWithWarn(String key) { .append(ModMenuUtils.getOptionDescription(key)) ); } + + public static class PatConfigBuilder { + + public PatConfigBuilder addCategoryIf(PatCategory category, boolean bl) { + if (!bl) { + return this; + } + this.addCategory(category); + return this; + } + + } } From 5073c5bb249e93909bec84df3b6a5fe478b1cf8f Mon Sep 17 00:00:00 2001 From: LopyMine Date: Sat, 3 Jan 2026 11:49:01 +0300 Subject: [PATCH 09/21] Fixed issue with Iris mod --- CHANGELOG.md | 11 ++--------- build.gradle | 6 ++++++ gradle.properties | 6 ++++-- src/main/java/net/lopymine/patpat/PatPat.java | 4 ++-- .../patpat/client/render/PatPatClientRenderer.java | 5 +++-- .../client/render/feature/PatFeatureRenderer.java | 3 +-- .../patpat/mixin/FeatureRenderDispatcherMixin.java | 8 +++++--- versions/1.21.11/gradle.properties | 4 ++++ 8 files changed, 27 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 158fe70..51c0578 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,3 @@ -# v1.2.4 Update +# v1.2.5 Update -- Ported to 1.21.11 -- Fixed interaction with mobs while patting them. So, your dog will no longer accidentally stand up or sit down. -- Added compatibility between Controlling and PatPat's keybinding. -- Fixed patting yourself, now it's only in development mode with "Debug Mode" enabled. -- Fixed bug with proximity_packets_list_is_blacklist translation -- Added better handling for pat packets, made by server. -- Updated translations. -- Little bug fixes. \ No newline at end of file +- Fixed issue with second pat animation with enabled shaders \ No newline at end of file diff --git a/build.gradle b/build.gradle index 40c5cbf..938378a 100644 --- a/build.gradle +++ b/build.gradle @@ -24,6 +24,7 @@ mossyDependencies { override("modCompileOnly", "flashback") override("modCompileOnly", "replaymod") + //override("modCompileOnly", "iris") // Fabric Permissions Api disable("fabric-permissions-api") @@ -108,6 +109,11 @@ dependencies { if (proxlibVersion != "unknown") { include(modApi("maven.modrinth:proxlib:${proxlibVersion}")) } + + // Requires Iris + modRuntimeOnly("org.antlr:antlr4-runtime:4.13.1") + modRuntimeOnly("io.github.douira:glsl-transformer:3.0.0-pre3") + modRuntimeOnly("org.anarres:jcpp:1.4.14") } // TODO: Добавить тесты на версию раньше, чем 1.18.2 diff --git a/gradle.properties b/gradle.properties index 31bf73a..076f834 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,7 +15,7 @@ dev.kikugie.stonecutter.hard_mode=true # Mod Properties data.mod_id = patpat data.mod_name = PatPat -data.mod_version = 1.2.4 +data.mod_version = 1.2.5 data.mod_group = net.lopymine.patpat data.mod_maven_group = net.lopymine @@ -29,7 +29,7 @@ data.client_config_version = 1.0.1 base.lombok_version = 1.18.42 # Multi-Versions Properties -multi_versions = 1.16.5 1.17 1.17.1 1.18 1.18.1 1.18.2 1.19 1.19.1 1.19.2 1.19.3 1.19.4 1.20 1.20.1 1.20.2 1.20.3 1.20.4 1.20.5 1.20.6 1.21 1.21.1 1.21.2 1.21.3 1.21.4 1.21.5 1.21.6 1.21.7 1.21.8 1.21.9 1.21.10 1.21.11 +multi_versions = 1.21.11 # Build Dependencies build.yarn = [VERSIONED] @@ -47,6 +47,8 @@ dep.flashback = [VERSIONED] dep.proxlib = [VERSIONED] dep.controlling = [VERSIONED] dep.searchables = [VERSIONED] +dep.iris = [VERSIONED] +dep.sodium = [VERSIONED] # # # # # # # # # # # # # # # Publication Properties # diff --git a/src/main/java/net/lopymine/patpat/PatPat.java b/src/main/java/net/lopymine/patpat/PatPat.java index 0c6786b..fc1944c 100644 --- a/src/main/java/net/lopymine/patpat/PatPat.java +++ b/src/main/java/net/lopymine/patpat/PatPat.java @@ -9,8 +9,8 @@ public class PatPat implements ModInitializer { - public static final String MOD_VERSION = /*$ mod_version*/ "1.2.3+1.21.11"; - public static final String BUILD_CODE_TIME = /*$ build_code_time*/ "01f7b27"; + public static final String MOD_VERSION = /*$ mod_version*/ "1.2.5+1.21.11"; + public static final String BUILD_CODE_TIME = /*$ build_code_time*/ "02087c9"; public static final String MOD_NAME = /*$ mod_name*/ "PatPat"; public static final String MOD_ID = /*$ mod_id*/ "patpat"; public static final String SERVER_CONFIG_VERSION = /*$ server_config_version*/ "1.0.0"; diff --git a/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java b/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java index b395dd5..09d363c 100644 --- a/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java +++ b/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java @@ -77,11 +77,12 @@ public String toString() { public static void register() { //? if <=1.21.8 { - /*WorldRenderEvents.AFTER_ENTITIES.register((__) -> { + /*WorldRenderEvents.AFTER_ENTITIES.register((context) -> { PatPatClientRenderer.renderPatOnYourself(); - PatFeatureRenderer.getInstance().render(); + PatFeatureRenderer.getInstance().render(context.consumers()); }); *///?} + ClientTickEvents.END_WORLD_TICK.register(client -> { boolean frozen = /*? if >1.20.2 {*/ client.tickRateManager().isFrozen(); /*?} else {*/ /*false; *//*?}*/ PatPatClientConfig config = PatPatClientConfig.getInstance(); diff --git a/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java b/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java index 7e1f878..c448520 100644 --- a/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java +++ b/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java @@ -29,8 +29,7 @@ public static PatFeatureRenderer getInstance() { return INSTANCE; } - public void render() { - BufferSource source = Minecraft.getInstance().renderBuffers().bufferSource(); + public void render(BufferSource source) { for (PatFeatureRequest request : this.requests) { //? if >=1.21.11 { diff --git a/src/main/java/net/lopymine/patpat/mixin/FeatureRenderDispatcherMixin.java b/src/main/java/net/lopymine/patpat/mixin/FeatureRenderDispatcherMixin.java index 16a2395..6aa9cb5 100644 --- a/src/main/java/net/lopymine/patpat/mixin/FeatureRenderDispatcherMixin.java +++ b/src/main/java/net/lopymine/patpat/mixin/FeatureRenderDispatcherMixin.java @@ -3,18 +3,20 @@ //? if >=1.21.9 { import net.lopymine.patpat.client.render.feature.PatFeatureRenderer; +import net.minecraft.client.renderer.MultiBufferSource.BufferSource; import net.minecraft.client.renderer.feature.FeatureRenderDispatcher; -import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(FeatureRenderDispatcher.class) public class FeatureRenderDispatcherMixin { + @Shadow @Final private BufferSource bufferSource; + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/feature/NameTagFeatureRenderer;render(Lnet/minecraft/client/renderer/SubmitNodeCollection;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/gui/Font;)V"), method = "renderAllFeatures") private void renderPatFeature(CallbackInfo ci) { - PatFeatureRenderer.getInstance().render(); + PatFeatureRenderer.getInstance().render(this.bufferSource); } } diff --git a/versions/1.21.11/gradle.properties b/versions/1.21.11/gradle.properties index 59e7353..eb3ae45 100644 --- a/versions/1.21.11/gradle.properties +++ b/versions/1.21.11/gradle.properties @@ -26,3 +26,7 @@ dep.geckolib=5.4-alpha-1 dep.controlling=A6W4m3vi # searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.11&l=fabric dep.searchables=lBaUf76M +# iris, check https://modrinth.com/mod/iris/versions?g=1.21.11&l=fabric +dep.iris=1.10.4+1.21.11-fabric +# sodium, check https://modrinth.com/mod/sodium/versions?g=1.21.11&l=fabric +dep.sodium=mc1.21.11-0.8.2-fabric From 5a7df0b3088553b6dc9d670db19e16498a78b7a2 Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Sat, 3 Jan 2026 20:20:57 +0300 Subject: [PATCH 10/21] Added raw (very raw) gametest Debug config no longer reloads/creates without debug argument Added support PatFeatureRenderer for older versions (but bug with shaders is still exist) --- build.gradle | 10 ++ gradle.properties | 4 +- settings.gradle | 16 ++-- .../patpat/client/PatPatClientGameTest.java | 94 +++++++++++++++++++ src/gametest/resources/fabric.mod.json | 17 ++++ src/main/java/net/lopymine/patpat/PatPat.java | 2 +- .../client/config/PatPatDebugConfig.java | 2 + .../client/manager/PatPatClientManager.java | 5 +- .../client/render/PatPatClientRenderer.java | 2 +- .../render/feature/PatFeatureRenderer.java | 7 +- .../common/config/PatPatConfigManager.java | 5 +- .../lopymine/patpat/modmenu/PatConfig.java | 7 +- 12 files changed, 147 insertions(+), 24 deletions(-) create mode 100644 src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java create mode 100644 src/gametest/resources/fabric.mod.json diff --git a/build.gradle b/build.gradle index 938378a..aba4904 100644 --- a/build.gradle +++ b/build.gradle @@ -127,6 +127,16 @@ test { failOnNoDiscoveredTests = false } +//fabricApi { +// configureTests { +// createSourceSet = true +// modId = "patpat-mod-test-${project.name}" +// enableGameTests = true // Default is true +// enableClientGameTests = true // Default is true +// eula = true // By setting this to true, you agree to the Minecraft EULA. +// } +//} + configurations.configureEach { resolutionStrategy { force("net.fabricmc:fabric-loader:${prop("build.fabric_loader")}") diff --git a/gradle.properties b/gradle.properties index 076f834..a1052eb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -29,7 +29,8 @@ data.client_config_version = 1.0.1 base.lombok_version = 1.18.42 # Multi-Versions Properties -multi_versions = 1.21.11 +# multi_versions = 1.16.5 1.17 1.17.1 1.18 1.18.1 1.18.2 1.19 1.19.1 1.19.2 1.19.3 1.19.4 1.20 1.20.1 1.20.2 1.20.3 1.20.4 1.20.5 1.20.6 1.21 1.21.1 1.21.2 1.21.3 1.21.4 1.21.5 1.21.6 1.21.7 1.21.8 1.21.9 1.21.10 1.21.11 +multi_versions = 1.21.8 1.21.11 # Build Dependencies build.yarn = [VERSIONED] @@ -48,7 +49,6 @@ dep.proxlib = [VERSIONED] dep.controlling = [VERSIONED] dep.searchables = [VERSIONED] dep.iris = [VERSIONED] -dep.sodium = [VERSIONED] # # # # # # # # # # # # # # # Publication Properties # diff --git a/settings.gradle b/settings.gradle index 0b31ac6..61942e6 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,20 +1,20 @@ pluginManagement { repositories { maven { - name "Fabric" - url "https://maven.fabricmc.net/" + name = "Fabric" + url = "https://maven.fabricmc.net/" } maven { - name "Kiku Snapshots" - url "https://maven.kikugie.dev/snapshots" + name = "Kiku Snapshots" + url = "https://maven.kikugie.dev/snapshots" } maven { - name "Kiku Releases" - url "https://maven.kikugie.dev/releases" + name = "Kiku Releases" + url = "https://maven.kikugie.dev/releases" } maven { - name "Mossy Projects" - url "https://maven.lopymine.net/releases" + name = "Mossy Projects" + url = "https://maven.lopymine.net/releases" } mavenLocal() mavenCentral() diff --git a/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java b/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java new file mode 100644 index 0000000..2a0e790 --- /dev/null +++ b/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java @@ -0,0 +1,94 @@ +package net.lopymine.patpat.client; + +import net.minecraft.client.gui.screens.worldselection.WorldCreationUiState.SelectedGameMode; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.EntitySpawnReason; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.wolf.Wolf; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.gamerules.GameRules; +import net.minecraft.world.phys.Vec3; +import org.lwjgl.glfw.GLFW; + +import net.fabricmc.fabric.api.client.gametest.v1.FabricClientGameTest; +import net.fabricmc.fabric.api.client.gametest.v1.context.ClientGameTestContext; +import net.fabricmc.fabric.api.client.gametest.v1.context.TestSingleplayerContext; + +import net.lopymine.patpat.client.manager.PatPatClientManager; + +@SuppressWarnings("UnstableApiUsage") +public class PatPatClientGameTest implements FabricClientGameTest { + + @Override + public void runTest(ClientGameTestContext context) { + + try(TestSingleplayerContext singleplayer = context.worldBuilder().adjustSettings(worldCreationUiState -> { + GameRules gamerules = worldCreationUiState.getGameRules(); + gamerules.set(GameRules.ADVANCE_TIME, false, null); + gamerules.set(GameRules.ADVANCE_WEATHER, false, null); + gamerules.set(GameRules.SPAWN_MOBS, false, null); + gamerules.set(GameRules.SPAWN_MONSTERS, false, null); + gamerules.set(GameRules.SPAWN_WANDERING_TRADERS, false, null); + gamerules.set(GameRules.SPAWN_PATROLS, false, null); + gamerules.set(GameRules.RESPAWN_RADIUS, 0, null); + worldCreationUiState.setGameMode(SelectedGameMode.CREATIVE); + worldCreationUiState.setGameRules(gamerules); + }).create()) { + + String nickname = context.computeOnClient(minecraft -> { + assert minecraft.player != null; + return minecraft.player.nameAndId().name(); + }); + singleplayer.getServer().runOnServer(minecraftServer -> { + minecraftServer.levelKeys().stream().filter(level -> level.identifier().toString().equals("minecraft:overworld")).findFirst().ifPresent(level -> { + ServerPlayer player = minecraftServer.getPlayerList().getPlayer(nickname); + assert player != null; + ServerLevel serverLevel = player.level(); + serverLevel.noSave = true; + Wolf entity = EntityType.WOLF.create(serverLevel, EntitySpawnReason.COMMAND); + assert entity != null; + entity.rotate(Rotation.CLOCKWISE_180); + entity.tame(player); + entity.setOrderedToSit(true); + entity.tick(); + + Vec3 pos = player.getPosition(0).add(0, 0, 2); + entity.teleportTo(pos.x, pos.y, pos.z); + serverLevel.addFreshEntity(entity); + }); + }); + + singleplayer.getClientWorld().waitForChunksDownload(); + context.takeScreenshot("initializing_world"); + context.getInput().holdKey(GLFW.GLFW_KEY_LEFT_SHIFT); + context.runOnClient(minecraft -> { + assert minecraft.player != null; + minecraft.player.setXRot(27); + }); + + context.waitTicks(5); + if (!detectPat(context)) { + throw new RuntimeException("Client is not pat entity (or entity not in crosshair)"); + } + } + context.waitTicks(10); + System.out.println("Ended"); + + + } + + public boolean detectPat(ClientGameTestContext context) { + context.getInput().holdMouse(1); + for (int i = 0; i < 5; i++) { + context.waitTicks(5); + if (!PatPatClientManager.PAT_ENTITIES.isEmpty()) { + context.takeScreenshot("pat_entity"); + context.getInput().releaseMouse(1); + return true; + } + } + context.getInput().releaseMouse(1); + return false; + } +} diff --git a/src/gametest/resources/fabric.mod.json b/src/gametest/resources/fabric.mod.json new file mode 100644 index 0000000..61573c9 --- /dev/null +++ b/src/gametest/resources/fabric.mod.json @@ -0,0 +1,17 @@ +{ + "schemaVersion": 1, + "id": "patpat-test", + "version": "1.0.0", + "name": "PatPat GameTest", + "icon": "icon/icon.png", + "environment": "*", + "entrypoints": { + "fabric-client-gametest": [ + "net.lopymine.patpat.client.PatPatClientGameTest" + ] + }, + "depends": { + "fabric-api": "*", + "patpat": "*" + } +} \ No newline at end of file diff --git a/src/main/java/net/lopymine/patpat/PatPat.java b/src/main/java/net/lopymine/patpat/PatPat.java index fc1944c..a47ebe7 100644 --- a/src/main/java/net/lopymine/patpat/PatPat.java +++ b/src/main/java/net/lopymine/patpat/PatPat.java @@ -10,7 +10,7 @@ public class PatPat implements ModInitializer { public static final String MOD_VERSION = /*$ mod_version*/ "1.2.5+1.21.11"; - public static final String BUILD_CODE_TIME = /*$ build_code_time*/ "02087c9"; + public static final String BUILD_CODE_TIME = /*$ build_code_time*/ "0209316"; public static final String MOD_NAME = /*$ mod_name*/ "PatPat"; public static final String MOD_ID = /*$ mod_id*/ "patpat"; public static final String SERVER_CONFIG_VERSION = /*$ server_config_version*/ "1.0.0"; diff --git a/src/main/java/net/lopymine/patpat/client/config/PatPatDebugConfig.java b/src/main/java/net/lopymine/patpat/client/config/PatPatDebugConfig.java index 2f169f6..d6870da 100644 --- a/src/main/java/net/lopymine/patpat/client/config/PatPatDebugConfig.java +++ b/src/main/java/net/lopymine/patpat/client/config/PatPatDebugConfig.java @@ -23,6 +23,8 @@ @AllArgsConstructor public class PatPatDebugConfig { + public static final boolean DEBUG_ENABLED = Boolean.getBoolean("patpat.debug"); + public static final Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( option("selfPat", false, Codec.BOOL, PatPatDebugConfig::isSelfPat) ).apply(inst, PatPatDebugConfig::new)); diff --git a/src/main/java/net/lopymine/patpat/client/manager/PatPatClientManager.java b/src/main/java/net/lopymine/patpat/client/manager/PatPatClientManager.java index 5c951a6..84e84dc 100644 --- a/src/main/java/net/lopymine/patpat/client/manager/PatPatClientManager.java +++ b/src/main/java/net/lopymine/patpat/client/manager/PatPatClientManager.java @@ -34,7 +34,8 @@ @ExtensionMethod(value = {EntityExtension.class, GameProfileExtension.class}) public class PatPatClientManager { - private static final Map PAT_ENTITIES = new HashMap<>(); + // TODO: сделать либо отдельный метод с immutable мапой, либо плдучение по UUID для GameTest + public static final Map PAT_ENTITIES = new HashMap<>(); public static final PatLogger LOGGER = PatPatClient.LOGGER.extend("PatManager"); @@ -48,7 +49,7 @@ private PatPatClientManager() { @Nullable public static PatEntity getPatEntity(@NotNull LivingEntity entity) { - return PAT_ENTITIES.get(entity.getUUID()); + return PAT_ENTITIES.getOrDefault(entity.getUUID(), null); } public static void tickEntities() { diff --git a/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java b/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java index 09d363c..1ef687b 100644 --- a/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java +++ b/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java @@ -131,7 +131,7 @@ public static void register() { } LocalPlayer player = Minecraft.getInstance().player; - if (!empty && player != null && PatPatDebugConfig.getInstance().isSelfPat()) { + if (!empty && player != null && PatPatDebugConfig.DEBUG_ENABLED && PatPatDebugConfig.getInstance().isSelfPat()) { PatPatClientManager.pat(player, PlayerConfig.currentSession()); ReplayModCompat.onPat(player.getId(), player.getId()); FlashbackCompat.onPat(player.getId(), player.getId()); diff --git a/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java b/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java index c448520..381f0df 100644 --- a/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java +++ b/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java @@ -6,6 +6,7 @@ import lombok.experimental.ExtensionMethod; import net.lopymine.patpat.extension.*; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource.BufferSource; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.resources.Identifier; @@ -29,14 +30,10 @@ public static PatFeatureRenderer getInstance() { return INSTANCE; } - public void render(BufferSource source) { + public void render(/*? if <=1.21.8 {*//*MultiBufferSource*//*?} else {*/BufferSource/*?}*/ source) { for (PatFeatureRequest request : this.requests) { - //? if >=1.21.11 { VertexConsumer buffer = source.getBuffer(RenderTypes.entityTranslucent(request.texture())); - //?} else { - /*VertexConsumer buffer = source.getBuffer(RenderType.entityTranslucent(request.texture())); - *///?} /*? if >=1.19.3 {*/ org.joml.Matrix4f /*?} else {*/ /*com.mojang.math.Matrix4f*//*?}*/ matrix = request.poseStack().pose(); buffer.withVertex(matrix, request.x1(), request.y1(), request.z()).withColor(255, 255, 255, 255).withUv(request.u1(), request.v1()).withOverlay(OverlayTexture.NO_OVERLAY).withLight(request.light()).withNormal(0, 1, 0).end(); diff --git a/src/main/java/net/lopymine/patpat/common/config/PatPatConfigManager.java b/src/main/java/net/lopymine/patpat/common/config/PatPatConfigManager.java index 22440f6..04b5e8e 100644 --- a/src/main/java/net/lopymine/patpat/common/config/PatPatConfigManager.java +++ b/src/main/java/net/lopymine/patpat/common/config/PatPatConfigManager.java @@ -44,6 +44,9 @@ public static void reloadClient() { PatPatClientConfig config = PatPatClientConfig.reload(); PatPatClientProxLibServersWhitelistConfig.getInstance().reload(); PatPatClient.LOGGER.setDebugMode(config.getMainConfig().isDebugLogEnabled()); - PatPatDebugConfig.reload(); + if(PatPatDebugConfig.DEBUG_ENABLED){ + PatPatDebugConfig.reload(); + } + } } diff --git a/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java b/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java index 40bb6e0..eb3357e 100644 --- a/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java +++ b/src/main/java/net/lopymine/patpat/modmenu/PatConfig.java @@ -43,7 +43,7 @@ public static PatConfig generate() { .title(ModMenuUtils.getModTitle()) .onSave(saveFunction) .addCategory(generateMainCategory(config)) - .addCategoryIf(generateDebugCategory(debugConfig), Boolean.getBoolean("patpat.debug")) + .addCategoryIf(generateDebugCategory(debugConfig), PatPatDebugConfig.DEBUG_ENABLED) .build(); } @@ -289,10 +289,9 @@ public static PatDescription getDescriptionWithWarn(String key) { public static class PatConfigBuilder { public PatConfigBuilder addCategoryIf(PatCategory category, boolean bl) { - if (!bl) { - return this; + if (bl) { + this.addCategory(category); } - this.addCategory(category); return this; } From 7e716b33c25db228bd209e1e27a7ea1a30b3c512 Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Sat, 3 Jan 2026 20:52:10 +0300 Subject: [PATCH 11/21] Added replace for "RenderTypes" --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index aba4904..51208dc 100644 --- a/build.gradle +++ b/build.gradle @@ -181,6 +181,7 @@ stonecutter { replace("ProxPacketIdentifier", "ProxPacketIdentifier") replace("ResourceLocation", "Identifier") replace(".location()", ".identifier()") + replace("RenderType", "RenderTypes") } } From e5c0996cf0cc170470dc2f3218568632cbe3b453 Mon Sep 17 00:00:00 2001 From: LopyMine Date: Mon, 12 Jan 2026 02:11:09 +0300 Subject: [PATCH 12/21] Fixed iris at <=1.21.8 --- patpat-languages-files | 2 +- src/main/java/net/lopymine/patpat/PatPat.java | 2 +- .../patpat/client/render/PatPatClientRenderer.java | 7 ++++--- .../client/render/feature/PatFeatureRenderer.java | 12 ++++++------ .../client/render/feature/PatFeatureRequest.java | 5 ++++- .../lopymine/patpat/mixin/EntityRendererMixin.java | 11 ++++++----- versions/1.21.11/gradle.properties | 2 -- versions/1.21.8/gradle.properties | 2 ++ 8 files changed, 24 insertions(+), 19 deletions(-) diff --git a/patpat-languages-files b/patpat-languages-files index c4c5558..f5259dd 160000 --- a/patpat-languages-files +++ b/patpat-languages-files @@ -1 +1 @@ -Subproject commit c4c5558b03ead619d754dcac99ed40798547459f +Subproject commit f5259dd76d2e3cfccd7f84f20e331d6dd6599050 diff --git a/src/main/java/net/lopymine/patpat/PatPat.java b/src/main/java/net/lopymine/patpat/PatPat.java index a47ebe7..ac383f4 100644 --- a/src/main/java/net/lopymine/patpat/PatPat.java +++ b/src/main/java/net/lopymine/patpat/PatPat.java @@ -10,7 +10,7 @@ public class PatPat implements ModInitializer { public static final String MOD_VERSION = /*$ mod_version*/ "1.2.5+1.21.11"; - public static final String BUILD_CODE_TIME = /*$ build_code_time*/ "0209316"; + public static final String BUILD_CODE_TIME = /*$ build_code_time*/ "021a9ee"; public static final String MOD_NAME = /*$ mod_name*/ "PatPat"; public static final String MOD_ID = /*$ mod_id*/ "patpat"; public static final String SERVER_CONFIG_VERSION = /*$ server_config_version*/ "1.0.0"; diff --git a/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java b/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java index 1ef687b..531e34b 100644 --- a/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java +++ b/src/main/java/net/lopymine/patpat/client/render/PatPatClientRenderer.java @@ -9,6 +9,7 @@ import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.network.protocol.game.ServerboundSwingPacket; import net.minecraft.util.Mth; @@ -174,10 +175,10 @@ public static void renderPatOnYourself() { return; } - PatPatClientRenderer.render(new PoseStack(), camera.rotation(), patEntity, player, new Vec3f(0.0F, Mth.lerp(tickDelta, camera.eyeHeightOld, camera.eyeHeight) - 0.2F, 0.0F), tickDelta, light); + PatPatClientRenderer.render(new PoseStack(), camera.rotation(), patEntity, player, new Vec3f(0.0F, Mth.lerp(tickDelta, camera.eyeHeightOld, camera.eyeHeight) - 0.2F, 0.0F), tickDelta, light, null); } - public static RenderResult render(PoseStack matrices, /*? if >=1.19.3 {*/ Quaternionf /*?} else {*/ /*Quaternion *//*?}*/ cameraRotation, @Nullable PatEntity providedPatEntity, @Nullable Entity entity, @Nullable Vec3f overrideOffset, float tickDelta, int light) { + public static RenderResult render(PoseStack matrices, /*? if >=1.19.3 {*/ Quaternionf /*?} else {*/ /*Quaternion *//*?}*/ cameraRotation, @Nullable PatEntity providedPatEntity, @Nullable Entity entity, @Nullable Vec3f overrideOffset, float tickDelta, int light, @Nullable MultiBufferSource provider) { PatPatClientConfig config = PatPatClientConfig.getInstance(); if (!config.getMainConfig().isModEnabled()) { return RenderResult.FAILED; @@ -236,7 +237,7 @@ public static RenderResult render(PoseStack matrices, /*? if >=1.19.3 {*/ Quater float v1 = 0.0F; float v2 = 1.0F; - PatFeatureRenderer.getInstance().request(animation.getTexture(), matrices.last(), x1, y1, x2, y2, z, u1, v1, u2, v2, light); + PatFeatureRenderer.getInstance().request(animation.getTexture(), matrices.last(), x1, y1, x2, y2, z, u1, v1, u2, v2, light, provider); matrices.popPose(); disableBlend(); diff --git a/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java b/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java index 381f0df..4266636 100644 --- a/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java +++ b/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRenderer.java @@ -10,13 +10,12 @@ import net.minecraft.client.renderer.MultiBufferSource.BufferSource; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.resources.Identifier; +import org.jetbrains.annotations.Nullable; //? if >=1.21.11 { import net.minecraft.client.renderer.rendertype.RenderTypes; //?} else { - /*import net.minecraft.client.renderer.RenderType; - *///?} @ExtensionMethod(value = {VertexConsumerExtension.class, PoseExtension.class}) @@ -30,10 +29,10 @@ public static PatFeatureRenderer getInstance() { return INSTANCE; } - public void render(/*? if <=1.21.8 {*//*MultiBufferSource*//*?} else {*/BufferSource/*?}*/ source) { + public void render(MultiBufferSource source) { for (PatFeatureRequest request : this.requests) { - VertexConsumer buffer = source.getBuffer(RenderTypes.entityTranslucent(request.texture())); + VertexConsumer buffer = (request.provider() == null ? source : request.provider()).getBuffer(RenderTypes.entityTranslucent(request.texture())); /*? if >=1.19.3 {*/ org.joml.Matrix4f /*?} else {*/ /*com.mojang.math.Matrix4f*//*?}*/ matrix = request.poseStack().pose(); buffer.withVertex(matrix, request.x1(), request.y1(), request.z()).withColor(255, 255, 255, 255).withUv(request.u1(), request.v1()).withOverlay(OverlayTexture.NO_OVERLAY).withLight(request.light()).withNormal(0, 1, 0).end(); @@ -58,9 +57,10 @@ public void request( float v1, float u2, float v2, - int light + int light, + @Nullable MultiBufferSource provider ) { - this.requests.add(new PatFeatureRequest(texture, poseStack.copy(), x1, y1, x2, y2, z, u1, v1, u2, v2, light)); + this.requests.add(new PatFeatureRequest(texture, poseStack.copy(), x1, y1, x2, y2, z, u1, v1, u2, v2, light, provider)); } } \ No newline at end of file diff --git a/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRequest.java b/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRequest.java index 37c6c8e..589c804 100644 --- a/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRequest.java +++ b/src/main/java/net/lopymine/patpat/client/render/feature/PatFeatureRequest.java @@ -1,7 +1,9 @@ package net.lopymine.patpat.client.render.feature; import com.mojang.blaze3d.vertex.PoseStack.Pose; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.resources.Identifier; +import org.jetbrains.annotations.Nullable; public record PatFeatureRequest( Identifier texture, @@ -15,5 +17,6 @@ public record PatFeatureRequest( float v1, float u2, float v2, - int light + int light, + @Nullable MultiBufferSource provider ) { } diff --git a/src/main/java/net/lopymine/patpat/mixin/EntityRendererMixin.java b/src/main/java/net/lopymine/patpat/mixin/EntityRendererMixin.java index f79b508..73f9f9d 100644 --- a/src/main/java/net/lopymine/patpat/mixin/EntityRendererMixin.java +++ b/src/main/java/net/lopymine/patpat/mixin/EntityRendererMixin.java @@ -51,14 +51,14 @@ private void render(EntityRenderer instance, EntityRenderState state, Pose float tickDelta = stateWithParent.patPat$getTickDelta(); //?} //? if >=1.21.9 { - Boolean result = this.render(matrices, state.lightCoords, entity, tickDelta, true); + Boolean result = this.render(matrices, state.lightCoords, entity, tickDelta, true, null); if (result != null) { original.call(instance, state, poseStack, submitNodeCollector, cameraRenderState); } //?} elif >=1.21.2 { - /*return this.render(matrices, light, entity, tickDelta, original.call(state)); + /*return this.render(matrices, light, entity, tickDelta, original.call(state), provider); *///?} else { - /*Boolean result = this.render(matrices, light, entity, tickDelta, bl); + /*Boolean result = this.render(matrices, light, entity, tickDelta, bl, provider); return result != null && result; *///?} } @@ -66,7 +66,7 @@ private void render(EntityRenderer instance, EntityRenderState state, Pose // original => render, null => cancel @Unique @Nullable - private T render(PoseStack matrices, int light, Entity entity, float tickDelta, @SuppressWarnings("all") T original) { + private T render(PoseStack matrices, int light, Entity entity, float tickDelta, @SuppressWarnings("all") T original, @Nullable MultiBufferSource provider) { if (!(entity instanceof LivingEntity)) { return original; } @@ -83,7 +83,8 @@ private T render(PoseStack matrices, int light, Entity entity, float tickDel entity, null, tickDelta, - light + light, + provider ); if (result == RenderResult.RENDERER_SHOULD_CANCEL) { diff --git a/versions/1.21.11/gradle.properties b/versions/1.21.11/gradle.properties index eb3ae45..5866d6b 100644 --- a/versions/1.21.11/gradle.properties +++ b/versions/1.21.11/gradle.properties @@ -28,5 +28,3 @@ dep.controlling=A6W4m3vi dep.searchables=lBaUf76M # iris, check https://modrinth.com/mod/iris/versions?g=1.21.11&l=fabric dep.iris=1.10.4+1.21.11-fabric -# sodium, check https://modrinth.com/mod/sodium/versions?g=1.21.11&l=fabric -dep.sodium=mc1.21.11-0.8.2-fabric diff --git a/versions/1.21.8/gradle.properties b/versions/1.21.8/gradle.properties index ab54066..4ba691c 100644 --- a/versions/1.21.8/gradle.properties +++ b/versions/1.21.8/gradle.properties @@ -26,3 +26,5 @@ dep.geckolib=5.2.2 dep.controlling=15AHrwi3 # searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.8&l=fabric dep.searchables=LLzPBiwT +# iris, check https://modrinth.com/mod/iris/versions?g=1.21.8&l=fabric +dep.iris=1.9.6+1.21.8-fabric From 671e73bd126bb351f53559b1da6280e53e8b98f0 Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Mon, 12 Jan 2026 02:43:05 +0300 Subject: [PATCH 13/21] Removed iris dependency --- build.gradle | 5 ----- gradle.properties | 7 +++---- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 51208dc..6e63ddb 100644 --- a/build.gradle +++ b/build.gradle @@ -109,11 +109,6 @@ dependencies { if (proxlibVersion != "unknown") { include(modApi("maven.modrinth:proxlib:${proxlibVersion}")) } - - // Requires Iris - modRuntimeOnly("org.antlr:antlr4-runtime:4.13.1") - modRuntimeOnly("io.github.douira:glsl-transformer:3.0.0-pre3") - modRuntimeOnly("org.anarres:jcpp:1.4.14") } // TODO: Добавить тесты на версию раньше, чем 1.18.2 diff --git a/gradle.properties b/gradle.properties index a1052eb..9800217 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ # # # # # # # # # # # # # # # Done to increase the memory available to gradle. -org.gradle.jvmargs=-Xmx16G +org.gradle.jvmargs=-Xmx12G org.gradle.parallel=true # Mossy Plugin @@ -29,8 +29,8 @@ data.client_config_version = 1.0.1 base.lombok_version = 1.18.42 # Multi-Versions Properties -# multi_versions = 1.16.5 1.17 1.17.1 1.18 1.18.1 1.18.2 1.19 1.19.1 1.19.2 1.19.3 1.19.4 1.20 1.20.1 1.20.2 1.20.3 1.20.4 1.20.5 1.20.6 1.21 1.21.1 1.21.2 1.21.3 1.21.4 1.21.5 1.21.6 1.21.7 1.21.8 1.21.9 1.21.10 1.21.11 -multi_versions = 1.21.8 1.21.11 +multi_versions = 1.16.5 1.17 1.17.1 1.18 1.18.1 1.18.2 1.19 1.19.1 1.19.2 1.19.3 1.19.4 1.20 1.20.1 1.20.2 1.20.3 1.20.4 1.20.5 1.20.6 1.21 1.21.1 1.21.2 1.21.3 1.21.4 1.21.5 1.21.6 1.21.7 1.21.8 1.21.9 1.21.10 1.21.11 +# multi_versions = 1.21.11 # Build Dependencies build.yarn = [VERSIONED] @@ -48,7 +48,6 @@ dep.flashback = [VERSIONED] dep.proxlib = [VERSIONED] dep.controlling = [VERSIONED] dep.searchables = [VERSIONED] -dep.iris = [VERSIONED] # # # # # # # # # # # # # # # Publication Properties # From e6ea204ef3729ee8b8de2dc6d96e39114e107230 Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Wed, 14 Jan 2026 22:49:09 +0300 Subject: [PATCH 14/21] Try in gametest --- .github/workflows/client_gametest.yml | 39 ++++++++++++ build.gradle | 22 ++++--- gradle.properties | 4 +- .../patpat/client/PatPatClientGameTest.java | 40 ++++++------ ...atPatSingleplayerContextImplDecorator.java | 61 +++++++++++++++++++ versions/1.21.11/gradle.properties | 4 +- versions/1.21.8/gradle.properties | 2 - 7 files changed, 133 insertions(+), 39 deletions(-) create mode 100644 .github/workflows/client_gametest.yml create mode 100644 src/gametest/java/net/lopymine/patpat/client/PatPatSingleplayerContextImplDecorator.java diff --git a/.github/workflows/client_gametest.yml b/.github/workflows/client_gametest.yml new file mode 100644 index 0000000..2b58b1a --- /dev/null +++ b/.github/workflows/client_gametest.yml @@ -0,0 +1,39 @@ +name: Build +on: + pull_request: + paths-ignore: + - '**.md' + push: + paths-ignore: + - '**.md' + +jobs: + build: + runs-on: ubuntu-22.04 + steps: + - name: Free up disk on GitHub runner + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf /usr/local/share/boost + docker image prune -af || true + - name: checkout repository + uses: actions/checkout@v4 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + - name: setup jdk 21 + uses: actions/setup-java@v4 + with: + java-version: 21 + distribution: 'microsoft' + - name: make gradle wrapper executable + run: chmod +x ./gradlew + - name: build + run: ./gradlew runClientGameTest + - name: capture build artifacts + uses: actions/upload-artifact@v4 + with: + name: Artifacts + path: | + /build/run/clientGameTest/screenshots/** + /build/reports/tests/test/** diff --git a/build.gradle b/build.gradle index 6e63ddb..4f2f0bd 100644 --- a/build.gradle +++ b/build.gradle @@ -122,15 +122,19 @@ test { failOnNoDiscoveredTests = false } -//fabricApi { -// configureTests { -// createSourceSet = true -// modId = "patpat-mod-test-${project.name}" -// enableGameTests = true // Default is true -// enableClientGameTests = true // Default is true -// eula = true // By setting this to true, you agree to the Minecraft EULA. -// } -//} +fabricApi { + configureTests { + createSourceSet = true + modId = "patpat-mod-test-${project.name}" + enableGameTests = true // Default is true + enableClientGameTests = true // Default is true + eula = true // By setting this to true, you agree to the Minecraft EULA. + } +} + +tasks.named("runClientGameTest", JavaExec) { + jvmArgs "-ea" +} configurations.configureEach { resolutionStrategy { diff --git a/gradle.properties b/gradle.properties index 9800217..ff50575 100644 --- a/gradle.properties +++ b/gradle.properties @@ -29,8 +29,8 @@ data.client_config_version = 1.0.1 base.lombok_version = 1.18.42 # Multi-Versions Properties -multi_versions = 1.16.5 1.17 1.17.1 1.18 1.18.1 1.18.2 1.19 1.19.1 1.19.2 1.19.3 1.19.4 1.20 1.20.1 1.20.2 1.20.3 1.20.4 1.20.5 1.20.6 1.21 1.21.1 1.21.2 1.21.3 1.21.4 1.21.5 1.21.6 1.21.7 1.21.8 1.21.9 1.21.10 1.21.11 -# multi_versions = 1.21.11 +# multi_versions = 1.16.5 1.17 1.17.1 1.18 1.18.1 1.18.2 1.19 1.19.1 1.19.2 1.19.3 1.19.4 1.20 1.20.1 1.20.2 1.20.3 1.20.4 1.20.5 1.20.6 1.21 1.21.1 1.21.2 1.21.3 1.21.4 1.21.5 1.21.6 1.21.7 1.21.8 1.21.9 1.21.10 1.21.11 +multi_versions = 1.21.11 # Build Dependencies build.yarn = [VERSIONED] diff --git a/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java b/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java index 2a0e790..d261f02 100644 --- a/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java +++ b/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java @@ -13,17 +13,16 @@ import net.fabricmc.fabric.api.client.gametest.v1.FabricClientGameTest; import net.fabricmc.fabric.api.client.gametest.v1.context.ClientGameTestContext; -import net.fabricmc.fabric.api.client.gametest.v1.context.TestSingleplayerContext; import net.lopymine.patpat.client.manager.PatPatClientManager; -@SuppressWarnings("UnstableApiUsage") +@SuppressWarnings({"UnstableApiUsage", "java:S2095"}) public class PatPatClientGameTest implements FabricClientGameTest { @Override public void runTest(ClientGameTestContext context) { - try(TestSingleplayerContext singleplayer = context.worldBuilder().adjustSettings(worldCreationUiState -> { + try (PatPatSingleplayerContextImplDecorator singleplayer = new PatPatSingleplayerContextImplDecorator(context.worldBuilder().adjustSettings(worldCreationUiState -> { GameRules gamerules = worldCreationUiState.getGameRules(); gamerules.set(GameRules.ADVANCE_TIME, false, null); gamerules.set(GameRules.ADVANCE_WEATHER, false, null); @@ -34,29 +33,25 @@ public void runTest(ClientGameTestContext context) { gamerules.set(GameRules.RESPAWN_RADIUS, 0, null); worldCreationUiState.setGameMode(SelectedGameMode.CREATIVE); worldCreationUiState.setGameRules(gamerules); - }).create()) { - + }).create())) { String nickname = context.computeOnClient(minecraft -> { assert minecraft.player != null; return minecraft.player.nameAndId().name(); }); singleplayer.getServer().runOnServer(minecraftServer -> { - minecraftServer.levelKeys().stream().filter(level -> level.identifier().toString().equals("minecraft:overworld")).findFirst().ifPresent(level -> { - ServerPlayer player = minecraftServer.getPlayerList().getPlayer(nickname); - assert player != null; - ServerLevel serverLevel = player.level(); - serverLevel.noSave = true; - Wolf entity = EntityType.WOLF.create(serverLevel, EntitySpawnReason.COMMAND); - assert entity != null; - entity.rotate(Rotation.CLOCKWISE_180); - entity.tame(player); - entity.setOrderedToSit(true); - entity.tick(); + ServerPlayer player = minecraftServer.getPlayerList().getPlayer(nickname); + assert player != null; + ServerLevel serverLevel = player.level(); + Wolf entity = EntityType.WOLF.create(serverLevel, EntitySpawnReason.COMMAND); + assert entity != null; + entity.rotate(Rotation.CLOCKWISE_180); + entity.tame(player); + entity.setOrderedToSit(true); + entity.tick(); - Vec3 pos = player.getPosition(0).add(0, 0, 2); - entity.teleportTo(pos.x, pos.y, pos.z); - serverLevel.addFreshEntity(entity); - }); + Vec3 pos = player.getPosition(0).add(0, 0, 2); + entity.teleportTo(pos.x, pos.y, pos.z); + serverLevel.addFreshEntity(entity); }); singleplayer.getClientWorld().waitForChunksDownload(); @@ -67,15 +62,13 @@ public void runTest(ClientGameTestContext context) { minecraft.player.setXRot(27); }); - context.waitTicks(5); + context.waitTicks(2); if (!detectPat(context)) { throw new RuntimeException("Client is not pat entity (or entity not in crosshair)"); } } context.waitTicks(10); System.out.println("Ended"); - - } public boolean detectPat(ClientGameTestContext context) { @@ -85,6 +78,7 @@ public boolean detectPat(ClientGameTestContext context) { if (!PatPatClientManager.PAT_ENTITIES.isEmpty()) { context.takeScreenshot("pat_entity"); context.getInput().releaseMouse(1); + System.out.println("Pat detected"); return true; } } diff --git a/src/gametest/java/net/lopymine/patpat/client/PatPatSingleplayerContextImplDecorator.java b/src/gametest/java/net/lopymine/patpat/client/PatPatSingleplayerContextImplDecorator.java new file mode 100644 index 0000000..f8672f1 --- /dev/null +++ b/src/gametest/java/net/lopymine/patpat/client/PatPatSingleplayerContextImplDecorator.java @@ -0,0 +1,61 @@ +package net.lopymine.patpat.client; + +import lombok.SneakyThrows; +import net.minecraft.SharedConstants; +import net.minecraft.client.gui.screens.TitleScreen; + +import net.fabricmc.fabric.api.client.gametest.v1.context.*; +import net.fabricmc.fabric.api.client.gametest.v1.world.TestWorldSave; +import net.fabricmc.fabric.impl.client.gametest.threading.ThreadingImpl; + +import java.io.IOException; +import java.lang.reflect.Field; +import org.jetbrains.annotations.NotNull; + + +@SuppressWarnings("UnstableApiUsage") +public class PatPatSingleplayerContextImplDecorator implements TestSingleplayerContext { + + + private final TestSingleplayerContext testSingleplayerContext; + private final ClientGameTestContext context; + private final TestServerContext server; + + + public PatPatSingleplayerContextImplDecorator(TestSingleplayerContext testSingleplayerContext){ + try { + this.testSingleplayerContext = testSingleplayerContext; + Class aClass = testSingleplayerContext.getClass(); + Field context1 = aClass.getDeclaredField("context"); + context1.setAccessible(true); + this.context = (ClientGameTestContext) context1.get(testSingleplayerContext); + this.server = testSingleplayerContext.getServer(); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + + } + + @Override + public @NotNull TestWorldSave getWorldSave() { + return this.testSingleplayerContext.getWorldSave(); + } + + @Override + public @NotNull TestClientWorldContext getClientWorld() { + return this.testSingleplayerContext.getClientWorld(); + } + + @Override + public @NotNull TestServerContext getServer() { + return this.testSingleplayerContext.getServer(); + } + + @Override + public void close() { + ThreadingImpl.checkOnGametestThread("close"); + server.runOnServer(minecraftServer -> minecraftServer.halt(false)); + context.waitFor(client -> !ThreadingImpl.isServerRunning && client.level == null, SharedConstants.TICKS_PER_MINUTE); + context.setScreen(TitleScreen::new); + } +} diff --git a/versions/1.21.11/gradle.properties b/versions/1.21.11/gradle.properties index 5866d6b..3eb2f7d 100644 --- a/versions/1.21.11/gradle.properties +++ b/versions/1.21.11/gradle.properties @@ -25,6 +25,4 @@ dep.geckolib=5.4-alpha-1 # controlling, check https://modrinth.com/mod/controlling/versions?g=1.21.11&l=fabric dep.controlling=A6W4m3vi # searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.11&l=fabric -dep.searchables=lBaUf76M -# iris, check https://modrinth.com/mod/iris/versions?g=1.21.11&l=fabric -dep.iris=1.10.4+1.21.11-fabric +dep.searchables=lBaUf76M \ No newline at end of file diff --git a/versions/1.21.8/gradle.properties b/versions/1.21.8/gradle.properties index 4ba691c..ab54066 100644 --- a/versions/1.21.8/gradle.properties +++ b/versions/1.21.8/gradle.properties @@ -26,5 +26,3 @@ dep.geckolib=5.2.2 dep.controlling=15AHrwi3 # searchables, check https://modrinth.com/mod/searchables/versions?g=1.21.8&l=fabric dep.searchables=LLzPBiwT -# iris, check https://modrinth.com/mod/iris/versions?g=1.21.8&l=fabric -dep.iris=1.9.6+1.21.8-fabric From 35f272703fa59ec84f0798623f6064ae4da01b3e Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Wed, 14 Jan 2026 22:57:04 +0300 Subject: [PATCH 15/21] Specially fail test (for test) --- .github/workflows/client_gametest.yml | 2 +- build.gradle | 1 + .../java/net/lopymine/patpat/client/PatPatClientGameTest.java | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/client_gametest.yml b/.github/workflows/client_gametest.yml index 2b58b1a..af191c2 100644 --- a/.github/workflows/client_gametest.yml +++ b/.github/workflows/client_gametest.yml @@ -8,7 +8,7 @@ on: - '**.md' jobs: - build: + client_gametest: runs-on: ubuntu-22.04 steps: - name: Free up disk on GitHub runner diff --git a/build.gradle b/build.gradle index 4f2f0bd..e24a3cd 100644 --- a/build.gradle +++ b/build.gradle @@ -134,6 +134,7 @@ fabricApi { tasks.named("runClientGameTest", JavaExec) { jvmArgs "-ea" + useXVFB = true } configurations.configureEach { diff --git a/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java b/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java index d261f02..abe3ead 100644 --- a/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java +++ b/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java @@ -58,7 +58,7 @@ public void runTest(ClientGameTestContext context) { context.takeScreenshot("initializing_world"); context.getInput().holdKey(GLFW.GLFW_KEY_LEFT_SHIFT); context.runOnClient(minecraft -> { - assert minecraft.player != null; + assert minecraft.player == null; minecraft.player.setXRot(27); }); @@ -83,6 +83,7 @@ public boolean detectPat(ClientGameTestContext context) { } } context.getInput().releaseMouse(1); + return false; } } From cac5f07c1ffd4572fcda1ecad112d2cd78b4b434 Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Wed, 14 Jan 2026 23:05:16 +0300 Subject: [PATCH 16/21] Fix tests --- .github/workflows/build.yml | 14 ++++--- .github/workflows/client_gametest.yml | 39 ------------------- ...atPatSingleplayerContextImplDecorator.java | 9 ++--- 3 files changed, 12 insertions(+), 50 deletions(-) delete mode 100644 .github/workflows/client_gametest.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 069f40f..a3875c4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,12 +9,6 @@ on: jobs: build: - strategy: - matrix: - # Use these Java versions - java: [ - 21, # Current Java LTS - ] runs-on: ubuntu-22.04 steps: - name: Free up disk on GitHub runner @@ -44,3 +38,11 @@ jobs: path: | build/libs/ /build/reports/tests/test/** + - name: run client gametest + run: ./gradlew runClientGameTest + - name: capture build artifacts + uses: actions/upload-artifact@v4 + with: + name: Artifacts + path: | + /build/run/clientGameTest/screenshots/** \ No newline at end of file diff --git a/.github/workflows/client_gametest.yml b/.github/workflows/client_gametest.yml deleted file mode 100644 index af191c2..0000000 --- a/.github/workflows/client_gametest.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Build -on: - pull_request: - paths-ignore: - - '**.md' - push: - paths-ignore: - - '**.md' - -jobs: - client_gametest: - runs-on: ubuntu-22.04 - steps: - - name: Free up disk on GitHub runner - run: | - sudo rm -rf /usr/share/dotnet - sudo rm -rf /opt/ghc - sudo rm -rf /usr/local/share/boost - docker image prune -af || true - - name: checkout repository - uses: actions/checkout@v4 - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - name: setup jdk 21 - uses: actions/setup-java@v4 - with: - java-version: 21 - distribution: 'microsoft' - - name: make gradle wrapper executable - run: chmod +x ./gradlew - - name: build - run: ./gradlew runClientGameTest - - name: capture build artifacts - uses: actions/upload-artifact@v4 - with: - name: Artifacts - path: | - /build/run/clientGameTest/screenshots/** - /build/reports/tests/test/** diff --git a/src/gametest/java/net/lopymine/patpat/client/PatPatSingleplayerContextImplDecorator.java b/src/gametest/java/net/lopymine/patpat/client/PatPatSingleplayerContextImplDecorator.java index f8672f1..9329226 100644 --- a/src/gametest/java/net/lopymine/patpat/client/PatPatSingleplayerContextImplDecorator.java +++ b/src/gametest/java/net/lopymine/patpat/client/PatPatSingleplayerContextImplDecorator.java @@ -25,15 +25,14 @@ public class PatPatSingleplayerContextImplDecorator implements TestSingleplayerC public PatPatSingleplayerContextImplDecorator(TestSingleplayerContext testSingleplayerContext){ try { this.testSingleplayerContext = testSingleplayerContext; - Class aClass = testSingleplayerContext.getClass(); - Field context1 = aClass.getDeclaredField("context"); - context1.setAccessible(true); - this.context = (ClientGameTestContext) context1.get(testSingleplayerContext); + Class testSingleplayerContextClass = testSingleplayerContext.getClass(); + Field contextField = testSingleplayerContextClass.getDeclaredField("context"); + contextField.setAccessible(true); + this.context = (ClientGameTestContext) contextField.get(testSingleplayerContext); this.server = testSingleplayerContext.getServer(); } catch (NoSuchFieldException | IllegalAccessException e) { throw new RuntimeException(e); } - } @Override From 09fb7ccf14aaaaf8627db9e03d6a26e1b3711c58 Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Wed, 14 Jan 2026 23:15:03 +0300 Subject: [PATCH 17/21] Fix tests --- .github/workflows/build.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a3875c4..da3f263 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,6 +7,10 @@ on: paths-ignore: - '**.md' +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: build: runs-on: ubuntu-22.04 @@ -21,11 +25,11 @@ jobs: uses: actions/checkout@v4 - name: Setup Gradle uses: gradle/actions/setup-gradle@v4 - - name: setup jdk ${{ matrix.java }} + - name: setup jdk 21 uses: actions/setup-java@v4 with: - java-version: ${{ matrix.java }} - distribution: 'microsoft' + java-version: 21 + distribution: 'temurin' - name: make gradle wrapper executable run: chmod +x ./gradlew - name: build From 17f19f34261048fa4dba8fa7256567bb073a7181 Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Wed, 14 Jan 2026 23:15:20 +0300 Subject: [PATCH 18/21] Fix tests --- .github/workflows/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index da3f263..0d93692 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,7 +35,6 @@ jobs: - name: build run: ./gradlew buildAndCollect+All - name: capture build artifacts - if: ${{ matrix.java == '21' }} # Only upload artifacts built from latest java uses: actions/upload-artifact@v4 with: name: Artifacts From a179ad7de4d3604583d3fc775742fe250d328990 Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Wed, 14 Jan 2026 23:21:23 +0300 Subject: [PATCH 19/21] Fix tests --- build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle b/build.gradle index e24a3cd..4f2f0bd 100644 --- a/build.gradle +++ b/build.gradle @@ -134,7 +134,6 @@ fabricApi { tasks.named("runClientGameTest", JavaExec) { jvmArgs "-ea" - useXVFB = true } configurations.configureEach { From 3a3631ad97bceca126aa3c87a0e8eff3a325f7f3 Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Wed, 14 Jan 2026 23:36:27 +0300 Subject: [PATCH 20/21] Fix tests (finally!) --- .../java/net/lopymine/patpat/client/PatPatClientGameTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java b/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java index abe3ead..443b21d 100644 --- a/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java +++ b/src/gametest/java/net/lopymine/patpat/client/PatPatClientGameTest.java @@ -58,7 +58,7 @@ public void runTest(ClientGameTestContext context) { context.takeScreenshot("initializing_world"); context.getInput().holdKey(GLFW.GLFW_KEY_LEFT_SHIFT); context.runOnClient(minecraft -> { - assert minecraft.player == null; + assert minecraft.player != null; minecraft.player.setXRot(27); }); From 4537c1d6a848dde9e4dffc490894bc5219f30f52 Mon Sep 17 00:00:00 2001 From: nikita51bot Date: Tue, 17 Feb 2026 21:06:07 +0300 Subject: [PATCH 21/21] Updated translation --- patpat-languages-files | 2 +- src/main/resources/fabric.mod.json | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/patpat-languages-files b/patpat-languages-files index f5259dd..7d59d5a 160000 --- a/patpat-languages-files +++ b/patpat-languages-files @@ -1 +1 @@ -Subproject commit f5259dd76d2e3cfccd7f84f20e331d6dd6599050 +Subproject commit 7d59d5a791f8e451283abe78c9a75c8aa3818463 diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 81e28d2..0f140d4 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -43,12 +43,14 @@ ], "custom": { "translators": { - "TastyPommesLul": "Germany", - "Hamka": "Polish", + "TastyPommesLul": "Germany (90%)", + "Hamka": "Polish (90%)", "MrLemonHog": "Ukrainian", - "Balojan": "Vietnamese (46%)", - "okunamayanad": "Turkish (25%)", - "Gallium": "French (19%)" + "Balojan": "Vietnamese (42%)", + "okunamayanad": "Turkish (23%)", + "Gallium, Matt TCL": "French (28%)", + "Nuts0905": "European Spanish", + "Baymaxawa": "Chinese Simplified" }, "modmenu": { "links": {