Skip to content
This repository was archived by the owner on May 19, 2025. It is now read-only.

Commit d3bec13

Browse files
committed
0.9.0 - ElytraTweaks AutoDeploy
1 parent ab11fb3 commit d3bec13

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+811
-309
lines changed

1.20.1/gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ minecraft_version=1.20.1
77
parchment_version=2023.09.03
88

99
# Plugin Properties
10-
plugin_version=0.8.1
10+
plugin_version=0.9.0
1111
maven_group=com.shaybox.rusher
1212
archives_base_name=shays-rusher-plugin

1.20.1/gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

1.20.1/gradlew

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
# Darwin, MinGW, and NonStop.
5656
#
5757
# (3) This script is generated from the Groovy template
58-
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
58+
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
5959
# within the Gradle project.
6060
#
6161
# You can find Gradle at https://github.com/gradle/gradle/.

1.20.1/src/main/java/com/shaybox/rusher/Main.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ public class Main extends Plugin {
2020
/* ModuleManager & Modules */
2121
private final IFeatureManager<IModule> moduleManager = RusherHackAPI.getModuleManager();
2222
private final ToggleableModule killEffects = new KillEffects();
23+
private final ToggleableModule spawnLocations = new SpawnLocations();
2324

2425
/* EventBus & Listeners */
2526
private final IEventBus eventBus = RusherHackAPI.getEventBus();
2627
private final EventListener armorPriority = new ArmorPriority();
28+
private final EventListener autoDeploy = new AutoDeploy();
2729
private final EventListener autoRestart = new AutoRestart();
2830
private final EventListener durability101 = new Durability101();
2931
private final EventListener grimDisabler = new GrimDisabler();
@@ -33,7 +35,9 @@ public class Main extends Plugin {
3335
@Override
3436
public void onLoad() {
3537
this.moduleManager.registerFeature(this.killEffects);
38+
this.moduleManager.registerFeature(this.spawnLocations);
3639
this.eventBus.subscribe(this.armorPriority);
40+
this.eventBus.subscribe(this.autoDeploy);
3741
this.eventBus.subscribe(this.autoRestart);
3842
this.eventBus.subscribe(this.durability101);
3943
this.eventBus.subscribe(this.grimDisabler);
@@ -44,6 +48,7 @@ public void onLoad() {
4448
@Override
4549
public void onUnload() {
4650
this.eventBus.unsubscribe(this.armorPriority);
51+
this.eventBus.unsubscribe(this.autoDeploy);
4752
this.eventBus.unsubscribe(this.autoRestart);
4853
this.eventBus.unsubscribe(this.durability101);
4954
this.eventBus.unsubscribe(this.grimDisabler);

1.20.1/src/main/java/com/shaybox/rusher/modules/KillEffects.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class KillEffects extends ToggleableModule {
2424
/* Minecraft */
2525
private final Minecraft minecraft = Minecraft.getInstance();
2626

27-
/* RusherHackAPI & Settings */
27+
/* Settings */
2828
private final BooleanSetting self = new BooleanSetting("Self", "Only when you kill", false);
2929

3030
/* Previous State */
@@ -36,20 +36,19 @@ public KillEffects() {
3636
this.registerSettings(this.self);
3737
}
3838

39-
@SuppressWarnings("unused")
4039
@Subscribe
4140
private void onPacket(EventPacket.Receive event) {
42-
Packet<?> packet = event.getPacket();
41+
final Packet<?> packet = event.getPacket();
4342

4443
if (packet instanceof ClientboundDamageEventPacket damagePacket) {
4544
assert this.minecraft.level != null;
4645

47-
DamageSource source = damagePacket.getSource(this.minecraft.level);
46+
final DamageSource source = damagePacket.getSource(this.minecraft.level);
4847
if (!source.is(DamageTypes.PLAYER_ATTACK) && !source.is(DamageTypes.PLAYER_EXPLOSION)) return;
4948

50-
Entity entity = this.minecraft.level.getEntity(damagePacket.entityId());
49+
final Entity entity = this.minecraft.level.getEntity(damagePacket.entityId());
5150
if (entity instanceof Player) {
52-
Entity attacker = this.minecraft.level.getEntity(damagePacket.sourceCauseId());
51+
final Entity attacker = this.minecraft.level.getEntity(damagePacket.sourceCauseId());
5352
this.playerAttacker.put(entity, attacker);
5453
}
5554
} else if (packet instanceof ClientboundEntityEventPacket entityPacket) {
@@ -58,20 +57,20 @@ private void onPacket(EventPacket.Receive event) {
5857
byte eventId = entityPacket.getEventId();
5958
if (eventId != 3) return;
6059

61-
Entity entity = entityPacket.getEntity(this.minecraft.level);
60+
final Entity entity = entityPacket.getEntity(this.minecraft.level);
6261
boolean isPlayer = entity instanceof Player;
6362
if (!isPlayer) return;
6463

65-
Entity attacker = this.playerAttacker.get(entity);
64+
final Entity attacker = this.playerAttacker.get(entity);
6665
if (attacker == null) return;
6766
else this.playerAttacker.remove(entity);
6867

6968
/* Only show lightning when the local player is the attacker */
7069
if (this.self.getValue() && attacker != this.minecraft.player) return;
7170

72-
LightningBolt lightning = new LightningBolt(EntityType.LIGHTNING_BOLT, this.minecraft.level);
73-
lightning.setPos(entity.position());
74-
this.minecraft.level.addFreshEntity(lightning);
71+
final LightningBolt lightningBolt = new LightningBolt(EntityType.LIGHTNING_BOLT, this.minecraft.level);
72+
lightningBolt.setPos(entity.position());
73+
this.minecraft.level.addFreshEntity(lightningBolt);
7574
}
7675
}
7776

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package com.shaybox.rusher.modules;
2+
3+
import com.mojang.blaze3d.vertex.PoseStack;
4+
import net.minecraft.core.BlockPos;
5+
import net.minecraft.world.entity.Entity;
6+
import net.minecraft.world.entity.NeutralMob;
7+
import net.minecraft.world.entity.animal.Animal;
8+
import net.minecraft.world.entity.monster.Monster;
9+
import net.minecraft.world.entity.player.Player;
10+
import org.rusherhack.client.api.events.render.EventRender3D;
11+
import org.rusherhack.client.api.events.world.EventEntity;
12+
import org.rusherhack.client.api.feature.module.ModuleCategory;
13+
import org.rusherhack.client.api.feature.module.ToggleableModule;
14+
import org.rusherhack.client.api.render.IRenderer3D;
15+
import org.rusherhack.client.api.setting.ColorSetting;
16+
import org.rusherhack.core.event.subscribe.Subscribe;
17+
import org.rusherhack.core.setting.BooleanSetting;
18+
import org.rusherhack.core.utils.ColorUtils;
19+
20+
import java.awt.*;
21+
import java.util.ArrayList;
22+
import java.util.List;
23+
24+
public class SpawnLocations extends ToggleableModule {
25+
26+
/* Settings */
27+
private final BooleanSetting pause = new BooleanSetting("Pause", false);
28+
private final BooleanSetting players = new BooleanSetting("Players", false);
29+
private final BooleanSetting hostiles = new BooleanSetting("Hostiles", true);
30+
private final BooleanSetting passives = new BooleanSetting("Passives", false);
31+
private final BooleanSetting neutrals = new BooleanSetting("Neutrals", false);
32+
private final ColorSetting color = new ColorSetting("Color", Color.CYAN)
33+
.setAlphaAllowed(false)
34+
.setThemeSync(true);
35+
36+
/* Previous State */
37+
private final List<BlockPos> positions = new ArrayList<>();
38+
39+
/* Initialize */
40+
public SpawnLocations() {
41+
super("SpawnLocations", ModuleCategory.RENDER);
42+
this.registerSettings(this.pause, this.players, this.hostiles, this.passives, this.neutrals);
43+
}
44+
45+
@Override
46+
public void onDisable() {
47+
this.positions.clear();
48+
super.onDisable();
49+
}
50+
51+
@Subscribe
52+
private void onEntityAdd(EventEntity.Add event) {
53+
final Entity entity = event.getEntity();
54+
final BlockPos blockPos = entity.blockPosition();
55+
56+
if (this.pause.getValue()) return;
57+
if (this.players.getValue() && !(entity instanceof Player)) return;
58+
if (this.hostiles.getValue() && !(entity instanceof Monster)) return;
59+
if (this.passives.getValue() && !(entity instanceof Animal)) return;
60+
if (this.neutrals.getValue() && !(entity instanceof NeutralMob)) return;
61+
62+
this.positions.add(blockPos);
63+
}
64+
65+
@Subscribe
66+
private void onRender3D(EventRender3D event) {
67+
final PoseStack matrixStack = event.getMatrixStack();
68+
final IRenderer3D renderer = event.getRenderer();
69+
renderer.begin(matrixStack);
70+
71+
final int color = ColorUtils.transparency(this.color.getValueRGB(), 0.5f);
72+
for (BlockPos blockPos : this.positions) {
73+
renderer.drawBox(blockPos, true, true, color);
74+
}
75+
76+
renderer.end();
77+
}
78+
}

1.20.1/src/main/java/com/shaybox/rusher/tweaks/ArmorPriority.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@ public ArmorPriority() {
7171

7272
@Override
7373
public boolean isListening() {
74-
IKey elytraBind = this.elytraPriorityBind.getValue();
75-
IKey repairBind = this.repairPriorityBind.getValue();
76-
IKey goldenBind = this.goldenPriorityBind.getValue();
74+
final IKey elytraBind = this.elytraPriorityBind.getValue();
75+
final IKey repairBind = this.repairPriorityBind.getValue();
76+
final IKey goldenBind = this.goldenPriorityBind.getValue();
7777

7878
return this.isPaused || this.autoArmor.isToggled() && (
7979
(this.repairPriority.getValue() || this.goldenPriority.getValue()) || (
@@ -84,7 +84,6 @@ public boolean isListening() {
8484
);
8585
}
8686

87-
@SuppressWarnings("unused")
8887
@Subscribe
8988
private void onUpdate(EventUpdate event) {
9089
if (minecraft.screen != null) return;
@@ -94,20 +93,18 @@ private void onUpdate(EventUpdate event) {
9493
Main.handleKey(this.goldenPriorityBind::getValue, this.isGoldenDown, (value) -> this.isGoldenDown = value, this.goldenPriority::getValue, this.goldenPriority::setValue);
9594
}
9695

97-
@SuppressWarnings("unused")
9896
@Subscribe
9997
private void onPlayerUpdate(EventPlayerUpdate event) {
100-
LocalPlayer player = event.getPlayer();
101-
Inventory inventory = player.getInventory();
98+
final LocalPlayer player = event.getPlayer();
99+
final Inventory inventory = player.getInventory();
102100

103101
/* Prevent moving items in other containers */
104102
if (minecraft.screen instanceof InventoryScreen) if (!this.inventory.getValue()) return;
105103
else if (minecraft.screen instanceof AbstractContainerScreen) return;
106104

107105
/* There can only be one enabled at a time */
108-
boolean prioritizeRepair = this.repairPriority.getValue();
109-
boolean prioritizeGolden = this.goldenPriority.getValue();
110-
106+
final boolean prioritizeRepair = this.repairPriority.getValue();
107+
final boolean prioritizeGolden = this.goldenPriority.getValue();
111108
if (prioritizeRepair || prioritizeGolden) {
112109
if (!isPaused) {
113110
isPaused = true;
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.shaybox.rusher.tweaks;
2+
3+
import net.minecraft.client.Minecraft;
4+
import net.minecraft.client.player.LocalPlayer;
5+
import net.minecraft.network.protocol.game.ServerboundPlayerCommandPacket;
6+
import net.minecraft.world.effect.MobEffects;
7+
import org.rusherhack.client.api.RusherHackAPI;
8+
import org.rusherhack.client.api.events.player.EventPlayerUpdate;
9+
import org.rusherhack.client.api.feature.module.IModule;
10+
import org.rusherhack.client.api.feature.module.ToggleableModule;
11+
import org.rusherhack.core.event.listener.EventListener;
12+
import org.rusherhack.core.event.subscribe.Subscribe;
13+
import org.rusherhack.core.feature.IFeatureManager;
14+
import org.rusherhack.core.setting.BooleanSetting;
15+
import org.rusherhack.core.setting.NumberSetting;
16+
17+
public class AutoDeploy implements EventListener {
18+
19+
/* RusherHackAPI Managers & Modules */
20+
private final IFeatureManager<IModule> moduleManager = RusherHackAPI.getModuleManager();
21+
private final ToggleableModule autoArmor = (ToggleableModule) moduleManager.getFeature("AutoArmor").orElseThrow();
22+
private final ToggleableModule elytraTweaks = (ToggleableModule) moduleManager.getFeature("ElytraTweaks").orElseThrow();
23+
24+
/* AutoArmor Settings */
25+
private final BooleanSetting elytraPriority = (BooleanSetting) autoArmor.getSetting("ElytraPriority");
26+
27+
/* Custom Settings */
28+
private final BooleanSetting autoDeploy = new BooleanSetting("AutoDeploy", "Automatically deploy elytra while falling", false);
29+
private final NumberSetting<Double> fallingDelay = new NumberSetting<>("FallingDelay", 1.5, 0.0, 10.0);
30+
31+
/* Previous State */
32+
private boolean lastElytraPriority = this.elytraPriority.getValue();
33+
private long fallingTicks = 0;
34+
35+
/* Initialize */
36+
public AutoDeploy() {
37+
this.autoDeploy.addSubSettings(this.fallingDelay);
38+
this.elytraTweaks.registerSettings(this.autoDeploy);
39+
}
40+
41+
@Override
42+
public boolean isListening() {
43+
return this.elytraTweaks.isToggled() && this.autoDeploy.getValue();
44+
}
45+
46+
@Subscribe
47+
private void onPlayerUpdate(EventPlayerUpdate event) {
48+
final LocalPlayer player = event.getPlayer();
49+
final boolean isInWater = player.isInWater();
50+
final boolean isOnGround = player.onGround();
51+
final boolean isFallFlying = player.isFallFlying();
52+
final boolean hasLevitation = player.hasEffect(MobEffects.LEVITATION);
53+
if (isInWater || isOnGround || isFallFlying || hasLevitation) {
54+
this.lastElytraPriority = this.elytraPriority.getValue();
55+
this.fallingTicks = Math.round(this.fallingDelay.getValue() * 20);
56+
return;
57+
}
58+
59+
if (this.fallingTicks >= -3) this.fallingTicks--;
60+
if (this.fallingTicks == -1) this.elytraPriority.setValue(true);
61+
if (this.fallingTicks == -3) {
62+
final var startFallFlying = new ServerboundPlayerCommandPacket(player, ServerboundPlayerCommandPacket.Action.START_FALL_FLYING);
63+
player.connection.send(startFallFlying);
64+
player.startFallFlying();
65+
}
66+
}
67+
68+
}
69+

1.20.1/src/main/java/com/shaybox/rusher/tweaks/AutoRestart.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,35 +64,33 @@ public AutoRestart() {
6464

6565
@Override
6666
public boolean isListening() {
67-
IKey autoRestartBind = this.autoRestartBind.getValue();
67+
final IKey autoRestartBind = this.autoRestartBind.getValue();
6868

6969
return this.elytraFly.isToggled() || this.autoRestart.getValue() || this.isAutoRestartDown || autoRestartBind.isKeyDown();
7070
}
7171

72-
@SuppressWarnings("unused")
7372
@Subscribe
7473
private void onUpdate(EventUpdate event) {
7574
if (minecraft.screen != null) return;
7675

7776
Main.handleKey(this.autoRestartBind::getValue, this.isAutoRestartDown, (value) -> this.isAutoRestartDown = value, this.autoRestart::getValue, this.autoRestart::setValue);
7877
}
7978

80-
@SuppressWarnings("unused")
8179
@Subscribe
8280
private void onPlayerUpdate(EventPlayerUpdate event) {
83-
LocalPlayer player = event.getPlayer();
84-
Vec3 position = player.position();
81+
final LocalPlayer player = event.getPlayer();
82+
final Vec3 position = player.position();
8583

8684
if (!this.mode.getDisplayValue().equals("Packet")) {
8785
this.autoRestart.setValue(false);
8886
return;
8987
}
9088

9189
/* Calculate Player Speed */
92-
double dx = position.x - player.xOld;
93-
double dy = position.y - player.yOld;
94-
double dz = position.z - player.zOld;
95-
double speed = Math.sqrt(dx * dx + dy * dy + dz * dz);
90+
final double dx = position.x - player.xOld;
91+
final double dy = position.y - player.yOld;
92+
final double dz = position.z - player.zOld;
93+
final double speed = Math.sqrt(dx * dx + dy * dy + dz * dz);
9694

9795
/* Update speed buffer */
9896
this.speedBuffer.offer(speed);
@@ -101,7 +99,7 @@ private void onPlayerUpdate(EventPlayerUpdate event) {
10199
}
102100

103101
/* Calculate Average Speed */
104-
double averageSpeed = speedBuffer.stream().mapToDouble(Double::doubleValue).average().orElse(0.0);
102+
final double averageSpeed = speedBuffer.stream().mapToDouble(Double::doubleValue).average().orElse(0.0);
105103

106104
/* Make sure modules do not de-sync */
107105
if (!this.autoRestart.getValue()) {

0 commit comments

Comments
 (0)