/* * Copyright (C) 2014 - 2020 | Alexander01998 | All rights reserved. * * This source code is subject to the terms of the GNU General Public * License, version 3. If a copy of the GPL was not distributed with this * file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt */ package net.wurstclient.hacks; import java.util.ArrayList; import java.util.Collections; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.stream.StreamSupport; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.mob.AmbientEntity; import net.minecraft.entity.mob.Monster; import net.minecraft.entity.mob.WaterCreatureEntity; import net.minecraft.entity.passive.AnimalEntity; import net.minecraft.entity.player.PlayerEntity; import net.wurstclient.Category; import net.wurstclient.SearchTags; import net.wurstclient.clickgui.Window; import net.wurstclient.clickgui.components.RadarComponent; import net.wurstclient.events.UpdateListener; import net.wurstclient.hack.Hack; import net.wurstclient.settings.CheckboxSetting; import net.wurstclient.settings.SliderSetting; import net.wurstclient.settings.SliderSetting.ValueDisplay; import net.wurstclient.util.FakePlayerEntity; @SearchTags({"MiniMap", "mini map"}) public final class RadarHack extends Hack implements UpdateListener { private final Window window; private final ArrayList<Entity> entities = new ArrayList<>(); private final SliderSetting radius = new SliderSetting("Radius", "Radius in blocks.", 100, 1, 100, 1, ValueDisplay.INTEGER); private final CheckboxSetting rotate = new CheckboxSetting("Rotate with player", true); private final CheckboxSetting filterPlayers = new CheckboxSetting( "Filter players", "Won't show other players.", false); private final CheckboxSetting filterSleeping = new CheckboxSetting( "Filter sleeping", "Won't show sleeping players.", false); private final CheckboxSetting filterMonsters = new CheckboxSetting( "Filter monsters", "Won't show zombies, creepers, etc.", false); private final CheckboxSetting filterAnimals = new CheckboxSetting( "Filter animals", "Won't show pigs, cows, etc.", false); private final CheckboxSetting filterInvisible = new CheckboxSetting( "Filter invisible", "Won't show invisible entities.", false); public RadarHack() { super("Radar", "Shows the location of nearby entities.\n" + "\u00a7cred\u00a7r - players\n" + "\u00a76orange\u00a7r - monsters\n" + "\u00a7agreen\u00a7r - animals\n" + "\u00a77gray\u00a7r - others\n"); setCategory(Category.RENDER); addSetting(radius); addSetting(rotate); addSetting(filterPlayers); addSetting(filterSleeping); addSetting(filterMonsters); addSetting(filterAnimals); addSetting(filterInvisible); window = new Window("Radar"); window.setPinned(true); window.setInvisible(true); window.add(new RadarComponent(this)); } @Override public void onEnable() { EVENTS.add(UpdateListener.class, this); window.setInvisible(false); } @Override public void onDisable() { EVENTS.remove(UpdateListener.class, this); window.setInvisible(true); } @Override public void onUpdate() { ClientPlayerEntity player = MC.player; ClientWorld world = MC.world; entities.clear(); Stream<Entity> stream = StreamSupport.stream(world.getEntities().spliterator(), true) .filter(e -> !e.removed && e != player) .filter(e -> !(e instanceof FakePlayerEntity)) .filter(e -> e instanceof LivingEntity) .filter(e -> ((LivingEntity)e).getHealth() > 0); if(filterPlayers.isChecked()) stream = stream.filter(e -> !(e instanceof PlayerEntity)); if(filterSleeping.isChecked()) stream = stream.filter(e -> !(e instanceof PlayerEntity && ((PlayerEntity)e).isSleeping())); if(filterMonsters.isChecked()) stream = stream.filter(e -> !(e instanceof Monster)); if(filterAnimals.isChecked()) stream = stream.filter( e -> !(e instanceof AnimalEntity || e instanceof AmbientEntity || e instanceof WaterCreatureEntity)); if(filterInvisible.isChecked()) stream = stream.filter(e -> !e.isInvisible()); entities.addAll(stream.collect(Collectors.toList())); } public Window getWindow() { return window; } public Iterable<Entity> getEntities() { return Collections.unmodifiableList(entities); } public double getRadius() { return radius.getValue(); } public boolean isRotateEnabled() { return rotate.isChecked(); } }