@Override public byte[] transform(String name, String transformedName, byte[] basicClass) { if (basicClass == null) return null; if (transformedName.equals("net.minecraft.client.multiplayer.PlayerControllerMP")) { LOGGER.info("Patching PlayerControllerMP for fast block place"); return patchPlayerControllerMP(basicClass); } return basicClass; }
private static final Logger LOGGER = Logger.getLogger("FastBlockPlace");
version = "1.0" group = "com.example.fastblockplace" archivesBaseName = "FastBlockPlace"
package com.example.fastblockplace; import net.minecraft.launchwrapper.IClassTransformer; import org.objectweb.asm.*; fast block place mod 1.8.9
jar { manifest { attributes( 'FMLCorePlugin': 'com.example.fastblockplace.Plugin', 'FMLCorePluginContainsFMLMod': 'true', 'FMLAT': 'fastblockplace_at.cfg' ) } }
@Mod.EventHandler public void init(FMLInitializationEvent event) { logger.info("FastBlockPlace Mod enabled – block placing delay removed"); } } This patches net.minecraft.client.multiplayer.PlayerControllerMP method clickBlock to remove the 4 tick cooldown ( blockHitDelay ).
@IFMLLoadingPlugin.MCVersion("1.8.9") public class Plugin implements IFMLLoadingPlugin { @Override public String[] getASMTransformerClass() { return new String[]{"com.example.fastblockplace.Transformer"}; } FastBlockPlaceMod
@Override public void injectData(Map<String, Object> data) {}
dependencies { compile 'org.ow2.asm:asm-debug-all:5.0.3' } Create src/main/resources/META-INF/fastblockplace_at.cfg :
@Mod(modid = FastBlockPlaceMod.MODID, version = FastBlockPlaceMod.VERSION, clientSideOnly = true) public class FastBlockPlaceMod { public static final String MODID = "fastblockplace"; public static final String VERSION = "1.0"; public static Logger logger; @Override public byte[] transform(String name
public class Transformer implements IClassTransformer {
repositories { mavenCentral() }
@Override public String getAccessTransformerClass() { return null; } } { "modid": "fastblockplace", "name": "Fast Block Place", "description": "Removes the delay between placing blocks. Place blocks as fast as you can click!", "version": "1.0", "mcversion": "1.8.9", "url": "", "updateUrl": "", "authorList": ["YourName"], "credits": "ASM Patch for 1.8.9", "logoFile": "", "screenshots": [], "dependencies": [] } 5. build.gradle (ForgeGradle Setup) buildscript { repositories { jcenter() maven { url = "https://files.minecraftforge.net/maven" } } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT' } } apply plugin: 'net.minecraftforge.gradle.tweaker-client' apply plugin: 'java'
This mod removes the delay between placing blocks, allowing you to place them as fast as you can click (limited only by the server’s entity-action rate). It uses to patch the client-side PlayerControllerMP class, which is the most reliable method for 1.8.9. Project Structure FastBlockPlace/ ├── src/main/java/com/example/fastblockplace/ │ ├── FastBlockPlaceMod.java │ ├── Transformer.java │ └── Plugin.java └── src/main/resources/ └── mcmod.info 1. FastBlockPlaceMod.java – Core Mod Class package com.example.fastblockplace; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import org.apache.logging.log4j.Logger;
import java.util.logging.Logger;