Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion fabric/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ java.toolchain.languageVersion = JavaLanguageVersion.of(project.modJavaVersion)

repositories {
maven {
url = "https://maven.terraformersmc.com/releases"
// url = "https://maven.terraformersmc.com/releases"
url = "https://maven.gnomecraft.net/releases" // Official mirror from Terraformers while their system is down
}
}

Expand Down
6 changes: 3 additions & 3 deletions src/main/java/yalter/mousetweaks/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ private static void updateScreen(Screen newScreen) {
*/
public static boolean onMouseClicked(Screen screen, double x, double y, MouseButton button) {
updateScreen(screen);
if (handler == null)
if (handler == null || ServerFeatureControl.isMouseDisabled())
return false;

// Store the currently selected slot.
Expand Down Expand Up @@ -181,7 +181,7 @@ private static void rmbTweakMaybeClickSlot(Slot slot, ItemStack stackOnMouse) {
*/
public static boolean onMouseReleased(Screen screen, double x, double y, MouseButton button) {
updateScreen(screen);
if (handler == null)
if (handler == null || ServerFeatureControl.isMouseDisabled())
return false;

// Reset the flags.
Expand All @@ -204,7 +204,7 @@ else if (button == MouseButton.RIGHT)
*/
public static boolean onMouseDrag(Screen screen, double x, double y, MouseButton button) {
updateScreen(screen);
if (handler == null)
if (handler == null || ServerFeatureControl.isMouseDisabled())
return false;

Slot selectedSlot = handler.getSlotUnderMouse(x, y);
Expand Down
78 changes: 78 additions & 0 deletions src/main/java/yalter/mousetweaks/ServerFeatureControl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package yalter.mousetweaks;

import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.resources.Identifier;
import org.jspecify.annotations.NonNull;

import java.nio.charset.StandardCharsets;

public class ServerFeatureControl {

private static boolean mouseDisabled, wheelDisabled;

public static boolean isMouseDisabled() {
return mouseDisabled;
}

public static boolean isWheelDisabled() {
return wheelDisabled;
}

public static void apply(ServerFeatureControlPayload payload) {
for (String token : payload.value().strip().split("[\\s,]+")) {
switch (token.toLowerCase()) {
case "mouse" -> mouseDisabled = false;
case "!mouse" -> mouseDisabled = true;

case "wheel" -> wheelDisabled = false;
case "!wheel" -> wheelDisabled = true;

case "" -> {
mouseDisabled = true;
wheelDisabled = true;
}

default -> { }
}
}
}

public static void reset() {
mouseDisabled = false;
wheelDisabled = false;
}

public record ServerFeatureControlPayload(String value) implements CustomPacketPayload {

public static final Identifier ID = Identifier.fromNamespaceAndPath(Constants.MOD_ID, "feature_control");
public static final Type<ServerFeatureControlPayload> TYPE = new Type<>(ID);

@Override
public @NonNull Type<? extends CustomPacketPayload> type() {
return TYPE;
}

public static final StreamCodec<RegistryFriendlyByteBuf, ServerFeatureControlPayload> CODEC =
new StreamCodec<>() {
@Override
public ServerFeatureControlPayload decode(RegistryFriendlyByteBuf input) {
int length = input.readableBytes();

byte[] bytes = new byte[length];
input.readBytes(bytes);

return new ServerFeatureControlPayload(new String(bytes, StandardCharsets.UTF_8));
}

// Codecs require both methods, and even though we don't send it, it's helpful in tests
@Override
public void encode(RegistryFriendlyByteBuf output, ServerFeatureControlPayload value) {
byte[] bytes = value.value().getBytes(StandardCharsets.UTF_8);
output.writeBytes(bytes);
}
};
}

}
12 changes: 12 additions & 0 deletions src/main/java/yalter/mousetweaks/fabric/MouseTweaksFabric.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package yalter.mousetweaks.fabric;

import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
import net.fabricmc.fabric.api.client.screen.v1.ScreenMouseEvents;
import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
import yalter.mousetweaks.Main;
import yalter.mousetweaks.MouseButton;
import yalter.mousetweaks.ServerFeatureControl;
import yalter.mousetweaks.ServerFeatureControl.ServerFeatureControlPayload;

public class MouseTweaksFabric implements ClientModInitializer {
@Override
Expand Down Expand Up @@ -32,5 +37,12 @@ public void onInitializeClient() {
return Main.onMouseScrolled(screen, x, y, vert);
});
});

PayloadTypeRegistry.clientboundPlay().register(ServerFeatureControlPayload.TYPE, ServerFeatureControlPayload.CODEC);
ClientPlayNetworking.registerGlobalReceiver(
ServerFeatureControlPayload.TYPE,
(payload, _) -> ServerFeatureControl.apply(payload)
);
ClientPlayConnectionEvents.DISCONNECT.register((_, _) -> ServerFeatureControl.reset());
}
}
24 changes: 24 additions & 0 deletions src/main/java/yalter/mousetweaks/forge/MouseTweaksForge.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package yalter.mousetweaks.forge;

import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.resources.Identifier;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.ClientPlayerNetworkEvent;
import net.minecraftforge.client.event.ScreenEvent.MouseButtonPressed;
import net.minecraftforge.client.event.ScreenEvent.MouseButtonReleased;
import net.minecraftforge.client.event.ScreenEvent.MouseDragged;
Expand All @@ -13,7 +16,10 @@
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.fml.loading.FMLEnvironment;
import net.minecraftforge.network.Channel;
import net.minecraftforge.network.ChannelBuilder;
import yalter.mousetweaks.*;
import yalter.mousetweaks.ServerFeatureControl.ServerFeatureControlPayload;

import java.lang.invoke.MethodHandles;

Expand All @@ -25,6 +31,7 @@ public MouseTweaksForge() {
return;
}

registerChannel();
BusGroup.DEFAULT.register(MethodHandles.lookup(), this);

MinecraftForge.registerConfigScreen(ConfigScreen::new);
Expand Down Expand Up @@ -90,4 +97,21 @@ public boolean onGuiMouseDragPre(MouseDragged.Pre event) {

return false;
}

@SubscribeEvent
public void onClientLogout(ClientPlayerNetworkEvent.LoggingOut event) {
ServerFeatureControl.reset();
}

private void registerChannel() {
ChannelBuilder
.named(Identifier.fromNamespaceAndPath(Constants.MOD_ID, "network"))
.optional()
.payloadChannel()
.play()
.clientbound()
.addMain(ServerFeatureControlPayload.TYPE, ServerFeatureControlPayload.CODEC,
(payload, context) -> ServerFeatureControl.apply(payload))
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import net.minecraft.world.inventory.*;
import yalter.mousetweaks.IGuiScreenHandler;
import yalter.mousetweaks.MouseButton;
import yalter.mousetweaks.ServerFeatureControl;
import yalter.mousetweaks.api.MouseTweaksDisableWheelTweak;
import yalter.mousetweaks.api.MouseTweaksIgnore;
import yalter.mousetweaks.mixin.AbstractContainerScreenAccessor;
Expand All @@ -29,7 +30,7 @@ public boolean isMouseTweaksDisabled() {

@Override
public boolean isWheelTweakDisabled() {
return screen.getClass().isAnnotationPresent(MouseTweaksDisableWheelTweak.class);
return screen.getClass().isAnnotationPresent(MouseTweaksDisableWheelTweak.class) || ServerFeatureControl.isWheelDisabled();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import net.minecraft.world.inventory.Slot;
import yalter.mousetweaks.IGuiScreenHandler;
import yalter.mousetweaks.MouseButton;
import yalter.mousetweaks.ServerFeatureControl;
import yalter.mousetweaks.api.IMTModGuiContainer3Ex;

import java.util.List;
Expand All @@ -22,7 +23,7 @@ public boolean isMouseTweaksDisabled() {

@Override
public boolean isWheelTweakDisabled() {
return modGuiContainer.MT_isWheelTweakDisabled();
return modGuiContainer.MT_isWheelTweakDisabled() || ServerFeatureControl.isWheelDisabled();
}

@Override
Expand Down
20 changes: 20 additions & 0 deletions src/main/java/yalter/mousetweaks/neoforge/MouseTweaksNeo.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package yalter.mousetweaks.neoforge;

import net.neoforged.neoforge.client.event.ClientPlayerNetworkEvent;
import net.neoforged.neoforge.client.event.ScreenEvent.MouseButtonPressed;
import net.neoforged.neoforge.client.event.ScreenEvent.MouseButtonReleased;
import net.neoforged.neoforge.client.event.ScreenEvent.MouseDragged;
import net.neoforged.neoforge.client.event.ScreenEvent.MouseScrolled;
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
import net.neoforged.neoforge.client.network.event.RegisterClientPayloadHandlersEvent;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.ModLoadingContext;
Expand All @@ -16,6 +19,8 @@
import yalter.mousetweaks.Logger;
import yalter.mousetweaks.Main;
import yalter.mousetweaks.MouseButton;
import yalter.mousetweaks.ServerFeatureControl;
import yalter.mousetweaks.ServerFeatureControl.ServerFeatureControlPayload;

@Mod(Constants.MOD_ID)
public class MouseTweaksNeo {
Expand All @@ -26,6 +31,8 @@ public MouseTweaksNeo(IEventBus modBus) {
}

modBus.addListener(this::onClientSetup);
modBus.addListener(this::registerPayloads);
modBus.addListener(this::registerClientHandlers);
NeoForge.EVENT_BUS.register(this);

ModLoadingContext.get().registerExtensionPoint(IConfigScreenFactory.class, ClientHelper::new);
Expand Down Expand Up @@ -81,4 +88,17 @@ public void onGuiMouseDragPre(MouseDragged.Pre event) {
event.setCanceled(true);
}
}

public void registerPayloads(RegisterPayloadHandlersEvent event) {
event.registrar("1").optional().playToClient(ServerFeatureControlPayload.TYPE, ServerFeatureControlPayload.CODEC);
}

public void registerClientHandlers(RegisterClientPayloadHandlersEvent event) {
event.register(ServerFeatureControlPayload.TYPE, (payload, context) -> ServerFeatureControl.apply(payload));
}

@SubscribeEvent
public void onClientLogout(ClientPlayerNetworkEvent.LoggingOut event) {
ServerFeatureControl.reset();
}
}
Loading