Skip to content

Commit 04d20d0

Browse files
telemenarDream-MasterFourIsTheNumber
authored
Buff Jetpack Perfect Hover stats (climb speed, hover response, acceleration) (#7842)
Co-authored-by: Martin Robertz <dream-master@gmx.net> Co-authored-by: Mary Hopson <doyoumined@gmail.com>
1 parent 5eb3942 commit 04d20d0

15 files changed

Lines changed: 90 additions & 44 deletions

src/main/java/gregtech/api/enums/ItemList.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2864,7 +2864,7 @@ public enum ItemList implements IItemContainer {
28642864
Augment_NightVision,
28652865
Augment_CreativeFlight,
28662866
Augment_Jetpack,
2867-
Augment_Jetpack_PerfectHover,
2867+
Augment_VectoredJetpack,
28682868
Augment_FireImmunity,
28692869
Augment_StepAssist,
28702870
Augment_GogglesOfRevealing,

src/main/java/gregtech/api/items/ItemAugmentAbstract.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,19 @@ protected void addAdditionalToolTips(List<String> desc, ItemStack augmentStack,
7676

7777
addSeparatorIfNeeded(desc);
7878

79+
if (showAllInfo && !part.getRequiredBehaviorsOr()
80+
.isEmpty()) {
81+
desc.add(EnumChatFormatting.DARK_AQUA + StatCollector.translateToLocal("GT5U.armor.tooltip.requires_or"));
82+
83+
for (BehaviorName behavior : part.getRequiredBehaviorsOr()) {
84+
if (!behavior.hasDisplayName()) continue;
85+
86+
desc.add(GRAY + "- " + behavior.getDisplayName());
87+
}
88+
}
89+
90+
addSeparatorIfNeeded(desc);
91+
7992
if (showAllInfo && (!part.getIncompatibleBehaviors()
8093
.isEmpty()
8194
|| !part.getIncompatibleAugments()

src/main/java/gregtech/api/items/armor/ArmorPartBuilder.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ public abstract class ArmorPartBuilder<Self extends ArmorPartBuilder<Self>> {
2424
private Collection<IArmorBehavior> providedBehaviors = Collections.emptyList();
2525
/// The behaviors that are required for this part to be installed
2626
private Collection<BehaviorName> requiredBehaviors = Collections.emptyList();
27+
/// At least one of these behaviors is required for this part to be installed
28+
private Collection<BehaviorName> requiredBehaviorsOr = Collections.emptyList();
2729
/// The behaviors that prevent this part from being installed
2830
private Collection<BehaviorName> incompatibleBehaviors = Collections.emptyList();
2931
/// The armor types this part can fit into
@@ -86,6 +88,10 @@ public Collection<BehaviorName> getRequiredBehaviors() {
8688
return requiredBehaviors;
8789
}
8890

91+
public Collection<BehaviorName> getRequiredBehaviorsOr() {
92+
return requiredBehaviorsOr;
93+
}
94+
8995
public Collection<BehaviorName> getIncompatibleBehaviors() {
9096
return incompatibleBehaviors;
9197
}
@@ -106,6 +112,12 @@ public Self requiresBehaviors(Collection<BehaviorName> behaviors) {
106112
return (Self) this;
107113
}
108114

115+
public Self requiresOr(Collection<BehaviorName> behaviors) {
116+
onMutated();
117+
this.requiredBehaviorsOr = Collections.unmodifiableCollection(behaviors);
118+
return (Self) this;
119+
}
120+
109121
public Self incompatibleBehaviors(Collection<BehaviorName> behaviors) {
110122
onMutated();
111123
this.incompatibleBehaviors = Collections.unmodifiableCollection(behaviors);
@@ -130,6 +142,12 @@ public Self requiresBehaviors(BehaviorName... behaviors) {
130142
return (Self) this;
131143
}
132144

145+
public Self requiresOr(BehaviorName... behaviors) {
146+
onMutated();
147+
this.requiredBehaviorsOr = Collections.unmodifiableCollection(Arrays.asList(behaviors));
148+
return (Self) this;
149+
}
150+
133151
public Self incompatibleBehaviors(BehaviorName... behaviors) {
134152
onMutated();
135153
this.incompatibleBehaviors = Collections.unmodifiableCollection(Arrays.asList(behaviors));

src/main/java/gregtech/api/items/armor/IArmorPart.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ public interface IArmorPart {
3333

3434
Collection<BehaviorName> getRequiredBehaviors();
3535

36+
Collection<BehaviorName> getRequiredBehaviorsOr();
37+
3638
Collection<BehaviorName> getIncompatibleBehaviors();
3739

3840
Collection<ItemList> getIncompatibleAugments();

src/main/java/gregtech/api/items/armor/JetpackStats.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66

77
public enum JetpackStats {
88

9-
ELECTRIC(1.0f, 1.0f, 0.18f, 0.1f, 0.12f, 0.3f, 0.08f, 0.0f, ParticleFX.SMOKE),
10-
ADVANCED(2.5f, 1.3f, 0.34f, 0.03f, 0.13f, 0.48f, 0.14f, 2.0f, ParticleFX.CLOUD),
11-
NANO(4.0f, 1.8f, 0.4f, 0.005f, 0.14f, 0.8f, 0.19f, 3.5f, null),
12-
QUANTUM(6.0f, 2.4f, 0.45f, 0.0f, 0.15f, 0.9f, 0.21f, 8.0f, null);
9+
JETPACK(2.5f, 1.3f, 0.34f, 0.03f, 0.13f, 0.48f, 0.14f, 2.0f, ParticleFX.CLOUD),
10+
VECTORED_JETPACK(2.5f, 1.3f, 0.4f, 0f, 0.16f, 0.6f, 0.14f, 2.0f, ParticleFX.CLOUD);
1311

1412
private final float sprintEnergyMod;
1513
private final float sprintSpeedMod;

src/main/java/gregtech/api/items/armor/MechArmorAugmentRegistries.java

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import gregtech.api.items.armor.behaviors.InfiniteEnergyBehavior;
3939
import gregtech.api.items.armor.behaviors.JetpackBehavior;
4040
import gregtech.api.items.armor.behaviors.JetpackHoverBehavior;
41-
import gregtech.api.items.armor.behaviors.JetpackPerfectHoverBehavior;
4241
import gregtech.api.items.armor.behaviors.JumpBoostBehavior;
4342
import gregtech.api.items.armor.behaviors.KnockbackResistBehavior;
4443
import gregtech.api.items.armor.behaviors.LevitationBehavior;
@@ -235,6 +234,11 @@ public Collection<BehaviorName> getRequiredBehaviors() {
235234
return this.builder.getRequiredBehaviors();
236235
}
237236

237+
@Override
238+
public Collection<BehaviorName> getRequiredBehaviorsOr() {
239+
return this.builder.getRequiredBehaviorsOr();
240+
}
241+
238242
@Override
239243
public Collection<BehaviorName> getIncompatibleBehaviors() {
240244
return this.builder.getIncompatibleBehaviors();
@@ -369,6 +373,11 @@ public Collection<BehaviorName> getRequiredBehaviors() {
369373
return this.builder.getRequiredBehaviors();
370374
}
371375

376+
@Override
377+
public Collection<BehaviorName> getRequiredBehaviorsOr() {
378+
return this.builder.getRequiredBehaviorsOr();
379+
}
380+
372381
@Override
373382
public Collection<BehaviorName> getIncompatibleBehaviors() {
374383
return this.builder.getIncompatibleBehaviors();
@@ -442,8 +451,9 @@ public enum Augments implements IArmorPart {
442451
.setItemId("augmentjetpack")
443452
.fitsInto(ArmorType.Chestplate)
444453
.setTexture(ArmorType.Chestplate, () -> jetpackAugment)
445-
.providesBehaviors(JetpackBehavior.INSTANCE, JetpackHoverBehavior.INSTANCE)
454+
.providesBehaviors(JetpackBehavior.JETPACK, JetpackHoverBehavior.INSTANCE)
446455
.incompatibleBehaviors(BehaviorName.CreativeFlight)
456+
.incompatibleAugments(ItemList.Augment_VectoredJetpack)
447457
.setMinimumCoreTier(1)
448458
.setCategory(AugmentCategory.Movement)
449459
),
@@ -536,12 +546,14 @@ public enum Augments implements IArmorPart {
536546
),
537547

538548
// Tier 2 - Movement
539-
JetpackPerfectHover(ItemList.Augment_Jetpack_PerfectHover, new AugmentBuilder()
540-
.setId("JetpackPerfectHover")
541-
.setItemId("augmentjetpackperfecthover")
549+
VectoredJetpack(ItemList.Augment_VectoredJetpack, new AugmentBuilder()
550+
.setId("VectoredJetpack")
551+
.setItemId("augmentvectoredjetpack")
542552
.fitsInto(ArmorType.Chestplate)
543-
.providesBehaviors(JetpackPerfectHoverBehavior.INSTANCE)
544-
.requiresBehaviors(BehaviorName.Jetpack)
553+
.setTexture(ArmorType.Chestplate, () -> jetpackAugment)
554+
.providesBehaviors(JetpackBehavior.VECTORED_JETPACK, JetpackHoverBehavior.INSTANCE)
555+
.incompatibleBehaviors(BehaviorName.CreativeFlight)
556+
.incompatibleAugments(ItemList.Augment_Jetpack)
545557
.setMinimumCoreTier(2)
546558
.setCategory(AugmentCategory.Movement)
547559
),
@@ -646,8 +658,8 @@ public enum Augments implements IArmorPart {
646658
.setItemId("augmentinertiacanceling")
647659
.fitsInto(ArmorType.Chestplate)
648660
.providesBehaviors(InertiaCancelingBehavior.INSTANCE)
649-
.requiresBehaviors(BehaviorName.CreativeFlight)
650-
.setMinimumCoreTier(3)
661+
.requiresOr(BehaviorName.Jetpack, BehaviorName.CreativeFlight)
662+
.setMinimumCoreTier(2)
651663
.setCategory(AugmentCategory.Movement)
652664
),
653665
EldritchStriders(ItemList.Augment_EldritchStriders, new AugmentBuilder()
@@ -737,6 +749,11 @@ public Collection<BehaviorName> getRequiredBehaviors() {
737749
return this.builder.getRequiredBehaviors();
738750
}
739751

752+
@Override
753+
public Collection<BehaviorName> getRequiredBehaviorsOr() {
754+
return this.builder.getRequiredBehaviorsOr();
755+
}
756+
740757
@Override
741758
public Collection<BehaviorName> getIncompatibleBehaviors() {
742759
return this.builder.getIncompatibleBehaviors();

src/main/java/gregtech/api/items/armor/behaviors/BehaviorName.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ public enum BehaviorName {
1414
OmniMovement(EnumRarity.rare),
1515
Jetpack(EnumRarity.uncommon),
1616
JetpackHover(EnumRarity.uncommon),
17-
JetpackPerfectHover(EnumRarity.rare),
1817
FireImmunity(EnumRarity.common),
1918
StepAssist(EnumRarity.common),
2019
GogglesOfRevealing(EnumRarity.uncommon),

src/main/java/gregtech/api/items/armor/behaviors/InertiaCancelingBehavior.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ public class InertiaCancelingBehavior implements IArmorBehavior {
1515

1616
public static final InertiaCancelingBehavior INSTANCE = new InertiaCancelingBehavior();
1717

18+
private static final double DAMPING_FACTOR = 0.5;
19+
1820
@Override
1921
public void onKeyPressed(@NotNull ArmorContext context, SyncedKeybind keyPressed, boolean isDown) {
2022
if (!isDown) return;
@@ -37,12 +39,17 @@ public void onArmorTick(@NotNull ArmorContext context) {
3739
if (!context.isRemote()) return;
3840

3941
EntityPlayer player = context.getPlayer();
42+
boolean creativeFlight = player.capabilities.isFlying;
43+
boolean jetpackHovering = context.isBehaviorActive(BehaviorName.JetpackHover) && !player.onGround;
4044

41-
if (context.isBehaviorActive(BehaviorName.InertiaCanceling) && player.moveForward == 0
42-
&& player.moveStrafing == 0
43-
&& player.capabilities.isFlying) {
44-
player.motionX *= 0.5;
45-
player.motionZ *= 0.5;
45+
if (!context.isBehaviorActive(BehaviorName.InertiaCanceling) || player.moveForward != 0
46+
|| player.moveStrafing != 0
47+
|| !(creativeFlight || jetpackHovering)) {
48+
return;
4649
}
50+
51+
double retained = 1.0 - DAMPING_FACTOR;
52+
player.motionX *= retained;
53+
player.motionZ *= retained;
4754
}
4855
}

src/main/java/gregtech/api/items/armor/behaviors/JetpackBehavior.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@
1414

1515
public class JetpackBehavior implements IArmorBehavior {
1616

17-
public static final JetpackBehavior INSTANCE = new JetpackBehavior(JetpackStats.ADVANCED);
17+
public static final JetpackBehavior JETPACK = new JetpackBehavior(JetpackStats.JETPACK);
18+
public static final JetpackBehavior VECTORED_JETPACK = new JetpackBehavior(JetpackStats.VECTORED_JETPACK);
19+
1820
private final JetpackStats jetpackStats;
1921

20-
protected JetpackBehavior(JetpackStats stats) {
21-
jetpackStats = stats;
22+
protected JetpackBehavior(JetpackStats jetpackStats) {
23+
this.jetpackStats = jetpackStats;
2224
}
2325

2426
@Override
@@ -78,10 +80,7 @@ private void performFlying(@NotNull ArmorContext context) {
7880
} else if (descend && !isGuiOpen) {
7981
player.motionY = Math.min(player.motionY + currentAccel, -jetpackStats.getVerticalHoverSpeed());
8082
} else {
81-
player.motionY = Math.min(
82-
player.motionY + currentAccel,
83-
context.hasBehavior(BehaviorName.JetpackPerfectHover) ? 0
84-
: -jetpackStats.getVerticalHoverSlowSpeed());
83+
player.motionY = Math.min(player.motionY + currentAccel, -jetpackStats.getVerticalHoverSlowSpeed());
8584
}
8685
float speedSideways = (float) (player.isSneaking() ? jetpackStats.getSidewaysSpeed() * 0.5f
8786
: jetpackStats.getSidewaysSpeed());

src/main/java/gregtech/api/items/armor/behaviors/JetpackPerfectHoverBehavior.java

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)