diff --git a/src/main/java/me/rigamortis/seppuku/impl/management/ModuleManager.java b/src/main/java/me/rigamortis/seppuku/impl/management/ModuleManager.java index 68a9953..db57eeb 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/management/ModuleManager.java +++ b/src/main/java/me/rigamortis/seppuku/impl/management/ModuleManager.java @@ -146,8 +146,9 @@ public final class ModuleManager { add(new VisualRangeModule()); add(new HotBarRefillModule()); add(new QuickCraftModule()); + add(new TotemNotifierModule()); - //p2w experience + // p2w experience if (Seppuku.INSTANCE.getCapeManager().hasCape()) add(new CapeModule()); diff --git a/src/main/java/me/rigamortis/seppuku/impl/module/combat/TotemNotifierModule.java b/src/main/java/me/rigamortis/seppuku/impl/module/combat/TotemNotifierModule.java new file mode 100644 index 0000000..9837212 --- /dev/null +++ b/src/main/java/me/rigamortis/seppuku/impl/module/combat/TotemNotifierModule.java @@ -0,0 +1,62 @@ +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.world.EventRemoveEntity; +import me.rigamortis.seppuku.api.module.Module; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Items; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import team.stiff.pomelo.impl.annotated.handler.annotation.Listener; +import java.util.ArrayList; +import java.util.List; + + +/** + * @author jvyden + * @since 6/24/20 + */ +public class TotemNotifierModule extends Module { + final Minecraft mc = Minecraft.getMinecraft(); + + public TotemNotifierModule() { + super("TotemNotifier", new String[]{"tm"}, "Notifies you when others pop totems.", "NONE", -1, ModuleType.COMBAT); + } + + public final List entitiesWithTotems = new ArrayList<>(); + + @Listener + public void runTick(EventRunTick event) { + if (event.getStage() == EventStageable.EventStage.PRE) { + for(Entity entity : mc.world.loadedEntityList) { + if (entity instanceof EntityLivingBase) { + final Iterable 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."); + entitiesWithTotems.removeIf(i -> i.equals(entity.getEntityId())); + } + } + } + } + } + } + } + @Listener + public void onEntityRemove(EventRemoveEntity event) { + if(entitiesWithTotems.contains(event.getEntity().getEntityId())) { + entitiesWithTotems.removeIf(i -> i.equals(event.getEntity().getEntityId())); + } + } +}