Skip to content

Commit bbf4dbc

Browse files
committed
Updated BedrockEscape, HandNoClip, AutoSteal, AutoDisenchant
1 parent 69181c9 commit bbf4dbc

18 files changed

Lines changed: 565 additions & 66 deletions

README.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ Reports number of waypoints changed.
259259

260260
### AutoDisenchant
261261
- Feeds items from your inventory (and or hotbar) that can be disenchanted into the grindstone automatically.
262+
- Show button toggle lets you hide the grindstone button so the hack auto-runs whenever it’s enabled; show the button and you must press it inside the container.
262263

263264
### SignFramePassThrough
264265
- You can now open chests that have item frames or signs in the way!
@@ -605,6 +606,7 @@ Credits to [Trouser-Streak](https://github.com/etianl/Trouser-Streak/blob/main/s
605606
- A green tick will appear when all teleport conditions are met: can reach, won't die and able to pass through.
606607
- Able to adjust packet rate throttle to avoid spam or detection.
607608
- Holding shift above bedrock will attempt to break blocks under you to find a cheaper (less damage) route. Will auto switch to pickaxe if available.
609+
- You are able to override safeguards in the settings
608610
- Only works on PaperMC
609611

610612
![Bedrock](https://i.imgur.com/4mEuHL8.png)
@@ -631,6 +633,10 @@ Credits to [Trouser-Streak](https://github.com/etianl/Trouser-Streak/blob/main/s
631633

632634
![HUD](https://i.imgur.com/IZ4lFCx.png)
633635

636+
### DamageDetect
637+
638+
- Navigator only hack that simply tells you who or what caused you damage and where in chat
639+
634640
## What's changed or improved in this fork?
635641

636642
### ChestESP
@@ -737,6 +743,12 @@ Examples:
737743

738744
### AutoSteal Improvements
739745
- Toggle 'Steal/Store Same' to move items that match the same ones in the players inventory or chest. Bind-able to a key.
746+
- Added 'Auto' button which can enable and disable Auto stealing on the fly.
747+
- Added 'Dump' button which throws everything out of the container.
748+
- Buttons (Auto, Steal, Store, Dump) are toggled within the hack's settings and persist even if AutoSteal is disabled.
749+
- Added Item List and 'List Only' toggle to only auto steal items on the list.
750+
751+
![Thief](https://i.imgur.com/Dejk1Jd.png)
740752

741753
### BaseFinder Improvements
742754
- ESP Y range adjustability
@@ -813,7 +825,8 @@ Examples:
813825
- Added lock-on targetting
814826

815827
### HandNoClip Improved
816-
- Now shows a red X over your crosshair to remind you that you cannot place or interact with blocks (in front of you) while the hack is enabled
828+
- Displays a red X on the crosshair when block placement or interaction is blocked while the hack is enabled.
829+
- The red X can also indicate blocks that can be interacted with when On-Target Mode is enabled; in this mode, HandNoClip remains disabled until you are within range of a valid block.
817830

818831
### Keybind Manager Improved
819832
- Can now clear the entire keybinds instead of just resetting.

src/main/java/net/wurstclient/hack/HackList.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ public final class HackList implements UpdateListener
9797
public final CaveFinderHack caveFinderHack = new CaveFinderHack();
9898
public final CheatDetectorHack cheatDetectorHack = new CheatDetectorHack();
9999
public final ChorusFruitHack chorusFruitHack = new ChorusFruitHack();
100+
public final DamageDetectHack damageDetectHack = new DamageDetectHack();
100101
public final LivestreamDetectorHack livestreamDetectorHack =
101102
new LivestreamDetectorHack();
102103
public final ChatTranslatorHack chatTranslatorHack =

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import net.wurstclient.hack.Hack;
2525
import net.wurstclient.settings.CheckboxSetting;
2626
import net.wurstclient.settings.SliderSetting;
27+
import net.wurstclient.util.text.WText;
2728
import net.wurstclient.settings.SliderSetting.ValueDisplay;
2829

2930
@SearchTags({"auto disenchant", "grindstone", "repair and disenchant",
@@ -47,13 +48,19 @@ public final class AutoDisenchantHack extends Hack
4748
"Maximum time to wait for the grindstone to produce an output.", 600,
4849
100, 2000, 50, ValueDisplay.INTEGER.withSuffix("ms"));
4950

51+
private final CheckboxSetting showButton = new CheckboxSetting(
52+
"Show button",
53+
WText.literal("Show the AutoDisenchant button inside the grindstone."),
54+
true);
55+
5056
private volatile Thread worker;
5157

5258
public AutoDisenchantHack()
5359
{
5460
super("AutoDisenchant");
5561
setCategory(Category.ITEMS);
5662
addSetting(includeHotbar);
63+
addSetting(showButton);
5764
addSetting(clickDelay);
5865
addSetting(outputWait);
5966
}
@@ -239,6 +246,16 @@ private boolean isScreenValid(GrindstoneScreen screen)
239246
return MC.screen == screen;
240247
}
241248

249+
public boolean shouldShowButton()
250+
{
251+
return showButton.isChecked();
252+
}
253+
254+
public boolean shouldAutoRun()
255+
{
256+
return !showButton.isChecked();
257+
}
258+
242259
private void sleep(long millis) throws InterruptedException
243260
{
244261
if(millis <= 0)

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

Lines changed: 151 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,26 @@
1010
import java.util.List;
1111
import java.util.stream.IntStream;
1212
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
13+
import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen;
14+
import net.minecraft.client.gui.screens.inventory.InventoryScreen;
15+
import net.minecraft.world.inventory.ChestMenu;
16+
import net.minecraft.world.inventory.ShulkerBoxMenu;
1317
import net.minecraft.world.inventory.ClickType;
1418
import net.minecraft.world.inventory.Slot;
1519
import net.minecraft.world.item.Item;
1620
import net.wurstclient.Category;
1721
import net.wurstclient.SearchTags;
22+
import net.wurstclient.events.UpdateListener;
1823
import net.wurstclient.hack.Hack;
1924
import net.wurstclient.settings.CheckboxSetting;
25+
import net.wurstclient.settings.ItemListSetting;
2026
import net.wurstclient.settings.SliderSetting;
2127
import net.wurstclient.settings.SliderSetting.ValueDisplay;
28+
import net.wurstclient.util.text.WText;
2229

2330
@SearchTags({"auto steal", "ChestStealer", "chest stealer",
2431
"steal store buttons", "Steal/Store buttons"})
25-
public final class AutoStealHack extends Hack
32+
public final class AutoStealHack extends Hack implements UpdateListener
2633
{
2734
private final SliderSetting delay = new SliderSetting("Delay",
2835
"Delay between moving stacks of items.\n"
@@ -39,7 +46,20 @@ public final class AutoStealHack extends Hack
3946
"Steal/Store same",
4047
"Only move exact matching item types present in the source.", false);
4148

49+
private final CheckboxSetting listOnly =
50+
new CheckboxSetting("List only",
51+
WText.literal(
52+
"Only move the items that are in the adjacent item list."),
53+
false);
54+
55+
private final ItemListSetting itemList =
56+
new ItemListSetting("Item list", WText.literal(
57+
"Items that AutoSteal is allowed to move when \"List only\" is on."));
58+
4259
private Thread thread;
60+
private AbstractContainerScreen<?> lastContainerScreen;
61+
private long lastAutoStealAttemptMs;
62+
private static final long AUTO_STEAL_COOLDOWN_MS = 500L;
4363

4464
public AutoStealHack()
4565
{
@@ -49,6 +69,26 @@ public AutoStealHack()
4969
addSetting(delay);
5070
addSetting(reverseSteal);
5171
addSetting(stealStoreSame);
72+
addSetting(listOnly);
73+
addSetting(itemList);
74+
}
75+
76+
@Override
77+
protected void onEnable()
78+
{
79+
super.onEnable();
80+
EVENTS.add(UpdateListener.class, this);
81+
maybeStealCurrentChest();
82+
}
83+
84+
@Override
85+
protected void onDisable()
86+
{
87+
super.onDisable();
88+
stopThread();
89+
EVENTS.remove(UpdateListener.class, this);
90+
lastContainerScreen = null;
91+
lastAutoStealAttemptMs = 0L;
5292
}
5393

5494
public void steal(AbstractContainerScreen<?> screen, int rows)
@@ -69,8 +109,11 @@ public void dump(AbstractContainerScreen<?> screen, int rows)
69109
private void startClickingSlots(AbstractContainerScreen<?> screen, int from,
70110
int to, boolean steal)
71111
{
72-
if(thread != null && thread.isAlive())
73-
thread.interrupt();
112+
if(isCreativeScreen(screen))
113+
return;
114+
if(!isSupportedScreen(screen))
115+
return;
116+
stopThread();
74117

75118
thread = Thread.ofPlatform().name("AutoSteal")
76119
.uncaughtExceptionHandler((t, e) -> e.printStackTrace()).daemon()
@@ -80,14 +123,31 @@ private void startClickingSlots(AbstractContainerScreen<?> screen, int from,
80123
private void startDroppingSlots(AbstractContainerScreen<?> screen, int from,
81124
int to)
82125
{
83-
if(thread != null && thread.isAlive())
84-
thread.interrupt();
126+
if(isCreativeScreen(screen))
127+
return;
128+
if(!isSupportedScreen(screen))
129+
return;
130+
stopThread();
85131

86132
thread = Thread.ofPlatform().name("AutoSteal")
87133
.uncaughtExceptionHandler((t, e) -> e.printStackTrace()).daemon()
88134
.start(() -> dropSlots(screen, from, to));
89135
}
90136

137+
private void stopThread()
138+
{
139+
if(thread != null)
140+
{
141+
thread.interrupt();
142+
thread = null;
143+
}
144+
}
145+
146+
private boolean isThreadAlive()
147+
{
148+
return thread != null && thread.isAlive();
149+
}
150+
91151
private void shiftClickSlots(AbstractContainerScreen<?> screen, int from,
92152
int to, boolean steal)
93153
{
@@ -146,6 +206,11 @@ private void shiftClickSlots(AbstractContainerScreen<?> screen, int from,
146206
if(slot.getItem().isEmpty())
147207
continue;
148208

209+
net.minecraft.world.item.Item slotItem =
210+
slot.getItem().getItem();
211+
if(listOnly.isChecked() && !itemList.contains(slotItem))
212+
continue;
213+
149214
// Exact-type filtering (Steal/Store same)
150215
if(stealStoreSame.isChecked())
151216
{
@@ -201,6 +266,35 @@ private void dropSlots(AbstractContainerScreen<?> screen, int from, int to)
201266
}
202267
}
203268

269+
private void maybeStealCurrentChest()
270+
{
271+
if(!(MC.screen instanceof AbstractContainerScreen<?> screen))
272+
return;
273+
274+
if(isCreativeScreen(screen))
275+
return;
276+
if(!isSupportedScreen(screen))
277+
return;
278+
279+
int rows = getChestRows(screen);
280+
if(rows <= 0)
281+
return;
282+
283+
steal(screen, rows);
284+
}
285+
286+
private static int getChestRows(AbstractContainerScreen<?> screen)
287+
{
288+
int totalSlots = screen.getMenu().slots.size();
289+
int chestSlots = Math.max(0, totalSlots - 36);
290+
return chestSlots / 9;
291+
}
292+
293+
private static boolean isCreativeScreen(AbstractContainerScreen<?> screen)
294+
{
295+
return screen instanceof CreativeModeInventoryScreen;
296+
}
297+
204298
private List<Slot> collectSlots(AbstractContainerScreen<?> screen, int from,
205299
int to)
206300
{
@@ -318,5 +412,57 @@ public boolean areButtonsVisible()
318412
return buttons.isChecked();
319413
}
320414

415+
public static boolean isSupportedScreen(AbstractContainerScreen<?> screen)
416+
{
417+
return screen.getMenu() instanceof ChestMenu
418+
|| screen.getMenu() instanceof ShulkerBoxMenu;
419+
}
420+
421+
@Override
422+
public void onUpdate()
423+
{
424+
if(!isEnabled())
425+
return;
426+
427+
AbstractContainerScreen<?> screen =
428+
MC.screen instanceof AbstractContainerScreen<?> s ? s : null;
429+
if(screen == null || screen instanceof InventoryScreen
430+
|| isCreativeScreen(screen))
431+
{
432+
lastContainerScreen = null;
433+
stopThread();
434+
return;
435+
}
436+
437+
if(!isSupportedScreen(screen))
438+
{
439+
lastContainerScreen = null;
440+
stopThread();
441+
return;
442+
}
443+
444+
if(screen != lastContainerScreen)
445+
{
446+
lastContainerScreen = screen;
447+
lastAutoStealAttemptMs = 0L;
448+
}
449+
450+
if(isThreadAlive())
451+
return;
452+
453+
if(System.currentTimeMillis()
454+
- lastAutoStealAttemptMs < AUTO_STEAL_COOLDOWN_MS)
455+
{
456+
return;
457+
}
458+
459+
int rows = getChestRows(screen);
460+
if(rows <= 0)
461+
return;
462+
463+
lastAutoStealAttemptMs = System.currentTimeMillis();
464+
steal(screen, rows);
465+
}
466+
321467
// See GenericContainerScreenMixin and ShulkerBoxScreenMixin
322468
}

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ public final class BedrockEscapeHack extends Hack
5353
private final CheckboxSetting render = new CheckboxSetting("Render Target",
5454
"Render a box around the landing zone.", true);
5555

56+
private final CheckboxSetting ignoreSafeTickRequirement =
57+
new CheckboxSetting("Teleport without Tick",
58+
"Allow teleporting even when the safe-tick indicator isn't showing.",
59+
false);
60+
5661
private final ColorSetting boxColor =
5762
new ColorSetting("Bedrock Color", new Color(128, 0, 255));
5863

@@ -83,6 +88,7 @@ public BedrockEscapeHack()
8388
addSetting(packetSpam);
8489
addSetting(render);
8590
addSetting(boxColor);
91+
addSetting(ignoreSafeTickRequirement);
8692
}
8793

8894
@Override
@@ -132,7 +138,7 @@ public void onUpdate()
132138
if(!isValidTarget)
133139
return;
134140

135-
if(!showSafeTick)
141+
if(!showSafeTick && !ignoreSafeTickRequirement.isChecked())
136142
return;
137143

138144
if(MC.options.keyAttack.isDown())

0 commit comments

Comments
 (0)