[+] Add block destroy listener
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
package baritone.api.event.listener;
|
||||
|
||||
import baritone.api.event.events.*;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
/**
|
||||
* An implementation of {@link IGameEventListener} that has all methods
|
||||
@@ -71,4 +72,7 @@ public interface AbstractGameEventListener extends IGameEventListener {
|
||||
|
||||
@Override
|
||||
default void onPathEvent(PathEvent event) {}
|
||||
|
||||
@Override
|
||||
default void onBlockBreak(BlockPos pos) {}
|
||||
}
|
||||
|
||||
@@ -20,10 +20,10 @@ package baritone.api.event.listener;
|
||||
import baritone.api.event.events.*;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.player.ClientPlayerEntity;
|
||||
import net.minecraft.client.gui.screen.DeathScreen;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
/**
|
||||
* @author Brady
|
||||
@@ -137,4 +137,11 @@ public interface IGameEventListener {
|
||||
* @param event The event
|
||||
*/
|
||||
void onPathEvent(PathEvent event);
|
||||
|
||||
/**
|
||||
* This is called when the player breaks blocks.
|
||||
*
|
||||
* @param pos Block position
|
||||
*/
|
||||
void onBlockBreak(BlockPos pos);
|
||||
}
|
||||
|
||||
@@ -17,16 +17,28 @@
|
||||
|
||||
package baritone.launch.mixins;
|
||||
|
||||
import baritone.api.BaritoneAPI;
|
||||
import baritone.api.IBaritone;
|
||||
import baritone.utils.accessor.IPlayerControllerMP;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.multiplayer.PlayerController;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
import org.spongepowered.asm.mixin.gen.Invoker;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
@Mixin(PlayerController.class)
|
||||
public abstract class MixinPlayerController implements IPlayerControllerMP {
|
||||
|
||||
@Shadow
|
||||
@Final
|
||||
private Minecraft mc;
|
||||
|
||||
@Accessor
|
||||
@Override
|
||||
public abstract void setIsHittingBlock(boolean isHittingBlock);
|
||||
@@ -38,4 +50,20 @@ public abstract class MixinPlayerController implements IPlayerControllerMP {
|
||||
@Invoker
|
||||
@Override
|
||||
public abstract void callSyncCurrentPlayItem();
|
||||
|
||||
@Inject(
|
||||
method = "onPlayerDestroyBlock",
|
||||
at = @At(value = "TAIL")
|
||||
)
|
||||
public void onPlayerDestroyBlock(BlockPos pos, CallbackInfoReturnable<Boolean> cir)
|
||||
{
|
||||
// Check if the block is broken
|
||||
if (!cir.getReturnValue()) return;
|
||||
|
||||
// Call event
|
||||
IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(this.mc.player);
|
||||
if (baritone != null) {
|
||||
baritone.getGameEventHandler().onBlockBreak(pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import baritone.api.event.listener.IGameEventListener;
|
||||
import baritone.api.utils.Helper;
|
||||
import baritone.cache.WorldProvider;
|
||||
import baritone.utils.BlockStateInterface;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
|
||||
@@ -161,4 +162,9 @@ public final class GameEventHandler implements IEventBus, Helper {
|
||||
public final void registerEventListener(IGameEventListener listener) {
|
||||
this.listeners.add(listener);
|
||||
}
|
||||
|
||||
public final void onBlockBreak(BlockPos blockPos)
|
||||
{
|
||||
listeners.forEach(l -> l.onBlockBreak(blockPos));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user