diff --git a/src/main/java/meteordevelopment/meteorclient/events/entity/player/PlayerRespawnEvent.java b/src/main/java/meteordevelopment/meteorclient/events/entity/player/PlayerRespawnEvent.java new file mode 100644 index 0000000000..d3add74377 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/events/entity/player/PlayerRespawnEvent.java @@ -0,0 +1,14 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.events.entity.player; + +public class PlayerRespawnEvent { + private static final PlayerRespawnEvent INSTANCE = new PlayerRespawnEvent(); + + public static PlayerRespawnEvent get() { + return INSTANCE; + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayNetworkHandlerMixin.java index fc9413f4f8..eda5ee055a 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayNetworkHandlerMixin.java @@ -10,6 +10,7 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.entity.EntityDestroyEvent; import meteordevelopment.meteorclient.events.entity.player.PickItemsEvent; +import meteordevelopment.meteorclient.events.entity.player.PlayerRespawnEvent; import meteordevelopment.meteorclient.events.game.GameJoinedEvent; import meteordevelopment.meteorclient.events.game.GameLeftEvent; import meteordevelopment.meteorclient.events.game.SendMessageEvent; @@ -153,4 +154,9 @@ private void onSendChatMessage(String message, CallbackInfo ci) { ci.cancel(); } } + + @Inject(method = "onPlayerRespawn", at = @At("TAIL")) + public void onPlayerRespawn(PlayerRespawnS2CPacket packet, CallbackInfo ci) { + MeteorClient.EVENT_BUS.post(PlayerRespawnEvent.get()); + } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/NoFall.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/NoFall.java index 6bc05b35bb..f72f678548 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/NoFall.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/NoFall.java @@ -24,7 +24,6 @@ import meteordevelopment.meteorclient.utils.player.PlayerUtils; import meteordevelopment.meteorclient.utils.player.Rotations; import meteordevelopment.meteorclient.utils.world.BlockUtils; -import meteordevelopment.meteorclient.utils.world.Dimension; import meteordevelopment.orbit.EventHandler; import net.minecraft.block.Block; import net.minecraft.block.Blocks; @@ -156,7 +155,7 @@ private void onTick(TickEvent.Pre event) { // Bucket mode else if (mode.get() == Mode.Place) { - PlacedItem placedItem1 = autoDimension.get() && PlayerUtils.getDimension() == Dimension.Nether ? PlacedItem.PowderSnow : placedItem.get(); + PlacedItem placedItem1 = autoDimension.get() && mc.world.getDimension().ultrawarm() ? PlacedItem.PowderSnow : placedItem.get(); if (mc.player.fallDistance > 3 && !EntityUtils.isAboveWater(mc.player)) { Item item = placedItem1.item; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Breadcrumbs.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Breadcrumbs.java index 49ea6dbdf8..0df443e4c3 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Breadcrumbs.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Breadcrumbs.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.systems.modules.render; +import meteordevelopment.meteorclient.events.entity.player.PlayerRespawnEvent; import meteordevelopment.meteorclient.events.render.Render3DEvent; import meteordevelopment.meteorclient.events.world.TickEvent; import meteordevelopment.meteorclient.settings.*; @@ -13,7 +14,6 @@ import meteordevelopment.meteorclient.utils.misc.Pool; import meteordevelopment.meteorclient.utils.render.color.SettingColor; import meteordevelopment.orbit.EventHandler; -import net.minecraft.world.dimension.DimensionType; import java.util.ArrayDeque; import java.util.Queue; @@ -51,8 +51,6 @@ public class Breadcrumbs extends Module { private Section section; - private DimensionType lastDimension; - public Breadcrumbs() { super(Categories.Render, "breadcrumbs", "Displays a trail behind where you have walked."); } @@ -61,8 +59,6 @@ public Breadcrumbs() { public void onActivate() { section = sectionPool.get(); section.set1(); - - lastDimension = mc.world.getDimension(); } @Override @@ -72,12 +68,13 @@ public void onDeactivate() { } @EventHandler - private void onTick(TickEvent.Post event) { - if (lastDimension != mc.world.getDimension()) { - for (Section sec : sections) sectionPool.free(sec); - sections.clear(); - } + private void onPlayerRespawn(PlayerRespawnEvent event) { + for (Section sec : sections) sectionPool.free(sec); + sections.clear(); + } + @EventHandler + private void onTick(TickEvent.Post event) { if (isFarEnough(section.x1, section.y1, section.z1)) { section.set2(); @@ -90,8 +87,6 @@ private void onTick(TickEvent.Post event) { section = sectionPool.get(); section.set1(); } - - lastDimension = mc.world.getDimension(); } @EventHandler diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LogoutSpots.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LogoutSpots.java index bde1605186..21312552de 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LogoutSpots.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LogoutSpots.java @@ -6,6 +6,7 @@ package meteordevelopment.meteorclient.systems.modules.render; import meteordevelopment.meteorclient.events.entity.EntityAddedEvent; +import meteordevelopment.meteorclient.events.entity.player.PlayerRespawnEvent; import meteordevelopment.meteorclient.events.render.Render2DEvent; import meteordevelopment.meteorclient.events.render.Render3DEvent; import meteordevelopment.meteorclient.events.world.TickEvent; @@ -19,7 +20,6 @@ import meteordevelopment.meteorclient.utils.render.NametagUtils; import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.meteorclient.utils.render.color.SettingColor; -import meteordevelopment.meteorclient.utils.world.Dimension; import meteordevelopment.orbit.EventHandler; import net.minecraft.client.network.PlayerListEntry; import net.minecraft.entity.Entity; @@ -98,7 +98,6 @@ public class LogoutSpots extends Module { private final List lastPlayers = new ArrayList<>(); private int timer; - private Dimension lastDimension; public LogoutSpots() { super(Categories.Render, "logout-spots", "Displays a box where another player has logged out at."); @@ -111,7 +110,6 @@ public void onActivate() { updateLastPlayers(); timer = 10; - lastDimension = PlayerUtils.getDimension(); } @Override @@ -127,6 +125,11 @@ private void updateLastPlayers() { } } + @EventHandler + private void onPlayerRespawn(PlayerRespawnEvent event) { + players.clear(); + } + @EventHandler private void onEntityAdded(EntityAddedEvent event) { if (event.entity instanceof PlayerEntity) { @@ -169,10 +172,6 @@ private void onTick(TickEvent.Post event) { } else { timer--; } - - Dimension dimension = PlayerUtils.getDimension(); - if (dimension != lastDimension) players.clear(); - lastDimension = dimension; } private void add(Entry entry) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/VoidESP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/VoidESP.java index 4385e53c37..90f79062e7 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/VoidESP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/VoidESP.java @@ -12,9 +12,7 @@ import meteordevelopment.meteorclient.systems.modules.Categories; import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.utils.misc.Pool; -import meteordevelopment.meteorclient.utils.player.PlayerUtils; import meteordevelopment.meteorclient.utils.render.color.SettingColor; -import meteordevelopment.meteorclient.utils.world.Dimension; import meteordevelopment.meteorclient.utils.world.Dir; import meteordevelopment.orbit.EventHandler; import net.minecraft.block.Block; @@ -23,12 +21,13 @@ import net.minecraft.util.math.Direction; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.ChunkStatus; +import net.minecraft.world.dimension.DimensionTypes; import java.util.ArrayList; import java.util.List; public class VoidESP extends Module { - private static final Direction[] SIDES = { Direction.EAST, Direction.NORTH, Direction.SOUTH, Direction.WEST }; + private static final Direction[] SIDES = {Direction.EAST, Direction.NORTH, Direction.SOUTH, Direction.WEST}; private final SettingGroup sgGeneral = settings.getDefaultGroup(); private final SettingGroup sgRender = settings.createGroup("Render"); @@ -36,58 +35,58 @@ public class VoidESP extends Module { // General private final Setting airOnly = sgGeneral.add(new BoolSetting.Builder() - .name("air-only") - .description("Checks bedrock only for air blocks.") - .defaultValue(false) - .build() + .name("air-only") + .description("Checks bedrock only for air blocks.") + .defaultValue(false) + .build() ); private final Setting horizontalRadius = sgGeneral.add(new IntSetting.Builder() - .name("horizontal-radius") - .description("Horizontal radius in which to search for holes.") - .defaultValue(64) - .min(0) - .sliderMax(256) - .build() + .name("horizontal-radius") + .description("Horizontal radius in which to search for holes.") + .defaultValue(64) + .min(0) + .sliderMax(256) + .build() ); private final Setting holeHeight = sgGeneral.add(new IntSetting.Builder() - .name("hole-height") - .description("The minimum hole height to be rendered.") - .defaultValue(1) - .min(1) - .sliderRange(1, 5) - .build() + .name("hole-height") + .description("The minimum hole height to be rendered.") + .defaultValue(1) + .min(1) + .sliderRange(1, 5) + .build() ); private final Setting netherRoof = sgGeneral.add(new BoolSetting.Builder() - .name("nether-roof") - .description("Check for holes in nether roof.") - .defaultValue(true) - .build() + .name("nether-roof") + .description("Check for holes in nether roof.") + .defaultValue(true) + .build() ); // Render private final Setting shapeMode = sgRender.add(new EnumSetting.Builder() - .name("shape-mode") - .description("How the shapes are rendered.") - .defaultValue(ShapeMode.Both) - .build() + .name("shape-mode") + .description("How the shapes are rendered.") + .defaultValue(ShapeMode.Both) + .build() ); private final Setting sideColor = sgRender.add(new ColorSetting.Builder() - .name("fill-color") - .description("The color that fills holes in the void.") - .defaultValue(new SettingColor(225, 25, 25, 50)) - .build() + .name("fill-color") + .description("The color that fills holes in the void.") + .defaultValue(new SettingColor(225, 25, 25, 50)) + .build() ); private final Setting lineColor = sgRender.add(new ColorSetting.Builder() - .name("line-color") - .description("The color to draw lines of holes to the void.") - .defaultValue(new SettingColor(225, 25, 255)) - .build() + .name("line-color") + .description("The color to draw lines of holes to the void.") + .defaultValue(new SettingColor(225, 25, 255)) + .build() ); private final BlockPos.Mutable blockPos = new BlockPos.Mutable(); @@ -121,7 +120,7 @@ private boolean isHole(BlockPos.Mutable blockPos, boolean nether) { @EventHandler private void onTick(TickEvent.Post event) { voidHoles.clear(); - if (PlayerUtils.getDimension() == Dimension.End) return; + if (mc.world.getDimensionKey() == DimensionTypes.THE_END) return; int px = mc.player.getBlockPos().getX(); int pz = mc.player.getBlockPos().getZ(); @@ -130,10 +129,11 @@ private void onTick(TickEvent.Post event) { for (int x = px - radius; x <= px + radius; x++) { for (int z = pz - radius; z <= pz + radius; z++) { blockPos.set(x, mc.world.getBottomY(), z); - if (isHole(blockPos, false)) voidHoles.add(voidHolePool.get().set(blockPos.set(x, mc.world.getBottomY(), z), false)); + if (isHole(blockPos, false)) + voidHoles.add(voidHolePool.get().set(blockPos.set(x, mc.world.getBottomY(), z), false)); // Check for nether roof - if (netherRoof.get() && PlayerUtils.getDimension() == Dimension.Nether) { + if (netherRoof.get() && mc.world.getDimensionKey() == DimensionTypes.THE_NETHER) { blockPos.set(x, 127, z); if (isHole(blockPos, true)) voidHoles.add(voidHolePool.get().set(blockPos.set(x, 127, z), true)); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/BlockESP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/BlockESP.java index 2f9a9063bc..800e7f5a29 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/BlockESP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/BlockESP.java @@ -7,10 +7,10 @@ import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; +import meteordevelopment.meteorclient.events.entity.player.PlayerRespawnEvent; import meteordevelopment.meteorclient.events.render.Render3DEvent; import meteordevelopment.meteorclient.events.world.BlockUpdateEvent; import meteordevelopment.meteorclient.events.world.ChunkDataEvent; -import meteordevelopment.meteorclient.events.world.TickEvent; import meteordevelopment.meteorclient.renderer.ShapeMode; import meteordevelopment.meteorclient.settings.*; import meteordevelopment.meteorclient.systems.modules.Categories; @@ -18,10 +18,8 @@ import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.misc.UnorderedArrayList; import meteordevelopment.meteorclient.utils.network.MeteorExecutor; -import meteordevelopment.meteorclient.utils.player.PlayerUtils; import meteordevelopment.meteorclient.utils.render.color.RainbowColors; import meteordevelopment.meteorclient.utils.render.color.SettingColor; -import meteordevelopment.meteorclient.utils.world.Dimension; import meteordevelopment.orbit.EventHandler; import net.minecraft.block.Block; import net.minecraft.util.math.BlockPos; @@ -80,8 +78,6 @@ public class BlockESP extends Module { private final Long2ObjectMap chunks = new Long2ObjectOpenHashMap<>(); private final List groups = new UnorderedArrayList<>(); - private Dimension lastDimension; - public BlockESP() { super(Categories.Render, "block-esp", "Renders specified blocks through walls."); @@ -98,8 +94,6 @@ public void onActivate() { for (Chunk chunk : Utils.chunks()) { searchChunk(chunk, null); } - - lastDimension = PlayerUtils.getDimension(); } @Override @@ -225,12 +219,8 @@ private void onBlockUpdate(BlockUpdateEvent event) { } @EventHandler - private void onPostTick(TickEvent.Post event) { - Dimension dimension = PlayerUtils.getDimension(); - - if (lastDimension != dimension) onActivate(); - - lastDimension = dimension; + private void onPlayerRespawn(PlayerRespawnEvent event) { + onActivate(); } @EventHandler diff --git a/src/main/java/meteordevelopment/meteorclient/utils/player/PlayerUtils.java b/src/main/java/meteordevelopment/meteorclient/utils/player/PlayerUtils.java index 13b7604ef1..ae3f940d74 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/player/PlayerUtils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/player/PlayerUtils.java @@ -28,6 +28,7 @@ import net.minecraft.item.PotionItem; import net.minecraft.item.SwordItem; import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; +import net.minecraft.registry.RegistryKey; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; @@ -35,6 +36,8 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.GameMode; import net.minecraft.world.RaycastContext; +import net.minecraft.world.dimension.DimensionType; +import net.minecraft.world.dimension.DimensionTypes; import static meteordevelopment.meteorclient.MeteorClient.mc; import static meteordevelopment.meteorclient.utils.Utils.WHITE; @@ -205,7 +208,7 @@ else if (entity instanceof PlayerEntity && damageTaken < DamageUtils.getSwordDam } // Check for beds if in nether - if (PlayerUtils.getDimension() != Dimension.Overworld) { + if (!mc.world.getDimension().bedWorks()) { for (BlockEntity blockEntity : Utils.blockEntities()) { BlockPos bp = blockEntity.getPos(); Vec3d pos = new Vec3d(bp.getX(), bp.getY(), bp.getZ()); @@ -331,6 +334,13 @@ public static boolean isWithinReach(double x, double y, double z) { return squaredDistance(mc.player.getX(), mc.player.getEyeY(), mc.player.getZ(), x, y, z) <= mc.interactionManager.getReachDistance() * mc.interactionManager.getReachDistance(); } + public static RegistryKey oppositeDimension() { + RegistryKey dimensionType = mc.world.getDimensionKey(); + if (dimensionType == DimensionTypes.OVERWORLD)return DimensionTypes.THE_NETHER; + if (dimensionType == DimensionTypes.THE_NETHER) return DimensionTypes.OVERWORLD; + return DimensionTypes.OVERWORLD; + } + public static Dimension getDimension() { if (mc.world == null) return Dimension.Overworld;