[+] Add block destroy listener
This commit is contained in:
@@ -18,6 +18,7 @@
|
|||||||
package baritone.api.event.listener;
|
package baritone.api.event.listener;
|
||||||
|
|
||||||
import baritone.api.event.events.*;
|
import baritone.api.event.events.*;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An implementation of {@link IGameEventListener} that has all methods
|
* An implementation of {@link IGameEventListener} that has all methods
|
||||||
@@ -71,4 +72,7 @@ public interface AbstractGameEventListener extends IGameEventListener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
default void onPathEvent(PathEvent event) {}
|
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 baritone.api.event.events.*;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.entity.player.ClientPlayerEntity;
|
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.gui.screen.Screen;
|
||||||
import net.minecraft.client.world.ClientWorld;
|
import net.minecraft.client.world.ClientWorld;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Brady
|
* @author Brady
|
||||||
@@ -137,4 +137,11 @@ public interface IGameEventListener {
|
|||||||
* @param event The event
|
* @param event The event
|
||||||
*/
|
*/
|
||||||
void onPathEvent(PathEvent 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;
|
package baritone.launch.mixins;
|
||||||
|
|
||||||
|
import baritone.api.BaritoneAPI;
|
||||||
|
import baritone.api.IBaritone;
|
||||||
import baritone.utils.accessor.IPlayerControllerMP;
|
import baritone.utils.accessor.IPlayerControllerMP;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.multiplayer.PlayerController;
|
import net.minecraft.client.multiplayer.PlayerController;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
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.Accessor;
|
||||||
import org.spongepowered.asm.mixin.gen.Invoker;
|
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)
|
@Mixin(PlayerController.class)
|
||||||
public abstract class MixinPlayerController implements IPlayerControllerMP {
|
public abstract class MixinPlayerController implements IPlayerControllerMP {
|
||||||
|
|
||||||
|
@Shadow
|
||||||
|
@Final
|
||||||
|
private Minecraft mc;
|
||||||
|
|
||||||
@Accessor
|
@Accessor
|
||||||
@Override
|
@Override
|
||||||
public abstract void setIsHittingBlock(boolean isHittingBlock);
|
public abstract void setIsHittingBlock(boolean isHittingBlock);
|
||||||
@@ -38,4 +50,20 @@ public abstract class MixinPlayerController implements IPlayerControllerMP {
|
|||||||
@Invoker
|
@Invoker
|
||||||
@Override
|
@Override
|
||||||
public abstract void callSyncCurrentPlayItem();
|
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.api.utils.Helper;
|
||||||
import baritone.cache.WorldProvider;
|
import baritone.cache.WorldProvider;
|
||||||
import baritone.utils.BlockStateInterface;
|
import baritone.utils.BlockStateInterface;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.chunk.Chunk;
|
import net.minecraft.world.chunk.Chunk;
|
||||||
|
|
||||||
@@ -161,4 +162,9 @@ public final class GameEventHandler implements IEventBus, Helper {
|
|||||||
public final void registerEventListener(IGameEventListener listener) {
|
public final void registerEventListener(IGameEventListener listener) {
|
||||||
this.listeners.add(listener);
|
this.listeners.add(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final void onBlockBreak(BlockPos blockPos)
|
||||||
|
{
|
||||||
|
listeners.forEach(l -> l.onBlockBreak(blockPos));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user