Compare commits

..

1 Commits

Author SHA1 Message Date
Martin Prokoph
a23e8b8975 Initial port to 1.21.3
- Still waiting for SpruceUI to update, only use the advanced config in the meantime
2024-11-14 21:43:19 +01:00
30 changed files with 197 additions and 388 deletions

View File

@@ -1,25 +0,0 @@
name: Build with Gradle
on: [ push, pull_request ]
jobs:
build:
runs-on: ubuntu-24.04
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Validate Gradle Wrapper
uses: gradle/actions/wrapper-validation@v3
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 21
check-latest: true
- name: Build with Gradle
run: ./gradlew build
- name: Upload artifacts to GitHub
uses: actions/upload-artifact@v4
with:
name: MidnightControls-Artifacts
path: /build/libs/

23
.github/workflows/gradlebuild.yml vendored Executable file
View File

@@ -0,0 +1,23 @@
name: Gradle Build
on: [ push, pull_request ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 16
uses: actions/setup-java@v1
with:
java-version: 16
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Build with Gradle
run: ./gradlew build
- uses: actions/upload-artifact@v2
with:
name: Artifacts
path: ./build/libs/

40
.github/workflows/publish.yml → .github/workflows/gradlepublish.yml vendored Normal file → Executable file
View File

@@ -1,24 +1,30 @@
name: Publish to Modrinth
name: Gradle Package
on:
release:
types:
- published
push:
tags:
- '*'
jobs:
publish:
runs-on: ubuntu-24.04
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Validate Gradle Wrapper
uses: gradle/actions/wrapper-validation@v3
- name: Set up JDK 21
uses: actions/setup-java@v4
- uses: actions/checkout@v2
- name: Set up JDK 16
uses: actions/setup-java@v1
with:
distribution: 'temurin'
java-version: 21
check-latest: true
java-version: 16
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Build with Gradle
run: ./gradlew build
- uses: actions/upload-artifact@v2
with:
name: Artifacts
path: ./build/libs/
# The USERNAME and PASSWORD need to correspond to the credentials environment variables used in
# the publishing section of your build.gradle
- name: Publish to GitHub Packages and other Mavens
@@ -32,7 +38,3 @@ jobs:
midnightcontrols_MAVEN: ${{ secrets.MAVEN_URL }}
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
- name: Publish to Modrinth
env:
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
run: ./gradlew publishModrinth

23
.github/workflows/modrinth_update.yml vendored Executable file
View File

@@ -0,0 +1,23 @@
name: Gradle Build
on:
release:
types:
- published
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 16
uses: actions/setup-java@v1
with:
java-version: 16
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Build with Gradle
env:
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
run: ./gradlew publishModrinth

View File

@@ -8,7 +8,7 @@
[![Version](https://img.shields.io/github/v/tag/TeamMidnightDust/MidnightControls?label=version&style=round)](https://github.com/TeamMidnightDust/MidnightControls/releases)
![Environment: Client](https://img.shields.io/badge/environment-client-1976d2?style=round)
[![Mod loader: Quilt/Fabric]][Quilt]
[![Java 21](https://img.shields.io/badge/language-Java%2021-9B599A.svg?style=round)](https://www.oracle.com/java/technologies/downloads/#java21)
[![Java 17](https://img.shields.io/badge/language-Java%2017-9B599A.svg?style=round)](https://www.oracle.com/java/technologies/downloads/#java17)
[![GitHub license](https://img.shields.io/github/license/TeamMidnightDust/MidnightControls?style=round)](LICENSE)
A Fabric Minecraft mod which adds better controls, reach-around and controller support.

View File

@@ -86,17 +86,13 @@ public class MidnightControlsClient extends MidnightControls {
int period = 1; // repeat every 0.001 sec. (1000 times a second)
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
try {
public void run() { // TODO: Add a try/catch here after the alpha testing period
if (lateInitDone && client.isRunning()) {
if (MidnightControlsConfig.controlsMode != ControlsMode.DEFAULT && (client.isWindowFocused() || MidnightControlsConfig.unfocusedInput)) {
if (MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && (client.isWindowFocused() || MidnightControlsConfig.unfocusedInput)) {
input.tickCameraStick();
input.updateCamera();
}
}
} catch (Exception | Error e) {
MidnightControls.logger.error("Exception encountered in camera loop: ",e);
}
}
}, delay, period);

View File

@@ -77,7 +77,7 @@ public class MidnightReacharound {
}
public static float getPlayerRange(@NotNull MinecraftClient client) {
return client.player != null ? Double.valueOf(client.player.getAttributeValue(EntityAttributes.PLAYER_BLOCK_INTERACTION_RANGE)).floatValue() : 0.f;
return client.player != null ? Double.valueOf(client.player.getAttributeValue(EntityAttributes.BLOCK_INTERACTION_RANGE)).floatValue() : 0.f;
}
/**

View File

@@ -60,10 +60,11 @@ public class InputHandlers {
// When in-game
if (client.currentScreen == null && client.player != null) {
if (!client.player.isSpectator()) {
var inv = client.player.getInventory();
if (next)
client.player.getInventory().scrollInHotbar(-1.0);
inv.setSelectedSlot(inv.selectedSlot < 8 ? inv.selectedSlot + 1 : inv.selectedSlot - 8);
else
client.player.getInventory().scrollInHotbar(1.0);
inv.setSelectedSlot(inv.selectedSlot > 0 ? inv.selectedSlot - 1 : inv.selectedSlot + 8);
}
else {
if (client.inGameHud.getSpectatorHud().isOpen()) {
@@ -79,11 +80,9 @@ public class InputHandlers {
} else if (client.currentScreen instanceof CreativeInventoryScreenAccessor inventory) {
inventory.midnightcontrols$setSelectedTab(ItemGroupUtil.cycleTab(next, client));
return true;
} else if (client.currentScreen instanceof InventoryScreen || client.currentScreen instanceof CraftingScreen || client.currentScreen instanceof AbstractFurnaceScreen<?>) {
RecipeBookWidget recipeBook;
if (client.currentScreen instanceof InventoryScreen inventoryScreen) recipeBook = inventoryScreen.getRecipeBookWidget();
else if (client.currentScreen instanceof CraftingScreen craftingScreen) recipeBook = craftingScreen.getRecipeBookWidget();
else recipeBook = ((AbstractFurnaceScreen<?>)client.currentScreen).getRecipeBookWidget();
} else if (client.currentScreen instanceof RecipeBookScreen<?> recipeBookScreen) {
RecipeBookWidget<?> recipeBook = ((RecipeBookScreenAccessor) recipeBookScreen).getRecipeBook();
var recipeBookAccessor = (RecipeBookWidgetAccessor) recipeBook;
var tabs = recipeBookAccessor.getTabButtons();
var currentTab = recipeBookAccessor.getCurrentTab();
@@ -98,7 +97,7 @@ public class InputHandlers {
currentTab.setToggled(false);
recipeBookAccessor.setCurrentTab(currentTab = tabs.get(nextTab));
currentTab.setToggled(true);
recipeBookAccessor.midnightcontrols$refreshResults(true);
recipeBookScreen.refreshRecipeBook();
return true;
} else if (client.currentScreen instanceof AdvancementsScreenAccessor screen) {
var tabs = screen.getTabs().values().stream().distinct().toList();

View File

@@ -48,10 +48,11 @@ public final class MovementHandler implements PressAction {
public void applyMovement(@NotNull ClientPlayerEntity player) {
if (!this.shouldOverrideMovement)
return;
player.input.pressingForward = this.pressingForward;
player.input.pressingBack = this.pressingBack;
player.input.pressingLeft = this.pressingLeft;
player.input.pressingRight = this.pressingRight;
// TODO
// player.input.playerInput.pressingForward = this.pressingForward;
// player.input.pressingBack = this.pressingBack;
// player.input.pressingLeft = this.pressingLeft;
// player.input.pressingRight = this.pressingRight;
polarUtil.calculate(this.movementSideways, this.movementForward, this.slowdownFactor);
player.input.movementForward = polarUtil.polarY;
@@ -81,7 +82,7 @@ public final class MovementHandler implements PressAction {
}
this.slowdownFactor = client.player.shouldSlowDown() ? (MathHelper.clamp(
0.3F + (float) client.player.getAttributeValue(EntityAttributes.PLAYER_SNEAKING_SPEED),
0.3F + (float) client.player.getAttributeValue(EntityAttributes.SNEAKING_SPEED),
0.0F,
1.0F
)) : 1.f;

View File

@@ -18,24 +18,23 @@ import eu.midnightdust.midnightcontrols.client.MidnightInput;
import eu.midnightdust.midnightcontrols.client.compat.MidnightControlsCompat;
import eu.midnightdust.midnightcontrols.client.controller.ButtonBinding;
import eu.midnightdust.midnightcontrols.client.enums.VirtualMouseSkin;
import eu.midnightdust.midnightcontrols.client.mixin.DrawContextAccessor;
import eu.midnightdust.midnightcontrols.client.util.HandledScreenAccessor;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.BufferRenderer;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexFormat;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.client.render.*;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.texture.Sprite;
import net.minecraft.screen.slot.Slot;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.ColorHelper;
import org.jetbrains.annotations.NotNull;
import org.joml.Matrix4f;
import org.lwjgl.glfw.GLFW;
import java.util.function.Function;
import static eu.midnightdust.midnightcontrols.MidnightControls.id;
/**
@@ -175,7 +174,7 @@ public class MidnightControlsRenderer {
int assetSize = axis || (button >= 15 && button <= 18) ? AXIS_SIZE : BUTTON_SIZE;
RenderSystem.setShaderColor(1.f, second ? 0.f : 1.f, 1.f, 1.f);
context.drawTexture(axis ? MidnightControlsClient.CONTROLLER_AXIS : button >= 15 && button <= 19 ? MidnightControlsClient.CONTROLLER_EXPANDED :MidnightControlsClient.CONTROLLER_BUTTONS
context.drawTexture(RenderLayer::getGuiTextured, axis ? MidnightControlsClient.CONTROLLER_AXIS : button >= 15 && button <= 19 ? MidnightControlsClient.CONTROLLER_EXPANDED :MidnightControlsClient.CONTROLLER_BUTTONS
, x + (ICON_SIZE / 2 - assetSize / 2), y + (ICON_SIZE / 2 - assetSize / 2),
(float) buttonOffset, (float) (controllerType * assetSize),
assetSize, assetSize,
@@ -216,7 +215,7 @@ public class MidnightControlsRenderer {
if (MidnightControlsConfig.virtualMouseSkin == VirtualMouseSkin.DEFAULT_DARK || MidnightControlsConfig.virtualMouseSkin == VirtualMouseSkin.SECOND_DARK)
spritePath = MidnightControlsClient.WAYLAND_CURSOR_TEXTURE_DARK;
Sprite sprite = client.getGuiAtlasManager().getSprite(spritePath);
drawUnalignedTexturedQuad(sprite.getAtlasId(), context, mouseX, mouseX + 8, mouseY, mouseY + 8, 999, sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV());
drawUnalignedTexturedQuad(RenderLayer::getGuiTextured, sprite.getAtlasId(), context, mouseX, mouseX + 8, mouseY, mouseY + 8, 999, sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV());
} catch (IllegalStateException ignored) {}
}
@@ -260,19 +259,20 @@ public class MidnightControlsRenderer {
try {
Sprite sprite = client.getGuiAtlasManager().getSprite(id(MidnightControlsConfig.virtualMouseSkin.getSpritePath() + (hoverSlot ? "_slot" : "")));
drawUnalignedTexturedQuad(sprite.getAtlasId(), context, mouseX, mouseX + 16, mouseY, mouseY + 16, 999, sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV());
drawUnalignedTexturedQuad(RenderLayer::getGuiTextured, sprite.getAtlasId(), context, mouseX, mouseX + 16, mouseY, mouseY + 16, 999, sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV());
} catch (IllegalStateException ignored) {}
}
private static void drawUnalignedTexturedQuad(Identifier texture, DrawContext context, float x1, float x2, float y1, float y2, float z, float u1, float u2, float v1, float v2) {
RenderSystem.setShaderTexture(0, texture);
RenderSystem.setShader(GameRenderer::getPositionTexProgram);
private static void drawUnalignedTexturedQuad(Function<Identifier, RenderLayer> renderLayers, Identifier texture, DrawContext context, float x1, float x2, float y1, float y2, float z, float u1, float u2, float v1, float v2) {
RenderLayer renderLayer = renderLayers.apply(texture);
//RenderSystem.setShaderTexture(0, texture);
Matrix4f matrix4f = context.getMatrices().peek().getPositionMatrix();
BufferBuilder bufferBuilder = Tessellator.getInstance().begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE);
bufferBuilder.vertex(matrix4f, x1, y1, z).texture(u1, v1);
bufferBuilder.vertex(matrix4f, x1, y2, z).texture(u1, v2);
bufferBuilder.vertex(matrix4f, x2, y2, z).texture(u2, v2);
bufferBuilder.vertex(matrix4f, x2, y1, z).texture(u2, v1);
BufferRenderer.drawWithGlobalProgram(bufferBuilder.end());
//BufferBuilder bufferBuilder = Tessellator.getInstance().begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE);
VertexConsumer vertexConsumer = ((DrawContextAccessor)context).getVertexConsumers().getBuffer(renderLayer);
vertexConsumer.vertex(matrix4f, x1, y1, z).texture(u1, v1).color(ColorHelper.getWhite(1.0f));
vertexConsumer.vertex(matrix4f, x1, y2, z).texture(u1, v2).color(ColorHelper.getWhite(1.0f));
vertexConsumer.vertex(matrix4f, x2, y2, z).texture(u2, v2).color(ColorHelper.getWhite(1.0f));
vertexConsumer.vertex(matrix4f, x2, y1, z).texture(u2, v1).color(ColorHelper.getWhite(1.0f));
context.draw();
}
public record ButtonSize(int length, int height) {

View File

@@ -514,7 +514,7 @@ public class MidnightControlsSettingsScreen extends SpruceScreen {
BufferBuilder bufferBuilder = Tessellator.getInstance().begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR);
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.setShader(GameRenderer::getPositionColorProgram);
//RenderSystem.setShader(GameRenderer::getPositionColorProgram);
bufferBuilder.vertex(matrix, (float)x1, (float)y2, 0.0F).color(r, g, b, t);
bufferBuilder.vertex(matrix, (float)x2, (float)y2, 0.0F).color(r, g, b, t);
bufferBuilder.vertex(matrix, (float)x2, (float)y1, 0.0F).color(r, g, b, t);

View File

@@ -88,11 +88,11 @@ public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity
if (MidnightControlsConfig.verticalFlyDrifting || !MidnightControls.isExtrasLoaded)
return;
int moving = 0;
if (this.input.sneaking) {
if (this.input.playerInput.sneak()) {
--moving;
}
if (this.input.jumping) {
if (this.input.playerInput.jump()) {
++moving;
}

View File

@@ -0,0 +1,21 @@
/*
* Copyright © 2021 LambdAurora <aurora42lambda@gmail.com>
*
* This file is part of midnightcontrols.
*
* Licensed under the MIT license. For more information,
* see the LICENSE file.
*/
package eu.midnightdust.midnightcontrols.client.mixin;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.VertexConsumerProvider;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(DrawContext.class)
public interface DrawContextAccessor {
@Accessor("vertexConsumers")
VertexConsumerProvider.Immediate getVertexConsumers();
}

View File

@@ -48,7 +48,7 @@ public abstract class GameOptionsScreenMixin extends Screen {
}
}
@Inject(method = "initTabNavigation", at = @At("TAIL"))
@Inject(method = "refreshWidgetPositions", at = @At("TAIL"))
public void midnightcontrols$onResize(CallbackInfo ci) {
this.midnightcontrols$setButtonPos();
}

View File

@@ -127,12 +127,12 @@ public abstract class MinecraftClientMixin {
int previousStackCount = stackInHand.getCount();
var result = this.interactionManager.interactBlock(this.player, hand, hitResult);
if (result.isAccepted()) {
if (result.shouldSwingHand()) {
//if (result.shouldSwingHand()) {
this.player.swingHand(hand);
if (!stackInHand.isEmpty() && (stackInHand.getCount() != previousStackCount || this.interactionManager.hasCreativeInventory())) {
this.gameRenderer.firstPersonRenderer.resetEquipProgress(hand);
}
}
//}
ci.cancel();
}

View File

@@ -20,7 +20,7 @@ import net.minecraft.client.Mouse;
import net.minecraft.client.util.GlfwUtil;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ThrowablePotionItem;
import net.minecraft.util.UseAction;
import net.minecraft.item.consume.UseAction;
import net.minecraft.util.math.Smoother;
import org.lwjgl.glfw.GLFW;
import org.spongepowered.asm.mixin.Final;

View File

@@ -0,0 +1,21 @@
/*
* Copyright © 2021 LambdAurora <aurora42lambda@gmail.com>
*
* This file is part of midnightcontrols.
*
* Licensed under the MIT license. For more information,
* see the LICENSE file.
*/
package eu.midnightdust.midnightcontrols.client.mixin;
import net.minecraft.client.gui.screen.ingame.RecipeBookScreen;
import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(RecipeBookScreen.class)
public interface RecipeBookScreenAccessor {
@Accessor("recipeBook")
RecipeBookWidget<?> getRecipeBook();
}

View File

@@ -27,7 +27,4 @@ public interface RecipeBookWidgetAccessor {
@Accessor("currentTab")
void setCurrentTab(RecipeGroupButtonWidget currentTab);
@Invoker("refreshResults")
void midnightcontrols$refreshResults(boolean resetCurrentPage);
}

View File

@@ -9,10 +9,8 @@
package eu.midnightdust.midnightcontrols.client.mixin;
import com.llamalad7.mixinextras.sugar.Local;
import eu.midnightdust.lib.util.MidnightColorUtil;
import eu.midnightdust.midnightcontrols.ControlsMode;
import eu.midnightdust.midnightcontrols.client.MidnightControlsClient;
import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig;
import eu.midnightdust.midnightcontrols.client.touch.TouchInput;
import eu.midnightdust.midnightcontrols.client.enums.TouchMode;
@@ -28,8 +26,7 @@ import net.minecraft.item.ItemUsageContext;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.hit.HitResult;
import net.minecraft.util.shape.VoxelShape;
import org.joml.Matrix4f;
import net.minecraft.util.math.ColorHelper;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@@ -61,12 +58,8 @@ public abstract class WorldRendererMixin {
@Final
private BufferBuilderStorage bufferBuilders;
@Shadow
private static void drawCuboidShapeOutline(MatrixStack matrices, VertexConsumer vertexConsumer, VoxelShape shape, double offsetX, double offsetY, double offsetZ, float red, float green, float blue, float alpha) {
}
@Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/hit/HitResult;getType()Lnet/minecraft/util/hit/HitResult$Type;"))
private HitResult.Type dontRenderOutline(HitResult instance) {
@Redirect(method = "renderTargetBlockOutline", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/hit/BlockHitResult;getType()Lnet/minecraft/util/hit/HitResult$Type;"))
private HitResult.Type dontRenderOutline(BlockHitResult instance) {
if (MidnightControlsConfig.controlsMode == ControlsMode.TOUCHSCREEN && MidnightControlsConfig.touchMode == TouchMode.FINGER_POS) {
return HitResult.Type.MISS;
}
@@ -74,15 +67,10 @@ public abstract class WorldRendererMixin {
}
@Inject(
method = "render",
at = @At(
value = "FIELD",
target = "Lnet/minecraft/client/MinecraftClient;crosshairTarget:Lnet/minecraft/util/hit/HitResult;",
ordinal = 1,
shift = At.Shift.AFTER
method = "renderTargetBlockOutline",
at = @At("TAIL")
)
)
private void onOutlineRender(RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager, Matrix4f matrix4f, Matrix4f matrix4f2, CallbackInfo ci, @Local MatrixStack matrices) {
private void onOutlineRender(Camera camera, VertexConsumerProvider.Immediate vertexConsumers, MatrixStack matrices, boolean translucent, CallbackInfo ci) {
if (((MidnightControlsConfig.controlsMode == ControlsMode.CONTROLLER && MidnightControlsConfig.touchInControllerMode) || MidnightControlsConfig.controlsMode == ControlsMode.TOUCHSCREEN)
&& MidnightControlsConfig.touchMode == TouchMode.FINGER_POS) {
this.midnightcontrols$renderFingerOutline(matrices, camera);
@@ -102,8 +90,8 @@ public abstract class WorldRendererMixin {
var pos = camera.getPos();
matrices.push();
var vertexConsumer = this.bufferBuilders.getEntityVertexConsumers().getBuffer(RenderLayer.getLines());
drawCuboidShapeOutline(matrices, vertexConsumer, outlineShape, blockPos.getX() - pos.getX(), blockPos.getY() - pos.getY(), blockPos.getZ() - pos.getZ(),
rgb.getRed() / 255.f, rgb.getGreen() / 255.f, rgb.getBlue() / 255.f, MidnightControlsConfig.touchOutlineColorAlpha / 255.f);
VertexRendering.drawOutline(matrices, vertexConsumer, outlineShape, blockPos.getX() - pos.getX(), blockPos.getY() - pos.getY(), blockPos.getZ() - pos.getZ(),
ColorHelper.withAlpha(MidnightControlsConfig.touchOutlineColorAlpha, rgb.getRGB()));
matrices.pop();
}
}
@@ -134,9 +122,8 @@ public abstract class WorldRendererMixin {
if (MidnightControlsConfig.reacharoundOutlineColorHex.isEmpty()) rgb = RainbowColor.radialRainbow(1,1);
matrices.push();
var vertexConsumer = this.bufferBuilders.getEntityVertexConsumers().getBuffer(RenderLayer.getLines());
drawCuboidShapeOutline(matrices, vertexConsumer, outlineShape,
(double) blockPos.getX() - pos.getX(), (double) blockPos.getY() - pos.getY(), (double) blockPos.getZ() - pos.getZ(),
rgb.getRed() / 255.f, rgb.getGreen() / 255.f, rgb.getBlue() / 255.f, MidnightControlsConfig.reacharoundOutlineColorAlpha / 255.f);
VertexRendering.drawOutline(matrices, vertexConsumer, outlineShape, blockPos.getX() - pos.getX(), blockPos.getY() - pos.getY(), blockPos.getZ() - pos.getZ(),
ColorHelper.withAlpha(MidnightControlsConfig.touchOutlineColorAlpha, rgb.getRGB()));
matrices.pop();
}
}

View File

@@ -85,12 +85,12 @@ public class TouchInput {
int previousStackCount = stackInHand.getCount();
var interaction = client.interactionManager.interactBlock(client.player, client.player.getActiveHand(), blockHit);
if (interaction.isAccepted()) {
if (interaction.shouldSwingHand()) {
//if (interaction.shouldSwingHand()) {
client.player.swingHand(client.player.preferredHand);
if (!stackInHand.isEmpty() && (stackInHand.getCount() != previousStackCount || client.interactionManager.hasCreativeInventory())) {
client.gameRenderer.firstPersonRenderer.resetEquipProgress(client.player.preferredHand);
}
}
//}
return true;
}
}

View File

@@ -7,7 +7,7 @@ import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.Camera;
import net.minecraft.entity.projectile.ProjectileUtil;
import net.minecraft.item.ItemStack;
import net.minecraft.util.UseAction;
import net.minecraft.item.consume.UseAction;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.hit.EntityHitResult;
import net.minecraft.util.hit.HitResult;

View File

@@ -1,12 +1,12 @@
package eu.midnightdust.midnightcontrols.client.touch.gui;
import net.minecraft.item.consume.UseAction;
import org.thinkingstudio.obsidianui.Position;
import org.thinkingstudio.obsidianui.widget.SpruceButtonWidget;
import eu.midnightdust.midnightcontrols.MidnightControlsConstants;
import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig;
import net.minecraft.item.ArmorItem;
import net.minecraft.text.Text;
import net.minecraft.util.UseAction;
public class ItemUseButtonWidget extends SpruceButtonWidget {

View File

@@ -15,10 +15,10 @@ import net.minecraft.client.gui.screen.ChatScreen;
import net.minecraft.client.gui.screen.GameMenuScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.consume.UseAction;
import net.minecraft.util.Arm;
import net.minecraft.util.Hand;
import net.minecraft.util.Identifier;
import net.minecraft.util.UseAction;
import org.thinkingstudio.obsidianui.Position;
import org.thinkingstudio.obsidianui.widget.SpruceButtonWidget;
import eu.midnightdust.lib.util.PlatformFunctions;

View File

@@ -1,238 +0,0 @@
{
"midnightcontrols.midnightconfig.title": "Configurações avançadas do MidnightControls",
"midnightcontrols.midnightconfig.enum.VirtualMouseSkin.DEFAULT_LIGHT": "Padrão claro",
"midnightcontrols.midnightconfig.enum.VirtualMouseSkin.DEFAULT_DARK": "Padrão escuro",
"midnightcontrols.midnightconfig.enum.VirtualMouseSkin.SECOND_LIGHT": "Segundo claro",
"midnightcontrols.midnightconfig.enum.VirtualMouseSkin.SECOND_DARK": "Segundo escuro",
"midnightcontrols.midnightconfig.enum.ControllerType.DEFAULT": "Padrão",
"midnightcontrols.midnightconfig.enum.ControllerType.DUALSHOCK": "DualShock",
"midnightcontrols.midnightconfig.enum.ControllerType.DUALSENSE": "DualSense",
"midnightcontrols.midnightconfig.enum.ControllerType.SWITCH": "Controle de Switch/Wii",
"midnightcontrols.midnightconfig.enum.ControllerType.XBOX": "Controle de Xbox One/Series",
"midnightcontrols.midnightconfig.enum.ControllerType.XBOX_360": "Controle de Xbox 360",
"midnightcontrols.midnightconfig.enum.ControllerType.STEAM_CONTROLLER": "Controle da Steam",
"midnightcontrols.midnightconfig.enum.ControllerType.STEAM_DECK": "Steam Deck",
"midnightcontrols.midnightconfig.enum.ControllerType.OUYA": "Controle de OUYA",
"midnightcontrols.midnightconfig.enum.ControllerType.NUMBERED": "Controle númerado",
"midnightcontrols.midnightconfig.enum.ControlsMode.DEFAULT": "Teclado/Mouse",
"midnightcontrols.midnightconfig.enum.ControlsMode.CONTROLLER": "Controle",
"midnightcontrols.midnightconfig.enum.ControlsMode.TOUCHSCREEN": "Tela sensível ao toque (Beta)",
"midnightcontrols.midnightconfig.enum.HudSide.LEFT": "Esquerda",
"midnightcontrols.midnightconfig.enum.HudSide.RIGHT": "Direita",
"midnightcontrols.midnightconfig.enum.TouchMode.CROSSHAIR": "Na mira",
"midnightcontrols.midnightconfig.enum.TouchMode.FINGER_POS": "Posição do dedo",
"midnightcontrols.midnightconfig.enum.CameraMode.FLAT": "Plano",
"midnightcontrols.midnightconfig.enum.CameraMode.ADAPTIVE": "Adaptativo",
"key.categories.midnightcontrols": "MidnightControls",
"key.midnightcontrols.look_down": "Olhar para baixo",
"key.midnightcontrols.look_left": "Olhar para a esquerda",
"key.midnightcontrols.look_right": "Olhar para a direita",
"key.midnightcontrols.look_up": "Olhar para cima",
"key.midnightcontrols.ring": "Abrir anel de teclas não vinculadas",
"midnightcontrols.action.attack": "Atacar",
"midnightcontrols.action.back": "Voltar",
"midnightcontrols.action.chat": "Abrir bate-papo",
"midnightcontrols.action.controls_ring": "Abrir anel de teclas não vinculadas",
"midnightcontrols.action.debug_screen": "Abrir HUD de depuração (F3)",
"midnightcontrols.action.drop_item": "Soltar item",
"midnightcontrols.action.drink": "Beber",
"midnightcontrols.action.eat": "Comer",
"midnightcontrols.action.equip": "Equipar",
"midnightcontrols.action.exit": "Sair da tela",
"midnightcontrols.action.forward": "Para frente",
"midnightcontrols.action.hit": "Atacar",
"midnightcontrols.action.hotbar_left": "Move a barra rápida para esquerda",
"midnightcontrols.action.hotbar_right": "Move a barra rápida para direita",
"midnightcontrols.action.inventory": "Invetário",
"midnightcontrols.action.jump": "Pular",
"midnightcontrols.action.left": "Esquerda",
"midnightcontrols.action.pause_game": "Pausar",
"midnightcontrols.action.pick_block": "Pegar bloco",
"midnightcontrols.action.pickup": "Pegar",
"midnightcontrols.action.pickup_all": "Pegar todos",
"midnightcontrols.action.place": "Colocar",
"midnightcontrols.action.player_list": "Lista de jogadores",
"midnightcontrols.action.quick_move": "Mover rápido",
"midnightcontrols.action.right": "Direita",
"midnightcontrols.action.screenshot": "Tirar Screenshot",
"midnightcontrols.action.slot_up": "Mover Slot para cima",
"midnightcontrols.action.slot_down": "Mover Slot para baixo",
"midnightcontrols.action.slot_left": "Mover Slot para esquerda",
"midnightcontrols.action.slot_right": "Mover Slot para direita",
"midnightcontrols.action.sneak": "Esgueirar",
"midnightcontrols.action.sprint": "Correr",
"midnightcontrols.action.swap_hands": "Trocar de mãos",
"midnightcontrols.action.toggle_perspective": "Alternar perspectiva",
"midnightcontrols.action.toggle_smooth_camera": "Ativar câmera cinemática",
"midnightcontrols.action.page_back": "Página anterior",
"midnightcontrols.action.page_next": "Próxima página",
"midnightcontrols.action.tab_back": "Aba anterior",
"midnightcontrols.action.tab_next": "Próxima aba",
"midnightcontrols.action.take": "Pegar item",
"midnightcontrols.action.take_all": "Pegar pilha",
"midnightcontrols.action.use": "Usar",
"midnightcontrols.action.zoom": "Zoom",
"midnightcontrols.action.zoom_in": "Aumentar o Zoom",
"midnightcontrols.action.zoom_out": "Diminuir o Zoom",
"midnightcontrols.action.zoom_reset": "Resetar o Zoom",
"midnightcontrols.action.emi_page_left": "Página anterior",
"midnightcontrols.action.emi_page_right": "Próxima pickup",
"midnightcontrols.category.emi": "EMI",
"midnightcontrols.button.a": "A",
"midnightcontrols.button.b": "B",
"midnightcontrols.button.x": "X",
"midnightcontrols.button.y": "Y",
"midnightcontrols.button.left_bumper": "Botão L1",
"midnightcontrols.button.right_bumper": "Botão R1",
"midnightcontrols.button.back": "Voltar",
"midnightcontrols.button.start": "Começar",
"midnightcontrols.button.guide": "Guia",
"midnightcontrols.button.left_thumb": "Analógico esquerdo",
"midnightcontrols.button.right_thumb": "Analógico direito",
"midnightcontrols.button.dpad_up": "Botão direcional para cima",
"midnightcontrols.button.dpad_right": "Botão direcional para direita",
"midnightcontrols.button.dpad_down": "Botão direcional para baixo",
"midnightcontrols.button.dpad_left": "Botão direcional para esquerda",
"midnightcontrols.button.l4": "L4",
"midnightcontrols.button.l5": "L5",
"midnightcontrols.button.r4": "R4",
"midnightcontrols.button.r5": "L5",
"midnightcontrols.axis.left_x+": "Esquerda X+",
"midnightcontrols.axis.left_y+": "Esquerda Y+",
"midnightcontrols.axis.right_x+": "Direita X+",
"midnightcontrols.axis.right_y+": "Direita Y+",
"midnightcontrols.axis.left_trigger": "Gatilho da esquerda",
"midnightcontrols.axis.right_trigger": "Gatilho da direita",
"midnightcontrols.axis.left_x-": "Esquerda X-",
"midnightcontrols.axis.left_y-": "Esquerda Y-",
"midnightcontrols.axis.right_x-": "Direita X-",
"midnightcontrols.axis.right_y-": "Direita Y-",
"midnightcontrols.button.unknown": "Desconhecido (%d)",
"midnightcontrols.controller.tutorial.title": "Jogue o jogo com um controle!",
"midnightcontrols.controller.tutorial.description": "Vá para %s -> %s -> %s",
"midnightcontrols.controller.connected": "Controle %d conectado.",
"midnightcontrols.controller.disconnected": "Controle %d desconectado.",
"midnightcontrols.controller.mappings.1": "Para configurar o mapeamento do controle, por favor use %s",
"midnightcontrols.controller.mappings.3": "e cole o mapeamento no editor de arquivos do mapeamento.",
"midnightcontrols.controller.mappings.error": "Erro ao carregar mapeamentos.",
"midnightcontrols.controller.mappings.error.write": "Erro ao gravar mapeamentos no arquivo.",
"midnightcontrols.controller.mappings.updated": "Atualizando mapeamentos!",
"midnightcontrols.controller_type.default": "Padrão",
"midnightcontrols.controller_type.dualshock": "DualShock",
"midnightcontrols.controller_type.dualsense": "DualSense",
"midnightcontrols.controller_type.switch": "Controle de Switch/Wii",
"midnightcontrols.controller_type.xbox": "Controle de Xbox One/Series",
"midnightcontrols.controller_type.xbox_360": "Controle de Xbox 360",
"midnightcontrols.controller_type.steam_controller": "Controle da Steam",
"midnightcontrols.controller_type.steam_deck": "Steam Deck",
"midnightcontrols.controller_type.ouya": "Controle de OUYA",
"midnightcontrols.controller_type.numbered": "Controle númerado",
"midnightcontrols.controls_mode.default": "Teclado/Mouse",
"midnightcontrols.controls_mode.controller": "Controle",
"midnightcontrols.controls_mode.touchscreen": "Tela sensível ao toque (Beta)",
"midnightcontrols.hud_side.LEFT": "Esquerda",
"midnightcontrols.hud_side.RIGHT": "Direita",
"midnightcontrols.menu.analog_movement": "Movemento analógico",
"midnightcontrols.menu.analog_movement.tooltip": "Quando possível, ative o movemento analógico.",
"midnightcontrols.menu.auto_switch_mode": "Modo de troca automática",
"midnightcontrols.menu.auto_switch_mode.tooltip": "Se o modo de controle deve ser alterado automaticamente para o controle quando um for conectado.",
"midnightcontrols.menu.camera_mode": "Modo de câmera",
"midnightcontrols.menu.controller": "Controle",
"midnightcontrols.menu.controller2": "Segundo controle",
"midnightcontrols.menu.controller2.tooltip": "Segundo controle a ser usado, o que permite (por exemplo) o suporte a Joy-Cons.",
"midnightcontrols.menu.controller_toggle_sneak": "Alternar Esgueirar no Controle",
"midnightcontrols.menu.controller_toggle_sprint": "Alternar Correr no Controle",
"midnightcontrols.menu.controller_type": "Tipo de controle",
"midnightcontrols.menu.controller_type.tooltip": "O tipo de controle que você está usando (é preciso para mostrar os botões corretos)",
"midnightcontrols.menu.controls_mode": "Modo",
"midnightcontrols.menu.controls_mode.tooltip": "O modo de controle.",
"midnightcontrols.menu.copy_controller_guid": "Copiar o GUID",
"midnightcontrols.menu.current_controller_guid": "GUID do controle atual: %s",
"midnightcontrols.menu.double_tap_to_sprint": "Toque duplo para correr",
"midnightcontrols.menu.double_tap_to_sprint.tooltip": "Alterna se a tecla Andar para Frente faz o jogador correr quando pressionada duas vezes rapidamente",
"midnightcontrols.menu.fast_block_placing": "Colocação Rápida de Blocos",
"midnightcontrols.menu.fast_block_placing.tooltip": "Enquanto voando no criativo, ativar a Colocação de Rápida de Blocos. §cEm alguns servidores isso pode ser considerado como trapaça.",
"midnightcontrols.menu.fly_drifting": "Derrapagem ao Voar",
"midnightcontrols.menu.fly_drifting.tooltip": "Enquanto voando, ativa a deparragem/inércia Vanilla.",
"midnightcontrols.menu.fly_drifting_vertical": "Derrapagem vertical ao Voar",
"midnightcontrols.menu.fly_drifting_vertical.tooltip": "Enquanto voando, ativa a deparragem/inércia vertical Vanilla.",
"midnightcontrols.menu.hud_enable": "Ativar HUD",
"midnightcontrols.menu.hud_enable.tooltip": "Alterna o indicador de botão do controle na tela.",
"midnightcontrols.menu.hud_side": "Lado do HUD",
"midnightcontrols.menu.hud_side.tooltip": "A posição do HUD.",
"midnightcontrols.menu.invert_right_x_axis": "Inverter X Direito",
"midnightcontrols.menu.invert_right_y_axis": "Inverter Y Direito",
"midnightcontrols.menu.joystick_as_mouse": "Sempre usar analógico esquerdo como mouse",
"midnightcontrols.menu.joystick_as_mouse.tooltip": "Fazer o analógico agir como um mouse em todos os menus.",
"midnightcontrols.menu.eye_tracker_as_mouse": "Usar o rastreador ocular como um mouse",
"midnightcontrols.menu.eye_tracker_as_mouse.tooltip": "Substituir o mouse com um dispositivo de rastreamento ocular, (por exemplo) o Tobii 5.",
"midnightcontrols.menu.eye_tracker_deadzone": "Tamanho da zona morta do rastreador ocular",
"midnightcontrols.menu.eye_tracker_deadzone.tooltip": "Parar o movimento da camera quando olhar perto da mira",
"midnightcontrols.menu.keyboard_controls": "Controles do teclado...",
"midnightcontrols.menu.left_dead_zone": "Zona morta do analógico esquerdo",
"midnightcontrols.menu.left_dead_zone.tooltip": "A zona morta para o analógico esquerdo do controle.",
"midnightcontrols.menu.mappings.open_input_str": "Abrir editor de arquivo de mapeamentos",
"midnightcontrols.menu.max_left_x_value": "Valor máximo do eixo X esquerdo",
"midnightcontrols.menu.max_left_x_value.tooltip": "Altera o valor máximo considerado pelo mod para o eixo X esquerdo. Útil se o seu eixo não usa toda a faixa e parece lento.",
"midnightcontrols.menu.max_left_y_value": "Valor máximo do eixo Y esquerdo",
"midnightcontrols.menu.max_left_y_value.tooltip": "Altera o valor máximo considerado pelo mod para o eixo Y esquerdo. Útil se o seu eixo não usa toda a faixa e parece lento.",
"midnightcontrols.menu.max_right_x_value": "Valor máximo do eixo X direito",
"midnightcontrols.menu.max_right_x_value.tooltip": "Altera o valor máximo considerado pelo mod para o eixo X direito. Útil se o seu eixo não usa toda a faixa e parece lento.",
"midnightcontrols.menu.max_right_y_value": "Valor máximo do eixo Y direito",
"midnightcontrols.menu.max_right_y_value.tooltip": "Altera o valor máximo considerado pelo mod para o eixo Y direito. Útil se o seu eixo não usa toda a faixa e parece lento.",
"midnightcontrols.menu.mouse_speed": "Velocidade do mouse",
"midnightcontrols.menu.mouse_speed.tooltip": "A velocidade do mouse emulado pelo controle",
"midnightcontrols.menu.move_chat": "Mover a caixa do chat para o topo",
"midnightcontrols.menu.move_chat.tooltip": "Move a caixa do chat para o topo, para uma melhor digitação em dispositivos com teclados na tela.",
"midnightcontrols.menu.multiple_mapping_tip": "(Dica: Você também pode inserir múltiplos mapeamentos ao mesmo tempo)",
"midnightcontrols.menu.reacharound.horizontal": "Colocação frontal de blocos",
"midnightcontrols.menu.reacharound.horizontal.tooltip": "Ativa colocação frontal de blocos, §cEm alguns servidores isso pode ser considerado como trapaça.§r.",
"midnightcontrols.menu.reacharound.vertical": "Alcance vertical",
"midnightcontrols.menu.reacharound.vertical.tooltip": "Ativa alcance vertical, §c§cEm alguns servidores isso pode ser considerado como trapaça.§r.",
"midnightcontrols.menu.reload_controller_mappings": "Recarregar o mapeamento do controle",
"midnightcontrols.menu.reload_controller_mappings.tooltip": "Recarrega o arquivo de mapeamentos do controle.",
"midnightcontrols.menu.right_dead_zone": "Zona morta do analógico direito",
"midnightcontrols.menu.right_dead_zone.tooltip": "A zona morta para o analógico direito do controle..",
"midnightcontrols.menu.rotation_speed": "Velocidade de rotação do eixo X",
"midnightcontrols.menu.rotation_speed.tooltip": "A velocidade de rotação do eixo X da câmera no modo controle.",
"midnightcontrols.menu.y_axis_rotation_speed": "Velocidade de rotação do eixo Y",
"midnightcontrols.menu.y_axis_rotation_speed.tooltip": "A velocidade de rotação do eixo Y da câmera no modo controle.",
"midnightcontrols.menu.separate_controller_profile": "Separar perfil do controle",
"midnightcontrols.menu.separator.controller": "Controle",
"midnightcontrols.menu.separator.general": "Geral",
"midnightcontrols.menu.title": "MidnightControls - Configurações",
"midnightcontrols.menu.title.controller": "Configurações do controle",
"midnightcontrols.menu.title.controller_controls": "Mapeamento de controle",
"midnightcontrols.menu.title.gameplay": "Configurações de jogabilidade",
"midnightcontrols.menu.title.general": "Configurações gerais",
"midnightcontrols.menu.title.hud": "Configurações de HUD",
"midnightcontrols.menu.title.mappings.string": "Editor de arquivo de mapeamentos",
"midnightcontrols.menu.title.touch": "Configurações de toque",
"midnightcontrols.menu.title.visual": "Configurações de aparência",
"midnightcontrols.menu.touch_break_delay": "Atrasado de destruição do toque",
"midnightcontrols.menu.touch_speed": "Velocidade do toque",
"midnightcontrols.menu.invert_touch": "Inverter direção do toque",
"midnightcontrols.menu.touch_mode": "Modo de interação de toque",
"midnightcontrols.menu.touch_transparency": "Transparência do HUD de toque",
"midnightcontrols.menu.touch_with_controller": "Toque no modo do controle",
"midnightcontrols.menu.unfocused_input": "Entrada desfocada",
"midnightcontrols.menu.unfocused_input.tooltip": "Permite entrada de sinais do controle quando a janela não está em foco.",
"midnightcontrols.menu.virtual_mouse": "Mouse virtual",
"midnightcontrols.menu.virtual_mouse.tooltip": "Ativa o mouse virtual, que é útil durante o modo tela dividida.",
"midnightcontrols.menu.virtual_mouse.skin": "Tema do mouse virtual",
"midnightcontrols.menu.hide_cursor": "Desativar cursor do mouse padrão",
"midnightcontrols.menu.hide_cursor.tooltip": "Esconde o cursor padrão do mouse, deixando apenas o mouse virtual visível.",
"midnightcontrols.narrator.unbound": "Desmapear %s",
"midnightcontrols.not_bound": "Não mapeado",
"midnightcontrols.virtual_mouse.skin.default_light": "Padrão claro",
"midnightcontrols.virtual_mouse.skin.default_dark": "Padrão escuro",
"midnightcontrols.virtual_mouse.skin.second_light": "Segundo claro",
"midnightcontrols.virtual_mouse.skin.second_dark": "Segundo escuro",
"midnightcontrols.midnightconfig.category.controller": "Controle",
"midnightcontrols.midnightconfig.category.misc": "Variados",
"midnightcontrols.midnightconfig.category.screens": "Telas",
"midnightcontrols.midnightconfig.category.gameplay": "Jogabilidade",
"midnightcontrols.midnightconfig.category.touch": "Toque",
"midnightcontrols.midnightconfig.category.visual": "Visual",
"modmenu.descriptionTranslation.midnightcontrols": "Adiciona suporte a controles e aprimora o controle no geral.\nDerivado do LambdaControls, que infelizmente foi descontinuado."
}

View File

@@ -1,27 +1,29 @@
{
"required": true,
"package": "eu.midnightdust.midnightcontrols.client.mixin",
"compatibilityLevel": "JAVA_21",
"compatibilityLevel": "JAVA_16",
"client": [
"ClickableWidgetAccessor",
"AdvancementsScreenAccessor",
"ChatScreenMixin",
"ClickableWidgetAccessor",
"ClientPlayerEntityMixin",
"GameOptionsScreenMixin",
"CreativeInventoryScreenAccessor",
"DrawContextAccessor",
"GameOptionsScreenMixin",
"GameRendererMixin",
"HandledScreenMixin",
"KeyBindingMixin",
"InputUtilMixin",
"MinecraftClientMixin",
"MouseMixin",
"MouseAccessor",
"ChatScreenMixin",
"RecipeBookWidgetAccessor",
"WorldRendererMixin",
"KeyBindingIDAccessor",
"TabNavigationWidgetAccessor",
"KeyBindingMixin",
"KeyboardMixin",
"MinecraftClientMixin",
"MouseAccessor",
"MouseMixin",
"RecipeBookScreenAccessor",
"RecipeBookWidgetAccessor",
"ScreenMixin",
"KeyboardMixin"
"TabNavigationWidgetAccessor",
"WorldRendererMixin"
],
"injectors": {
"defaultRequire": 1

View File

@@ -2,7 +2,7 @@
"required": true,
"package": "eu.midnightdust.midnightcontrols.client.compat.mixin",
"plugin": "eu.midnightdust.midnightcontrols.client.compat.MidnightControlsMixinPlugin",
"compatibilityLevel": "JAVA_21",
"compatibilityLevel": "JAVA_16",
"client": [
"sodium.SodiumOptionsGUIAccessor"
],

View File

@@ -26,7 +26,7 @@ dependencies {
modImplementation include ("maven.modrinth:midnightlib:${rootProject.midnightlib_version}-fabric")
modImplementation include ("maven.modrinth:obsidianui:${rootProject.obsidianui_version}-fabric") {}
include 'org.aperlambda:lambdajcommon:1.8.1'
modImplementation "maven.modrinth:emi:${project.emi_version}"
modCompileOnly "maven.modrinth:emi:${project.emi_version}"
common(project(path: ":common", configuration: "namedElements")) { transitive false }
shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false }

View File

@@ -54,7 +54,7 @@
"fabric": ">=0.71.0",
"minecraft": ">=1.20.5",
"obsidianui": ">=0.2.5",
"java": ">=21"
"java": ">=17"
},
"suggests": {
"kontrolo": "*"

View File

@@ -2,25 +2,25 @@
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx2048M
minecraft_version=1.21
supported_versions=1.21.1
yarn_mappings=1.21+build.2
minecraft_version=1.21.3
supported_versions=1.21.2
yarn_mappings=1.21.3+build.2
enabled_platforms=fabric,neoforge
archives_base_name=midnightcontrols
mod_version=1.10.0.1
mod_version=1.10.0
maven_group=eu.midnightdust
release_type=beta
modrinth_id = bXX9h73M
curseforge_id = 621768
# Configure the IDs here after creating the projects on the websites
midnightlib_version=1.6.3
midnightlib_version=1.6.4
fabric_loader_version=0.15.11
fabric_api_version=0.100.1+1.21
fabric_loader_version=0.16.9
fabric_api_version=0.107.3+1.21.3
neoforge_version=21.0.14-beta
neoforge_version=21.3.28-beta
yarn_mappings_patch_neoforge_version = 1.21+build.4
quilt_loader_version=0.19.0-beta.18

View File

@@ -3,7 +3,7 @@ package eu.midnightdust.midnightcontrols.client.util.platform.neoforge;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.network.packet.CustomPayload;
import net.minecraft.network.packet.Packet;
import net.neoforged.neoforge.network.PacketDistributor;
import net.minecraft.network.packet.c2s.common.CustomPayloadC2SPacket;
import static eu.midnightdust.midnightcontrols.client.MidnightControlsClient.client;
@@ -19,7 +19,7 @@ public class NetworkUtilImpl {
handler.send(packet);
}
public static void sendPayloadC2S(CustomPayload payload) {
if (handler != null && client.world != null && handler.hasChannel(payload.getId().id()))
PacketDistributor.sendToServer(payload);
if (handler != null && client.world != null)
handler.send(new CustomPayloadC2SPacket(payload));
}
}