Skip to content

Commit 8ea287b

Browse files
committed
implement hover mode
1 parent 9ad1ea3 commit 8ea287b

File tree

7 files changed

+97
-6
lines changed

7 files changed

+97
-6
lines changed

src/main/java/com/github/erdragh/jet_suit_additions/JetSuitAdditions.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@ public class JetSuitAdditions implements ModInitializer {
77

88
public static final String MODID = "jet_suit_additions";
99

10+
1011
@Override
1112
public void onInitialize() {
1213
C2SPackets.register();
1314
}
15+
16+
1417
}

src/main/java/com/github/erdragh/jet_suit_additions/client/JetSuitAdditionsClient.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,20 @@ public class JetSuitAdditionsClient implements ClientModInitializer {
1818

1919
public static final String KEY_CATEGORY = JetSuitAdditions.MODID + ".key_category";
2020

21-
public static KeyBinding jetSuitToggle;
21+
public static KeyBinding jetSuitToggle, jetSuitHoverToggle;
2222

2323
@Override
2424
public void onInitializeClient() {
2525
jetSuitToggle = KeyBindingHelper.registerKeyBinding(new KeyBinding(JetSuitAdditions.MODID + ".key.toggle_jet_suit", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_COMMA, KEY_CATEGORY));
26+
jetSuitHoverToggle = KeyBindingHelper.registerKeyBinding(new KeyBinding(JetSuitAdditions.MODID + ".key.toggle_jet_suit_hover", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_PERIOD, KEY_CATEGORY));
2627

2728
ClientTickEvents.END_CLIENT_TICK.register(client -> {
2829
while (jetSuitToggle.wasPressed()) {
2930
ClientPlayNetworking.send(C2SPackets.TOGGLE_ON, PacketByteBufs.create());
3031
}
32+
while (jetSuitHoverToggle.wasPressed()) {
33+
ClientPlayNetworking.send(C2SPackets.TOGGLE_HOVER, PacketByteBufs.create());
34+
}
3135
});
3236
}
3337
}

src/main/java/com/github/erdragh/jet_suit_additions/items/armour/ImprovedJetSuit.java

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.github.erdragh.jet_suit_additions.items.armour;
22

3+
import com.github.alexnijjar.ad_astra.AdAstra;
34
import com.github.alexnijjar.ad_astra.items.armour.JetSuit;
45
import com.github.alexnijjar.ad_astra.registry.ModItems;
6+
import com.github.alexnijjar.ad_astra.util.ModKeyBindings;
57
import com.github.erdragh.jet_suit_additions.JetSuitAdditions;
68
import net.minecraft.client.item.TooltipContext;
79
import net.minecraft.entity.EquipmentSlot;
@@ -17,13 +19,19 @@
1719
import java.util.List;
1820

1921
public class ImprovedJetSuit extends JetSuit {
22+
23+
public static final int HOVER_SINK_SPEED = 1;
2024
public ImprovedJetSuit(ArmorMaterial material, EquipmentSlot slot, Settings settings) {
2125
super(material, slot, settings);
2226
}
2327

2428
@Override
2529
public void fly(PlayerEntity player, ItemStack stack) {
26-
if (!stack.getOrCreateNbt().getBoolean("toggle_on")) return;
30+
// Don't fly if the Jet Suit is disabled
31+
if (!stack.getOrCreateNbt().getBoolean("toggle_on")) {
32+
stack.getOrCreateNbt().putBoolean("spawn_particles", false);
33+
return;
34+
}
2735
super.fly(player, stack);
2836
}
2937

@@ -32,9 +40,43 @@ public void appendTooltip(ItemStack stack, World world, List<Text> tooltip, Tool
3240
super.appendTooltip(stack, world, tooltip, context);
3341
if (stack.isOf(ModItems.JET_SUIT)) {
3442
boolean turnedOn = stack.getOrCreateNbt().getBoolean("toggle_on");
35-
Text text = new TranslatableText(JetSuitAdditions.MODID + ".msg.jet_suit_toggle").append(new TranslatableText(JetSuitAdditions.MODID + ".msg.jet_suit_" + (turnedOn ? "on" : "off")).setStyle(Style.EMPTY.withBold(true).withColor(turnedOn ? Formatting.GREEN : Formatting.RED)));
43+
boolean hoverOn = stack.getOrCreateNbt().getBoolean("toggle_hover");
44+
Text turnedOnText = new TranslatableText(JetSuitAdditions.MODID + ".msg.jet_suit_toggle").append(new TranslatableText(JetSuitAdditions.MODID + ".msg.jet_suit_" + (turnedOn ? "on" : "off")).setStyle(Style.EMPTY.withBold(true).withColor(turnedOn ? Formatting.GREEN : Formatting.RED)));
45+
Text hoverOnText = new TranslatableText(JetSuitAdditions.MODID + ".msg.jet_suit_toggle_hover").append(new TranslatableText(JetSuitAdditions.MODID + ".msg.jet_suit_" + (hoverOn ? "on" : "off")).setStyle(Style.EMPTY.withBold(true).withColor(hoverOn ? Formatting.GREEN : Formatting.RED)));
46+
tooltip.add(turnedOnText);
47+
tooltip.add(hoverOnText);
48+
}
49+
}
50+
51+
@Override
52+
public void hover(PlayerEntity player, ItemStack stack) {
53+
if (ModKeyBindings.jumpKeyDown(player)) {
54+
super.hover(player, stack);
55+
} else {
56+
double speed;
57+
if (player.isSneaking()) {
58+
speed = -AdAstra.CONFIG.spaceSuit.jetSuitUpwardsSpeed;
59+
} else {
60+
speed = -player.getVelocity().getY() / HOVER_SINK_SPEED;
61+
}
62+
if (!player.isOnGround()) {
63+
hover(player, stack, speed);
64+
} else {
65+
stack.getOrCreateNbt().putBoolean("spawn_particles", false);
66+
}
67+
}
68+
}
69+
70+
private void hover(PlayerEntity player, ItemStack stack, double speed) {
71+
player.fallDistance /= 2;
72+
if (!player.isCreative() && !this.tryUseEnergy(stack, AdAstra.CONFIG.spaceSuit.jetSuitEnergyPerTick)) {
73+
this.setStoredEnergy(stack, 0);
74+
}
75+
isFallFlying = false;
3676

37-
tooltip.add(text);
77+
player.setVelocity(player.getVelocity().add(0.0, speed, 0.0));
78+
if (Math.abs(player.getVelocity().getY()) > Math.abs(speed)) {
79+
player.setVelocity(player.getVelocity().getX(), speed, player.getVelocity().getZ());
3880
}
3981
}
4082
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.github.erdragh.jet_suit_additions.mixin;
2+
3+
import com.github.alexnijjar.ad_astra.AdAstra;
4+
import com.github.alexnijjar.ad_astra.util.ModKeyBindings;
5+
import com.github.erdragh.jet_suit_additions.items.armour.ImprovedJetSuit;
6+
import net.minecraft.entity.EquipmentSlot;
7+
import net.minecraft.entity.player.PlayerEntity;
8+
import net.minecraft.item.ItemStack;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.injection.At;
11+
import org.spongepowered.asm.mixin.injection.Inject;
12+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
13+
14+
@Mixin(PlayerEntity.class)
15+
public class PlayerEntityMixin {
16+
@Inject(method = "tick", at = @At("TAIL"))
17+
public void jet_suit_additions_tick(CallbackInfo ci) {
18+
if (AdAstra.CONFIG.spaceSuit.enableJetSuitFlight) {
19+
PlayerEntity player = ((PlayerEntity) (Object) this);
20+
if (!player.hasVehicle() && !ModKeyBindings.jumpKeyDown(player)) {
21+
ItemStack chest = player.getEquippedStack(EquipmentSlot.CHEST);
22+
if (chest.getItem() instanceof ImprovedJetSuit jetSuit && ImprovedJetSuit.hasFullSet(player) && chest.getOrCreateNbt().getBoolean("toggle_hover")) {
23+
jetSuit.fly(player, chest);
24+
}
25+
}
26+
}
27+
}
28+
}

src/main/java/com/github/erdragh/jet_suit_additions/networking/C2SPackets.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
public class C2SPackets {
1212

1313
public static final Identifier TOGGLE_ON = new Identifier(JetSuitAdditions.MODID, "toggle_on");
14+
public static final Identifier TOGGLE_HOVER = new Identifier(JetSuitAdditions.MODID, "toggle_hover");
15+
1416

1517
public static void register() {
1618
ServerPlayNetworking.registerGlobalReceiver(TOGGLE_ON, (server, player, handler, buf, responseSender) -> {
@@ -19,6 +21,15 @@ public static void register() {
1921
chestStack.getOrCreateNbt().putBoolean("toggle_on", !chestStack.getOrCreateNbt().getBoolean("toggle_on"));
2022
Text text = new TranslatableText(JetSuitAdditions.MODID + ".msg.jet_suit_toggle").append(new TranslatableText(JetSuitAdditions.MODID + ".msg.jet_suit_" + (chestStack.getOrCreateNbt().getBoolean("toggle_on") ? "on" : "off")));
2123

24+
player.sendMessage(text, true);
25+
}
26+
});
27+
ServerPlayNetworking.registerGlobalReceiver(TOGGLE_HOVER, (server, player, handler, buf, responseSender) -> {
28+
var chestStack = player.getInventory().getArmorStack(EquipmentSlot.CHEST.getEntitySlotId());
29+
if (chestStack.getItem() instanceof ImprovedJetSuit) {
30+
chestStack.getOrCreateNbt().putBoolean("toggle_hover", !chestStack.getOrCreateNbt().getBoolean("toggle_hover"));
31+
Text text = new TranslatableText(JetSuitAdditions.MODID + ".msg.jet_suit_toggle_hover").append(new TranslatableText(JetSuitAdditions.MODID + ".msg.jet_suit_" + (chestStack.getOrCreateNbt().getBoolean("toggle_hover") ? "on" : "off")));
32+
2233
player.sendMessage(text, true);
2334
}
2435
});
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
{
22
"jet_suit_additions.msg.jet_suit_toggle": "Jet Suit turned ",
3+
"jet_suit_additions.msg.jet_suit_toggle_hover": "Jet Suit Hover turned ",
34
"jet_suit_additions.msg.jet_suit_on": "on",
45
"jet_suit_additions.msg.jet_suit_off": "off",
56

67
"jet_suit_additions.key_category": "Jet Suit Additions",
7-
"jet_suit_additions.key.toggle_jet_suit": "Turn the Jet Suit on/off"
8+
"jet_suit_additions.key.toggle_jet_suit": "Turn the Jet Suit on/off",
9+
"jet_suit_additions.key.toggle_jet_suit_hover": "Turn Hover Mode on/off"
810
}

src/main/resources/jet_suit_additions.mixins.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
"package": "com.github.erdragh.jet_suit_additions.mixin",
55
"compatibilityLevel": "JAVA_17",
66
"mixins": [
7-
"ItemRegistryMixin"
7+
"ItemRegistryMixin",
8+
"PlayerEntityMixin"
89
],
910
"client": [
1011
],

0 commit comments

Comments
 (0)