Skip to content

Commit

Permalink
Add mixin for longer chat messages + Config Syncing (#252)
Browse files Browse the repository at this point in the history
* Add mixin for longer chat messages

* register GuiChat mixin on client only to prevent crash on server

* both handlers in MixinC01PacketChatMessage_LongerMessages can be merged into one

* hardcode max sent message length to 256

* add a separate setting for longer sent messages feature

* Always have the packet size change on client and server

The config option now just controls whether the client can send longer messages, which most people wont disable.

* Spotless apply for branch sb-longer-chat-messages for #252 (#274)

Co-authored-by: GitHub GTNH Actions <>

* Add config syncing between server and client

* fix spotless formatting

---------

Co-authored-by: Alexdoru <[email protected]>
Co-authored-by: Martin Robertz <[email protected]>
Co-authored-by: Caedis <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  • Loading branch information
5 people authored Nov 5, 2023
1 parent ccaf8b4 commit 727d0dc
Show file tree
Hide file tree
Showing 8 changed files with 122 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/main/java/com/mitchej123/hodgepodge/Hodgepodge.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package com.mitchej123.hodgepodge;

import net.minecraftforge.common.MinecraftForge;

import com.mitchej123.hodgepodge.client.HodgepodgeClient;
import com.mitchej123.hodgepodge.commands.DebugCommand;
import com.mitchej123.hodgepodge.net.NetworkHandler;
import com.mitchej123.hodgepodge.util.AnchorAlarm;

import cpw.mods.fml.common.FMLCommonHandler;
Expand Down Expand Up @@ -32,7 +31,7 @@ public class Hodgepodge {
@EventHandler
public void preinit(FMLPreInitializationEvent event) {
Compat.init(event.getSide());
MinecraftForge.EVENT_BUS.register(EVENT_HANDLER);
EVENT_HANDLER.preinit();

if (event.getSide() == Side.CLIENT) {
HodgepodgeClient.preInit();
Expand All @@ -42,6 +41,7 @@ public void preinit(FMLPreInitializationEvent event) {
@EventHandler
public void init(FMLInitializationEvent event) {
FMLCommonHandler.instance().bus().register(ANCHOR_ALARM);
NetworkHandler.init();
}

@EventHandler
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,24 @@
package com.mitchej123.hodgepodge;

import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.living.ZombieEvent;

import com.mitchej123.hodgepodge.net.MessageConfigSync;
import com.mitchej123.hodgepodge.net.NetworkHandler;

import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.Event;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent;

public class HodgepodgeEventHandler {

public void preinit() {
MinecraftForge.EVENT_BUS.register(this);
FMLCommonHandler.instance().bus().register(this);
}

private boolean xuDisableAidTrigger;

@SubscribeEvent
Expand All @@ -19,4 +31,9 @@ public void onZombieAidSummon(ZombieEvent.SummonAidEvent event) {
public void setAidTriggerDisabled(boolean disableAidTrigger) {
xuDisableAidTrigger = disableAidTrigger;
}

@SubscribeEvent
public void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) {
NetworkHandler.instance.sendTo(new MessageConfigSync(Common.config), (EntityPlayerMP) event.player);
}
}
2 changes: 2 additions & 0 deletions src/main/java/com/mitchej123/hodgepodge/LoadingConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ public class LoadingConfig {
public boolean java12MineChemCompat;
public boolean logHugeChat;
public boolean longerChat;
public boolean longerSentMessages;
public boolean makeBigFirsPlantable;
public boolean optimizeASMDataTable;
public boolean optimizeIc2ReactorInventoryAccess;
Expand Down Expand Up @@ -311,6 +312,7 @@ public LoadingConfig(File file) {
java12MineChemCompat = config.get(Category.FIXES.toString(), "java12MineChemCompat", true, "Minechem Java 12 compatibility patch").getBoolean();
logHugeChat = config.get(Category.FIXES.toString(), "logHugeChat", true, "Log oversized chat message to console. WARNING: might create huge log files if this happens very often.").getBoolean();
longerChat = config.get(Category.TWEAKS.toString(), "longerChat", true, "Makes the chat history longer instead of 100 lines").getBoolean();
longerSentMessages = config.get(Category.TWEAKS.toString(), "longerSentMessages", true, "Allows you to send longer chat messages, up to 256 characters, instead of 100 in vanilla.").getBoolean();
makeBigFirsPlantable = config.get(Category.TWEAKS.toString(), "makeBigFirsPlantable", true, "Allow 5 Fir Sapling planted together ('+' shape) to grow to a big fir tree").getBoolean();
optimizeASMDataTable = config.get(Category.SPEEDUPS.toString(), "optimizeASMDataTable", true, "Optimize ASMDataTable getAnnotationsFor for faster startup").getBoolean();
optimizeIc2ReactorInventoryAccess = config.get(Category.FIXES.toString(), "optimizeIc2ReactorInventoryAccess", true, "Optimize inventory access to IC2 nuclear reactor").getBoolean();
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,14 @@ public enum Mixins {
TRANSPARENT_CHAT(new Builder("Transparent Chat").setPhase(Phase.EARLY)
.addMixinClasses("minecraft.MixinGuiNewChat_TransparentChat").setSide(Side.CLIENT)
.setApplyIf(() -> Common.config.transparentChat).addTargetedMod(TargetedMod.VANILLA)),
// config handled in mixin due to server->client config sync
LONGER_MESSAGES_CLIENT(new Builder("Longer Messages Client Side").setPhase(Phase.EARLY)
.addMixinClasses("minecraft.MixinGuiChat_LongerMessages").setApplyIf(() -> true)
.addTargetedMod(TargetedMod.VANILLA).setSide(Side.CLIENT)),
// config handled in mixin due to server->client config sync
LONGER_MESSAGES_SERVER(new Builder("Longer Messages Server Side").setPhase(Phase.EARLY)
.addMixinClasses("minecraft.MixinC01PacketChatMessage_LongerMessages").setApplyIf(() -> true)
.addTargetedMod(TargetedMod.VANILLA).setSide(Side.BOTH)),
SPEEDUP_GRASS_BLOCK_RANDOM_TICKING(new Builder("Speed up grass block random ticking").setPhase(Phase.EARLY)
.addMixinClasses("minecraft.MixinBlockGrass").addTargetedMod(TargetedMod.VANILLA).setSide(Side.BOTH)
.setApplyIf(() -> Common.config.speedupGrassBlockRandomTicking)),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.mitchej123.hodgepodge.mixins.early.minecraft;

import net.minecraft.network.play.client.C01PacketChatMessage;

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;

import com.mitchej123.hodgepodge.Common;

@Mixin(C01PacketChatMessage.class)
public class MixinC01PacketChatMessage_LongerMessages {

@ModifyConstant(method = { "<init>(Ljava/lang/String;)V", "readPacketData" }, constant = @Constant(intValue = 100))
public int hodgepodge$LongerMessages(int constant) {
return Common.config.longerSentMessages ? 256 : constant;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.mitchej123.hodgepodge.mixins.early.minecraft;

import net.minecraft.client.gui.GuiChat;

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;

import com.mitchej123.hodgepodge.Common;

@Mixin(GuiChat.class)
public class MixinGuiChat_LongerMessages {

@ModifyConstant(method = "initGui", constant = @Constant(intValue = 100))
public int hodgepodge$LongerMessages(int constant) {
return Common.config.longerSentMessages ? 256 : constant;
}
}
41 changes: 41 additions & 0 deletions src/main/java/com/mitchej123/hodgepodge/net/MessageConfigSync.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.mitchej123.hodgepodge.net;

import com.mitchej123.hodgepodge.Common;
import com.mitchej123.hodgepodge.LoadingConfig;

import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;

public class MessageConfigSync implements IMessage, IMessageHandler<MessageConfigSync, IMessage> {

private boolean longerSentMessages;

public MessageConfigSync() {}

public MessageConfigSync(LoadingConfig config) {
longerSentMessages = config.longerSentMessages;
}

@Override
public void fromBytes(ByteBuf buf) {
longerSentMessages = buf.readBoolean();
}

@Override
public void toBytes(ByteBuf buf) {
buf.writeBoolean(longerSentMessages);
}

public boolean isLongerSentMessages() {
return longerSentMessages;
}

@Override
public IMessage onMessage(MessageConfigSync message, MessageContext ctx) {
Common.config.longerSentMessages = message.isLongerSentMessages();

return null;
}
}
15 changes: 15 additions & 0 deletions src/main/java/com/mitchej123/hodgepodge/net/NetworkHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.mitchej123.hodgepodge.net;

import com.mitchej123.hodgepodge.Hodgepodge;

import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import cpw.mods.fml.relauncher.Side;

public class NetworkHandler {

public static final SimpleNetworkWrapper instance = new SimpleNetworkWrapper(Hodgepodge.MODID);

public static void init() {
instance.registerMessage(MessageConfigSync.class, MessageConfigSync.class, 0, Side.CLIENT);
}
}

0 comments on commit 727d0dc

Please sign in to comment.