Skip to content

Commit fe666ed

Browse files
committed
Added Vine NoSlowDown, Updated Flight, Updated ItemHandler, Updated InfiniteReach
1 parent 5728c66 commit fe666ed

7 files changed

Lines changed: 312 additions & 36 deletions

File tree

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,7 @@ Reports number of waypoints changed.
398398
- Trace Selected Items: toggles tracing for selected types (uses ItemESP world render pass to draw rainbow tracer lines and ESP boxes).
399399
- Works independently of ItemESP
400400
- Can SHIFT select multiple items
401+
- Adjustable tracer line thickness
401402
- Ignore Selected Items: adds the item/s you selected to the ItemESP ignore list
402403
- Toggle to adhere to the ItemESP ignored list (Including a link to edit the list)
403404
- Adjustable distance for item detection
@@ -609,6 +610,7 @@ Credits to [Trouser-Streak](https://github.com/etianl/Trouser-Streak/blob/main/s
609610
- Delay settings throttle mining, item use, and entity hits
610611
- Toggles for only using the hack when wielding a mace and for skipping collision when BoatNoclip is active.
611612
- Block breaking and long-range item-use are supported via the same teleport-and-act cycle, making it behave like a remote InstaMine/interaction handler.
613+
- Lock-on (vertically) mode for Mace attacks which applies through walls approx 50 blocks.
612614

613615
Credits to [Trouser-Streak](https://github.com/etianl/Trouser-Streak/blob/main/src/main/java/pwn/noobs/trouserstreak/modules/InfiniteReach.java). The difference between mine and theirs is that I have added through block toggle, clip up toggle for mace, and better ESP highlighting.
614616

@@ -747,6 +749,7 @@ This hack is still undergoing development and has only been tested in the end. A
747749
- Added filters for chests and barrels to not highlight them if near spawners, trial chambers and villages (Excluding double chests and shulkers)
748750
- Added opacity settings
749751
- Option to suppress single chests in favor of double
752+
- Optional alert for shulkerboxes in chat
750753

751754
### ItemESP (Expanded)
752755
Highlights dropped, equipped, and framed items with powerful filters and customization.
@@ -885,6 +888,7 @@ Examples:
885888
- Optionally tie horizontal and vertical speeds together
886889
- Adjustable step for both speeds
887890
- Prevent dropping when holding SHIFT whilst in inventory
891+
- Prevent being slowed down by vines
888892

889893
### Larger Scan Radius
890894
- Extended up to 65×65 chunks for all chunk-based features.
@@ -920,6 +924,7 @@ Examples:
920924
- Added no slowdown for lava
921925
- Added no slowdown for water
922926
- Added a toggle to allow swimming
927+
- Added no slowdown for vines (cannot climb)
923928

924929
### TrueSight Improved
925930
- Added customisable glow ESP for invisible entities

src/main/java/net/wurstclient/hacks/ChestEspHack.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import com.mojang.blaze3d.vertex.PoseStack;
1111
import java.util.ArrayList;
12+
import java.util.HashSet;
1213
import java.util.List;
1314
import java.util.stream.Collectors;
1415
import net.minecraft.core.BlockPos;
@@ -53,6 +54,7 @@
5354
import net.wurstclient.hacks.chestesp.ChestEspBlockGroup;
5455
import net.wurstclient.settings.SliderSetting;
5556
import net.wurstclient.util.BlockUtils;
57+
import net.wurstclient.util.ChatUtils;
5658
import net.wurstclient.util.RenderUtils;
5759
import net.wurstclient.util.chunk.ChunkUtils;
5860

@@ -129,9 +131,14 @@ public class ChestEspHack extends Hack implements UpdateListener,
129131
"Hides single chests that appear to belong to villages. Does not affect double chests or shulkers.",
130132
false);
131133

134+
private final CheckboxSetting shulkerChatAlerts =
135+
new CheckboxSetting("Shulker chat alerts",
136+
"Sends a chat alert when ChestESP detects a shulker box.", false);
137+
132138
private List<BlockPos> cachedTrialSpawners = List.of();
133139
private List<Vec3> cachedVillagerPositions = List.of();
134140
private List<Vec3> cachedGolemPositions = List.of();
141+
private final HashSet<BlockPos> alertedShulkers = new HashSet<>();
135142

136143
private static final TagKey<Block> WAXED_COPPER_BLOCKS_TAG = TagKey.create(
137144
Registries.BLOCK,
@@ -152,6 +159,7 @@ public ChestEspHack()
152159
addSetting(filterTrialChambers);
153160
addSetting(doubleChestsOnly);
154161
addSetting(filterVillages);
162+
addSetting(shulkerChatAlerts);
155163
addSetting(showCountInHackList);
156164
addSetting(boxAlpha);
157165
addSetting(lineAlpha);
@@ -181,6 +189,7 @@ protected void onDisable()
181189
cachedVillagerPositions = List.of();
182190
cachedGolemPositions = List.of();
183191
preFilteredEnv = false;
192+
alertedShulkers.clear();
184193
}
185194

186195
@Override
@@ -195,11 +204,22 @@ public void onUpdate()
195204

196205
double yLimit = aboveGroundY.getValue();
197206
boolean enforceAboveGround = onlyAboveGround.isChecked();
207+
HashSet<BlockPos> seenShulkers =
208+
shulkerChatAlerts.isChecked() ? new HashSet<>() : null;
198209

199210
ChunkUtils.getLoadedBlockEntities().forEach(be -> {
200211
if(enforceAboveGround && be.getBlockPos().getY() < yLimit)
201212
return;
202213

214+
if(seenShulkers != null && isShulkerBlockEntity(be))
215+
{
216+
BlockPos pos = be.getBlockPos().immutable();
217+
seenShulkers.add(pos);
218+
if(alertedShulkers.add(pos))
219+
ChatUtils.message("ChestESP: Shulker box at " + pos.getX()
220+
+ ", " + pos.getY() + ", " + pos.getZ());
221+
}
222+
203223
// Pre-filter by environment to avoid flicker and wasted work
204224
if(preFilteredEnv && shouldFilterBlockEntityByEnvironment(be))
205225
return;
@@ -211,6 +231,11 @@ public void onUpdate()
211231
groups.blockGroups.forEach(group -> group.addIfMatches(be));
212232
});
213233

234+
if(seenShulkers != null)
235+
alertedShulkers.retainAll(seenShulkers);
236+
else
237+
alertedShulkers.clear();
238+
214239
if(MC.level != null)
215240
{
216241
for(Entity entity : MC.level.entitiesForRendering())
@@ -781,6 +806,18 @@ private List<BlockPos> collectTrialSpawnerPositions()
781806
.collect(Collectors.toList());
782807
}
783808

809+
private boolean isShulkerBlockEntity(BlockEntity be)
810+
{
811+
if(be == null)
812+
return false;
813+
814+
if(be instanceof net.minecraft.world.level.block.entity.ShulkerBoxBlockEntity)
815+
return true;
816+
817+
BlockState state = be.getBlockState();
818+
return state != null && state.getBlock() instanceof ShulkerBoxBlock;
819+
}
820+
784821
private <T extends Entity> List<Vec3> collectEntityPositions(Class<T> type)
785822
{
786823
if(MC.level == null)

src/main/java/net/wurstclient/hacks/FlightHack.java

Lines changed: 82 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,14 @@ public final class FlightHack extends Hack implements UpdateListener,
9090
new SliderSetting("Escape Drop Speed",
9191
"description.wurst.setting.flight.escape_drop_speed", 3.9, 0.05,
9292
3.9, 0.05, ValueDisplay.DECIMAL);
93-
private final CheckboxSetting enableNoFallOnFlight = new CheckboxSetting(
94-
"Enable NoFall with Flight",
95-
"description.wurst.setting.flight.enable_nofall_with_flight", false);
93+
private final CheckboxSetting enableNoFallOnFlight = new CheckboxSetting(
94+
"Enable NoFall with Flight",
95+
"description.wurst.setting.flight.enable_nofall_with_flight", false);
96+
97+
private final CheckboxSetting ignoreVinesWithFlight = new CheckboxSetting(
98+
"Ignore vines with Flight",
99+
"Temporarily enables NoSlowdown's \"Ignore vines\" while Flight is enabled.",
100+
false);
96101

97102
private final CheckboxSetting slowSneaking =
98103
new CheckboxSetting("Slow sneaking",
@@ -109,11 +114,12 @@ public final class FlightHack extends Hack implements UpdateListener,
109114
private int tickCounter = 0;
110115
private final PlayerRangeAlertManager alertManager =
111116
WURST.getPlayerRangeAlertManager();
112-
private boolean escapeDropActive;
113-
private double escapeTargetY;
114-
private boolean triggered;
115-
private boolean enabledNoFallByFlight;
116-
private boolean enabledNoFallByEscape;
117+
private boolean escapeDropActive;
118+
private double escapeTargetY;
119+
private boolean triggered;
120+
private boolean enabledNoFallByFlight;
121+
private boolean enabledNoFallByEscape;
122+
private boolean managedNoSlowdownVineIgnore;
117123

118124
public FlightHack()
119125
{
@@ -131,12 +137,13 @@ public FlightHack()
131137
addSetting(antiKickDistance);
132138
addSetting(dontGetCaught);
133139
addSetting(escapeDropSpeed);
134-
addSetting(ignoreNpcs);
135-
addSetting(ignoreFriends);
136-
addSetting(enableNoFallOnFlight);
137-
addSetting(slowSneaking);
138-
addSetting(ignoreShiftInGuis);
139-
}
140+
addSetting(ignoreNpcs);
141+
addSetting(ignoreFriends);
142+
addSetting(enableNoFallOnFlight);
143+
addSetting(ignoreVinesWithFlight);
144+
addSetting(slowSneaking);
145+
addSetting(ignoreShiftInGuis);
146+
}
140147

141148
@Override
142149
public String getRenderName()
@@ -159,12 +166,14 @@ public String getRenderName()
159166
@Override
160167
protected void onEnable()
161168
{
162-
tickCounter = 0;
163-
escapeDropActive = false;
164-
triggered = false;
165-
166-
WURST.getHax().creativeFlightHack.setEnabled(false);
167-
WURST.getHax().jetpackHack.setEnabled(false);
169+
tickCounter = 0;
170+
escapeDropActive = false;
171+
triggered = false;
172+
managedNoSlowdownVineIgnore = false;
173+
174+
WURST.getHax().creativeFlightHack.setEnabled(false);
175+
WURST.getHax().jetpackHack.setEnabled(false);
176+
syncNoSlowdownVineIgnore();
168177

169178
if(enableNoFallOnFlight.isChecked()
170179
&& !WURST.getHax().noFallHack.isEnabled())
@@ -181,19 +190,21 @@ protected void onEnable()
181190
}
182191

183192
@Override
184-
protected void onDisable()
185-
{
186-
EVENTS.remove(UpdateListener.class, this);
187-
EVENTS.remove(IsPlayerInWaterListener.class, this);
188-
EVENTS.remove(AirStrafingSpeedListener.class, this);
193+
protected void onDisable()
194+
{
195+
restoreNoSlowdownVineIgnore();
196+
EVENTS.remove(UpdateListener.class, this);
197+
EVENTS.remove(IsPlayerInWaterListener.class, this);
198+
EVENTS.remove(AirStrafingSpeedListener.class, this);
189199
alertManager.removeListener(this);
190200
EVENTS.remove(MouseScrollListener.class, this);
191201
}
192202

193203
@Override
194-
public void onUpdate()
195-
{
196-
LocalPlayer player = MC.player;
204+
public void onUpdate()
205+
{
206+
LocalPlayer player = MC.player;
207+
syncNoSlowdownVineIgnore();
197208

198209
if(enableNoFallOnFlight.isChecked()
199210
&& !WURST.getHax().noFallHack.isEnabled())
@@ -239,7 +250,49 @@ public void onUpdate()
239250
Vec3 current = player.getDeltaMovement();
240251
player.setDeltaMovement(current.x, alignStep, current.z);
241252
}
242-
}
253+
}
254+
255+
private void syncNoSlowdownVineIgnore()
256+
{
257+
NoSlowdownHack noSlowdown = WURST.getHax().noSlowdownHack;
258+
if(noSlowdown == null)
259+
return;
260+
261+
if(!ignoreVinesWithFlight.isChecked())
262+
{
263+
if(managedNoSlowdownVineIgnore)
264+
{
265+
noSlowdown.setIgnoreVines(false);
266+
managedNoSlowdownVineIgnore = false;
267+
}
268+
return;
269+
}
270+
271+
if(!managedNoSlowdownVineIgnore)
272+
{
273+
if(noSlowdown.shouldIgnoreVines())
274+
return;
275+
276+
noSlowdown.setIgnoreVines(true);
277+
managedNoSlowdownVineIgnore = true;
278+
return;
279+
}
280+
281+
if(!noSlowdown.shouldIgnoreVines())
282+
noSlowdown.setIgnoreVines(true);
283+
}
284+
285+
private void restoreNoSlowdownVineIgnore()
286+
{
287+
if(!managedNoSlowdownVineIgnore)
288+
return;
289+
290+
NoSlowdownHack noSlowdown = WURST.getHax().noSlowdownHack;
291+
if(noSlowdown != null)
292+
noSlowdown.setIgnoreVines(false);
293+
294+
managedNoSlowdownVineIgnore = false;
295+
}
243296

244297
@Override
245298
public void onGetAirStrafingSpeed(AirStrafingSpeedEvent event)

0 commit comments

Comments
 (0)