diff --git a/.github/workflows/build_reusable.yml b/.github/workflows/build_reusable.yml new file mode 100644 index 00000000..01e0874f --- /dev/null +++ b/.github/workflows/build_reusable.yml @@ -0,0 +1,50 @@ +name: reusable-build +on: + workflow_call: + outputs: + artifact-name: + description: "Name of the uploaded build artifact" + value: ${{ jobs.build.outputs.artifact-name }} + +jobs: + build: + name: Build Project + runs-on: ubuntu-latest + outputs: + artifact-name: ${{ steps.upload.outputs.artifact-name }} + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Setup JDK + uses: actions/setup-java@v4 + with: + java-version: 21 + distribution: 'microsoft' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + with: + gradle-version: wrapper + + - name: Cache Gradle packages + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Build with Gradle + run: ./gradlew buildAndCollect --no-daemon + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: build-artifacts + path: build/libs/ diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index c975988e..e1e54d9b 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -1,54 +1,7 @@ -# Build Workflow - name: Build & test -on: - pull_request: - -concurrency: - group: ${{ github.head_ref || format('{0}-{1}', github.ref, github.run_number) }} - cancel-in-progress: true - -permissions: - contents: read +on: [ pull_request ] jobs: - build: - name: Build - - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 10 - - - name: Set up JDK 21 - uses: actions/setup-java@v4 - with: - java-version: 21 - distribution: temurin - - - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - **/loom-cache - **/prebundled-jars - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - - name: Chmod Gradle - run: chmod +x ./gradlew - - - name: Build - run: ./gradlew build --no-daemon - - - name: Upload Build Artifacts - uses: actions/upload-artifact@v4 - with: - name: dev-artifacts - path: build/libs/ + build: + uses: ./.github/workflows/build_reusable.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 6227849a..dcaac5a0 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,42 +1,19 @@ name: Publish Mod -on: - workflow_dispatch: - inputs: - mod-version: - description: 'Mod version:' - required: true +on: [workflow_dispatch] # Manual trigger -jobs: - publish: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Java - uses: actions/setup-java@v4 - with: - java-version: '21' - distribution: 'adopt' - - - name: Build - run: ./gradlew build - - - name: Publish - uses: Kir-Antipov/mc-publish@v3.3 - with: - name: Redstone Tools ${{ github.event.inputs.mod-version }} +permissions: + contents: write - modrinth-id: 9ySQVrz2 - modrinth-token: ${{ secrets.MODRINTH_TOKEN }} - - # curseforge-id: 849609 - # curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} - - github-tag: ${{ github.event.inputs.mod-version }} - github-generate-changelog: false - github-token: ${{ secrets.RELEASE_TOKEN }} - - files-primary: build/libs/redstonetools-${{ github.event.inputs.mod-version }}.jar - files-secondary: '' +jobs: + build: + runs-on: ubuntu-22.04 + container: + image: mcr.microsoft.com/openjdk/jdk:21-ubuntu + options: --user root + steps: + - uses: actions/checkout@v4 + - run: ./gradlew build publishMods + env: + # modrinth-id: 9ySQVrz2 + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }} \ No newline at end of file diff --git a/build.gradle b/build.gradle index f1362feb..0a0f6f13 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,11 @@ plugins { - id 'fabric-loom' version '1.10-SNAPSHOT' + id 'fabric-loom' version '1.11-SNAPSHOT' id 'maven-publish' id 'com.github.johnrengelman.shadow' version '8.+' + id "me.modmuss50.mod-publish-plugin" version "1.1.0" } -version = project.mod_version +version = project.mod_version + "+" + stonecutter.current.version group = project.maven_group base { @@ -22,6 +23,25 @@ loom { } } +stonecutter { + swaps["mouse_clicked_params"] = eval(current.version, "<1.21.10") ? "double mouseX, double mouseY, int button" : "Click click, boolean doubleClick" // mouseClicked + swaps["mouse_clicked_args"] = eval(current.version, "<1.21.10") ? "mouseX, mouseY, button" : "click, doubleClick" + swaps["on_mouse_clicked_args"] = eval(current.version, "<1.21.10") ? "(int) mouseX, (int) mouseY, button" : "click, doubleClick" // onMouseClicked + swaps["dragged_released_params"] = eval(current.version, "<1.21.10") ? "double mouseX, double mouseY, int button" : "Click click" // mouseDragged, mouseReleased + swaps["dragged_released_args"] = eval(current.version, "<1.21.10") ? "mouseX, mouseY, button" : "click" + swaps["on_released_args"] = eval(current.version, "<1.21.10") ? "(int) mouseX, (int) mouseY, button" : "click" // onMouseReleased + swaps["keyinput_params"] = eval(current.version, "<1.21.10") ? "int keyCode, int scanCode, int modifiers" : "KeyInput input" // keyPressed, keyReleased + swaps["keyinput_args"] = eval(current.version, "<1.21.10") ? "keyCode, scanCode, modifiers" : "input" + swaps["charinput_params"] = eval(current.version, "<1.21.10") ? "char chr, int modifiers" : "CharInput input" // charTyped + swaps["charinput_args"] = eval(current.version, "<1.21.10") ? "chr, modifiers" : "input" + swaps["click_and_inputs_imports"] = eval(current.version, "<1.21.10") ? "" : + "//\nimport net.minecraft.client.gui.Click;\nimport net.minecraft.client.input.KeyInput;\nimport net.minecraft.client.input.CharInput;" + + swaps["get_x"] = eval(current.version, "<1.21.10") ? "x" : "getX()" + swaps["get_y"] = eval(current.version, "<1.21.10") ? "y" : "getY()" + swaps["get_width"] = eval(current.version, "<1.21.10") ? "entryWidth" : "getWidth()" +} + repositories { // Add repositories to retrieve artifacts from in here. // You should only use this when depending on other mods because @@ -68,6 +88,18 @@ dependencies { modApi "maven.modrinth:malilib:${project.malilib_version}" } +loom { + decompilerOptions.named("vineflower") { + options.put("mark-corresponding-synthetics", "1") // Adds names to lambdas - useful for mixins + } + + runConfigs.configureEach { + ideConfigGenerated(true) +// vmArgs("-Dmixin.debug.export=true") // Exports transformed classes for debugging + runDir = "../../run" // Shares the run directory between versions + } +} + processResources { inputs.property "version", project.version inputs.property "minecraft_version", project.minecraft_version @@ -77,31 +109,45 @@ processResources { filteringCharset "UTF-8" filesMatching("fabric.mod.json") { - expand "version": project.version, + expand( + "version": project.version, "minecraft_version": project.minecraft_version, "minecraft_version_out": project.minecraft_version_out, "malilib_version": project.minecraft_version_out, "loader_version": project.loader_version + ) + } +} + +tasks.register("collectFile") { + group = "build" + mustRunAfter("build") + + doLast { +// println "build/libs/${project.archives_base_name}-${project.mod_version}+${project.minecraft_version}.jar" + copy { + from file("build/libs/${project.archives_base_name}-${project.mod_version}+${project.minecraft_version}.jar") + into rootProject.file("build/libs") + } } } -def targetJavaVersion = 21 +tasks.register("buildAndCollect") { + group = "build" + dependsOn(tasks.named("build"), tasks.named("collectFile")) +} + tasks.withType(JavaCompile).configureEach { // ensure that the encoding is set to UTF-8, no matter what the system default is // this fixes some edge cases with special characters not displaying correctly // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html // If Javadoc is generated, this must be specified in that task too. it.options.encoding = "UTF-8" - if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) { - it.options.release.set(targetJavaVersion) - } + it.options.release.set(21) } java { - def javaVersion = JavaVersion.toVersion(targetJavaVersion) - if (JavaVersion.current() < javaVersion) { - toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion) - } + toolchain.languageVersion = JavaLanguageVersion.of(21) // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task // if it is present. // If you remove this line, sources will not be generated. @@ -130,4 +176,14 @@ publishing { // The repositories here will be used for publishing your artifact, not for // retrieving dependencies. } +} + +publishMods { + github { + accessToken = providers.environmentVariable("GITHUB_TOKEN") + repository = "RedstoneTools/redstonetools-mod" + commitish = "main" + tagName = "v${project.mod_version}" + allowEmptyFiles = true + } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 285a7c25..32cc191e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,20 +5,5 @@ org.gradle.parallel=true maven_group = tools.redstone archives_base_name = redstonetools -loader_version=0.16.10 -mod_version = v3.1.3 - -minecraft_version=1.21.8 -minecraft_version_out=1.21.8 -yarn_mappings=1.21.8+build.1 - -fabric_version=0.130.0+1.21.8 -malilib_version=0.25.4 -worldedit_version=1.21.7:7.3.15 -#minecraft_version=1.21.4 -#minecraft_version_out=1.21.4 -#yarn_mappings=1.21.4+build.8 -# -#fabric_version=0.119.3+1.21.4 -#malilib_version=0.23.1 -#worldedit_version=1.21.4:7.3.10 +loader_version=0.17.3 +mod_version = v3.1.4 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d6e308a6..d706aba6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle b/settings.gradle index 11191ef9..910cb56d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,12 +1,33 @@ pluginManagement { repositories { - maven { - name = 'Fabric' - url = 'https://maven.fabricmc.net/' - } mavenCentral() gradlePluginPortal() + + maven {url = "https://maven.fabricmc.net/"} + maven { + name = "KikuGie Snapshots" + url = "https://maven.kikugie.dev/snapshots" + } } } -rootProject.name = "redstonetools-mod" \ No newline at end of file +plugins { + id "dev.kikugie.stonecutter" version "0.7.10" +} + +rootProject.name = "redstonetools-mod" + +include "1.21.4" +include "1.21.5" +include "1.21.8" +include "1.21.10" + +stonecutter { + kotlinController = false + centralScript = "build.gradle" + + create(rootProject) { + versions "1.21.4", "1.21.5", "1.21.8", "1.21.10" + vcsVersion = "1.21.10" + } +} diff --git a/src/client/java/tools/redstone/redstonetools/features/toggleable/AirPlaceFeature.java b/src/client/java/tools/redstone/redstonetools/features/toggleable/AirPlaceFeature.java index bbb63146..67002720 100644 --- a/src/client/java/tools/redstone/redstonetools/features/toggleable/AirPlaceFeature.java +++ b/src/client/java/tools/redstone/redstonetools/features/toggleable/AirPlaceFeature.java @@ -2,7 +2,13 @@ import com.mojang.brigadier.CommandDispatcher; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +//? if <1.21.10 { +/*import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +*///?} else { +import net.fabricmc.fabric.api.client.rendering.v1.world.WorldRenderContext; +import net.fabricmc.fabric.api.client.rendering.v1.world.WorldRenderEvents; +import net.minecraft.client.render.state.OutlineRenderState; +//?} import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.Camera; @@ -52,7 +58,8 @@ public static boolean canAirPlace(PlayerEntity player) { return false; // itembind in hand - if (ItemUtils.containsCommand(itemStack)) return false; + if (ItemUtils.containsCommand(itemStack)) + return false; // TODO: shouldn't offhand also be checked? // rocket boost for elytra @@ -68,7 +75,8 @@ public static BlockHitResult findAirPlaceBlockHit(PlayerEntity playerEntity) { } { - // register ghost block renderer + //? if <1.21.10 { + /*// register ghost block renderer WorldRenderEvents.BEFORE_BLOCK_OUTLINE.register((context, blockOutlineContext) -> { if (!isEnabled()) return true; @@ -101,7 +109,7 @@ public static BlockHitResult findAirPlaceBlockHit(PlayerEntity playerEntity) { if (blockState == null) return true; - /* render block outline */ + /^ render block outline ^/ Camera camera = client.gameRenderer.getCamera(); Vec3d camPos = camera.getPos(); @@ -119,6 +127,65 @@ public static BlockHitResult findAirPlaceBlockHit(PlayerEntity playerEntity) { return true; }); + *///?} else { + WorldRenderEvents.END_MAIN.register(new WorldRenderEvents.EndMain() { + @Override + public void endMain(WorldRenderContext context) { + if (!AirPlaceFeature.this.isEnabled()) + return; + if (!Configs.General.AIRPLACE_SHOW_OUTLINE.getBooleanValue()) + return; + + MinecraftClient client = MinecraftClient.getInstance(); + if (client.player == null || client.interactionManager == null) + return; + if (MinecraftClient.getInstance().crosshairTarget == null) + return; + if (MinecraftClient.getInstance().crosshairTarget.getType() != HitResult.Type.MISS) + return; + + if (!canAirPlace(client.player)) + return; + + BlockHitResult hitResult = findAirPlaceBlockHit(client.player); + BlockPos blockPos = hitResult.getBlockPos(); + if (MinecraftClient.getInstance().world == null) + return; + if (!MinecraftClient.getInstance().world.getBlockState(blockPos).isAir()) + return; + + if (blockPos.getY() > 319 || blockPos.getY() < -64) + return; + + BlockState blockState = ItemUtils.getUseState(client.player, + client.player.getMainHandStack(), + reach); + if (AutoRotateClient.isEnabled.getBooleanValue()) { + blockState = BlockUtils.rotate(blockState); + } + if (blockState == null) + return; + + Camera camera = client.gameRenderer.getCamera(); + Vec3d camPos = camera.getPos(); + + VertexConsumer consumer = context.consumers().getBuffer(RenderLayer.getLines()); + + ((WorldRendererInvoker) (context.worldRenderer())).invokeDrawBlockOutline( + context.matrices(), + consumer, + camPos.x, camPos.y, camPos.z, + new OutlineRenderState( + blockPos, + false, + false, + blockState.getOutlineShape(MinecraftClient.getInstance().world, blockPos) + ), + Colors.BLACK + ); + } + }); + //?} } } diff --git a/src/client/java/tools/redstone/redstonetools/malilib/GuiConfigs.java b/src/client/java/tools/redstone/redstonetools/malilib/GuiConfigs.java index 04bb88ed..8b74fdf0 100644 --- a/src/client/java/tools/redstone/redstonetools/malilib/GuiConfigs.java +++ b/src/client/java/tools/redstone/redstonetools/malilib/GuiConfigs.java @@ -7,12 +7,9 @@ import fi.dy.masa.malilib.gui.button.IButtonActionListener; import fi.dy.masa.malilib.util.StringUtils; import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; import tools.redstone.redstonetools.RedstoneTools; import tools.redstone.redstonetools.malilib.config.Configs; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.util.Collections; import java.util.List; @@ -76,28 +73,14 @@ public List getConfigs() { return ConfigOptionWrapper.createFor(configs); } - Method m; - @Override public void render(DrawContext drawContext, int mouseX, int mouseY, float partialTicks) { if (this.client != null && this.client.world == null) this.renderPanoramaBackground(drawContext, partialTicks); - try { - this.applyBlur(drawContext); - } catch (NoSuchMethodError ignored) { - if (m == null) { - try { - m = Screen.class.getDeclaredMethod("method_57734"); - } catch (Exception e) { - throw new RuntimeException("Something went wrong. Contact a redstonetools developer", e); - } - } - try { - m.setAccessible(true); - m.invoke(this); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException("Something went wrong. Contact a redstonetools developer", e); - } - } + //? if <=1.21.5 { + /*this.applyBlur(); + *///?} else { + this.applyBlur(drawContext); + //?} super.render(drawContext, mouseX, mouseY, partialTicks); } diff --git a/src/client/java/tools/redstone/redstonetools/malilib/GuiMacroEditor.java b/src/client/java/tools/redstone/redstonetools/malilib/GuiMacroEditor.java index 142fd0ff..9447c802 100644 --- a/src/client/java/tools/redstone/redstonetools/malilib/GuiMacroEditor.java +++ b/src/client/java/tools/redstone/redstonetools/malilib/GuiMacroEditor.java @@ -12,14 +12,16 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.TextFieldWidget; +/*$ click_and_inputs_imports {*/// +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.KeyInput; +import net.minecraft.client.input.CharInput;/*$}*/ import net.minecraft.text.Text; import tools.redstone.redstonetools.malilib.config.MacroManager; import tools.redstone.redstonetools.malilib.widget.action.CommandListWidget; import tools.redstone.redstonetools.malilib.widget.macro.MacroBase; import tools.redstone.redstonetools.utils.GuiUtils; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; @@ -43,43 +45,23 @@ public GuiMacroEditor(Text title, MacroBase macro, GuiMacroManager parent) { this.macro = macro; } - private static Method bkRenderMethod; - private static Method beRenderMethod; - private static Method bmRenderMethod; - private static Method waksRenderMethod; - - @Override public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) { super.render(context, mouseX, mouseY, deltaTicks); buttonKeybind.updateDisplayString(); buttonEnabled.updateDisplayString(); buttonMuted.updateDisplayString(); - try { - buttonKeybind.render(context, mouseX, mouseY, buttonKeybind.isMouseOver(mouseX, mouseY)); - buttonEnabled.render(context, mouseX, mouseY, buttonEnabled.isMouseOver(mouseX, mouseY)); - buttonMuted.render(context, mouseX, mouseY, buttonMuted.isMouseOver(mouseX, mouseY)); - widgetAdvancedKeybindSettings.render(context, mouseX, mouseY, widgetAdvancedKeybindSettings.isMouseOver(mouseX, mouseY)); - } catch (NoSuchMethodError ignored) { - if (bkRenderMethod == null) { - try { - bkRenderMethod = ConfigButtonKeybind.class.getMethod("render", int.class, int.class, boolean.class, DrawContext.class); - beRenderMethod = ConfigButtonBoolean.class.getMethod("render", int.class, int.class, boolean.class, DrawContext.class); - bmRenderMethod = ConfigButtonBoolean.class.getMethod("render", int.class, int.class, boolean.class, DrawContext.class); - waksRenderMethod = WidgetKeybindSettings.class.getMethod("render", int.class, int.class, boolean.class, DrawContext.class); - } catch (Exception e) { - throw new RuntimeException("Something went wrong. Contact a redstonetools developer", e); - } - } - try { - bkRenderMethod.invoke(buttonKeybind, mouseX, mouseY, buttonKeybind.isMouseOver(mouseX, mouseY), context); - beRenderMethod.invoke(buttonEnabled, mouseX, mouseY, buttonEnabled.isMouseOver(mouseX, mouseY), context); - bmRenderMethod.invoke(buttonMuted, mouseX, mouseY, buttonMuted.isMouseOver(mouseX, mouseY), context); - waksRenderMethod.invoke(widgetAdvancedKeybindSettings, mouseX, mouseY, widgetAdvancedKeybindSettings.isMouseOver(mouseX, mouseY), context); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException("Something went wrong. Contact a redstonetools developer", e); - } - } + //? if <=1.21.5 { + /*buttonKeybind.render(mouseX, mouseY, buttonKeybind.isMouseOver(mouseX, mouseY), context); + buttonEnabled.render(mouseX, mouseY, buttonEnabled.isMouseOver(mouseX, mouseY), context); + buttonMuted.render(mouseX, mouseY, buttonMuted.isMouseOver(mouseX, mouseY), context); + widgetAdvancedKeybindSettings.render(mouseX, mouseY, widgetAdvancedKeybindSettings.isMouseOver(mouseX, mouseY), context); + *///?} else { + buttonKeybind.render(context, mouseX, mouseY, buttonKeybind.isMouseOver(mouseX, mouseY)); + buttonEnabled.render(context, mouseX, mouseY, buttonEnabled.isMouseOver(mouseX, mouseY)); + buttonMuted.render(context, mouseX, mouseY, buttonMuted.isMouseOver(mouseX, mouseY)); + widgetAdvancedKeybindSettings.render(context, mouseX, mouseY, widgetAdvancedKeybindSettings.isMouseOver(mouseX, mouseY)); + //?} if (errorCountDown > 0.0f) { context.drawText(this.textRenderer, "Name already exists!", mouseX, mouseY - 10, 0xFFFFFFFF, true); errorCountDown -= deltaTicks; @@ -110,21 +92,24 @@ protected void init() { .build()); this.widgetAdvancedKeybindSettings = new WidgetKeybindSettings(akoLayout.x(), akoLayout.y(), akoLayout.width(), akoLayout.height(), macro.hotkey.getKeybind(), "", null, null) { @Override - protected boolean onMouseClickedImpl(int mouseX, int mouseY, int mouseButton) { - if (mouseButton == 0) { + protected boolean onMouseClickedImpl(/*? if >=1.21.10 {*/Click click, boolean doubleClick/*?} else {*//*int mouseX, int mouseY, int button*//*?}*/) { + //? if >=1.21.10 { + int button = click.button(); + //?} + if (button == 0) { GuiBase.openGui(new GuiKeybindSettings(this.keybind, this.keybindName, null, fi.dy.masa.malilib.util.GuiUtils.getCurrentScreen())); return true; - } else return super.onMouseClickedImpl(mouseX, mouseY, mouseButton); + } else return super.onMouseClickedImpl(/*? if >=1.21.10 {*/click, doubleClick/*?} else {*//*mouseX, mouseY, button*//*?}*/); } }; this.buttonKeybind = new ConfigButtonKeybind(bkLayout.x(), bkLayout.y(), bkLayout.width(), bkLayout.height(), macro.hotkey.getKeybind(), null) { @Override - public boolean onMouseClicked(int mx, int my, int mb) { - if (!this.isMouseOver(mx, my)) { + public boolean onMouseClicked(/*? if >=1.21.10 {*/Click click, boolean doubleClick/*?} else {*//*int mouseX, int mouseY, int button*//*?}*/) { + if (!this.isMouseOver(/*? if >=1.21.10 {*/(int) click.x(), (int) click.y()/*?} else {*//*mouseX, mouseY*//*?}*/)) { this.selected = false; return false; } else { - return super.onMouseClicked(mx, my, mb); + return super.onMouseClicked(/*? if >=1.21.10 {*/click, doubleClick/*?} else {*//*mouseX, mouseY, button*//*?}*/); } } @Override @@ -159,20 +144,23 @@ public void updateDisplayString() { } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - buttonEnabled.onKeyTyped(keyCode, scanCode, modifiers); - buttonMuted.onKeyTyped(keyCode, scanCode, modifiers); - widgetAdvancedKeybindSettings.onKeyTyped(keyCode, scanCode, modifiers); + public boolean keyPressed(/*$ keyinput_params {*/KeyInput input/*$}*/) { + //? if >=1.21.10 { + int keyCode = input.key(); + //?} + buttonEnabled.onKeyTyped(/*$ keyinput_args {*/input/*$}*/); + buttonMuted.onKeyTyped(/*$ keyinput_args {*/input/*$}*/); + widgetAdvancedKeybindSettings.onKeyTyped(/*$ keyinput_args {*/input/*$}*/); buttonKeybind.onKeyPressed(keyCode); if (buttonKeybind.isSelected() && keyCode == 256) { this.macro.hotkey.getKeybind().clearKeys(); buttonKeybind.onClearSelection(); return true; } - if (this.commandList.keyPressed(keyCode, scanCode, modifiers)) + if (this.commandList.keyPressed(/*$ keyinput_args {*/input/*$}*/)) return true; else - return super.keyPressed(keyCode, scanCode, modifiers); + return super.keyPressed(/*$ keyinput_args {*/input/*$}*/); } @Override @@ -181,55 +169,57 @@ public void mouseMoved(double mouseX, double mouseY) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (buttonKeybind.onMouseClicked((int) mouseX, (int) mouseY, button)) { + public boolean mouseClicked(/*$ mouse_clicked_params {*/Click click, boolean doubleClick/*$}*/) { + if (buttonKeybind.onMouseClicked(/*$ on_mouse_clicked_args {*/click, doubleClick/*$}*/)) { if (this.getFocused() != null) { this.getFocused().setFocused(false); } return true; } - else if (buttonEnabled.onMouseClicked((int) mouseX, (int) mouseY, button)) { + else if (buttonEnabled.onMouseClicked(/*$ on_mouse_clicked_args {*/click, doubleClick/*$}*/)) { if (this.getFocused() != null) { this.getFocused().setFocused(false); } return true; } - else if (buttonMuted.onMouseClicked((int) mouseX, (int) mouseY, button)) { + else if (buttonMuted.onMouseClicked(/*$ on_mouse_clicked_args {*/click, doubleClick/*$}*/)) { if (this.getFocused() != null) { this.getFocused().setFocused(false); } return true; } - else if (widgetAdvancedKeybindSettings.onMouseClicked((int) mouseX, (int) mouseY, button)) { + else if (widgetAdvancedKeybindSettings.onMouseClicked(/*$ on_mouse_clicked_args {*/click, doubleClick/*$}*/)) { if (this.getFocused() != null) { this.getFocused().setFocused(false); } return true; } - else if (super.mouseClicked(mouseX, mouseY, button)) return true; - else return commandList.mouseClicked(mouseX, mouseY, button); + else if (super.mouseClicked(/*$ mouse_clicked_args {*/click, doubleClick/*$}*/)) return true; + else return commandList.mouseClicked(/*$ mouse_clicked_args {*/click, doubleClick/*$}*/); } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { - buttonKeybind.onMouseReleased((int) mouseX, (int) mouseY, button); - buttonEnabled.onMouseReleased((int) mouseX, (int) mouseY, button); - buttonMuted.onMouseReleased((int) mouseX, (int) mouseY, button); - widgetAdvancedKeybindSettings.onMouseReleased((int) mouseX, (int) mouseY, button); - if (commandList.mouseReleased(mouseX, mouseY, button)) return true; - else return super.mouseReleased(mouseX, mouseY, button); + public boolean mouseReleased(/*$ dragged_released_params {*/Click click/*$}*/) { + buttonKeybind.onMouseReleased(/*$ on_released_args {*/click/*$}*/); + buttonEnabled.onMouseReleased(/*$ on_released_args {*/click/*$}*/); + buttonMuted.onMouseReleased(/*$ on_released_args {*/click/*$}*/); + widgetAdvancedKeybindSettings.onMouseReleased(/*$ on_released_args {*/click/*$}*/); + if (commandList.mouseReleased(/*$ dragged_released_args {*/click/*$}*/)) return true; + else return super.mouseReleased(/*$ dragged_released_args {*/click/*$}*/); } @Override - public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { - if (commandList.mouseDragged(mouseX, mouseY, button, deltaX, deltaY)) return true; - else return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); + public boolean mouseDragged(/*$ dragged_released_params {*/Click click/*$}*/, double deltaX, double deltaY) { + if (commandList.mouseDragged(/*$ dragged_released_args {*/click/*$}*/, deltaX, deltaY)) return true; + else return super.mouseDragged(/*$ dragged_released_args {*/click/*$}*/, deltaX, deltaY); } @Override public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) { if (commandList.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount)) return true; - else if (buttonKeybind.onMouseScrolled((int) mouseX, (int) mouseY, horizontalAmount, verticalAmount)) + + //? if <1.21.10 { + /*else if (buttonKeybind.onMouseScrolled((int) mouseX, (int) mouseY, horizontalAmount, verticalAmount)) return true; else if (widgetAdvancedKeybindSettings.onMouseScrolled((int) mouseX, (int) mouseY, horizontalAmount, verticalAmount)) return true; @@ -237,23 +227,33 @@ else if (buttonEnabled.onMouseScrolled((int) mouseX, (int) mouseY, horizontalAmo return true; else if (buttonMuted.onMouseScrolled((int) mouseX, (int) mouseY, horizontalAmount, verticalAmount)) return true; + *///?} else { + else if (buttonKeybind.onMouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount)) + return true; + else if (widgetAdvancedKeybindSettings.onMouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount)) + return true; + else if (buttonEnabled.onMouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount)) + return true; + else if (buttonMuted.onMouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount)) + return true; + //?} else return super.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount); } @Override - public boolean keyReleased(int keyCode, int scanCode, int modifiers) { - if (commandList.keyReleased(keyCode, scanCode, modifiers)) return true; - else return super.keyReleased(keyCode, scanCode, modifiers); + public boolean keyReleased(/*$ keyinput_params {*/KeyInput input/*$}*/) { + if (commandList.keyReleased(/*$ keyinput_args {*/input/*$}*/)) return true; + else return super.keyReleased(/*$ keyinput_args {*/input/*$}*/); } @Override - public boolean charTyped(char chr, int modifiers) { - if (commandList.charTyped(chr, modifiers)) return true; - else if (buttonKeybind.onCharTyped(chr, modifiers)) return true; - else if (buttonEnabled.onCharTyped(chr, modifiers)) return true; - else if (buttonMuted.onCharTyped(chr, modifiers)) return true; - else if (widgetAdvancedKeybindSettings.onCharTyped(chr, modifiers)) return true; - else return super.charTyped(chr, modifiers); + public boolean charTyped(/*$ charinput_params {*/CharInput input/*$}*/) { + if (commandList.charTyped(/*$ charinput_args {*/input/*$}*/)) return true; + else if (buttonKeybind.onCharTyped(/*$ charinput_args {*/input/*$}*/)) return true; + else if (buttonEnabled.onCharTyped(/*$ charinput_args {*/input/*$}*/)) return true; + else if (buttonMuted.onCharTyped(/*$ charinput_args {*/input/*$}*/)) return true; + else if (widgetAdvancedKeybindSettings.onCharTyped(/*$ charinput_args {*/input/*$}*/)) return true; + else return super.charTyped(/*$ charinput_args {*/input/*$}*/); } @Override diff --git a/src/client/java/tools/redstone/redstonetools/malilib/GuiMacroManager.java b/src/client/java/tools/redstone/redstonetools/malilib/GuiMacroManager.java index bd764986..055daa25 100644 --- a/src/client/java/tools/redstone/redstonetools/malilib/GuiMacroManager.java +++ b/src/client/java/tools/redstone/redstonetools/malilib/GuiMacroManager.java @@ -7,7 +7,6 @@ import fi.dy.masa.malilib.gui.button.IButtonActionListener; import fi.dy.masa.malilib.gui.interfaces.ISelectionListener; import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; import org.jetbrains.annotations.Nullable; import tools.redstone.redstonetools.malilib.config.MacroManager; import tools.redstone.redstonetools.malilib.widget.macro.MacroBase; @@ -15,8 +14,6 @@ import tools.redstone.redstonetools.malilib.widget.macro.WidgetMacroEntry; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -30,28 +27,14 @@ public GuiMacroManager() { this.title = "Macro manager"; } - Method m; - @Override public void render(DrawContext drawContext, int mouseX, int mouseY, float partialTicks) { if (this.client != null && this.client.world == null) this.renderPanoramaBackground(drawContext, partialTicks); - try { - this.applyBlur(drawContext); - } catch (NoSuchMethodError ignored) { - if (m == null) { - try { - m = Screen.class.getDeclaredMethod("method_57734"); - } catch (Exception e) { - throw new RuntimeException("Something went wrong. Contact a redstonetools developer", e); - } - } - try { - m.setAccessible(true); - m.invoke(this); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException("Something went wrong. Contact a redstonetools developer", e); - } - } + //? if <=1.21.5 { + /*this.applyBlur(); + *///?} else { + this.applyBlur(drawContext); + //?} super.render(drawContext, mouseX, mouseY, partialTicks); } diff --git a/src/client/java/tools/redstone/redstonetools/malilib/widget/action/CommandEditScreen.java b/src/client/java/tools/redstone/redstonetools/malilib/widget/action/CommandEditScreen.java index 9e9be1d7..6bf6df3a 100644 --- a/src/client/java/tools/redstone/redstonetools/malilib/widget/action/CommandEditScreen.java +++ b/src/client/java/tools/redstone/redstonetools/malilib/widget/action/CommandEditScreen.java @@ -5,6 +5,10 @@ import net.minecraft.client.gui.screen.ChatInputSuggestor; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.TextFieldWidget; +/*$ click_and_inputs_imports {*/// +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.KeyInput; +import net.minecraft.client.input.CharInput;/*$}*/ import net.minecraft.client.util.InputUtil; import net.minecraft.text.Text; import tools.redstone.redstonetools.malilib.GuiMacroEditor; @@ -63,16 +67,16 @@ public void close() { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (!commandField.mouseClicked(mouseX, mouseY, button)) { - if (!commandSuggester.mouseClicked(mouseX, mouseY, button)) { + public boolean mouseClicked(/*$ mouse_clicked_params {*/Click click, boolean doubleClick/*$}*/) { + if (!commandField.mouseClicked(/*$ mouse_clicked_args {*/click, doubleClick/*$}*/)) { + if (!commandSuggester.mouseClicked(/*? if >=1.21.10 {*/click/*?} else {*//*mouseX, mouseY, button*//*?}*/)) { close(); } else { commandField.setFocused(true); } return false; } - return super.mouseClicked(mouseX, mouseY, button); + return super.mouseClicked(/*$ mouse_clicked_args {*/click, doubleClick/*$}*/); } @Override @@ -81,23 +85,26 @@ public boolean mouseScrolled(double mouseX, double mouseY, double amount, double } @Override - public boolean charTyped(char chr, int modifiers) { - return commandField.charTyped(chr, modifiers); + public boolean charTyped(/*$ charinput_params {*/CharInput input/*$}*/) { + return commandField.charTyped(/*$ charinput_args {*/input/*$}*/); } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + public boolean keyPressed(/*$ keyinput_params {*/KeyInput input/*$}*/) { + //? if >=1.21.10 { + int keyCode = input.key(); + //?} if (keyCode == InputUtil.GLFW_KEY_ESCAPE || keyCode == InputUtil.GLFW_KEY_ENTER || keyCode == InputUtil.GLFW_KEY_KP_ENTER) { close(); return true; } - commandSuggester.keyPressed(keyCode, scanCode, modifiers); + commandSuggester.keyPressed(/*$ keyinput_args {*/input/*$}*/); - return commandField.keyPressed(keyCode, scanCode, modifiers); + return commandField.keyPressed(/*$ keyinput_args {*/input/*$}*/); } @Override - public boolean keyReleased(int keyCode, int scanCode, int modifiers) { - return commandField.keyReleased(keyCode, scanCode, modifiers); + public boolean keyReleased(/*$ keyinput_params {*/KeyInput input/*$}*/) { + return commandField.keyReleased(/*$ keyinput_args {*/input/*$}*/); } } diff --git a/src/client/java/tools/redstone/redstonetools/malilib/widget/action/CommandListWidget.java b/src/client/java/tools/redstone/redstonetools/malilib/widget/action/CommandListWidget.java index bc3cc7fa..0338b8cc 100644 --- a/src/client/java/tools/redstone/redstonetools/malilib/widget/action/CommandListWidget.java +++ b/src/client/java/tools/redstone/redstonetools/malilib/widget/action/CommandListWidget.java @@ -8,14 +8,15 @@ import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.client.gui.widget.EntryListWidget; import net.minecraft.client.gui.widget.TextFieldWidget; +/*$ click_and_inputs_imports {*/// +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.KeyInput; +import net.minecraft.client.input.CharInput;/*$}*/ import net.minecraft.text.Text; import tools.redstone.redstonetools.macros.actions.CommandAction; import tools.redstone.redstonetools.malilib.GuiMacroEditor; import tools.redstone.redstonetools.malilib.widget.macro.MacroBase; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - public class CommandListWidget extends EntryListWidget { private final GuiMacroEditor parent; private final MacroBase macro; @@ -44,6 +45,12 @@ public void addEntry() { this.centerScrollOn(this.getFirst()); } + //? if >=1.21.10 { + private CommandEntry getFirst() { + return this.children().getFirst(); + } + //?} + CommandEntry previousSelected = this.getSelectedOrNull(); @Override @@ -79,27 +86,27 @@ public void mouseMoved(double mouseX, double mouseY) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { + public boolean mouseClicked(/*$ mouse_clicked_params {*/Click click, boolean doubleClick/*$}*/) { if (this.getSelectedOrNull() != null) { - this.getSelectedOrNull().mouseClicked(mouseX, mouseY, button); + this.getSelectedOrNull().mouseClicked(/*$ mouse_clicked_args {*/click, doubleClick/*$}*/); } - return super.mouseClicked(mouseX, mouseY, button); + return super.mouseClicked(/*$ mouse_clicked_args {*/click, doubleClick/*$}*/); } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { + public boolean mouseReleased(/*$ dragged_released_params {*/Click click/*$}*/) { if (this.getSelectedOrNull() != null) { - return this.getSelectedOrNull().mouseReleased(mouseX, mouseY ,button); + return this.getSelectedOrNull().mouseReleased(/*$ dragged_released_args {*/click/*$}*/); } - return super.mouseReleased(mouseX, mouseY, button); + return super.mouseReleased(/*$ dragged_released_args {*/click/*$}*/); } @Override - public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { + public boolean mouseDragged(/*$ dragged_released_params {*/Click click/*$}*/, double deltaX, double deltaY) { if (this.getSelectedOrNull() != null) { - return this.getSelectedOrNull().mouseDragged(mouseX, mouseY, button, deltaX, deltaY); + return this.getSelectedOrNull().mouseDragged(/*$ dragged_released_args {*/click/*$}*/, deltaX, deltaY); } - return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); + return super.mouseDragged(/*$ dragged_released_args {*/click/*$}*/, deltaX, deltaY); } @Override @@ -111,27 +118,27 @@ public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmou } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + public boolean keyPressed(/*$ keyinput_params {*/KeyInput input/*$}*/) { if (this.getSelectedOrNull() != null) { - return this.getSelectedOrNull().keyPressed(keyCode, scanCode, modifiers); + return this.getSelectedOrNull().keyPressed(/*$ keyinput_args {*/input/*$}*/); } - return super.keyPressed(keyCode, scanCode, modifiers); + return super.keyPressed(/*$ keyinput_args {*/input/*$}*/); } @Override - public boolean keyReleased(int keyCode, int scanCode, int modifiers) { + public boolean keyReleased(/*$ keyinput_params {*/KeyInput input/*$}*/) { if (this.getSelectedOrNull() != null) { - return this.getSelectedOrNull().keyReleased(keyCode, scanCode, modifiers); + return this.getSelectedOrNull().keyReleased(/*$ keyinput_args {*/input/*$}*/); } - return super.keyReleased(keyCode, scanCode, modifiers); + return super.keyReleased(/*$ keyinput_args {*/input/*$}*/); } @Override - public boolean charTyped(char chr, int modifiers) { + public boolean charTyped(/*$ charinput_params {*/CharInput input/*$}*/) { if (this.getSelectedOrNull() != null) { - return this.getSelectedOrNull().charTyped(chr, modifiers); + return this.getSelectedOrNull().charTyped(/*$ charinput_args {*/input/*$}*/); } - return super.charTyped(chr, modifiers); + return super.charTyped(/*$ charinput_args {*/input/*$}*/); } @Override @@ -167,20 +174,18 @@ public void refresh() { commandSuggester.refresh(); } - private static Method m; - @Override - public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickProgress) { + public void render(DrawContext context, /*? if <1.21.10 {*/ /*int index, int y, int x, int entryWidth, int entryHeight, *//*?}*/ int mouseX, int mouseY, boolean hovered, float tickProgress) { if (isFirst) { isFirst = false; - this.removeButton = new ButtonGeneric(x + entryWidth, y, -1, 20, "Remove"); + this.removeButton = new ButtonGeneric(/*$ get_x {*/getX()/*$}*/ + /*$ get_width {*/getWidth()/*$}*/, /*$ get_y {*/getY()/*$}*/, -1, 20, "Remove"); this.removeButton.setActionListener((t, g) -> { this.parent.macro.actions.remove(this.parent.children().indexOf(this)); this.parent.removeEntry(this); }); this.removeButton.setX(removeButton.getX() - (removeButton.getWidth() + 10)); } - removeButton.setY(y + 6); + removeButton.setY(/*$ get_y {*/getY()/*$}*/ + 6); if (this.isFocused()) { this.parent.parent.macro.setName(this.parent.parent.nameWidget.getText()); @@ -189,26 +194,17 @@ public void render(DrawContext context, int index, int y, int x, int entryWidth, } commandWidget.setFocused(this.isFocused()); - commandWidget.setPosition(x + 4, y + 3); - commandWidget.setWidth(entryWidth - 100); + commandWidget.setPosition(/*$ get_x {*/getX()/*$}*/ + 4, /*$ get_y {*/getY()/*$}*/ + 3); + commandWidget.setWidth(/*$ get_width {*/getWidth()/*$}*/ - 100); commandWidget.setHeight(26); commandWidget.render(context, mouseX, mouseY, tickProgress); - try { - removeButton.render(context, mouseX, mouseY, removeButton.isMouseOver()); - } catch (NoSuchMethodError ignored) { - if (m == null) { - try { - m = ButtonBase.class.getMethod("render", int.class, int.class, boolean.class, DrawContext.class); - } catch (Exception e) { - throw new RuntimeException("Something went wrong. Contact a redstonetools developer", e); - } - } - try { - m.invoke(removeButton, mouseX, mouseY, removeButton.isMouseOver(), context); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException("Something went wrong. Contact a redstonetools developer", e); - } - } + + //? if <=1.21.5 { + /*removeButton.render(mouseX, mouseY, removeButton.isMouseOver(), context); + *///?} else { + removeButton.render(context, mouseX, mouseY, removeButton.isMouseOver()); + //?} + command.command = commandWidget.getText(); } @@ -219,19 +215,19 @@ public void mouseMoved(double mouseX, double mouseY) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (commandWidget.mouseClicked(mouseX, mouseY, button)) return true; - else return removeButton.onMouseClicked((int)mouseX, (int)mouseY, button); + public boolean mouseClicked(/*$ mouse_clicked_params {*/Click click, boolean doubleClick/*$}*/) { + if (commandWidget.mouseClicked(/*$ mouse_clicked_args {*/click, doubleClick/*$}*/)) return true; + else return removeButton.onMouseClicked(/*$ on_mouse_clicked_args {*/click, doubleClick/*$}*/); } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { - return commandWidget.mouseReleased(mouseX, mouseY ,button); + public boolean mouseReleased(/*$ dragged_released_params {*/Click click/*$}*/) { + return commandWidget.mouseReleased(/*$ dragged_released_args {*/click/*$}*/); } @Override - public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { - return commandWidget.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); + public boolean mouseDragged(/*$ dragged_released_params {*/Click click/*$}*/, double deltaX, double deltaY) { + return commandWidget.mouseDragged(/*$ dragged_released_args {*/click/*$}*/, deltaX, deltaY); } @Override @@ -240,18 +236,18 @@ public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmou } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - return commandWidget.keyPressed(keyCode, scanCode, modifiers); + public boolean keyPressed(/*$ keyinput_params {*/KeyInput input/*$}*/) { + return commandWidget.keyPressed(/*$ keyinput_args {*/input/*$}*/); } @Override - public boolean keyReleased(int keyCode, int scanCode, int modifiers) { - return commandWidget.keyReleased(keyCode, scanCode, modifiers); + public boolean keyReleased(/*$ keyinput_params {*/KeyInput input/*$}*/) { + return commandWidget.keyReleased(/*$ keyinput_args {*/input/*$}*/); } @Override - public boolean charTyped(char chr, int modifiers) { - return commandWidget.charTyped(chr, modifiers); + public boolean charTyped(/*$ charinput_params {*/CharInput input/*$}*/) { + return commandWidget.charTyped(/*$ charinput_args {*/input/*$}*/); } @Override diff --git a/src/client/java/tools/redstone/redstonetools/malilib/widget/macro/WidgetListMacros.java b/src/client/java/tools/redstone/redstonetools/malilib/widget/macro/WidgetListMacros.java index 1ad24a57..4cb138c4 100644 --- a/src/client/java/tools/redstone/redstonetools/malilib/widget/macro/WidgetListMacros.java +++ b/src/client/java/tools/redstone/redstonetools/malilib/widget/macro/WidgetListMacros.java @@ -24,14 +24,7 @@ protected Collection getAllEntries() { @Override protected WidgetMacroEntry createListEntryWidget(int x, int y, int listIndex, boolean isOdd, MacroBase entry) { - WidgetMacroEntry temp; - try { - temp = new WidgetMacroEntry8(x, y, this.browserEntryWidth, - this.getBrowserEntryHeightFor(entry), isOdd, entry, listIndex, this); - } catch (NoSuchMethodError ignored) { - temp = new WidgetMacroEntry4(x, y, this.browserEntryWidth, - this.getBrowserEntryHeightFor(entry), isOdd, entry, listIndex, this); - } - return temp; + return new WidgetMacroEntry(x, y, this.browserEntryWidth, + this.getBrowserEntryHeightFor(entry), isOdd, entry, listIndex, this); } } diff --git a/src/client/java/tools/redstone/redstonetools/malilib/widget/macro/WidgetMacroEntry.java b/src/client/java/tools/redstone/redstonetools/malilib/widget/macro/WidgetMacroEntry.java index a4de1988..b54e3b7d 100644 --- a/src/client/java/tools/redstone/redstonetools/malilib/widget/macro/WidgetMacroEntry.java +++ b/src/client/java/tools/redstone/redstonetools/malilib/widget/macro/WidgetMacroEntry.java @@ -6,10 +6,15 @@ import fi.dy.masa.malilib.gui.button.ButtonGeneric; import fi.dy.masa.malilib.gui.button.IButtonActionListener; import fi.dy.masa.malilib.gui.widgets.WidgetListEntryBase; +import fi.dy.masa.malilib.render.RenderUtils; import fi.dy.masa.malilib.util.StringUtils; +import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import tools.redstone.redstonetools.malilib.GuiMacroEditor; import tools.redstone.redstonetools.malilib.config.MacroManager; +//? if >=1.21.10 { +import net.minecraft.client.gui.Click; +//?} public class WidgetMacroEntry extends WidgetListEntryBase { private final WidgetListMacros parent; @@ -17,10 +22,58 @@ public class WidgetMacroEntry extends WidgetListEntryBase { protected final boolean isOdd; protected final int buttonsStartX; - @Override + //? if <1.21.10 { + /*@Override public boolean canSelectAt(int mouseX, int mouseY, int mouseButton) { return super.canSelectAt(mouseX, mouseY, mouseButton) && mouseX < this.buttonsStartX; } + *///?} else { + @Override + public boolean canSelectAt(Click click) { + return super.canSelectAt(click) && click.x() < this.buttonsStartX; + } + //?} + + + //? if >=1.21.8 { + @Override + public void render(DrawContext context, int mouseX, int mouseY, boolean selected) { + if (selected || this.isMouseOver(mouseX, mouseY)) { + RenderUtils.drawRect(context, this.x, this.y, this.width, this.height, 0x70FFFFFF); + } else if (this.isOdd) { + RenderUtils.drawRect(context, this.x, this.y, this.width, this.height, 0x20FFFFFF); + } else { + RenderUtils.drawRect(context, this.x, this.y, this.width, this.height, 0x50FFFFFF); + } + this.drawString(context, this.x + 4, this.y + 7, 0xFFFFFFFF, this.macro.getName()); + + super.render(context, mouseX, mouseY, selected); + } + + @Override + public void postRenderHovered(DrawContext context, int mouseX, int mouseY, boolean selected) { + super.postRenderHovered(context, mouseX, mouseY, selected); + } + //?} else { + /*@Override + public void render(int mouseX, int mouseY, boolean selected, DrawContext context) { + if (selected || this.isMouseOver(mouseX, mouseY)) { + RenderUtils.drawRect(this.x, this.y, this.width, this.height, 0x70FFFFFF); + } else if (this.isOdd) { + RenderUtils.drawRect(this.x, this.y, this.width, this.height, 0x20FFFFFF); + } else { + RenderUtils.drawRect(this.x, this.y, this.width, this.height, 0x50FFFFFF); + } + this.drawString(this.x + 4, this.y + 7, 0xFFFFFFFF, this.macro.getName(), context); + + super.render(mouseX, mouseY, selected, context); + } + + @Override + public void postRenderHovered(int mouseX, int mouseY, boolean selected, DrawContext context) { + super.postRenderHovered(mouseX, mouseY, selected, context); + } + *///?} public WidgetMacroEntry(int x, int y, int width, int height, boolean isOdd, MacroBase macro, int listIndex, WidgetListMacros parent) { diff --git a/src/client/java/tools/redstone/redstonetools/malilib/widget/macro/WidgetMacroEntry4.java b/src/client/java/tools/redstone/redstonetools/malilib/widget/macro/WidgetMacroEntry4.java deleted file mode 100644 index a26926ae..00000000 --- a/src/client/java/tools/redstone/redstonetools/malilib/widget/macro/WidgetMacroEntry4.java +++ /dev/null @@ -1,94 +0,0 @@ -package tools.redstone.redstonetools.malilib.widget.macro; - -import fi.dy.masa.malilib.gui.widgets.WidgetBase; -import fi.dy.masa.malilib.gui.widgets.WidgetContainer; -import fi.dy.masa.malilib.render.RenderUtils; -import net.minecraft.client.gui.DrawContext; - -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -public class WidgetMacroEntry4 extends WidgetMacroEntry { - Method drawRectMethod; - Method drawStringMethod; - Method renderMethod; - Method postRenderHoveredMethod; - - MethodHandle superRenderHandle; - MethodHandle superPostRenderHoveredHandle; - - public WidgetMacroEntry4(int x, int y, int width, int height, boolean isOdd, MacroBase macro, int listIndex, WidgetListMacros parent) { - super(x, y, width, height, isOdd, macro, listIndex, parent); - try { - this.drawRectMethod = RenderUtils.class.getDeclaredMethod("drawRect", int.class, int.class, int.class, int.class, int.class); - this.drawStringMethod = WidgetBase.class.getMethod("drawString", int.class, int.class, int.class, String.class, DrawContext.class); - this.renderMethod = WidgetContainer.class.getMethod("render", int.class, int.class, boolean.class, DrawContext.class); - this.postRenderHoveredMethod = WidgetContainer.class.getMethod("postRenderHovered", int.class, int.class, boolean.class, DrawContext.class); - this.drawRectMethod.setAccessible(true); - this.drawStringMethod.setAccessible(true); - this.renderMethod.setAccessible(true); - this.postRenderHoveredMethod.setAccessible(true); - - MethodHandles.Lookup lookup = MethodHandles.lookup(); - this.superRenderHandle = lookup.unreflectSpecial(renderMethod, WidgetMacroEntry4.class); - this.superPostRenderHoveredHandle = lookup.unreflectSpecial(postRenderHoveredMethod, WidgetMacroEntry4.class); - } catch (NoSuchMethodException | IllegalAccessException e) { - throw new RuntimeException(e); - } - } - - private void invokepostRenderHovered(int mouseX, int mouseY, boolean selected, DrawContext drawContext) { - try { - MethodHandle bound = superPostRenderHoveredHandle.bindTo(this); - bound.invokeWithArguments(mouseX, mouseY, selected, drawContext); - } catch (Throwable t) { - throw new RuntimeException(t); - } - } - - private void invokerender(int mouseX, int mouseY, boolean selected, DrawContext drawContext) { - try { - MethodHandle bound = superRenderHandle.bindTo(this); - bound.invokeWithArguments(mouseX, mouseY, selected, drawContext); - } catch (Throwable t) { - throw new RuntimeException(t); - } - } - - private void invokedrawRect(int x, int y, int width, int height, int color) { - try { - drawRectMethod.invoke(null, x, y, width, height, color); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } - } - - private void invokedrawString(int x, int y, int color, String text, DrawContext drawContext) { - try { - drawStringMethod.invoke(this, x, y, color, text, drawContext); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } - } - -// @Override - public void render(int mouseX, int mouseY, boolean selected, DrawContext context) { - if (selected || this.isMouseOver(mouseX, mouseY)) { - invokedrawRect(this.x, this.y, this.width, this.height, 0x70FFFFFF); - } else if (this.isOdd) { - invokedrawRect(this.x, this.y, this.width, this.height, 0x20FFFFFF); - } else { - invokedrawRect(this.x, this.y, this.width, this.height, 0x50FFFFFF); - } - invokedrawString(this.x + 4, this.y + 7, 0xFFFFFFFF, this.macro.getName(), context); - - invokerender(mouseX, mouseY, selected, context); - } - -// @Override - public void postRenderHovered(int mouseX, int mouseY, boolean selected, DrawContext context) { - invokepostRenderHovered(mouseX, mouseY, selected, context); - } -} diff --git a/src/client/java/tools/redstone/redstonetools/malilib/widget/macro/WidgetMacroEntry8.java b/src/client/java/tools/redstone/redstonetools/malilib/widget/macro/WidgetMacroEntry8.java deleted file mode 100644 index e91bede7..00000000 --- a/src/client/java/tools/redstone/redstonetools/malilib/widget/macro/WidgetMacroEntry8.java +++ /dev/null @@ -1,35 +0,0 @@ -package tools.redstone.redstonetools.malilib.widget.macro; - -import fi.dy.masa.malilib.render.RenderUtils; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; - -public class WidgetMacroEntry8 extends WidgetMacroEntry { - public WidgetMacroEntry8(int x, int y, int width, int height, boolean isOdd, MacroBase macro, int listIndex, WidgetListMacros parent) { - super(x, y, width, height, isOdd, macro, listIndex, parent); - try { - RenderUtils.drawRect(new DrawContext(MinecraftClient.getInstance(), null), 0, 0, 0, 0, 0x70FFFFFF) - ; // theres probably a better way to check for this method being a thing or not. - } catch (NullPointerException ignored) { - } - } - - @Override - public void render(DrawContext context, int mouseX, int mouseY, boolean selected) { - if (selected || this.isMouseOver(mouseX, mouseY)) { - RenderUtils.drawRect(context, this.x, this.y, this.width, this.height, 0x70FFFFFF); - } else if (this.isOdd) { - RenderUtils.drawRect(context, this.x, this.y, this.width, this.height, 0x20FFFFFF); - } else { - RenderUtils.drawRect(context, this.x, this.y, this.width, this.height, 0x50FFFFFF); - } - this.drawString(context, this.x + 4, this.y + 7, 0xFFFFFFFF, this.macro.getName()); - - super.render(context, mouseX, mouseY, selected); - } - - @Override - public void postRenderHovered(DrawContext context, int mouseX, int mouseY, boolean selected) { - super.postRenderHovered(context, mouseX, mouseY, selected); - } -} diff --git a/src/client/java/tools/redstone/redstonetools/mixin/features/AirPlaceClientMixin.java b/src/client/java/tools/redstone/redstonetools/mixin/features/AirPlaceClientMixin.java index 42b5be07..abf7b58b 100644 --- a/src/client/java/tools/redstone/redstonetools/mixin/features/AirPlaceClientMixin.java +++ b/src/client/java/tools/redstone/redstonetools/mixin/features/AirPlaceClientMixin.java @@ -50,6 +50,11 @@ private boolean isAirPlaceAllowed() { return false; } + // If blockpos isn't air + if (getMinecraftClient().world != null && !getMinecraftClient().world.getBlockState(AirPlaceFeature.findAirPlaceBlockHit(getPlayer()).getBlockPos()).isAir()) { + return false; + } + // If the player or interactionManager not initialized if (getPlayer() == null || getInteractionManager() == null) { return false; diff --git a/src/client/java/tools/redstone/redstonetools/mixin/features/WorldRendererInvoker.java b/src/client/java/tools/redstone/redstonetools/mixin/features/WorldRendererInvoker.java index 387e8226..3e6d2672 100644 --- a/src/client/java/tools/redstone/redstonetools/mixin/features/WorldRendererInvoker.java +++ b/src/client/java/tools/redstone/redstonetools/mixin/features/WorldRendererInvoker.java @@ -1,16 +1,26 @@ package tools.redstone.redstonetools.mixin.features; -import net.minecraft.block.BlockState; +//? if <1.21.10 { +/*import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.BlockPos; +/^^/*///?} else { +import net.minecraft.client.render.state.OutlineRenderState; +//?} import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.WorldRenderer; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(WorldRenderer.class) public interface WorldRendererInvoker { - @Invoker + //? if <1.21.10 { + /*@Invoker void invokeDrawBlockOutline(MatrixStack matrices, VertexConsumer vertexConsumer, Entity entity, double cameraX, double cameraY, double cameraZ, BlockPos pos, BlockState state, int color); + *///?} else { + + @Invoker + void invokeDrawBlockOutline(MatrixStack matrices, VertexConsumer vertexConsumer, double x, double y, double z, OutlineRenderState state, int i); + //?} } \ No newline at end of file diff --git a/src/main/java/tools/redstone/redstonetools/features/commands/ColorCodeFeature.java b/src/main/java/tools/redstone/redstonetools/features/commands/ColorCodeFeature.java index c8ebbdfa..ac9fa9be 100644 --- a/src/main/java/tools/redstone/redstonetools/features/commands/ColorCodeFeature.java +++ b/src/main/java/tools/redstone/redstonetools/features/commands/ColorCodeFeature.java @@ -20,10 +20,7 @@ import net.minecraft.server.command.ServerCommandSource; import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; -import tools.redstone.redstonetools.utils.ArgumentUtils; -import tools.redstone.redstonetools.utils.BlockColor; -import tools.redstone.redstonetools.utils.ColoredBlock; -import tools.redstone.redstonetools.utils.WorldEditUtils; +import tools.redstone.redstonetools.utils.*; import static net.minecraft.server.command.CommandManager.argument; import static net.minecraft.server.command.CommandManager.literal; @@ -89,8 +86,8 @@ protected int execute(CommandContext context) throws Comman var playerSession = worldEdit.getSessionManager().get(wePlayer); // for each block in the selection - final World world = FabricAdapter.adapt(player.getWorld()); - try (EditSession session = worldEdit.newEditSession(FabricAdapter.adapt(player.getWorld()))) { + final World world = FabricAdapter.adapt(PlayerUtils.getWorld(player)); + try (EditSession session = worldEdit.newEditSession(world)) { // create mask and pattern and execute block set int blocksColored = session.replaceBlocks(selection, new Mask() { diff --git a/src/main/java/tools/redstone/redstonetools/features/commands/GiveMeFeature.java b/src/main/java/tools/redstone/redstonetools/features/commands/GiveMeFeature.java index 52c0a176..cd8dc50e 100644 --- a/src/main/java/tools/redstone/redstonetools/features/commands/GiveMeFeature.java +++ b/src/main/java/tools/redstone/redstonetools/features/commands/GiveMeFeature.java @@ -8,10 +8,9 @@ import net.minecraft.command.argument.ItemStackArgument; import net.minecraft.command.argument.ItemStackArgumentType; import net.minecraft.item.ItemStack; +import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; import static net.minecraft.server.command.CommandManager.argument; import static net.minecraft.server.command.CommandManager.literal; @@ -39,16 +38,11 @@ public void registerCommand(CommandDispatcher dispatcher, C } private int execute(CommandContext context, ItemStackArgument itemArgument, int count) throws CommandSyntaxException { - ServerPlayerEntity player = context.getSource().getPlayer(); + MinecraftServer server = context.getSource().getServer(); ItemStack stack = itemArgument.createStack(1, false); stack.setCount(count); - if (player != null && player.getServer() != null) { - player.getServer().getCommandManager().executeWithPrefix(player.getServer().getCommandSource() - , "/give " + - player.getName().getString() + " " + - itemArgument.asString(player.getServer().getRegistryManager()) + " " + count); - } else - context.getSource().sendMessage(Text.of("Player not found.")); + server.getCommandManager()./*? if <1.21.10 {*//*executeWithPrefix*//*?} else {*/parseAndExecute/*?}*/( + server.getCommandSource(), "/give @s " + itemArgument.asString(server.getRegistryManager()) + " " + count); return 0; } } diff --git a/src/main/java/tools/redstone/redstonetools/features/commands/ReachFeature.java b/src/main/java/tools/redstone/redstonetools/features/commands/ReachFeature.java index ce0e4c79..ce1e3b0e 100644 --- a/src/main/java/tools/redstone/redstonetools/features/commands/ReachFeature.java +++ b/src/main/java/tools/redstone/redstonetools/features/commands/ReachFeature.java @@ -3,13 +3,11 @@ import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.arguments.FloatArgumentType; import com.mojang.brigadier.context.CommandContext; -import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.minecraft.command.CommandRegistryAccess; import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; - public class ReachFeature { public static final ReachFeature INSTANCE = new ReachFeature(); @@ -45,18 +43,21 @@ public void registerCommand(CommandDispatcher dispatcher, C )); } - private int execute(CommandContext context, boolean block, boolean entity) throws CommandSyntaxException { - String playerName = context.getSource().getPlayerOrThrow().getName().getString(); + private int execute(CommandContext context, boolean block, boolean entity) { float reach = FloatArgumentType.getFloat(context, "reach"); - if (block) context.getSource().getServer().getCommandManager().executeWithPrefix(context.getSource(), "/attribute " + playerName + " minecraft:block_interaction_range base set " + reach); - if (entity) context.getSource().getServer().getCommandManager().executeWithPrefix(context.getSource(), "/attribute " + playerName + " minecraft:entity_interaction_range base set " + reach); + if (block) execute(context, "/attribute @s minecraft:block_interaction_range base set " + reach); + if (entity) execute(context, "/attribute @s minecraft:entity_interaction_range base set " + reach); return 0; } - private int reset(CommandContext context, boolean block, boolean entity) throws CommandSyntaxException { - String playerName = context.getSource().getPlayerOrThrow().getName().getString(); - if (block) context.getSource().getServer().getCommandManager().executeWithPrefix(context.getSource(), "/attribute " + playerName + " minecraft:block_interaction_range base reset"); - if (entity) context.getSource().getServer().getCommandManager().executeWithPrefix(context.getSource(), "/attribute " + playerName + " minecraft:entity_interaction_range base reset"); + private int reset(CommandContext context, boolean block, boolean entity) { + if (block) execute(context, "/attribute @s minecraft:block_interaction_range base reset"); + if (entity) execute(context, "/attribute @s minecraft:entity_interaction_range base reset"); return 0; } + + private static void execute(CommandContext context, String command) { + context.getSource().getServer().getCommandManager() + ./*? if <1.21.10 {*//*executeWithPrefix*//*?} else {*/parseAndExecute/*?}*/(context.getSource(), command); + } } diff --git a/src/main/java/tools/redstone/redstonetools/features/toggleable/ClickContainerFeature.java b/src/main/java/tools/redstone/redstonetools/features/toggleable/ClickContainerFeature.java index 8390a839..b90fcd40 100644 --- a/src/main/java/tools/redstone/redstonetools/features/toggleable/ClickContainerFeature.java +++ b/src/main/java/tools/redstone/redstonetools/features/toggleable/ClickContainerFeature.java @@ -30,7 +30,7 @@ protected ClickContainerFeature() { static { UseBlockCallback.EVENT.register((player, world, hand, hitResult) -> { if (world == null) return ActionResult.PASS; - if (world.isClient) return ActionResult.PASS; + if (world.isClient()) return ActionResult.PASS; if (!ClickContainerFeature.INSTANCE.isEnabled((ServerPlayerEntity) player)) return ActionResult.PASS; ItemStack stack = player.getStackInHand(hand); diff --git a/src/main/java/tools/redstone/redstonetools/mixin/features/AutoDustMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/features/AutoDustMixin.java index a238999a..60f60a21 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/features/AutoDustMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/features/AutoDustMixin.java @@ -20,13 +20,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import tools.redstone.redstonetools.features.toggleable.AutoDustFeature; import tools.redstone.redstonetools.utils.ColoredBlock; +import tools.redstone.redstonetools.utils.PlayerUtils; @Mixin(Block.class) public abstract class AutoDustMixin { @Inject(method = "onPlaced", at = @At("TAIL")) private void onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack, CallbackInfo ci) { if (placer instanceof ServerPlayerEntity player) { - if (!AutoDustFeature.INSTANCE.isEnabled(player) || world.isClient) { + if (!AutoDustFeature.INSTANCE.isEnabled(player) || world.isClient()) { return; } @@ -40,7 +41,7 @@ private void onPlaced(World world, BlockPos pos, BlockState state, LivingEntity ItemPlacementContext context = new ItemPlacementContext(player, Hand.MAIN_HAND, new ItemStack(Items.REDSTONE), new BlockHitResult(new Vec3d(dustPos.getX(), dustPos.getY(), dustPos.getZ()), Direction.UP, dustPos, false)); - placer.getWorld().setBlockState(dustPos, Blocks.REDSTONE_WIRE.getPlacementState(context)); + PlayerUtils.getWorld(placer).setBlockState(dustPos, Blocks.REDSTONE_WIRE.getPlacementState(context)); } } } diff --git a/src/main/java/tools/redstone/redstonetools/mixin/features/AutoRotateMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/features/AutoRotateMixin.java index be84d0ab..42317d6d 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/features/AutoRotateMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/features/AutoRotateMixin.java @@ -5,6 +5,7 @@ import net.minecraft.block.BlockState; import net.minecraft.item.BlockItem; import net.minecraft.item.ItemPlacementContext; +import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayerEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -20,8 +21,13 @@ public abstract class AutoRotateMixin { @ModifyReturnValue(method = "getPlacementState", at = @At("RETURN")) private BlockState changeRotation(BlockState original, @Local(argsOnly = true) ItemPlacementContext context) { if (!(context.getPlayer() instanceof ServerPlayerEntity player)) return original; - if (player.getServer() == null) return original; - if (!player.getServer().isDedicated()) return original; + //? if <1.21.10 { + /*MinecraftServer server = player.getServer(); + if (server == null) return original; + *///?} else { + MinecraftServer server = player.getEntityWorld().getServer(); + //?} + if (!server.isDedicated()) return original; if (!AutoRotateFeature.INSTANCE.isEnabled(player)) return original; if (original == null) return null; diff --git a/src/main/java/tools/redstone/redstonetools/utils/ItemUtils.java b/src/main/java/tools/redstone/redstonetools/utils/ItemUtils.java index 0a0b21b7..80758106 100644 --- a/src/main/java/tools/redstone/redstonetools/utils/ItemUtils.java +++ b/src/main/java/tools/redstone/redstonetools/utils/ItemUtils.java @@ -2,17 +2,12 @@ import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; -import net.minecraft.component.ComponentHolder; -import net.minecraft.component.ComponentType; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.NbtComponent; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.*; import net.minecraft.nbt.NbtCompound; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - public class ItemUtils { public static BlockState getPlacementState(PlayerEntity player, ItemStack stack, float reach) { Item type = stack.getItem(); @@ -35,28 +30,14 @@ public static BlockState getUseState(PlayerEntity player, ItemStack stack, float return state; } - private static Method getStringMethod; - private static Method getMethod; - public static String getCommand(ItemStack stack) { if (stack.contains(DataComponentTypes.CUSTOM_DATA)) { NbtCompound data = getCustomData(stack); - try { - return data.getString("command", ""); - } catch (NoSuchMethodError ignored) { - if (getStringMethod == null) { - try { - getStringMethod = NbtCompound.class.getMethod("method_10558", String.class); - } catch (Exception e) { - throw new RuntimeException("Something went wrong. Contact a redstonetools developer1", e); - } - } - try { - return (String) getStringMethod.invoke(data, "command"); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException("Something went wrong. Contact a redstonetools developer", e); - } - } + //? if >=1.21.5 { + return data.getString("command", ""); + //?} else { + /*return data.getString("command"); + *///?} } return ""; } @@ -85,27 +66,6 @@ public static void removeCommand(ItemStack stack) { } private static NbtCompound getCustomData(ItemStack stack) { - NbtCompound data; - try { - data = stack.get(DataComponentTypes.CUSTOM_DATA).copyNbt(); - } catch (NoSuchMethodError ignored) { - try { - getMethod = ComponentHolder.class.getMethod("method_57824", ComponentType.class); - } catch (NoSuchMethodException e) { - try { - getMethod = ComponentHolder.class.getMethod("get", ComponentType.class); - } catch (NoSuchMethodException ex) { - throw new RuntimeException(ex); - } - } finally { - getMethod.setAccessible(true); - } - try { - data = ((NbtComponent) getMethod.invoke(stack, DataComponentTypes.CUSTOM_DATA)).copyNbt(); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } - } - return data; + return stack.get(DataComponentTypes.CUSTOM_DATA).copyNbt(); } } diff --git a/src/main/java/tools/redstone/redstonetools/utils/PlayerUtils.java b/src/main/java/tools/redstone/redstonetools/utils/PlayerUtils.java new file mode 100644 index 00000000..fd47bef8 --- /dev/null +++ b/src/main/java/tools/redstone/redstonetools/utils/PlayerUtils.java @@ -0,0 +1,15 @@ +package tools.redstone.redstonetools.utils; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.world.World; + +public class PlayerUtils { + public static World getWorld(Entity player) { + //? if <1.21.10 { + /*return player.getWorld(); + *///?} else { + return player.getEntityWorld(); + //?} + } +} diff --git a/src/main/java/tools/redstone/redstonetools/utils/RaycastUtils.java b/src/main/java/tools/redstone/redstonetools/utils/RaycastUtils.java index e65af5ba..c2875dc3 100644 --- a/src/main/java/tools/redstone/redstonetools/utils/RaycastUtils.java +++ b/src/main/java/tools/redstone/redstonetools/utils/RaycastUtils.java @@ -17,7 +17,7 @@ public static BlockHitResult getBlockHitNeighbor(BlockHitResult hit) { } public static BlockHitResult rayCastFromEye(PlayerEntity player, float reach) { - return player.getWorld().raycast(new RaycastContext( + return PlayerUtils.getWorld(player).raycast(new RaycastContext( player.getEyePos(), player.getEyePos().add(player.getRotationVector().multiply(reach)), RaycastContext.ShapeType.COLLIDER, diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index e3ead782..dc2bc400 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -37,7 +37,7 @@ "depends": { "fabricloader": ">=${loader_version}", "fabric": "*", - "minecraft": ">=1.21.4 <=1.21.8" + "minecraft": ">=1.21.4 <=1.21.10" }, "recommends": { "worldedit": "*", diff --git a/stonecutter.gradle b/stonecutter.gradle new file mode 100644 index 00000000..37d02b07 --- /dev/null +++ b/stonecutter.gradle @@ -0,0 +1,4 @@ +plugins { + id "dev.kikugie.stonecutter" +} +stonecutter.active "1.21.10" \ No newline at end of file diff --git a/versions/1.21.10/build.gradle b/versions/1.21.10/build.gradle new file mode 100644 index 00000000..ca20ce31 --- /dev/null +++ b/versions/1.21.10/build.gradle @@ -0,0 +1,23 @@ +plugins { + id "me.modmuss50.mod-publish-plugin" version "1.1.0" +} + +publishMods { + file = remapJar.archiveFile + type = STABLE + modLoaders.add("fabric") + + modrinth { + projectId = "9ySQVrz2" + accessToken = providers.environmentVariable("MODRINTH_TOKEN") + minecraftVersions.add(project.minecraft_version) + requires("fabric-api") + requires("malilib") + optional("worldedit") + } + + github { + accessToken = providers.environmentVariable("GITHUB_TOKEN") + parent = project(":").tasks.named("publishGithub") + } +} diff --git a/versions/1.21.10/gradle.properties b/versions/1.21.10/gradle.properties new file mode 100644 index 00000000..6eb23355 --- /dev/null +++ b/versions/1.21.10/gradle.properties @@ -0,0 +1,7 @@ +minecraft_version=1.21.10 +minecraft_version_out=1.21.10 +yarn_mappings=1.21.10+build.2 + +fabric_version=0.138.0+1.21.10 +malilib_version=0.26.3 +worldedit_version=1.21.10:7.3.17 diff --git a/versions/1.21.4/build.gradle b/versions/1.21.4/build.gradle new file mode 100644 index 00000000..ca20ce31 --- /dev/null +++ b/versions/1.21.4/build.gradle @@ -0,0 +1,23 @@ +plugins { + id "me.modmuss50.mod-publish-plugin" version "1.1.0" +} + +publishMods { + file = remapJar.archiveFile + type = STABLE + modLoaders.add("fabric") + + modrinth { + projectId = "9ySQVrz2" + accessToken = providers.environmentVariable("MODRINTH_TOKEN") + minecraftVersions.add(project.minecraft_version) + requires("fabric-api") + requires("malilib") + optional("worldedit") + } + + github { + accessToken = providers.environmentVariable("GITHUB_TOKEN") + parent = project(":").tasks.named("publishGithub") + } +} diff --git a/versions/1.21.4/gradle.properties b/versions/1.21.4/gradle.properties new file mode 100644 index 00000000..6304cc55 --- /dev/null +++ b/versions/1.21.4/gradle.properties @@ -0,0 +1,7 @@ +minecraft_version=1.21.4 +minecraft_version_out=1.21.4 +yarn_mappings=1.21.4+build.8 + +fabric_version=0.119.4+1.21.4 +malilib_version=0.23.4 +worldedit_version=1.21.4:7.3.11 diff --git a/versions/1.21.5/build.gradle b/versions/1.21.5/build.gradle new file mode 100644 index 00000000..ca20ce31 --- /dev/null +++ b/versions/1.21.5/build.gradle @@ -0,0 +1,23 @@ +plugins { + id "me.modmuss50.mod-publish-plugin" version "1.1.0" +} + +publishMods { + file = remapJar.archiveFile + type = STABLE + modLoaders.add("fabric") + + modrinth { + projectId = "9ySQVrz2" + accessToken = providers.environmentVariable("MODRINTH_TOKEN") + minecraftVersions.add(project.minecraft_version) + requires("fabric-api") + requires("malilib") + optional("worldedit") + } + + github { + accessToken = providers.environmentVariable("GITHUB_TOKEN") + parent = project(":").tasks.named("publishGithub") + } +} diff --git a/versions/1.21.5/gradle.properties b/versions/1.21.5/gradle.properties new file mode 100644 index 00000000..07e27ac1 --- /dev/null +++ b/versions/1.21.5/gradle.properties @@ -0,0 +1,7 @@ +minecraft_version=1.21.5 +minecraft_version_out=1.21.5 +yarn_mappings=1.21.5+build.1 + +fabric_version=0.128.2+1.21.5 +malilib_version=0.24.2 +worldedit_version=1.21.5:7.3.14 \ No newline at end of file diff --git a/versions/1.21.8/build.gradle b/versions/1.21.8/build.gradle new file mode 100644 index 00000000..ca20ce31 --- /dev/null +++ b/versions/1.21.8/build.gradle @@ -0,0 +1,23 @@ +plugins { + id "me.modmuss50.mod-publish-plugin" version "1.1.0" +} + +publishMods { + file = remapJar.archiveFile + type = STABLE + modLoaders.add("fabric") + + modrinth { + projectId = "9ySQVrz2" + accessToken = providers.environmentVariable("MODRINTH_TOKEN") + minecraftVersions.add(project.minecraft_version) + requires("fabric-api") + requires("malilib") + optional("worldedit") + } + + github { + accessToken = providers.environmentVariable("GITHUB_TOKEN") + parent = project(":").tasks.named("publishGithub") + } +} diff --git a/versions/1.21.8/gradle.properties b/versions/1.21.8/gradle.properties new file mode 100644 index 00000000..f92a8366 --- /dev/null +++ b/versions/1.21.8/gradle.properties @@ -0,0 +1,7 @@ +minecraft_version=1.21.8 +minecraft_version_out=1.21.8 +yarn_mappings=1.21.8+build.1 + +fabric_version=0.136.0+1.21.8 +malilib_version=0.25.5 +worldedit_version=1.21.7:7.3.16