diff --git a/src/main/java/cloudburst/rejects/screens/InteractionScreen.java b/src/main/java/cloudburst/rejects/screens/InteractionScreen.java index 4a70449..04c7e9a 100644 --- a/src/main/java/cloudburst/rejects/screens/InteractionScreen.java +++ b/src/main/java/cloudburst/rejects/screens/InteractionScreen.java @@ -4,25 +4,18 @@ import java.awt.Point; import java.util.ArrayList; import java.util.HashMap; import java.util.function.Consumer; -import java.util.function.Function; import cloudburst.rejects.modules.InteractionMenu; import minegame159.meteorclient.MeteorClient; import minegame159.meteorclient.systems.commands.commands.PeekCommand; import minegame159.meteorclient.systems.modules.Modules; -import minegame159.meteorclient.utils.player.ChatUtils; -import minegame159.meteorclient.utils.player.InvUtils; + import net.minecraft.client.gui.screen.ChatScreen; import net.minecraft.client.gui.screen.ingame.InventoryScreen; import net.minecraft.client.options.KeyBinding; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.Saddleable; import net.minecraft.entity.passive.HorseBaseEntity; -import net.minecraft.entity.passive.HorseEntity; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.vehicle.ChestMinecartEntity; import net.minecraft.entity.vehicle.StorageMinecartEntity; -import net.minecraft.inventory.Inventory; import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -34,9 +27,7 @@ import org.lwjgl.glfw.GLFW; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.InputUtil; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; @@ -56,6 +47,7 @@ public class InteractionScreen extends Screen { public InteractionScreen(Entity entity) { super(new LiteralText("Menu Screen")); this.entity = entity; + //MeteorClient.EVENT_BUS.subscribe(this); functions = new HashMap<>(); functions.put("Stats", (Entity e) -> { closeScreen(); @@ -67,25 +59,16 @@ public class InteractionScreen extends Screen { closeScreen(); client.openScreen(new InventoryScreen((PlayerEntity) e)); }); - functions.put("Message", (Entity e) -> { - this.cursorMode(GLFW.GLFW_CURSOR); - closeScreen(); - client.openScreen(new ChatScreen(String.format("/msg %s ", ((PlayerEntity)e).getGameProfile().getName()))); - }); } + else if (entity instanceof HorseBaseEntity) { functions.put("Open Inventory", (Entity e) -> { closeScreen(); if (client.player.isRiding()) { client.player.networkHandler.sendPacket(new PlayerInputC2SPacket(0, 0, false, true)); } - client.player.networkHandler.sendPacket(new PlayerInteractEntityC2SPacket(entity, Hand.MAIN_HAND, false)); - client.player.openRidingInventory(); - client.player.networkHandler.sendPacket(new PlayerInputC2SPacket(0, 0, false, true)); - }); - functions.put("Ride", (Entity e) -> { - closeScreen(); - client.player.networkHandler.sendPacket(new PlayerInteractEntityC2SPacket(entity, Hand.MAIN_HAND, false)); + client.player.networkHandler.sendPacket(new PlayerInteractEntityC2SPacket(entity, Hand.MAIN_HAND, true)); + client.player.setSneaking(false); }); } else if (entity instanceof StorageMinecartEntity) { @@ -126,12 +109,33 @@ public class InteractionScreen extends Screen { closeScreen(); }); } + if (entity.noClip) { + functions.put("Disable NoClip", (Entity e) -> { + entity.noClip = false; + closeScreen(); + }); + } else { + functions.put("NoClip", (Entity e) -> { + entity.noClip = true; + closeScreen(); + }); + } msgs = Modules.get().get(InteractionMenu.class).messages; msgs.keySet().forEach((key) -> { - functions.put(key, (Entity e) -> { - closeScreen(); - client.openScreen(new ChatScreen(replacePlaceholders(msgs.get(key), e))); - }); + if (msgs.get(key).contains("{username}")) { + if (entity instanceof PlayerEntity) { + functions.put(key, (Entity e) -> { + closeScreen(); + client.openScreen(new ChatScreen(replacePlaceholders(msgs.get(key), e))); + }); + } + } else { + functions.put(key, (Entity e) -> { + closeScreen(); + client.openScreen(new ChatScreen(replacePlaceholders(msgs.get(key), e))); + }); + } + }); functions.put("Cancel", (Entity e) -> {closeScreen();}); } @@ -156,6 +160,7 @@ public class InteractionScreen extends Screen { } private void closeScreen() { + //MeteorClient.EVENT_BUS.unsubscribe(this); client.openScreen((Screen) null); //Modules.get().get(InteractionMenu.class).isOpen = false; } diff --git a/src/main/java/cloudburst/rejects/screens/StatsScreen.java b/src/main/java/cloudburst/rejects/screens/StatsScreen.java index 51c6045..cf9a9c0 100644 --- a/src/main/java/cloudburst/rejects/screens/StatsScreen.java +++ b/src/main/java/cloudburst/rejects/screens/StatsScreen.java @@ -1,7 +1,5 @@ package cloudburst.rejects.screens; -import cloudburst.rejects.modules.InteractionMenu; -import minegame159.meteorclient.systems.modules.Modules; import net.minecraft.client.resource.language.TranslationStorage; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; @@ -10,53 +8,86 @@ import net.minecraft.entity.effect.StatusEffectUtil; import net.minecraft.util.Language; import net.minecraft.util.math.Box; +import meteordevelopment.orbit.EventHandler; +import minegame159.meteorclient.MeteorClient; +import minegame159.meteorclient.events.world.TickEvent; import minegame159.meteorclient.gui.GuiTheme; import minegame159.meteorclient.gui.GuiThemes; import minegame159.meteorclient.gui.WindowScreen; import minegame159.meteorclient.gui.widgets.containers.WSection; -import java.util.Collection; - public class StatsScreen extends WindowScreen { public final Entity entity; + private boolean effectListExpanded = true; + private boolean attribListExpanded = true; + private boolean dimensionExpanded = false; public StatsScreen(Entity e) { super(GuiThemes.get(),e.getName().getString()); this.entity = e; - GuiTheme theme = GuiThemes.get(); - add(theme.label(String.format("Age: %d", entity.age))); - if (entity instanceof LivingEntity) { - LivingEntity liv = (LivingEntity) entity; - add(theme.label(String.format("Health: %.2f/%.2f", liv.getHealth(), liv.getMaxHealth()))); - - Collection statusEff = liv.getStatusEffects(); - if (!statusEff.isEmpty()) { - WSection effectList = add(theme.section("Status Effects", true)).expandCellX().widget(); - Language lang = TranslationStorage.getInstance(); - statusEff.forEach((effect) -> { - String status = lang.get(effect.getTranslationKey()); - if (effect.getAmplifier() != 0) { - status += (String.format(" %d (%s)", effect.getAmplifier()+1, StatusEffectUtil.durationToString(effect, 1))); - } else { - status += (String.format(" (%s)", StatusEffectUtil.durationToString(effect, 1))); - } - effectList.add(theme.label(status)).expandCellX(); - }); - } - - } - WSection dimension = add(theme.section("Dimensions", false)).expandCellX().widget(); - dimension.add(theme.label(String.format("Position: %.2f, %.2f, %.2f", entity.getX(), entity.getY(), entity.getZ()))).expandCellX(); - dimension.add(theme.label(String.format("Yaw: %.2f, Pitch: %.2f", entity.yaw, entity.pitch))).expandCellX(); - Box box = entity.getBoundingBox(); - dimension.add(theme.label(String.format("Bounding Box: [%.2f, %.2f, %.2f] -> [%.2f, %.2f, %.2f]", - box.minX, box.minY, box.minZ, - box.maxX, box.maxY, box.maxZ - ))).expandCellX(); + updateData(); + MeteorClient.EVENT_BUS.subscribe(this); } @Override protected void onClosed() { + MeteorClient.EVENT_BUS.unsubscribe(this); super.onClosed(); - //Modules.get().get(InteractionMenu.class).isOpen = false; + } + + private void updateData() { + clear(); + GuiTheme theme = GuiThemes.get(); + Language lang = TranslationStorage.getInstance(); + add(theme.label(String.format("Type: %s", lang.get(entity.getType().getTranslationKey())))); + add(theme.label(String.format("Age: %d", entity.age))); + add(theme.label(String.format("UUID: %s", entity.getUuidAsString()))); + if (entity instanceof LivingEntity) { + LivingEntity liv = (LivingEntity) entity; + add(theme.label(String.format("Health: %.2f/%.2f", liv.getHealth(), liv.getMaxHealth()))); + add(theme.label(String.format("Armor: %d/20", liv.getArmor()))); + + WSection effectList = add(theme.section("Status Effects", effectListExpanded)).expandX().widget(); + effectList.action = () -> { + effectListExpanded = effectList.isExpanded(); + }; + liv.getActiveStatusEffects().forEach((effect, instance) -> { + String status = lang.get(effect.getTranslationKey()); + if (instance.getAmplifier() != 0) { + status += (String.format(" %d (%s)", instance.getAmplifier()+1, StatusEffectUtil.durationToString(instance, 1))); + } else { + status += (String.format(" (%s)", StatusEffectUtil.durationToString(instance, 1))); + } + effectList.add(theme.label(status)).expandX(); + }); + if (liv.getActiveStatusEffects().isEmpty()) { + effectList.add(theme.label("No effects")).expandX(); + } + + WSection attribList = add(theme.section("Attributes", attribListExpanded)).expandX().widget(); + attribList.action = () -> { + attribListExpanded = attribList.isExpanded(); + }; + liv.getAttributes().getTracked().forEach((attrib) -> { + attribList.add(theme.label(String.format("%s: %.2f", + lang.get(attrib.getAttribute().getTranslationKey()), + attrib.getValue() + ))).expandX(); + }); + } + WSection dimension = add(theme.section("Dimensions", dimensionExpanded)).expandX().widget(); + dimension.action = () -> { + dimensionExpanded = dimension.isExpanded(); + }; + dimension.add(theme.label(String.format("Position: %.2f, %.2f, %.2f", entity.getX(), entity.getY(), entity.getZ()))).expandX(); + dimension.add(theme.label(String.format("Yaw: %.2f, Pitch: %.2f", entity.yaw, entity.pitch))).expandX(); + Box box = entity.getBoundingBox(); + dimension.add(theme.label(String.format("Bounding Box: %.2f, %.2f, %.2f", + box.maxX-box.minX, box.maxY-box.minY, box.maxZ-box.minZ + ))).expandX(); + } + + @EventHandler + private void onTick(TickEvent.Post event) { + updateData(); } }