Skip to content

Commit 0c883c1

Browse files
Wide-Catthebest9178
andcommitted
Update AirPlace
- Use timing is no longer influenced by the module (no longer tries to place every tick) - Able to use items in your offhand - Allow it to use armor stands and fireworks closes #4002 closes #2419 Co-authored-by: thebest9178 <76120883+thebest9178@users.noreply.github.com>
1 parent d4722e9 commit 0c883c1

File tree

1 file changed

+36
-12
lines changed
  • src/main/java/meteordevelopment/meteorclient/systems/modules/player

1 file changed

+36
-12
lines changed

src/main/java/meteordevelopment/meteorclient/systems/modules/player/AirPlace.java

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,24 @@
55

66
package meteordevelopment.meteorclient.systems.modules.player;
77

8+
import meteordevelopment.meteorclient.events.entity.player.InteractItemEvent;
89
import meteordevelopment.meteorclient.events.render.Render3DEvent;
910
import meteordevelopment.meteorclient.events.world.TickEvent;
1011
import meteordevelopment.meteorclient.renderer.ShapeMode;
1112
import meteordevelopment.meteorclient.settings.*;
1213
import meteordevelopment.meteorclient.systems.modules.Categories;
1314
import meteordevelopment.meteorclient.systems.modules.Module;
15+
import meteordevelopment.meteorclient.utils.player.InvUtils;
1416
import meteordevelopment.meteorclient.utils.render.color.SettingColor;
1517
import meteordevelopment.meteorclient.utils.world.BlockUtils;
1618
import meteordevelopment.orbit.EventHandler;
17-
import net.minecraft.item.BlockItem;
18-
import net.minecraft.item.SpawnEggItem;
19-
import net.minecraft.util.Hand;
19+
import net.minecraft.block.Block;
20+
import net.minecraft.block.Blocks;
21+
import net.minecraft.item.*;
22+
import net.minecraft.util.ActionResult;
2023
import net.minecraft.util.hit.BlockHitResult;
2124
import net.minecraft.util.hit.HitResult;
25+
import net.minecraft.util.math.Vec3d;
2226

2327
public class AirPlace extends Module {
2428
private final SettingGroup sgGeneral = settings.getDefaultGroup();
@@ -80,24 +84,44 @@ public AirPlace() {
8084
}
8185

8286
@EventHandler
83-
private void onTick(TickEvent.Post event) {
87+
private void onTick(TickEvent.Pre event) {
88+
if (!InvUtils.testInHands(this::placeable)) return;
89+
if (mc.crosshairTarget != null && mc.crosshairTarget.getType() != HitResult.Type.MISS) return;
90+
8491
double r = customRange.get() ? range.get() : mc.player.getBlockInteractionRange();
8592
hitResult = mc.getCameraEntity().raycast(r, 0, false);
93+
}
94+
95+
@EventHandler
96+
private void onInteractItem(InteractItemEvent event) {
97+
if (!(hitResult instanceof BlockHitResult bhr) || !placeable(mc.player.getStackInHand(event.hand))) return;
8698

87-
if (!(hitResult instanceof BlockHitResult blockHitResult) || !(mc.player.getMainHandStack().getItem() instanceof BlockItem) && !(mc.player.getMainHandStack().getItem() instanceof SpawnEggItem)) return;
99+
Block toPlace = Blocks.OBSIDIAN;
100+
Item i = mc.player.getStackInHand(event.hand).getItem();
101+
if (i instanceof BlockItem blockItem) toPlace = blockItem.getBlock();
102+
if (!BlockUtils.canPlaceBlock(bhr.getBlockPos(), (i instanceof ArmorStandItem || i instanceof BlockItem), toPlace)) return;
88103

89-
if (mc.options.useKey.isPressed()) {
90-
BlockUtils.place(blockHitResult.getBlockPos(), Hand.MAIN_HAND, mc.player.getInventory().getSelectedSlot(), false, 0, true, true, false);
91-
}
104+
Vec3d hitPos = Vec3d.ofCenter(bhr.getBlockPos());
105+
106+
BlockHitResult b = new BlockHitResult(hitPos, mc.player.getMovementDirection().getOpposite(), bhr.getBlockPos(), false);
107+
BlockUtils.interact(b, event.hand, true);
108+
109+
event.toReturn = ActionResult.SUCCESS;
92110
}
93111

94112
@EventHandler
95113
private void onRender(Render3DEvent event) {
96-
if (!(hitResult instanceof BlockHitResult blockHitResult)
97-
|| !mc.world.getBlockState(blockHitResult.getBlockPos()).isReplaceable()
98-
|| !(mc.player.getMainHandStack().getItem() instanceof BlockItem) && !(mc.player.getMainHandStack().getItem() instanceof SpawnEggItem)
114+
if (!(hitResult instanceof BlockHitResult bhr)
115+
|| (mc.crosshairTarget != null && mc.crosshairTarget.getType() != HitResult.Type.MISS)
116+
|| !mc.world.getBlockState(bhr.getBlockPos()).isReplaceable()
117+
|| !InvUtils.testInHands(this::placeable)
99118
|| !render.get()) return;
100119

101-
event.renderer.box(blockHitResult.getBlockPos(), sideColor.get(), lineColor.get(), shapeMode.get(), 0);
120+
event.renderer.box(bhr.getBlockPos(), sideColor.get(), lineColor.get(), shapeMode.get(), 0);
121+
}
122+
123+
private boolean placeable(ItemStack stack) {
124+
Item i = stack.getItem();
125+
return i instanceof BlockItem || i instanceof SpawnEggItem || i instanceof FireworkRocketItem || i instanceof ArmorStandItem;
102126
}
103127
}

0 commit comments

Comments
 (0)