Before installing:
package com.yourname.fastplace;import net.minecraftforge.common.config.Configuration; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import java.io.File;
public class Config public static boolean fastPlaceEnabled = true; public static boolean fastBreakEnabled = false;
public static void load(FMLPreInitializationEvent event) File configFile = new File(event.getModConfigurationDirectory(), "fastplace.cfg"); Configuration config = new Configuration(configFile); config.load(); fastPlaceEnabled = config.getBoolean("FastPlace", "general", true, "Remove right-click delay"); fastBreakEnabled = config.getBoolean("FastBreak", "general", false, "Remove left-click delay"); config.save();
Update the tick handler to check Config.fastPlaceEnabled.
For a production mod, use Mixins (SpongePowered) to directly modify: fast block place mod 1.8.9
@Mixin(Minecraft.class)
public class MixinMinecraft
@Redirect(method = "runTick", at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;rightClickDelayTimer:I"))
public int onRightClickDelay(Minecraft mc, int value)
if (Config.fastPlaceEnabled) return 0;
return value;
But Mixins require more setup and are not natively in Forge 1.8.9 (requires UniInjector or MixinBooter). The event-based method above is simpler.
package com.yourname.fastplace;import net.minecraft.client.Minecraft; import net.minecraft.network.play.client.C08PacketPlayerBlockPlacement; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent;
public class PacketPlaceManager
private boolean placing = false; private int lastSlot = -1; @SubscribeEvent public void onTick(TickEvent.ClientTickEvent event) mc.objectMouseOver == null) return; // Check if right-click is held down if (mc.gameSettings.keyBindUseItem.isKeyDown()) if (!placing) placing = true; // Force delay to zero again mc.rightClickDelayTimer = 0; // Send placement packet manually if (mc.objectMouseOver.typeOfHit == net.minecraft.util.MovingObjectPosition.MovingObjectType.BLOCK) mc.playerController.isInCreativeMode()) C08PacketPlayerBlockPlacement packet = new C08PacketPlayerBlockPlacement(pos, side, mc.thePlayer.getHeldItem(), 0.5f, 0.5f, 0.5f); mc.getNetHandler().addToSendQueue(packet); // Also sync item stack if (lastSlot != mc.thePlayer.inventory.currentItem) lastSlot = mc.thePlayer.inventory.currentItem; else placing = false;
Register this instead of the simple tick handler for better server compatibility. Before installing: