Jump to content

[1.12.1][Solved] Call a function every time a block is broken


Recommended Posts

Posted (edited)

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 by Neirpyc
Posted

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.

Posted
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");
    }
}
Posted

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!

Posted

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...

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.