Rewrite TotemNotifier

This commit is contained in:
noil 2022-12-04 01:24:47 -05:00
parent d54b6cb04d
commit 4fa50ffa41
1 changed files with 15 additions and 30 deletions

View File

@ -3,6 +3,7 @@ package me.rigamortis.seppuku.impl.module.combat;
import me.rigamortis.seppuku.Seppuku;
import me.rigamortis.seppuku.api.event.EventStageable;
import me.rigamortis.seppuku.api.event.minecraft.EventRunTick;
import me.rigamortis.seppuku.api.event.network.EventReceivePacket;
import me.rigamortis.seppuku.api.event.world.EventRemoveEntity;
import me.rigamortis.seppuku.api.module.Module;
import me.rigamortis.seppuku.api.notification.Notification;
@ -13,6 +14,7 @@ import net.minecraft.init.Items;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.network.play.server.SPacketEntityStatus;
import team.stiff.pomelo.impl.annotated.handler.annotation.Listener;
import java.util.ArrayList;
@ -20,46 +22,29 @@ import java.util.List;
/**
* @author jvyden
* @since 6/24/20
* @author noil
* @since 12/4/22
*/
public class TotemNotifierModule extends Module {
public final List<Integer> entitiesWithTotems = new ArrayList<>();
final Minecraft mc = Minecraft.getMinecraft();
public TotemNotifierModule() {
super("TotemNotifier", new String[]{"tm"}, "Notifies you when others pop totems", "NONE", -1, ModuleType.COMBAT);
}
/*
entityplayermp.addStat(StatList.getObjectUseStats(Items.TOTEM_OF_UNDYING));
CriteriaTriggers.USED_TOTEM.trigger(entityplayermp, itemstack);
*/
@Listener
public void runTick(EventRunTick event) {
if (event.getStage() == EventStageable.EventStage.PRE) {
if (mc.world == null) return;
for (Entity entity : mc.world.loadedEntityList) {
if (entity instanceof EntityLivingBase) {
final Iterable<ItemStack> stacks = entity.getEquipmentAndArmor();
for (ItemStack stack : stacks) {
final Item offhandItem = ((EntityLivingBase) entity).getItemStackFromSlot(EntityEquipmentSlot.OFFHAND).getItem();
if (offhandItem == Items.TOTEM_OF_UNDYING) {
if (!entitiesWithTotems.contains(entity.getEntityId())) {
entitiesWithTotems.add(entity.getEntityId());
}
} else if (offhandItem == Items.AIR) {
if (entitiesWithTotems.contains(entity.getEntityId())) {
Seppuku.INSTANCE.getNotificationManager().addNotification("", entity.getName() + " just popped a totem.", Notification.Type.INFO, 2000);
entitiesWithTotems.removeIf(i -> i.equals(entity.getEntityId()));
}
}
}
}
public void receivePacket(EventReceivePacket event) {
if (event.getStage().equals(EventStageable.EventStage.PRE) && event.getPacket() instanceof SPacketEntityStatus && mc.world != null) {
final SPacketEntityStatus packetEntityStatus = (SPacketEntityStatus) event.getPacket();
if (packetEntityStatus.getOpCode() == 35) { // totem pop status
Seppuku.INSTANCE.getNotificationManager().addNotification("", packetEntityStatus.getEntity(mc.world).getName() + " just popped a totem.", Notification.Type.INFO, 2000);
}
}
}
@Listener
public void onEntityRemove(EventRemoveEntity event) {
if (entitiesWithTotems.contains(event.getEntity().getEntityId())) {
entitiesWithTotems.removeIf(i -> i.equals(event.getEntity().getEntityId()));
}
}
}