Merge pull request #635 from Antonio32A/feature/master

Breaking Warning
This commit is contained in:
Bella Who 2020-03-31 17:58:59 +00:00 committed by GitHub
commit f7ae35a32c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 81 additions and 0 deletions

View File

@ -0,0 +1,81 @@
package me.zeroeightsix.kami.module.modules.combat;
import me.zero.alpine.listener.EventHandler;
import me.zero.alpine.listener.Listener;
import me.zeroeightsix.kami.event.events.PacketEvent;
import me.zeroeightsix.kami.gui.rgui.render.font.FontRenderer;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.Wrapper;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemPickaxe;
import net.minecraft.network.play.server.SPacketBlockBreakAnim;
import net.minecraft.util.math.BlockPos;
/**
* @author Antonio32A
* Updated by S-B99 on 31/03/20
*
* Antonio32A created the pastDistance method, used by ForgeHax here:
* https://github.com/fr1kin/ForgeHax/blob/2011740/src/main/java/com/matt/forgehax/mods/CoordsFinder.java#L126
*/
@Module.Info(name = "BreakingWarning", category = Module.Category.COMBAT, description = "Notifies you when someone is breaking a block near you.")
public class BreakingWarning extends Module {
private Setting<Double> minRange = register(Settings.doubleBuilder("Min Range").withMinimum(0.0).withValue(1.5).withMaximum(10.0).build());
private Setting<Boolean> obsidianOnly = register(Settings.b("Obsidian Only", true));
private Setting<Boolean> pickaxeOnly = register(Settings.b("Pickaxe Only", true));
private Boolean warn = false;
private String playerName;
private int delay;
@EventHandler
private Listener<PacketEvent.Receive> receiveListener = new Listener<>(event -> {
if (event.getPacket() instanceof SPacketBlockBreakAnim) {
SPacketBlockBreakAnim packet = (SPacketBlockBreakAnim) event.getPacket();
int progress = packet.getProgress();
int breakerId = packet.getBreakerId();
BlockPos pos = packet.getPosition();
Block block = mc.world.getBlockState(pos).getBlock();
EntityPlayer breaker = (EntityPlayer) mc.world.getEntityByID(breakerId);
if (breaker == null) return;
if (obsidianOnly.getValue() && !block.equals(Blocks.OBSIDIAN)) return;
if (pickaxeOnly.getValue()) {
if (breaker.itemStackMainHand.isEmpty() || !(breaker.itemStackMainHand.getItem() instanceof ItemPickaxe)) return;
}
if (pastDistance(mc.player, pos, minRange.getValue())) {
playerName = breaker.getName();
warn = true;
delay = 0;
if (progress == 255) warn = false;
}
}
});
@Override
public void onRender() {
if (!warn) return;
if (delay++ > 100) warn = false;
String text = playerName + " is breaking blocks near you!";
FontRenderer renderer = Wrapper.getFontRenderer();
int divider = mc.gameSettings.guiScale;
if (divider == 0) divider = 3;
renderer.drawStringWithShadow(mc.displayWidth / divider / 2 - renderer.getStringWidth(text) / 2, mc.displayHeight / divider / 2 - 16, 240, 87, 70, text);
}
private boolean pastDistance(EntityPlayer player, BlockPos pos, double dist) {
return player.getDistanceSqToCenter(pos) <= Math.pow(dist, 2);
}
}