forked from RepoMirrors/kami-blue
190 lines
7.4 KiB
Java
190 lines
7.4 KiB
Java
package me.zeroeightsix.kami.module.modules.combat;
|
|
|
|
import me.zero.alpine.listener.EventHandler;
|
|
import me.zero.alpine.listener.Listener;
|
|
import me.zeroeightsix.kami.KamiMod;
|
|
import me.zeroeightsix.kami.event.events.EntityUseTotemEvent;
|
|
import me.zeroeightsix.kami.event.events.PacketEvent;
|
|
import me.zeroeightsix.kami.module.Module;
|
|
import me.zeroeightsix.kami.setting.Setting;
|
|
import me.zeroeightsix.kami.setting.Settings;
|
|
import me.zeroeightsix.kami.util.ColourTextFormatting;
|
|
import me.zeroeightsix.kami.util.Friends;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.network.play.server.SPacketEntityStatus;
|
|
import net.minecraft.util.text.TextFormatting;
|
|
|
|
import java.util.HashMap;
|
|
|
|
import static me.zeroeightsix.kami.KamiMod.EVENT_BUS;
|
|
import static me.zeroeightsix.kami.util.ColourTextFormatting.toTextMap;
|
|
import static me.zeroeightsix.kami.util.MessageSendHelper.sendRawChatMessage;
|
|
import static me.zeroeightsix.kami.util.MessageSendHelper.sendServerMessage;
|
|
|
|
/**
|
|
* @author dominikaaaa
|
|
* Created by dominikaaaa on 25/03/20
|
|
* Listener and stuff reused from CliNet
|
|
* https://github.com/DarkiBoi/CliNet/blob/fd225a5c8cc373974b0c9a3457acbeed206e8cca/src/main/java/me/zeroeightsix/kami/module/modules/combat/TotemPopCounter.java
|
|
*/
|
|
@Module.Info(
|
|
name = "TotemPopCounter",
|
|
description = "Counts how many times players pop",
|
|
category = Module.Category.COMBAT
|
|
)
|
|
public class TotemPopCounter extends Module {
|
|
private Setting<Boolean> countFriends = register(Settings.b("Count Friends", true));
|
|
private Setting<Boolean> countSelf = register(Settings.b("Count Self", false));
|
|
private Setting<Boolean> resetDeaths = register(Settings.b("Reset On Death", true));
|
|
private Setting<Boolean> resetSelfDeaths = register(Settings.b("Reset Self Death", true));
|
|
private Setting<Announce> announceSetting = register(Settings.e("Announce", Announce.CLIENT));
|
|
private Setting<Boolean> thanksTo = register(Settings.b("Thanks to", false));
|
|
private Setting<ColourTextFormatting.ColourCode> colourCode = register(Settings.e("Color Name", ColourTextFormatting.ColourCode.DARK_PURPLE));
|
|
private Setting<ColourTextFormatting.ColourCode> colourCode1 = register(Settings.e("Color Number", ColourTextFormatting.ColourCode.LIGHT_PURPLE));
|
|
|
|
private enum Announce { CLIENT, EVERYONE }
|
|
private HashMap<String, Integer> playerList = new HashMap();
|
|
private boolean isDead = false;
|
|
|
|
@Override
|
|
public void onUpdate() {
|
|
if (!isDead
|
|
&& resetSelfDeaths.getValue()
|
|
&& 0 >= mc.player.getHealth()) {
|
|
sendMessage(formatName(mc.player.getName()) + " died and " + grammar(mc.player.getName()) + " pop list was reset!");
|
|
isDead = true;
|
|
playerList.clear();
|
|
return;
|
|
}
|
|
if (isDead && 0 < mc.player.getHealth()) isDead = false;
|
|
|
|
for (EntityPlayer player : mc.world.playerEntities) {
|
|
if (
|
|
resetDeaths.getValue()
|
|
&& 0 >= player.getHealth()
|
|
&& friendCheck(player.getName())
|
|
&& selfCheck(player.getName())
|
|
&& playerList.containsKey(player.getName())) {
|
|
/* To note: if they died after popping 1 totem it's going to say totems, but I cba to fix it */
|
|
sendMessage(formatName(player.getName()) + " died after popping " + formatNumber(playerList.get(player.getName())) + " totems" + ending());
|
|
playerList.remove(player.getName(), playerList.get(player.getName()));
|
|
}
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public Listener<EntityUseTotemEvent> listListener = new Listener<>(event -> {
|
|
if (playerList == null) playerList = new HashMap<>();
|
|
|
|
if (playerList.get(event.getEntity().getName()) == null) {
|
|
playerList.put(event.getEntity().getName(), 1);
|
|
sendMessage(formatName(event.getEntity().getName()) + " popped " + formatNumber(1) + " totem" + ending());
|
|
}
|
|
|
|
else if (!(playerList.get(event.getEntity().getName()) == null)) {
|
|
int popCounter = playerList.get(event.getEntity().getName());
|
|
popCounter += 1;
|
|
playerList.put(event.getEntity().getName(), popCounter);
|
|
sendMessage(formatName(event.getEntity().getName()) + " popped " + formatNumber(popCounter) + " totems" + ending());
|
|
}
|
|
});
|
|
|
|
private boolean friendCheck(String name) {
|
|
if (isDead) return false;
|
|
for (Friends.Friend names : Friends.friends.getValue()) {
|
|
if (names.getUsername().equalsIgnoreCase(name)) return countFriends.getValue();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private boolean selfCheck(String name) {
|
|
if (isDead) return false;
|
|
if (countSelf.getValue() && name.equalsIgnoreCase(mc.player.getName())) {
|
|
return true;
|
|
}
|
|
else if (!countSelf.getValue() && name.equalsIgnoreCase(mc.player.getName())) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private boolean isSelf(String name) {
|
|
return name.equalsIgnoreCase(mc.player.getName());
|
|
}
|
|
|
|
private boolean isFriend(String name) {
|
|
for (Friends.Friend names : Friends.friends.getValue()) {
|
|
if (names.getUsername().equalsIgnoreCase(name)) return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private String formatName(String name) {
|
|
String extraText = "";
|
|
if (isFriend(name) && !isPublic()) extraText = "Your friend, ";
|
|
else if (isFriend(name) && isPublic()) extraText = "My friend, ";
|
|
if (isSelf(name)) { extraText = ""; name = "I"; }
|
|
|
|
if (announceSetting.getValue().equals(Announce.EVERYONE)) {
|
|
return extraText + name;
|
|
}
|
|
return extraText + setToText(colourCode.getValue()) + name + TextFormatting.RESET;
|
|
}
|
|
|
|
private String grammar(String name) {
|
|
if (isSelf(name)) {
|
|
return "my";
|
|
}
|
|
else return "their";
|
|
}
|
|
|
|
private String ending() {
|
|
if (thanksTo.getValue()) {
|
|
return " thanks to " + KamiMod.MODNAME + "!";
|
|
}
|
|
else return "!";
|
|
}
|
|
|
|
private boolean isPublic() {
|
|
return announceSetting.getValue().equals(Announce.EVERYONE);
|
|
}
|
|
|
|
private String formatNumber(int message) {
|
|
if (announceSetting.getValue().equals(Announce.EVERYONE)) return "" + message;
|
|
return setToText(colourCode1.getValue()) + "" + message + TextFormatting.RESET;
|
|
}
|
|
|
|
private void sendMessage(String message) {
|
|
switch (announceSetting.getValue()) {
|
|
case CLIENT:
|
|
sendRawChatMessage(message);
|
|
return;
|
|
case EVERYONE:
|
|
sendServerMessage(message);
|
|
return;
|
|
default:
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public Listener<PacketEvent.Receive> popListener = new Listener<>(event -> {
|
|
if (mc.player == null) return;
|
|
|
|
if (event.getPacket() instanceof SPacketEntityStatus) {
|
|
SPacketEntityStatus packet = (SPacketEntityStatus) event.getPacket();
|
|
if (packet.getOpCode() == 35) {
|
|
Entity entity = packet.getEntity(mc.world);
|
|
if (friendCheck(entity.getName()) || selfCheck(entity.getName())) {
|
|
EVENT_BUS.post(new EntityUseTotemEvent(entity));
|
|
}
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
private TextFormatting setToText(ColourTextFormatting.ColourCode colourCode) {
|
|
return toTextMap.get(colourCode);
|
|
}
|
|
}
|