Skip to content

Commit 3a11f98

Browse files
serenibyssALongStringOfNumbers
authored andcommitted
fix fueled jetpack, add energy/fuel tooltips
1 parent 6ec645e commit 3a11f98

File tree

9 files changed

+79
-81
lines changed

9 files changed

+79
-81
lines changed

src/main/java/gregtech/api/items/armoritem/ItemGTElectricArmor.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
package gregtech.api.items.armoritem;
22

3+
import gregtech.api.GTValues;
34
import gregtech.api.capability.GregtechCapabilities;
45
import gregtech.api.capability.IElectricItem;
56
import gregtech.api.capability.impl.ElectricItem;
67
import gregtech.api.items.metaitem.ElectricStats;
78

9+
import net.minecraft.client.resources.I18n;
10+
import net.minecraft.client.util.ITooltipFlag;
811
import net.minecraft.entity.EntityLivingBase;
912
import net.minecraft.entity.player.EntityPlayer;
1013
import net.minecraft.inventory.EntityEquipmentSlot;
1114
import net.minecraft.item.ItemStack;
1215
import net.minecraft.nbt.NBTTagCompound;
1316
import net.minecraft.util.DamageSource;
17+
import net.minecraft.world.World;
1418
import net.minecraftforge.common.capabilities.ICapabilityProvider;
1519

1620
import org.jetbrains.annotations.NotNull;
@@ -88,6 +92,17 @@ public boolean areBehaviorsActive(@NotNull ItemStack stack) {
8892
return providers;
8993
}
9094

95+
@Override
96+
public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List<String> tooltip,
97+
@NotNull ITooltipFlag flag) {
98+
IElectricItem electricItem = getElectricItem(stack);
99+
tooltip.add(I18n.format("metaitem.generic.electric_item.tooltip",
100+
electricItem.getCharge(),
101+
electricItem.getMaxCharge(),
102+
GTValues.VNF[electricItem.getTier()]));
103+
super.addInformation(stack, world, tooltip, flag);
104+
}
105+
91106
public static class Builder extends ArmorBuilder<ItemGTElectricArmor, Builder> {
92107

93108
protected int tier;

src/main/java/gregtech/common/items/ArmorItems.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@
1414
import gregtech.common.items.armor.AdvancedNanoMuscleSuite;
1515
import gregtech.common.items.armor.AdvancedQuarkTechSuite;
1616
import gregtech.common.items.armor.ArmorSet;
17-
import gregtech.common.items.armor.ElectricJetpackBehavior;
18-
import gregtech.common.items.armor.FallDamageCancelBehavior;
19-
import gregtech.common.items.armor.FueledJetpackBehavior;
2017
import gregtech.common.items.armor.JetpackStats;
21-
import gregtech.common.items.armor.NightvisionBehavior;
2218
import gregtech.common.items.armor.QuarkTechSuite;
23-
import gregtech.common.items.armor.StepAssistBehavior;
19+
import gregtech.common.items.armor.behavior.ElectricJetpackBehavior;
20+
import gregtech.common.items.armor.behavior.FallDamageCancelBehavior;
21+
import gregtech.common.items.armor.behavior.FueledJetpackBehavior;
22+
import gregtech.common.items.armor.behavior.NightvisionBehavior;
23+
import gregtech.common.items.armor.behavior.StepAssistBehavior;
2424

2525
import net.minecraft.client.Minecraft;
2626
import net.minecraft.inventory.EntityEquipmentSlot;
@@ -82,8 +82,8 @@ public static void init() {
8282
.behaviors(NightvisionBehavior.INSTANCE));
8383

8484
FUELED_JETPACK = register(ItemGTArmor.Builder.of(GTValues.MODID, "fueled_jetpack", EntityEquipmentSlot.CHEST)
85-
.behaviors(
86-
new FueledJetpackBehavior(JetpackStats.FUELED, 16000, RecipeMaps.COMBUSTION_GENERATOR_FUELS)));
85+
.behaviors(new FueledJetpackBehavior(JetpackStats.FUELED, 16000,
86+
FueledJetpackBehavior.COMBUSTION_FUEL_BURN_TIME)));
8787

8888
ELECTRIC_JETPACK = register(ItemGTElectricArmor.Builder
8989
.of(GTValues.MODID, "electric_jetpack", EntityEquipmentSlot.CHEST)

src/main/java/gregtech/common/items/armor/ElectricJetpackBehavior.java renamed to src/main/java/gregtech/common/items/armor/behavior/ElectricJetpackBehavior.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package gregtech.common.items.armor;
1+
package gregtech.common.items.armor.behavior;
22

33
import gregtech.api.capability.GregtechCapabilities;
44
import gregtech.api.capability.IElectricItem;

src/main/java/gregtech/common/items/armor/FallDamageCancelBehavior.java renamed to src/main/java/gregtech/common/items/armor/behavior/FallDamageCancelBehavior.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package gregtech.common.items.armor;
1+
package gregtech.common.items.armor.behavior;
22

33
import gregtech.api.items.armoritem.ArmorHelper;
44
import gregtech.api.items.armoritem.IArmorBehavior;

src/main/java/gregtech/common/items/armor/FireImmunityBehavior.java renamed to src/main/java/gregtech/common/items/armor/behavior/FireImmunityBehavior.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package gregtech.common.items.armor;
1+
package gregtech.common.items.armor.behavior;
22

33
import gregtech.api.items.armoritem.IArmorBehavior;
44

src/main/java/gregtech/common/items/armor/FueledJetpackBehavior.java renamed to src/main/java/gregtech/common/items/armor/behavior/FueledJetpackBehavior.java

Lines changed: 51 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
package gregtech.common.items.armor;
1+
package gregtech.common.items.armor.behavior;
22

33
import gregtech.api.capability.IFilter;
44
import gregtech.api.capability.impl.GTFluidHandlerItemStack;
55
import gregtech.api.items.armoritem.ArmorHelper;
66
import gregtech.api.items.armoritem.jetpack.IJetpackStats;
77
import gregtech.api.items.armoritem.jetpack.JetpackBehavior;
88
import gregtech.api.recipes.Recipe;
9-
import gregtech.api.recipes.RecipeMap;
9+
import gregtech.api.recipes.RecipeMaps;
1010

1111
import net.minecraft.client.resources.I18n;
1212
import net.minecraft.item.ItemStack;
1313
import net.minecraft.nbt.NBTTagCompound;
14+
import net.minecraft.world.World;
1415
import net.minecraftforge.common.capabilities.ICapabilityProvider;
1516
import net.minecraftforge.fluids.FluidStack;
1617
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
@@ -22,22 +23,29 @@
2223

2324
import java.util.Collections;
2425
import java.util.List;
25-
import java.util.Objects;
26+
import java.util.function.Function;
2627

2728
/**
2829
* Creates a Jetpack which runs on any Fuel in a provided fuel RecipeMap.
2930
*/
3031
public class FueledJetpackBehavior extends JetpackBehavior {
3132

32-
private final int maxCapacity;
33-
private final RecipeMap<?> fuelMap;
33+
public static final Function<FluidStack, Integer> COMBUSTION_FUEL_BURN_TIME = fluidStack -> {
34+
Recipe recipe = RecipeMaps.COMBUSTION_GENERATOR_FUELS.findRecipe(
35+
Integer.MAX_VALUE,
36+
Collections.emptyList(),
37+
Collections.singletonList(fluidStack));
38+
return recipe != null ? recipe.getDuration() : 0;
39+
};
3440

35-
private Recipe recipe;
41+
private final int maxCapacity;
42+
private final Function<FluidStack, Integer> fuelBurnTimeFunc;
3643

37-
public FueledJetpackBehavior(IJetpackStats jetpackStats, int maxCapacity, RecipeMap<?> fuelMap) {
44+
public FueledJetpackBehavior(IJetpackStats jetpackStats, int maxCapacity,
45+
Function<FluidStack, Integer> fuelBurnTimeFunc) {
3846
super(jetpackStats);
3947
this.maxCapacity = maxCapacity;
40-
this.fuelMap = fuelMap;
48+
this.fuelBurnTimeFunc = fuelBurnTimeFunc;
4149
}
4250

4351
@Override
@@ -47,46 +55,34 @@ protected int getFuelPerUse() {
4755

4856
@Override
4957
protected boolean drainFuel(@NotNull ItemStack stack, int amount, boolean simulate) {
50-
IFluidHandlerItem fluidHandler = getFluidHandler(stack);
51-
if (fluidHandler != null) {
52-
// check that we have some amount of fuel here.
53-
FluidStack currentFuel = fluidHandler.drain(amount, false);
54-
if (currentFuel == null) return false;
55-
56-
// grab the recipe if we haven't already.
57-
// don't need to worry about resetting as our fluid handler does this for us.
58-
if (recipe == null) {
59-
recipe = getRecipe(currentFuel);
60-
}
61-
62-
// do the "drain" if we are not simulating.
63-
// either decrementing our timer, or draining new fuel and restarting the timer
58+
NBTTagCompound tag = ArmorHelper.getBehaviorsTag(stack);
59+
short burnTimer = tag.getShort(ArmorHelper.FUELED_JETPACK_BURN_TIMER);
60+
if (burnTimer > 0) {
6461
if (!simulate) {
65-
NBTTagCompound tag = ArmorHelper.getBehaviorsTag(stack);
66-
short burnTimer = tag.getShort(ArmorHelper.FUELED_JETPACK_BURN_TIMER);
67-
if (burnTimer == 0) {
68-
// timer is zero, drain some fuel and restart it
69-
fluidHandler.drain(amount, true);
70-
burnTimer = (short) recipe.getDuration();
71-
} else {
72-
// timer is non-zero, just decrement the timer
73-
burnTimer--;
74-
}
75-
tag.setShort(ArmorHelper.FUELED_JETPACK_BURN_TIMER, burnTimer);
62+
tag.setShort(ArmorHelper.FUELED_JETPACK_BURN_TIMER, (short) (burnTimer - 1));
7663
}
7764
return true;
7865
}
79-
return false;
66+
67+
IFluidHandlerItem fluidHandler = getFluidHandler(stack);
68+
if (fluidHandler == null) return false;
69+
FluidStack fuelStack = fluidHandler.drain(amount, false);
70+
if (fuelStack == null) return false;
71+
72+
int burnTime = fuelBurnTimeFunc.apply(fuelStack);
73+
if (burnTime <= 0) return false;
74+
75+
if (!simulate) {
76+
tag.setShort(ArmorHelper.FUELED_JETPACK_BURN_TIMER, (short) burnTime);
77+
fluidHandler.drain(amount, true);
78+
}
79+
return true;
8080
}
8181

8282
private IFluidHandlerItem getFluidHandler(ItemStack stack) {
8383
return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null);
8484
}
8585

86-
private Recipe getRecipe(@NotNull FluidStack fuel) {
87-
return fuelMap.find(Collections.emptyList(), Collections.singletonList(fuel), Objects::nonNull);
88-
}
89-
9086
@Override
9187
public void addHudInformation(@NotNull ItemStack stack, @NotNull List<String> hudText) {
9288
IFluidHandlerItem fluidHandler = getFluidHandler(stack);
@@ -105,49 +101,36 @@ public void addHudInformation(@NotNull ItemStack stack, @NotNull List<String> hu
105101
super.addHudInformation(stack, hudText);
106102
}
107103

104+
// todo move this to ItemGTFueledArmor if that ends up staying around
105+
@Override
106+
public void addInformation(@NotNull ItemStack stack, @Nullable World world, @NotNull List<String> tooltip) {
107+
IFluidHandlerItem fluidHandler = getFluidHandler(stack);
108+
if (fluidHandler != null) {
109+
IFluidTankProperties prop = fluidHandler.getTankProperties()[0];
110+
FluidStack fuel = prop.getContents();
111+
tooltip.add(I18n.format("metaitem.generic.fluid_container.tooltip",
112+
fuel != null ? fuel.amount : 0,
113+
prop.getCapacity(),
114+
fuel != null ? fuel.getLocalizedName() : ""));
115+
}
116+
super.addInformation(stack, world, tooltip);
117+
}
118+
108119
@Override
109120
public ICapabilityProvider createProvider(@NotNull ItemStack stack, @Nullable NBTTagCompound tag) {
110-
return new FueledJetpackItemStack(stack, maxCapacity)
111-
.setFilter(new FueledJetpackFilter())
112-
.setCanDrain(false);
121+
return new GTFluidHandlerItemStack(stack, maxCapacity).setFilter(new FueledJetpackFilter());
113122
}
114123

115124
private final class FueledJetpackFilter implements IFilter<FluidStack> {
116125

117126
@Override
118127
public boolean test(@NotNull FluidStack fluidStack) {
119-
return getRecipe(fluidStack) != null;
128+
return fuelBurnTimeFunc.apply(fluidStack) > 0;
120129
}
121130

122131
@Override
123132
public int getPriority() {
124133
return IFilter.whitelistLikePriority();
125134
}
126135
}
127-
128-
/* Override class to automatically clear our cached state when the tank is fully emptied. */
129-
private final class FueledJetpackItemStack extends GTFluidHandlerItemStack {
130-
131-
public FueledJetpackItemStack(@NotNull ItemStack container, int capacity) {
132-
super(container, capacity);
133-
}
134-
135-
@Override
136-
public FluidStack drain(FluidStack resource, boolean doDrain) {
137-
FluidStack drained = super.drain(resource, doDrain);
138-
if (doDrain && this.getFluid() == null) {
139-
recipe = null;
140-
}
141-
return drained;
142-
}
143-
144-
@Override
145-
public FluidStack drain(int maxDrain, boolean doDrain) {
146-
FluidStack drained = super.drain(maxDrain, doDrain);
147-
if (doDrain && this.getFluid() == null) {
148-
recipe = null;
149-
}
150-
return drained;
151-
}
152-
}
153136
}

src/main/java/gregtech/common/items/armor/HeatReductionBehavior.java renamed to src/main/java/gregtech/common/items/armor/behavior/HeatReductionBehavior.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package gregtech.common.items.armor;
1+
package gregtech.common.items.armor.behavior;
22

33
import gregtech.api.items.armoritem.ArmorHelper;
44
import gregtech.api.items.armoritem.IArmorBehavior;

src/main/java/gregtech/common/items/armor/NightvisionBehavior.java renamed to src/main/java/gregtech/common/items/armor/behavior/NightvisionBehavior.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package gregtech.common.items.armor;
1+
package gregtech.common.items.armor.behavior;
22

33
import gregtech.api.capability.IElectricItem;
44
import gregtech.api.items.armoritem.ArmorHelper;

src/main/java/gregtech/common/items/armor/StepAssistBehavior.java renamed to src/main/java/gregtech/common/items/armor/behavior/StepAssistBehavior.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package gregtech.common.items.armor;
1+
package gregtech.common.items.armor.behavior;
22

33
import gregtech.api.items.armoritem.ArmorHelper;
44
import gregtech.api.items.armoritem.IArmorBehavior;

0 commit comments

Comments
 (0)