1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
package ftbsc.bscv.modules.motion;
import com.mojang.brigadier.CommandDispatcher;
import ftbsc.bscv.BoSCoVicino;
import ftbsc.bscv.ICommons;
import ftbsc.bscv.modules.QuickModule;
import ftbsc.bscv.tools.Setting;
import net.minecraft.client.entity.player.ClientPlayerEntity;
import net.minecraft.command.CommandSource;
import net.minecraft.network.play.client.CPlayerPacket;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.TickEvent.Phase;
import net.minecraftforge.eventbus.api.SubscribeEvent;
public class VanillaFlight extends QuickModule implements ICommons {
public final ForgeConfigSpec.ConfigValue<Boolean> force;
public final ForgeConfigSpec.ConfigValue<Double> speed;
public final ForgeConfigSpec.ConfigValue<Boolean> antikick;
public final ForgeConfigSpec.ConfigValue<Double> antikick_magnitude;
public final ForgeConfigSpec.ConfigValue<Integer> antikick_cycle;
private int tick = 0;
public VanillaFlight(ForgeConfigSpec.Builder builder, CommandDispatcher<CommandSource> dispatcher) {
super("VanillaFlight", Group.MOTION, UNBOUND, builder, dispatcher);
this.force = Setting.Bool.builder()
.name("force")
.comment("force enable flight on user")
.fallback(false)
.build(this.name, builder, dispatcher);
this.speed = Setting.Decimal.builder()
.min(0.)
.fallback(0.05)
.name("speed")
.comment("flight speed to set")
.build(this.name, builder, dispatcher);
this.antikick = Setting.Bool.builder()
.fallback(false)
.name("antikick")
.comment("prevent vanilla flight kick by descending")
.build(this.name, builder, dispatcher);
this.antikick_magnitude = Setting.Decimal.builder()
.min(0.)
.fallback(1.)
.name("magnitude")
.comment("magnitude of antikick push")
.build(this.name, builder, dispatcher);
this.antikick_cycle = Setting.Number.builder()
.min(0)
.max(79)
.fallback(0)
.name("cycle")
.comment("how often to run antikick routine")
.build(this.name, builder, dispatcher);
}
private boolean couldFlyBefore = false;
private float flyingSpeedBefore = 0.05f;
@SubscribeEvent
public void onTick(TickEvent.ClientTickEvent event) {
if (event.phase == Phase.END) return;
if (MC.player == null) return;
MC.player.abilities.mayfly = true;
MC.player.abilities.setFlyingSpeed(this.speed.get().floatValue());
if (this.force.get()) {
MC.player.abilities.flying = true;
}
if (this.antikick.get() && MC.player.abilities.flying) {
this.tick = ( this.tick + 1 ) % this.antikick_cycle.get();
if (this.tick == 0) {
Vector3d pos = MC.player.position();
BoSCoVicino.log("[*] antikick");
MC.player.connection.send(
new CPlayerPacket.PositionPacket(pos.x, pos.y - this.antikick_magnitude.get(), pos.z, false)
);
MC.player.setPos(pos.x, pos.y - this.antikick_magnitude.get(), pos.z);
}
} else {
this.tick = 0; // reset antikick counter
}
}
@Override
protected void onEnabled() {
this.tick = 0;
if (MC.player != null) {
this.couldFlyBefore = MC.player.abilities.mayfly;
this.flyingSpeedBefore = MC.player.abilities.getFlyingSpeed();
BoSCoVicino.log(String.format("Flying speed before = %f", this.flyingSpeedBefore));
}
}
@Override
protected void onDisabled() {
ClientPlayerEntity player = MC.player;
if (player != null) {
player.abilities.mayfly = this.couldFlyBefore;
player.abilities.setFlyingSpeed(this.flyingSpeedBefore);
if (this.force.get()) {
player.abilities.flying = false;
}
}
}
}
|