Posted August 19, 20178 yr Hello, I am currently trying to protect a server from xRays, and I want to log every block that is broken by each player so I can see if someone breaks more diamond per stone than he should. I've found a few answers to this question but I didn't managed to make any of these working in 1.12.1... So I want that every time a player breaks a blocks, a function is called, with as parameter the player who breaks the block and the type of the block. Also, this needs to be server side only so a hacker cannot edit the client to bypass this security. Thanks! Edited August 19, 20178 yr by Neirpyc
August 19, 20178 yr Author http://www.minecraftforge.net/forum/topic/7604-handle-playerinteractevent-problem/ -> doing nothing http://www.minecraftforum.net/forums/minecraft-discussion/redstone-discussion-and/commands-command-blocks-and/2475128-detect-when-a-player-breaks-a-certain-block -> not what I want I've also tried a few things looking like the first link that I can't find again, none of what I tried threw an exception, it was just doing nothing.
August 19, 20178 yr Author package com.aaa.modname; importcom.aaa.modname.subpackage.blockBreakHandler; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; @Mod(modid = Modname.MODID, version = Modname.VERSION) public class Modname { public static final String MODID = "modname"; public static final String VERSION = "0.0.1"; @EventHandler public void preInit(FMLPreInitializationEvent event){ } @EventHandler public void init(FMLInitializationEvent event) { FMLCommonHandler.instance().bus().register(new blockBreakHandler()); } @EventHandler public void postInit(FMLPostInitializationEvent event){ } } package com.aaa.modname.subpackage; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class blockBreakHandler { @SubscribeEvent public void onBlock(PlayerInteractEvent event){ System.out.println("Block Destroyed"); } }
August 19, 20178 yr Author forge: 14.22.0.2452 I know it is deprecated, but I'm first trying to make it working before I fix it.
August 19, 20178 yr Author I tried breaking blocks (that's what I want) (and I also tried going to sleep joining and leaving the server, placing blocks, opening guis...)
August 19, 20178 yr https://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftask-add_line_breakpoints.htm
August 19, 20178 yr Author Okay... I've changed one thing: I registered my event in preInit, init and postInit, and it worked... And now if a register it only one time, it still works... Thanks guys!
August 19, 20178 yr Author Well... actualy this is not total solved... HarvestCheck is only called when using the wrong tool to break a block (example: using a axe to mine diamond ore) and not when using to correct tool. I cannot find the function that is called on every block destroying...
August 19, 20178 yr 3 minutes ago, Neirpyc said: BlockEvent.BreakEvent doesn't give the blocktype of the block destroyed Yes it does. BlockEvent.BreakEvent#state#getBlock() VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.